Где и как безопасно хранить секретные ключи для шифрования данных в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Перед многими разработчиками встает задача шифрования конфиденциальных данных в базе 1С. Но зашифровать данные — это только полдела. Главный вопрос: где хранить ключ для их расшифровки? Ведь если ключ будет лежать рядом с данными, например, в константе или в самой базе, то при краже резервной копии базы злоумышленник легко получит и данные, и ключ к ним. Давайте разберем основные подходы к безопасному хранению ключей, от простых до самых надежных.

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

Подход 1: Использование внешнего сервиса или системы управления секретами (Vault)

Один из самых надежных и современных подходов — вынести хранение ключа за пределы системы 1С. Вместо того чтобы хранить ключ локально, мы обращаемся к специализированному внешнему сервису, который по запросу возвращает нам ключ.

Как это работает:

  1. Вы разворачиваете или используете готовый сервис для управления секретами, например, HashiCorp Vault.
  2. В 1С, когда требуется выполнить операцию шифрования или расшифровки, вы отправляете HTTP-запрос на этот сервис.
  3. Сервис проверяет права доступа (аутентифицирует ваше приложение 1С) и, если все в порядке, возвращает ключ.
  4. Полученный ключ используется для криптографической операции и сразу же удаляется из памяти. Он нигде не сохраняется в базе 1С.

Преимущества:

Недостатки:

Этот метод подходит для систем с высокими требованиями к безопасности.

Подход 2: Встроенные средства платформы 1С и операционной системы

Если разворачивать внешний сервис избыточно, можно воспользоваться возможностями, которые уже есть "под капотом" у платформы 1С и операционной системы, на которой она работает.

Безопасное хранилище паролей БСП

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

Принцип его работы основан на использовании криптографических возможностей ОС:

Как это работает: Вы сохраняете ключ в безопасное хранилище, и он шифруется средствами ОС. Если злоумышленник украдет только файл базы данных (*.1CD или бэкап SQL) и попытается развернуть его на другой машине, он не сможет получить доступ к ключу, так как у него не будет нужного "контекста" (пользователя/машины).

Привязка к параметрам системы

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


// Получаем уникальные параметры сервера
СисИнфо = Новый СистемнаяИнформация;
// Формируем строку, на основе которой будет сгенерирован ключ для шифрования нашего основного ключа
СтрокаДляШифрования = СисИнфо.ИмяКомпьютера + СисИнфо.ИмяПользователя + СисИнфо.КоличествоПроцессоров; 
// Далее используем хэш от этой строки как пароль для шифрования нашего ключа

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

Подход 3: Аппаратные токены и модули безопасности (HSM)

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

USB-токены (Рутокен, JaCarta)

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

Как это работает:

  1. Ключ шифрования записывается на защищенный USB-токен.
  2. Для выполнения операции (например, подписания или расшифровки документа) пользователь вставляет токен в компьютер.
  3. Система запрашивает у пользователя PIN-код от токена.
  4. Все криптографические операции происходят с использованием ключа, который физически находится на токене.

Преимущества: ключ никогда не хранится на жестком диске в открытом виде. Для доступа к нему требуется и физическое наличие токена, и знание PIN-кода. Для автоматических серверных операций этот метод не подходит, так как требует участия человека.

Аппаратные модули безопасности (HSM)

HSM — это "старший брат" USB-токена, предназначенный для высоконагруженных серверных сред. Это сетевое устройство, которое подключается к серверной инфраструктуре.

Ключевая особенность HSM: секретные ключи генерируются внутри модуля и никогда его не покидают. Приложение (1С) отправляет в HSM данные для шифрования/расшифровки, а HSM выполняет операцию внутри себя и возвращает уже готовый результат. Это считается золотым стандартом безопасности для хранения ключей.

Подход 4: Переменные окружения и файлы с ограниченным доступом

Это более простые, но все же эффективные методы для защиты от кражи одной только базы данных.

Переменные окружения (Environment Variables)

Вы можете сохранить ключ в переменной окружения на сервере, где работает сервер 1С. При старте сеанса или перед выполнением операции код 1С считывает эту переменную.

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

Файл на сервере

Аналогично, ключ можно хранить в текстовом или бинарном файле на диске сервера. Критически важно при этом правильно настроить права доступа на уровне операционной системы: право на чтение этого файла должно быть только у учетной записи, от имени которой запущен процесс сервера 1С (rphost.exe).

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

Итог: что выбрать?

Прежде чем выбирать решение, ответьте на главный вопрос, который прозвучал в обсуждении: "Что именно защищаем, от кого защищаем, и в каких условиях?". Это называется построением модели угроз.

Начинайте с простого и наращивайте сложность по мере роста требований к безопасности вашей системы.

← На главную