1с 8.3 шифрование данных aes. Резервное копирование и шифрование при защите конфиденциальной информации в рф

СЭД «Корпоративный документооборот» поддерживает использование электронно-цифровых подписей (ЭЦП) при работе с файлами системы. Поддержка ЭЦП производится на уровне встроенных в платформу «1С:Предприятие 8.3 / 8.2» механизмов криптографии и шифрования, а так же с помощью дополнительных объектов метаданных конфигурации.

Для включения возможности использования ЭЦП в системе документооборота откройте форму настройки параметров системы «Настройка параметров: Система» (расположена в подсистеме «Администрирование системы»).

На закладке «Общие параметры» включите флажок «Использовать электронные цифровые подписи», далее нажмите на кнопку «Настройка криптографии».

В открывшемся окне выберите тип провайдера (для провайдера КриптоПро значение должно быть равно 75) и другие параметры. При использовании провайдера КриптоПро (Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider) следующие значения будут подставлены автоматически:

  • Алгоритм подписи: GOST R 34.10-2001
  • Алгоритм хеширования: GOST R 34.11-94
  • Алгоритм шифрования: GOST 28147-89

Если проверка ЭЦП выполняется на сервере и при этом в качестве сервера используется операционная система Linux, то необходимо указать путь к её модулю криптографии.

Пример настройки модуля криптографии для КриптоПро показан на рисунке ниже.

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

Получение и установка ЭЦП

Для получения и установки ЭЦП необходимо установить программный продукт «КриптоПро CSP 3.6». Продукт можно скачать на сайте cryptopro.ru в разделе «Продукты СКЗИ КриптоПро CSP/TLS/JSP» пункт «Загрузка файлов».

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

В соответствии с вашей операционной системой вы можете скачать нужный вам дистрибутив, пример показан на рисунке ниже.

После скачивания запустите установку из дистрибутива, дождитесь окончания установки и перезагрузите компьютер. Теперь можно переходить к формированию ЭЦП для сотрудников.

После входа под своей учетной записью на сайт провайдера Крипто-Про, перейдите в раздел «Поддержка» и выберите «Тестовый центр сертификации» либо воспользуйтесь коммерческим доступом к формированию ЭЦП у данного провайдера.

Формирование ЭЦП на сайте Крипто-Про нужно выполнять в браузере InternetExplorer (желательно версии не ниже 9), при этом необходимо разрешить работу с элементами ActiveX.

Для начала процесса формирования электронно-цифровой подписи выберите пункт «Сформировать ключи и отправить запрос на сертификат».

На новой странице выберите пункт «Создать и выдать запрос к этому ЦС».

Откроется страница ввода данных о сотруднике. Необходимо указать его Ф.И.О., электронную почту и другие данные.

В разделе Type of Certificate Needed укажите «Сертификат проверки подлинности клиента». Также укажите, что вам требуется создать новый набор ключей CSP Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider.

Необходимо пометить ключ как экспортируемый, выбрать в дополнительных параметрах формат запроса PKCS10 и алгоритм хеширования ГОСТ Р 34.11-94. Для начала процесса формирования сертификата ЭЦП нажмите на кнопку «Выдать».

После нажатия на кнопку «Выдать» будет открыт диалог выбора места расположения экспортируемого ключа. Рекомендуется выбрать съемный носитель. В нашем примере мы выберем флеш –накопитель с именем MyDrive.

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

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

После успешного завершения формирования сертификата система предложит его установить в вашу операционную систему. Нажатие на ссылку «Установить этот сертификат» приведет к установке сертификата вашей ЭЦП.

Сертификаты устанавливаются в раздел сертификатов текущего пользователя в каталог «Личное Реестр Сертификаты».

Открыть данный список сертификатов можно через меню «Пуск Программы» пункт «Крипто-Про». На рисунке ниже показан пример для «Windows 7».

После формирования сертификатов можно переходить к их использованию в СЭД «Корпоративный документооборот».

На текущий день в системе реализованы следующие механизмы, связанные с ЭЦП:

  • Подписание документов цифровой подписью
  • Проверка подписи документов
  • Выгрузка документов и подписей в файлы
  • Загрузка документов и подписей из файлов
  • Шифрование файлов с возможностью открытия указанному списку лиц

Основные действия можно выполнить из карточки файла. На рисунке ниже представлена карточка файла, в нижней части формы на закладке «ЭЦП» можно выполнить подписание документа. Для подписания документа нажмите кнопку «Подписать» и на экран будет выведен список существующих на данном компьютере подписей сотрудников, выберите нужную подпись, введите пароль и нажмите кнопку «Подписать». Файл будет подписан.

В табличной части появляется запись, содержащая ФИО подписавшего сотрудника, дату и время подписания и комментарий.

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

Пользователи в любой момент могут проверить статус подписи нажав на кнопку «Проверить» или «Проверить все». Если подпись сотрудника верна и документ не был изменен, то в таком случае в колонке «Статус» появится запись «Верна».

Файл может быть сохранен из карточки на диск компьютера, для этого выберите в меню «ЭЦП и шифрование» пункт «Сохранить вместе с ЭЦП».

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

Создадим новый корпоративный документ в СЭД «Корпоративный документооборот» и добавим в него сохраненный файл, добавить файл можно перетягиванием мышкой файла в поле списка файлов документа. Файлы p7s подписей мы загрузим позже.

Теперь откроем карточку загруженного файла и выберем в меню «ЭЦП и шифрование» пункт «Добавить ЭЦП из файла». Выберем с диска сохраненные подписи сотрудников и нажмем кнопку «ОК». Пример загрузки показан на рисунке ниже.

Так как наш файл был нами изменен, то проверка подписей выдает ошибку. В колонке «Статус» появляется запись «Неверна, Хеш-значение неправильное».

Данное сообщение говорит о том, что цифровая подпись сотрудников была скомпрометирована и больше не является достоверной. Если бы мы не изменили наш файл на диске, то проверка ЭЦП выдала бы корректный результат.

СЭД «Корпоративный документооборот» позволяет проводить шифрование файлов с использованием ЭЦП.
Шифрование файлов позволяет ограничить доступ к файлу только теми сотрудниками, которые указаны в списке пользователей, остальные сотрудники не смогут прочесть файл, даже если у них будет к нему физический доступ. Файл хранится в зашифрованном виде согласно ГОСТ 28147-89 .

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

Попытка открытия файла для его просмотра приводит к необходимости ввести пароль от электронно-цифровой подписи.

Для работы с механизмами электронно-цифровых подписей требуется платформа «1С:Предприятие» версии не ниже 8.2.14.

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

В поставляемой конфигурации реализован механизм симметричного шифрования, описанный в статье

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    При выборе метода шифрования необходимо исходить из правила - «Если стоимость взлома алгоритма выше, чем стоимость зашифрованных данных, вы,
    скорее всего, в безопасности»
    Брюс Шнайер.

    НЕМНОГО ТЕОРИИ
    Существует два метода шифрования:

    Электронная цифровая подпись (ЭЦП) – это разновидность асимметричного шифрования, когда документ подписывается закрытым ключом, а достоверность документа проверяется открытым.
    Хотя в реальности это выглядит несколько сложнее. Хэш-функцией создается хэш документа, который и подписывается закрытым ключом. Далее, эта подпись добавляется к документу.
    При проверке подписи, хэш-функцией создается хэш проверяемого документа. Подпись, присоединенная при подписи, дешифруется открытым ключом. Сравниваются два хэша, если они равны, то все в порядке.

    Сертификат безопасности – если упростить до предела, сертификат безопасности и является тем самым открытым ключом с дополнительной информацией. Обычно,
    сертификаты располагаются в базах данных центров сертификации, которые и формируют из открытого ключа, сертификат. Эти центры отвечают за достоверность сертификатов.
    На практике, если вы получили документ, подписанный ЭЦП, и хотите проверить подлинность подписи, необходимо проверить сертификат в центре сертификации и, если он действительно принадлежит отправителю и не просрочен, проверить целостность документа.
    При отправке шифрованного сообщения, получаете сертификат получателя в центре, зашифруете сообщение открытым ключом из сертификата и отправляете получателю.
    Поскольку создание сертификата и размещение в базе данных дело платное, можно создать временный сертификат. Это сертификат, который не удостоверен в центре сертификации, и его достоверность не может быть подтверждена кроме как вашим словом.
    Каждая локальная машина под управлением любой ОС имеет свою локальную базу сертификатов. В Windows для просмотра сертификатов достаточно запустить консоль управления набрав в командной строке certmgr.msc , в Linux можно использовать апплет шифрования оболочки, хотя там возможностей больше.
    Обычно сертификаты попадают в эту базу автоматически, когда используется шифрованное соединение вроде SSL, VPN и др., однако временный сертификат необходимо добавлять в ручную.

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

    МЕТОДЫ ШИФРОВАНИЯ
    В 1С возможны три варианта с помощью которых можно шифровать данные:

    1. Шифрование методом встроенного объекта «МенеджерКриптографии».
    2. Шифрование с использованием внешних компонент.
    3. Шифрование непосредственно в 1С.

    ШИФРОВАНИЕ МЕТОДОМ ВСТРОЕННОГО ОБЪЕКТА «МенеджерКриптографии».
    Этот метод достаточно подробно описан в Синтакс-Помощнике. Поэтому я опишу только последовательность работы с ним.
    Создаем объект МенеджерКриптографии.

    Где "Microsoft Enhanced Cryptographic Provider v1.0" и есть тот самый криптопровайдер, а "1" тип который можно посмотреть в реестре.

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

    ШИФРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ВНЕШНИХ КОМПОНЕНТ
    Использование внешних компонент зависит от опыта и прихоти программиста. Есть множество бесплатных и платных реализаций.
    Каждая из таких реализаций предусматривает наличие собственных методов управления ключами и алгоритмами шифрования, поэтому описывать хотя бы некоторые из них не имеет никакого смысла, так как каждый выберет реализацию по душе.
    В качестве единственного примера реализации предлагаю статью «Шифрование
    и защита информации в 1С:Предприятие 7.7/8.0/8.1/8.2» , так как она использует широко распространённую платформу.Net Framework, в которой можно реализовать шифрование множеством алгоритмов.

    ШИФРОВАНИЕ НЕПОСРЕДСТВЕННО В 1С
    Чаще всего, бывают случаи, когда «танцы с бубнами» вокруг сертификатов абсолютно не нужны. Никто не будет заморачиваться покупкой сертификатов, а создание и отслеживание временных сертификатов, только добавляет «головной боли» программисту. К тому же необходимо всего лишь передать ведомость по зарплате в филиал или в документообороте создать персональную служебную записку.
    Для этого можно реализовать достаточно надежный для этих целей алгоритм шифрования на встроенном языке.
    Основными ограничениями в этом случае являются отсутствие в 1С методов для работы с двоичными данными и производительность платформы.
    Обойти ограничения отсутствия методов двоичного счисления можно применив для работы алгоритма обычную десятичную математику.
    С производительностью, к сожалению, ничего сделать нельзя. Все попытки существенно увеличить производительность при шифровании и дешифровании не привели к успеху, натыкаясь на ограничения платформы.

    RSA для 1С
    С теорией алгоритма RSA можно познакомиться .
    Основываясь именно на этом материале был реализован программный код состоящий всего из шести небольших функций.

    // Функция проверяет является ли проверяемое число простым. // Тест простоты (Перебор делителей). // Параметры: // - натуральное число. // Возврат: // - ИСТИНА - если число является простым. &НаСервере Функция ТестПростоты(ЧислоДляПроверки) Индекс = 2; Признак = 0; Пока ((Индекс * Индекс) 1) Цикл ЦелаяЧасть = Цел(ЧислоДляПроверки/Индекс); Если (ЧислоДляПроверки/Индекс - ЦелаяЧасть) = 0 Тогда Признак = 1; КонецЕсли; Индекс = Индекс + 1; КонецЦикла; Если Признак = 1 Тогда Возврат Ложь; Иначе Возврат Истина; КонецЕсли; КонецФункции // Функция возвращает случайное простое число в заданном диапазоне. // Параметры: // - НижнийДиапазон - нижняя граница диапазона; // - ВерхнийДиапазон - верхняя граница диапазона. // Возврат: // - случайное простое число. &НаСервере Функция ПолучитьПростоеЧисло(НижнийДиапазон, ВерхнийДиапазон, ЧислоИнициации) ГСЧ = Новый ГенераторСлучайныхЧисел(ЧислоИнициации); СлучайноеЧисло = ГСЧ.СлучайноеЧисло(НижнийДиапазон, ВерхнийДиапазон); Пока Не ТестПростоты(СлучайноеЧисло) Цикл СлучайноеЧисло = ГСЧ.СлучайноеЧисло(НижнийДиапазон, ВерхнийДиапазон); КонецЦикла; ЧислоИнициации = ГСЧ.СлучайноеЧисло(НижнийДиапазон, ВерхнийДиапазон); Возврат СлучайноеЧисло; КонецФункции // Функция вычисляет взаимно простое число к заданному значению (Алгоритм Евклида). // Параметры: // - ЧислоОснова - число являющееся основой для поиска взаимно простых чисел. // - ЧислоПоиска - число от которого начинается поиск взаимно простого числа. // Возврат: // - структура с взаимно простым числом и обратное число по модулю. &НаСервере Функция ПолучитьВзаимноПростыеЧисла(ЧислоОснова, ЧислоПоиска) СтруктураВозврата = Новый Структура; Пока ЧислоПоиска 0 Цикл Частное = Делимое/Делитель; Остаток = Делимое - Делитель * Цел(Частное); Альфа = АльфаМинус2 - Цел(Частное) * АльфаМинус1; Вита = ВитаМинус2 - Цел(Частное) * ВитаМинус1; Если Остаток > 0 Тогда Делимое = Делитель; Делитель = Остаток; Иначе НаибольшийОбщийДелитель = Делитель; КонецЕсли; АльфаМинус2 = АльфаМинус1; АльфаМинус1 = Альфа; ВитаМинус2 = ВитаМинус1; ВитаМинус1 = Вита; КонецЦикла; Если НаибольшийОбщийДелитель = 1 И ВитаМинус2 > 0 Тогда // СтруктураВозврата.Вставить("НОД", ЧислоПоиска); СтруктураВозврата.Вставить("Вита", ВитаМинус2); Возврат СтруктураВозврата; КонецЕсли; ЧислоПоиска = ЧислоПоиска + 1; КонецЦикла; Возврат ПолучитьВзаимноПростыеЧисла(ЧислоОснова, Цел(ЧислоПоиска/2)); КонецФункции // Функция формирует закрытый и открытый ключ. // Возврат: // - структура с набором ключей, открытый-(e, n) и закрытый-(d, n). &НаСервере Функция СформироватьКлючи() Экспорт // Управление разрядностью ключа ВерхняяГраница = 100; НижняяГраница = 32; ЧислоИнициации = (Год(ТекущаяДата()) + Месяц(ТекущаяДата()) + День(ТекущаяДата()))*(Час(ТекущаяДата())+Минута(ТекущаяДата())+Секунда(ТекущаяДата())); // p ЧастьПи = ПолучитьПростоеЧисло(НижняяГраница, ВерхняяГраница, ЧислоИнициации); // q ЧастьКью = ЧастьПи; Пока ЧастьКью = ЧастьПи Цикл ЧастьКью = ПолучитьПростоеЧисло(НижняяГраница, ВерхняяГраница, ЧислоИнициации); КонецЦикла; // n ЧастьЭн = ЧастьПи * ЧастьКью; // Вычисляем функцию Эйлера. ЗначениеЭйлера = (ЧастьПи - 1) * (ЧастьКью - 1); // Вычисляем случайное взаимно простое чисело. ГСЧ = Новый ГенераторСлучайныхЧисел(ЗначениеЭйлера); СлучайноеЧисло = ГСЧ.СлучайноеЧисло(1, ЗначениеЭйлера); // e, d СтруктураЗначений = ПолучитьВзаимноПростыеЧисла(ЗначениеЭйлера, СлучайноеЧисло); ЧастьЕ = СтруктураЗначений.НОД; ЧастьД = СтруктураЗначений.Вита; // Собираем готовые ключи СтруктураВозврата = Новый Структура; СтруктураКлюча = Новый Структура; СтруктураКлюча.Вставить("ЧастьЕ", ЧастьЕ); СтруктураКлюча.Вставить("ЧастьЭн", ЧастьЭн); СтруктураВозврата.Вставить("ОткрытыйКлюч", ЗначениеВСтрокуВнутр(СтруктураКлюча)); СтруктураКлюча = Новый Структура; СтруктураКлюча.Вставить("ЧастьЭн", ЧастьЭн); СтруктураКлюча.Вставить("ЧастьД", ЧастьД); СтруктураВозврата.Вставить("ЗакрытыйКлюч", ЗначениеВСтрокуВнутр(СтруктураКлюча)); Возврат СтруктураВозврата; КонецФункции // Функция шифрует текст с использованием открытого ключа. // Параметры: // - текст подлежащий шифрованию; // - открытый ключ. // Возврат: // - шифротекст в виде строки чисел через ";". &НаСервере Функция Шифрование(ШифруемыйТекст, ОткрытыйКлюч) Экспорт СтрокаВозврата = ""; СтруктураКлюча = ЗначениеИзСтрокиВнутр(ОткрытыйКлюч); Для Индекс = 1 По СтрДлина(ШифруемыйТекст) Цикл Код = КодСимвола(ШифруемыйТекст, Индекс); Степень = Pow(Код, СтруктураКлюча.ЧастьЕ); Шифрокод = Степень - СтруктураКлюча.ЧастьЭн * Цел(Степень / СтруктураКлюча.ЧастьЭн); СтрокаВозврата = СтрокаВозврата + Шифрокод + ";" КонецЦикла; Возврат СтрокаВозврата; КонецФункции // Функция дешифрует текст с использованием закрытого ключа. // Параметры: // - шифротекст; // - закрытый ключ. // Возврат: // - дешифрованный текст. &НаСервере Функция Дешифрование(Шифротекст, ЗакрытыйКлюч) Экспорт СтрокаВозврата = ""; СтруктураКлюча = ЗначениеИзСтрокиВнутр(ЗакрытыйКлюч); СтрШифрокод = ""; Для Индекс = 1 По СтрДлина(Шифротекст) Цикл Если Сред(Шифротекст, Индекс, 1) = ";" Тогда Шифрокод = Число(СтрШифрокод); Степень = Pow(Шифрокод, СтруктураКлюча.ЧастьД); Код = Степень - СтруктураКлюча.ЧастьЭн * Цел(Степень / СтруктураКлюча.ЧастьЭн); СтрокаВозврата = СтрокаВозврата + Символ(Код); СтрШифрокод = ""; Иначе Если Не Сред(Шифротекст, Индекс, 1) = " " Тогда СтрШифрокод = СтрШифрокод + Сред(Шифротекст, Индекс, 1); КонецЕсли; КонецЕсли; КонецЦикла; Возврат СтрокаВозврата; КонецФункции

    Функции расположены в модуле объекта обработки «ОбменСообщениями» из демонстрационного примера |File: demo.zip - Hash: MD5 - 63AF4F485464C863D6B626BAEC44C6C0|.
    Демонстрационный пример представляет из себя средство обмена сообщениями между пользователями 1С.

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

    Алгоритм RSA был разработан еще в 1977 г. В 2003 г. Ади Шамир и Эран Тромер разработали схему устройства TWIRL, которое при стоимости $ 10 000 может дешифровать 512-битный ключ за 10 минут, а при стоимости $ 10 000 000 – 1024-битный ключ меньше, чем за год.
    Однако этот алгоритм используется и до настоящего времени с рекомендуемой длинной ключа 2048 бит.
    В нашем же случае используется ключ примерно в 14 бит, увеличить длину ключа можно увеличив период диапазона.

    // Управление разрядностью ключа ВерхняяГраница = 100; НижняяГраница = 32;

    Однако значительное увеличение, резко замедляет процесс шифрования и дешифрования.

    Цель данной статьи - показать, как правильно выполнить резервное копирование зашифрованных папок - так, чтобы файлы в них остались зашифрованными.

    Введение

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


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

    Поскольку в базе данных 1С: Предприятие содержится обрабатываемая конфиденциальная информация, необходимо защитить ее от несанкционированного доступа. Для этого мы решили зашифровать базу данных 1C.
    После шифрования файлы базы данных 1С на сервере будут храниться в зашифрованном состоянии. Шифрование будет осуществляться средствами программы CyberSafe Top Secret . Понятно, что раз есть данные, то нужно выполнить их резервное копирование. Вот только данные у нас будут не простые, а зашифрованные.
    Далее в этой статье будет рассказано:

    • Как организовать прозрачное шифрование сетевой папки с базой данных 1С.
    • Как правильно выполнить резервное копирование зашифрованных данных средствами Acronis Backup & Recovery, чтобы они остались зашифрованными в резервной копии.
    • Почему для решения нашей задачи невозможно использовать EFS.

    Буква закона

    Используемая нами связка программного обеспечения (программы CyberSafe Top Secret и Acronis Backup & Recovery) выбрана не просто так. Мы реализуем требования законодательства по защите конфиденциальной информации (к которой относятся и персональные данные). Если вы когда-либо интересовались вопросами защиты персональных данных, то наверняка знакомы с двумя основными нормативными актами:
    • Постановление Правительства РФ от 01.11.2012 N 1119 «Об утверждении требований к защите персональных данных при их обработке в информационных системах персональных данных».
    • Приказ ФСТЭК России от 18 февраля 2013 г. N 21.
    Мы выполняли требования законодательства относительно периодического резервирования обрабатываемых данных, а также их защиты от несанкционированного доступа.

    Резервное копирование осуществляется средствами программного комплекса Acronis Backup & Recovery 11 Advanced Server, имеющего сертификат ФСТЭК № 2677 от 16.07.2012.

    Защита от несанкционированного доступа реализуется посредством применения программы CyberSafe Top Secret, которая вместе с использованием сертифицированного криптопровайдера КриптоПро CSP и алгоритма ГОСТ для шифрования данных, также считается сертифицированным средством.

    Кстати, чтобы ни говорили поклонники TrueCrypt, а использовать ее для защиты персональных данных все равно нельзя, поскольку она не является сертифицированным средством шифрования. Сертификата ФСТЭК у нее нет и никогда не будет. Что же касается, EFS, то она считается сертифицированной только в специальной версии Windows, у которой есть сертификат ФСТЭК.

    Если выйти «за рамки» TrueCrypt, то для решения нашей задачи не подойдет не только эта программа, но и любая другая, использующая криптодиски. Даже если эта программа сертифицирована. Ранее мы писали об уязвимостях криптодисков и если поставленную задачу решать посредством криптодисков, то криптодиск нужно защищать средствами операционной системы (сетевой авторизацией), которая не сертифицирована (или у вас сертифицированная версия Windows?). Кроме того, данные с криптодиска по сети передаются в незашифрованном виде. Для шифрования данных, передаваемых, между клиентом и сервером, на котором «расшарен» криптодиск, нужно настраивать VPN (разумеется, нужно использовать сертифицированное решение). Следовательно, схема, построенная на использовании криптодисков, обойдется на порядок дороже, чем приведенная в этой статье.

    Настройка прозрачного шифрования сетевой папки

    Для большей однозначности назовем наш сервер, на котором хранится база данных 1С, коротко и понятно: SERVER. На логическом диске H: есть папка 1С (H:\1C), в которой и хранится база данных 1С. К папке предоставлен общий доступ, сетевой путь выглядит так: \\SERVER\1C. Эту папку нам и нужно зашифровать.

    Программа CyberSafe должна быть установлена на всех компьютерах, которые должны работать с зашифрованной папкой, то есть на компьютере администратора и на компьютере всех пользователей, которые работают с 1C.
    Запускаем программу CyberSafe Top Secret и переходим в раздел Прозрачное шифрование , нажимаем кнопку Доб. папку и добавляем нашу сетевую папку (рис. 2).


    Рис. 2. Программа CyberSafe Top Secret

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


    Рис. 3. Выбор сертификата

    После нажатия кнопки Применить вы увидите предложение добавить ключ администратора, нажмите кнопку Да . Все, папка защищена.

    Примечание . В программу CyberSafe Top Secret можно добавить, как пустую папку, так и папку с файлами. Разницы нет. Вы можете зашифровать пустую папку и позже добавить в нее файлы.

    Работа с зашифрованной папкой

    Чтобы зашифрованная папка стала доступной, нужно запустить программу CyberSafe Top Secret, выделить папку и нажать кнопку Включить . После чего появится окно ввода пароля. Нужно ввести пароль вашего сертификата (если он, конечно, был указан при шифровании папки). По окончанию работы с папкой ее нужно выключить, нажав кнопку Выключить .
    Если кто-то попытается открыть файлы, находящиеся в зашифрованной сетевой папке, с другого компьютера (или с компьютера, на котором хранится сама зашифрованная папка), то он обнаружит, что эти файлы зашифрованы.

    Настройка средства резервного копирования

    Итак, папка зашифрована. Программа 1С: Предприятие может работать с ней как с самой обычной папкой, если не считать незначительной потери производительности. В качестве средства резервного копирования используется программа Acronis Backup & Recovery, которая установлена на нашем сервере.

    Данная программа выбрана не случайно, поскольку Acronis при резервном копировании сохраняет файловые потоки, в которых в них хранится информация о ключах, которыми была зашифрована папка с базой данных 1C. Кроме того, при использовании Acronis даже не нужно завершать процесс 1С, чего требуют некоторые другие средства резервного копирования.
    Сама настройка Acronis проста - нужно указать, что копируем (рис. 4) и куда копируем (рис. 5).


    Рис. 4. Что копируем


    Рис. 5. Куда копируем

    Обратите внимание, куда именно осуществляется резервное копирование: резервная копия сохраняется на сетевое хранилище D-Link.
    Если вы не используете Acronis, а другое средство резервного копирования, убедитесь, что оно поддерживает сохранение файловых потоков. Даже некоторые архиваторы (если не используете ПО для резервного копирования, а создаете резервную копию вручную) поддерживают файловые потоки. Например, в WinRAR при создании архива на вкладке Дополнительно (рис. 6) нужно включить переключатель Сохранять файловые потоки .


    Рис. 6. Создание архива

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

    Почему нельзя использовать EFS?

    Зачем нужны все эти танцы с бубном и с использованием программы CyberSafe Top Secret? Ведь можно зашифровать с помощью EFS папку H:\1C на сервере и наша база данных тоже будет зашифрована.

    А теперь самое главное: все правильно, если выполнить прозрачное шифрование папки с базой данных, база данных будет зашифрована, а вот резервные копии - нет. Ведь при использовании EFS все программы на сервере, в том числе и Acronis, будут видеть все файлы зашифрованной с помощью EFS папки расшифрованными. При использовании CyberSafe другие программы, в том числе и Acronis, видят файлы базы данных изначально зашифрованными. Это очень важно. Думаю, не нужно говорить, что произойдет, если резервная копия попадет в чужие руки. Файлы в резервной копии не будут зашифрованы, следовательно, их сможет прочитать любой желающий.

    Другие особенности нашего решения

    Итак, вы уже знаете, что при использовании CyberSafe средство резервного копирования будет «видеть» изначально зашифрованные файлы. Это и есть главная особенность нашего решения. Однако нельзя не отметить и другие:
    • Шифрование и расшифровка данных происходит на клиенте, а не на сервере - в отличие от EFS, процесс шифрования и расшифрования не происходит на сервере, как уже было отмечено. Следовательно, если злоумышленник получит доступ к серверу, на нем нет ни ПО для шифрования, ни самих ключей. Да, программа CyberSafe Top Secret на сервере не устанавливается. Она нужна только на компьютерах пользователей, которым необходима работа с зашифрованной папкой.
    • Шифрование данных при их передаче по сети - EFS, увы, не поддерживает шифрование данных по сети. Это означает, что данные между сервером БД 1С и клиентом передаются в расшифрованном виде. При использовании прозрачного шифрования CyberSafe шифрование и расшифровка происходят на клиентах, то есть на компьютерах пользователей, работающих с 1С. Следовательно, по сети данные передаются в зашифрованном виде.
    • Разграничение доступа - с прозрачной сетевой папкой могут работать не все, а только лишь те, чьи сертификаты указаны при шифровании папки - это дополнительный уровень защиты данных. Да, разграничение доступа происходит и на уровне системы - посредством установки прав доступа, но использование сертификатов делает защиту данных еще более надежной.
    • Резервное копирование выполняется на сетевое хранилище - зашифровать папку на сетевом хранилище мы не можем (в силу отсутствия поддержки NTFS - жесткий диск на сетевом хранилище отформатирован как ext3), зато мы можем выполнить на него резервное копирование зашифрованной папки средствами Acronis.
    • Возможность инкрементного копирования - фанаты программы TrueCrypt могут возразить, мол, можно создать контейнер виртуального зашифрованного диска, «расшарить» его и хранить базу данных 1С в нем (впрочем, недостатки этого решения уже были рассмотрены ранее), а Acronis будет каждый день копировать тот самый файл виртуального жесткого диска. Такой файл может легко занимать несколько гигабайт и каждый день вам придется копировать его полностью, даже если в папке изменился всего один файл размером несколько килобайтов. Использовать такое решение можно, но ни о какой рациональности речи не идет - как по нагрузке системы, так и по использованию дискового пространства. В случае с нашим решением вы можете производить инкрементное резервное копирование, то есть копировать только новые и измененные файлы. Вам не нужно каждый день копировать всю папку. Инкрементное решение экономит дисковое пространство и снижает общую нагрузку на систему, в том числе и на сеть, поскольку используется сетевое хранилище.