При работе с конфиденциальными данными в среде 1С:Предприятие часто возникает задача защиты информации не только от рядовых пользователей, но и от привилегированных сотрудников, таких как системные администраторы или администраторы баз данных. Стандартный механизм RLS (Record Level Security) работает на уровне логики приложения и ограничивает выборку данных в запросах, однако он не защищает сами данные, хранящиеся в таблицах СУБД в открытом виде. Рассмотрим подробнее альтернативные варианты шифрования, которые позволяют обеспечить более высокий уровень безопасности.
Проанализируем один из самых эффективных методов защиты — технологию Always Encrypted в MS SQL Server. Этот механизм разработан специально для того, чтобы скрыть данные от администраторов («любопытных админов»), так как шифрование и расшифровка происходят на стороне клиента (в данном случае — на стороне сервера приложений 1С или драйвера), а ключи никогда не передаются на сервер СУБД.
Разберем по шагам, как это работает:
_Fld1234, отвечающее за сумму или паспортные данные), которые должны быть зашифрованы.Важно понимать: При использовании этого метода данные в SQL-таблице превращаются в нечитаемый бинарный код. Даже имея полный доступ к серверу, администратор увидит только набор байтов. Однако это накладывает ограничения: по зашифрованным полям нельзя выполнять поиск по части строки или сложные математические операции на стороне сервера.
Выясним, как реализовать шифрование непосредственно в коде конфигурации, используя объект МенеджерКриптографии. Этот метод позволяет шифровать данные перед их записью в базу данных, превращая их в ДвоичныеДанные.
Рассмотрим пример кода для шифрования строки текста:
// Создаем менеджер криптографии, указывая путь к модулю криптографии
Менеджер = Новый МенеджерКриптографии("", "", 75); // 75 - тип провайдера (AES/GOST)
Менеджер.Пароль = "СекретныйПароль123";
// Данные для шифрования
ДанныеДляШифрования = ПолучитьДвоичныеДанныеИзСтроки("Конфиденциальная информация");
// Выполняем шифрование
ЗашифрованныеДанные = Менеджер.Зашифровать(ДанныеДляШифрования);
// Записываем результат в реквизит с типом ХранилищеЗначения или напрямую в поле типа Binary
Объект.ЗашифрованноеПоле = Новый ХранилищеЗначения(ЗашифрованныеДанные);
Объект.Записать();
В данном случае мы используем симметричное шифрование. Как упоминалось в обсуждении, ключ должен быть динамическим. Это означает, что пароль для расшифровки не должен храниться в коде или в константах базы данных. Его можно запрашивать у пользователя при входе в систему или хранить на внешнем носителе (токене).
Если в качестве СУБД используется PostgreSQL, мы можем задействовать расширение pgcrypto. Это позволяет выполнять шифрование на уровне SQL-функций. Посмотрим на алгоритм реализации:
CREATE EXTENSION pgcrypto;.ExternalConnection или через механизмы интеграции), вызывающий функцию pgp_sym_encrypt().pgp_sym_decrypt().Этот метод требует значительной переработки логики записи и чтения в 1С, так как стандартные механизмы работы с объектами (СправочникОбъект, ДокументОбъект) не знают о существовании функций СУБД для шифрования колонок.
Проанализируем ситуацию, когда необходимо менять ключ шифрования («динамический ключ»). В сообщениях форума подчеркивается, что ключ должен формироваться в момент подключения. Реализовать это можно следующим образом:
Для достижения максимального уровня безопасности, исключающего доступ даже самого квалифицированного взломщика, проанализируем использование HSM (Hardware Security Module). Это физические устройства, внутри которых происходят все криптографические операции. Ключ никогда не покидает чип устройства. 1С отправляет в HSM открытые данные, а получает зашифрованные. Это гарантирует, что даже если злоумышленник получит полный доступ к серверу и памяти процесса 1С, он не сможет извлечь закрытый ключ шифрования.
Разберем ситуацию, когда целью является защита от физического изъятия серверов или кражи дампов базы данных. Для этого подходят системы Transparent Data Encryption (TDE) в MS SQL или системные средства шифрования дисков, такие как BitLocker или LUKS.
Преимущества TDE:
Недостаток: Если администратор вошел в систему и запустил SQL-запрос, он увидит данные в открытом виде, так как СУБД сама расшифровывает их для авторизованных сессий.
Подводя итог, проанализируем, какой метод лучше выбрать в зависимости от задач:
МенеджерКриптографии.Помните, что любое шифрование — это всегда компромисс между безопасностью и производительностью. Зашифрованные данные практически невозможно эффективно фильтровать и сортировать в отчетах, поэтому шифровать следует только действительно критически важную информацию.