gifts2017

Подсистема шифрования данных + пример реализации: решение Keystore для хранения паролей

Опубликовал Александр Анисин (alex271) в раздел Программирование - Защита и шифрование

Настоящая публикация представляет собой одновременно подсистему функциональности шифрования данных и готовое к использованию решение для хранения паролей в качестве примера реализации работы подсистемы.

Вашему вниманию предлагается подсистема шифрования данных в 1С.

В поставляемой конфигурации реализован механизм симметричного шифрования, описанный в статье http://infostart.ru/public/363830/

Подсистема может использоваться как для интеграции в другие конфигурации, так и в качестве самостоятельного решения для хранения паролей (реализовано как пример использования инструмента, которым сам стал пользоваться).

В поставку входит конфигурация, содержащая в себе:

  1. Функциональность шифрования данных и ограничения доступа к системе (см. далее);
  2. Функциональность для хранения паролей доступа (см. далее);
  3. Библиотеку универсальных функций и процедур (http://infostart.ru/public/319157/);
  4. Универсальный механизм обработки событий записи объектов (http://infostart.ru/public/321709/);
  5. Библиотеку универсальной обработки асинхронных вызовов (http://infostart.ru/public/363216/)

 

Описание подсистемы

I. Ключ шифрования

В  конфигурации предусмотрена константа "Контейнер ключа шифрования" с типом Хранилище значения. Если при входе в систему хранилище является пустым, то шифрование считается выключенным. В этом случае конфигурация ведет себя как стандартное решение для хранения информации, тогда ключ шифрования не запрашивается.

С помощью обработки "Изменение ключа шифрования" можно установить значение ключа шифрования, который будет применяться для шифрования информации и ограничения доступа в систему (при изменении ключа производятся последовательно дешифровка информации по старому ключу и зашифровка информации по новому ключу). Также введенным ключом шифруется строка пустого УИД, помещаемая в зашифрованном виде в константу "Контейнер ключа шифрования".

После включения шифрования посредством установки ключа при входе в систему помимо стандартной авторизации, необходимо указать ключ шифрования (один на информационную базу). Если с помощью введенного ключа не удастся расшифровать контейнер, сеанс завершится. если ключ указан правильно, его значение помещается в параметр сеанса и используется для шифрования и расшифровки конфиденциальной информации.

Ключ шифрования не хранится ни в информационной базе, ни в конфигурации, поэтому извлечь из информационной базы зашифрованную информацию без подбора ключа практически невозможно.

II. Организация новых объектов шифрования в подсистеме

Для организации шифрования произвольной информации необходимо сделать следующее:

  1. Определиться с составом объектов ссылочного типа, информация в которых подлежит шифрованию (в приводимом решении используется два справочника "Ресурсы" и "Стандарты доступа"). Выбранные объекты указать в качестве составных типов для определяемого типа "Объект шифрования".
  2. В модуль объекта каждого из объектов шифрования добавить следующие экспортные процедуры и функции (без параметров):
    • Функция ПроверитьЗаполнениеШифруемыхРеквизитов (возвращает Истина, если реквизиты объекта заполнены информацией, подлежащей шифрованию, в противном случае Ложь);
    • Функция ПодготовитьИнформациюДляШифрования (возвращает строку, подлежащую шифрованию; если нужно зашифровать табличную часть или множество других реквизитов, всю информацию можно поместить в произвольную универсальную коллекцию и воспользоваться функцией ЗначениеВСтрокуВнутр);
    • Процедура ОчиститьШифруемыеРеквизиты (удаляет из объекта информацию, подлежащую шифрованию);
    • Процедура ВосстановитьЗашифрованныеРеквизиты (расшифровывает и восстанавливает в объекте ранее зашифрованную информацию);
  3. Добавить в подписки на события "Перед записью объекта шифрования" и "При записи объекта шифрования" объекты шифрования в качестве источника.
  4. Настроить демонстрацию пользователю зашифрованной информации в формах объектов шифрования

III. Механизм шифрования

Механизм шифрования, как уже было написано выше, работает, если установлен ключ шифрования. Механизм шифрования информации в подсистеме представляет собой следующую последовательность действий:

  1. Перед записью объекта шифрования, если в дополнительных свойствах объекта не установлен флаг "Не шифровать", проверяется наличие информации для зашифровки (Функция ПроверитьЗаполнениеШифруемыхРеквизитов).
  2. Если шифруемые реквизиты заполнены, производится формирование строки, которая будет зашифрована (Функция ПодготовитьИнформациюДляШифрования)
  3. Информация для шифрования помещается в дополнительные свойства объекта, а реквизиты шифрования очищаются (Процедура ОчиститьШифруемыеРеквизиты), т.о. шифруемая информация в объекте больше не хранится.
  4. При записи, если не произошел какой-либо отказ, вышеописанные изменения фиксируются, информация шифруется с помощью ключа шифрования симметричным алгоритмом (см. подробно http://infostart.ru/public/363830/) и помещается в Хранилище значения, которое записывается в регистр сведений "Данные шифрования".
  5. При проведении дешифровки (Процедура ВосстановитьЗашифрованныеРеквизиты) значения реквизитов шифрования восстанавливаются.

Для удобства использования в конфигурации предусмотрены две общие команды "Зашифровать информацию по всем объектам" и "Расшифровать информацию по всем объектам".

IV. Описание решения Keystore для хранения паролей

Основой решения является справочник "Ресурсы" (форма элемента представлена на скриншоте).

При заполнении информации в справочнике можно выделить следующие блоки:

  1. Общая информация (наименование, код, интернет-ссылка для web-ресурсов);
  2. Нормативно-справочная информация (аналитические разрезы учета ресурсов по соответствующим справочникам):
    • Владелец (провайдер) ресурса (лицо, обеспечивающее доступ к ресурсу);
    • Вид (произвольная классификация видов ресурсов - например: домен, личный кабинет, рабочее место, электронная почта и т.п.);
    • Объект (для ресурсов, жестко привязанных к некоторому физическому объекту, например, зданию, помещению, земельному участку и т.п.)
  3. Авторизация:
    • логин (учетная запись) - можно указать в форме строки или ссылки на справочник "Учетные записи" (справочник создан для ресурсов, использующих одинаковые логины)
    • пароль (можно указать в форме строки или ссылки на справочник "Стандарты доступа", описание см. ниже)
    • Число вариантов (для периодически изменяемых паролей размер исторической памяти)
  4. Справочно: Даты получения и прекращения доступа к ресурсу
  5. Идентификаторы: табличное поле на отдельной закладке, в котором можно хранить значения различной идентификационной информации, связанной с соответствующим ресурсом (не являющейся логином), например, номер договора, код клиента и т.п.

Поле "Пароль" является шифруемым реквизитом справочника. На форме элемента предусмотрена кнопка открытия значения, при нажатии на которую, если значение заполнено (не зашифровано), то оно и открывается, в противном случае открывается расшифрованное значение, хранящееся в регистре сведений "Данные шифрования".

Справочник "Стандарты доступа" содержит табличную часть со списком паролей, который может применяться, например в ситуациях, когда нужно периодически менять пароль, тогда доступ к ресурсу учитывается посредством ссылки на данный справочник, в котором можно задать список используемых паролей). Табличная часть является шифруемой. Демонстрация расшифрованных значений осуществляется по специальной кнопке на форме элемента справочника. 

 

Надеюсь, кому-нибудь пригодится.

Принимаются пожелания по доработке. 

Скачать файлы

Наименование Файл Версия Размер
Конфигурация хранения паролей Keystore + подсистема шифрования информации 12
.cf 109,80Kb
23.06.15
12
.cf 1.0 109,80Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Иван Иванов (lex27119) 23.06.15 12:57
2. Sergey Trukhachev (SergeySST) 31.03.16 09:36
Аналогичную публикацию видел у Павла Чистова
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа