Электронная подпись по Российским нормативам: практическое использование на предприятиях
Государственные и коммерческие предприятия В первой части статьи речь шла об использовании электронной подписи в коммерческих предприятиях. В государственных предприятиях и банках все немного иначе. Здесь нужно использовать сертифицированный криптопровайдер, а сами ключи должны храниться на токенах. Поэтому во второй части этой статьи будет показано, как использовать сертифицированный криптопровайдер и токены для хранения ключей вне компьютера. Сперва мы поговорим о криптопровайдере, а потом уже рассмотрим практическое использование программы.На просторах России сертифицированные криптопровайдеры предоставляют не так уж и много компаний: ООО «КРИПТО-ПРО», ООО «Лисси», ОАО «ИнфоТеКС», ЗАО «Сигнал-КОМ» и некоторые другие.Программа CyberSafe поддерживает работу с сертифицированным криптопровайдером от ООО «КРИПТО-ПРО», что обеспечивает возможность формирования и проверки электронной подписи в соответствии с отечественными стандартами ГОСТ Р 34.11–94 / ГОСТ Р 34.11–2012 и ГОСТ Р 34.10–2001 / ГОСТ Р 34.10–2012.Можно ли использовать программу CyberSafe? Одно дело — шифрование личных файлов, но государственный и банковский сектор — совсем другое. Какие нормы позволяют считать CyberSafe программой, использующей сертифицированное ФСБ России СКЗИ и не требующей соответствующей сертификации? Ответ на этот вопрос можно получить в паспорте (формуляре) на программный продукт КриптоПро CSP и в методических рекомендациях по обеспечению с помощью криптосредств безопасности персональных данных при их обработке в информационных системах персональных данных с использованием средств автоматизации. Последние утверждены ФСБ России 21 февраля 2008 года № 149/54–144.В паспорте на КриптоПро CSP читаем п. 1 из раздела 2: Допускается использование СКЗИ для криптографической защиты персональных данных
Далее открываем методические рекомендации и читаем пункт 1 из раздела 5:
5.1. Встраивание криптосредств класса КС1 и КС2 осуществляется без контроля со стороны ФСБ России (если этот контроль не предусмотрен техническим заданием на разработку (модернизацию) информационной системы).
В соответствии с Требованиями к средствам ЭП и Требованиями к средствам УЦ, которые утверждены приказом ФСБ России от 27 декабря 2011 г. № 796, устанавливается шесть классов криптосредств — КС1, КС2, КС3, КВ1, КВ2, КА1. Встраивание криптосредств класса КС3, КВ1, КВ2 и КА1 осуществляется только под контролем со стороны ФСБ России. Что же касается классов КС1 и КС2, то никакого контроля со стороны ФСБ не осуществляется. Подробнее о классах криптографической защиты вы можете прочитать по ссылке, которая приводится в конце статьи.Как видите, CyberSafe использовать не только можно, но и нужно. Исходный код библиотеки шифрования, которую использует программа, доступен всем желающим (ссылка на него есть на главной странице сайта cybersafesoft.com/) по адресу: www.assembla.com/spaces/cybersafe-encryption-library/wikiДалее приводится код функции шифрования и подписи, чтобы убедиться в надежности реализации (лист. 1).
Листинг 1. Функция шифрования и подписи (ГОСТ)
function EncryptAndSign (ASignCertContent: string; AEncCerts: TStringList; FileName, OutFileName: string; out ErrText: String): Boolean; var hProv: HCRYPTPROV; hStoreHandle: HCERTSTORE; pSignerCert: jwawincrypt.PCCERT_CONTEXT; encCert: jwawincrypt.CRYPT_DATA_BLOB; SigParams: jwawincrypt.CRYPT_SIGN_MESSAGE_PARA; pCertContext: PCCERT_CONTEXT; Stream: TMemoryStream; Certificates: array [0 … 100] of PCCERT_CONTEXT; EncParams: CRYPT_ENCRYPT_MESSAGE_PARA; cbEncrypted: DWORD; i: Integer; pszObjId: LPSTR; begin Result:= False; for i:= 0 to 100 do Certificates[i] := nil;
if not jwawincrypt.CryptAcquireContext (hProv, nil, nil, PROV_GOST_2001_DH, CRYPT_VERIFYCONTEXT) then Exit;
hStoreHandle:= CertOpenSystemStore (hProv, 'MY'); if (hStoreHandle = nil) then begin ErrText:= 'ErrorOpenStore'; Exit; end;
for i:= 0 to AEncCerts.Count — 1 do begin try encCert:= GetCertContent (FileToStr (AEncCerts.Strings[i])); except ErrText:= 'ErrorCertLoad'; Continue; end;
pCertContext:= jwawincrypt.CertCreateCertificateContext (MYTYPE, encCert.pbData, encCert.cbData); pCertContext:= jwawincrypt.CertFindCertificateInStore (hStoreHandle, MYTYPE, 0, CERT_FIND_EXISTING, pCertContext, nil); if (pCertContext = nil) then begin ErrText:= 'ErrorCertInStoreNotFound'; Continue; end; Certificates[i] := pCertContext; end;
encCert:= GetCertContent (FileToStr (ASignCertContent)); // Открываем хранилище сертификатов pSignerCert:= nil; pSignerCert:= jwawincrypt.CertCreateCertificateContext (MYTYPE, encCert.pbData, encCert.cbData); pSignerCert:= jwawincrypt.CertFindCertificateInStore (hStoreHandle, MYTYPE, 0, CERT_FIND_EXISTING, pSignerCert, nil); if (pSignerCert = nil) then begin Exit; end;
with TMemoryStream.Create do try LoadFromFile (FileName); try try // Инициализация структуры, необходимой для цифровой подписи pszObjId:= szOID_RSA_MD5; // получение алгоритма сертификата FillChar (SigParams, SizeOf (CRYPT_SIGN_MESSAGE_PARA), #0); SigParams.cbSize:= SizeOf (CRYPT_SIGN_MESSAGE_PARA); SigParams.dwMsgEncodingType:= MYTYPE; SigParams.pSigningCert:= pSignerCert; SigParams.HashAlgorithm.pszObjId:= pszObjId; // для Сигнал — Com szOID_RSA_MD5;// 1.2.643.2.2.21 SigParams.HashAlgorithm.Parameters.cbData:= 0; SigParams.cMsgCert:= 1; SigParams.rgpMsgCert:= @pSignerCert; SigParams.cAuthAttr:= 0; SigParams.dwInnerContentType:= 0; SigParams.cMsgCrl:= 0; SigParams.cUnauthAttr:= 0; SigParams.dwFlags:= 0; SigParams.pvHashAuxInfo:= nil; SigParams.rgAuthAttr:= nil;
ZeroMemory (@EncParams, SizeOf (CRYPT_ENCRYPT_MESSAGE_PARA)); EncParams.cbSize:= SizeOf (CRYPT_ENCRYPT_MESSAGE_PARA); EncParams.dwMsgEncodingType:= MYTYPE; EncParams.HCRYPTPROV:= hProv; EncParams.ContentEncryptionAlgorithm.pszObjId:= szOID_CP_GOST_28147; // Алгоритм шифрования ГОСТ 28147–89 1.2.643.2.2.21 if CryptSignAndEncryptMessage (@SigParams, @EncParams, AEncCerts.Count, @Certificates, Memory, Size, nil, cbEncrypted) then begin Stream:= TMemoryStream.Create; try Stream.SetSize (cbEncrypted); if CryptSignAndEncryptMessage (@SigParams, @EncParams, AEncCerts.Count, @Certificates, Memory, Size, Stream.Memory, cbEncrypted) then begin Stream.SetSize (cbEncrypted); Stream.SaveToFile (OutFileName); Result:= True; end else ErrText:= SysErrorMessage (GetLastError); finally FreeAndNil (Stream); end; end else ErrText:= SysErrorMessage (GetLastError); except ErrText:= SysErrorMessage (GetLastError); end; finally CertCloseStore (hStoreHandle, CERT_CLOSE_STORE_CHECK_FLAG); end; finally Free; end; end;
Практическое использование программы Первым делом нужно установить сертифицированный криптопровайдер «КриптоПро CSP». Скачать программный продукт можно абсолютно бесплатно, но после предварительной регистрации по адресуwww.cryptopro.ru/downloadsСкачайте и запустите установочный файл. Нажмите кнопку Установить и дождитесь сообщения, свидетельствующего об успешной установке программного продукта (рис. 1).Рис. 1. КриптоПро CSP успешно установлен
Далее запустите программу CyberSafe. При первом запуске после установки КриптоПро CSP нужно обязательно установить сертификат CyberSafe GOST CA (рис. 2).
Рис. 2. Установите сертификат
После установки сертификата CyberSafe GOST CA самое время поговорить о токенах. Токен — это USB-устройство, которое используется для авторизации пользователя, защиты электронной переписки, безопасного доступа к удаленным информационным ресурсам, а также для хранения криптографических ключей. Поскольку токены — довольно дорогие устройства, программа CyberSafe может вместо них использовать обычные флешки. На флешке будут храниться помещенные на нее ключи. Однако на токенах ваши ключи защищены от копирования, а на флешке — нет. Но учитывая стоимость токенов, такое решение вполне оправдано. Другими словами, программа CyberSafe экономит ваши деньги.При использовании как токенов, так и обычных флешек для хранения ключей, ваши ключи будут храниться не на компьютере, а на внешнем носителе (токене или флешке).Итак, создадим сертификат Крипто-Про. Выберите команду меню Сертификаты, Создать. В окне Создание сертификата введите адрес электронной почты, пароль, наименование и другую информацию. Убедитесь, что вы включили флажок Создать Крипто-Про сертификат (рис. 3). Если этого флажка нет, убедитесь, что вы установили КриптоПро CSP и после установки перезапустили CyberSafe.
Рис. 3. Создание сертификата Крипто-Про
Следующий шаг — очень важен. Вам нужно выбрать, где именно хранить контейнер закрытого ключа — на USB-диске (рис. 4а) или на токене (рис. 4 б). Выберите токен или съемный диск, на котором вы хотите хранить сертификат (только убедитесь в правильности выбора), или же выберите Реестр, если вы хотите хранить сертификат в компьютере.
Рис. 4а. Сертификат будет храниться на флешке
Рис. 4 б. Сертификат будет храниться на токене
Далее от вас понадобится немного физического труда — нужно нажимать клавиши на клавиатуре или перемещать указатель мыши, пока ключ не будет создан (рис. 5).
Рис. 5. Процесс создания ключа
Далее нужно создать пароль для самого контейнера (рис. 6а) или pin-код (рис. 6 б) — для токена. Этот пароль должен отличаться от пароля сертификата по соображениям безопасности.
Рис. 6а. Пароль контейнера (флешка)
Рис. 6 б. Pin-код для контейнера (токен)
Далее вы увидите сообщение о том, что сертификат успешно создан (рис. 7), а после нажатия кнопки Готово вам нужно открыть свой почтовый ящик и найти там код подтверждения публикации сертификата (если, конечно, вы выбрали публикацию сертификата) и ввести его в появившееся окно (рис. 8).
Рис. 7. Сертификат успешно создан
Рис. 8. Введите код подтверждения публикации сертификата
Во время публикации сертификата вы увидите, что он состоит из шести файлов (рис. 9). После публикации сертификата вы увидите сообщение об его успешной публикации на сервере. Ясное дело, что на момент публикации соединение с Интернетом должно быть установлено. Откройте Проводник и просмотрите содержимое флешки. В каталоге <наименование>.000 вы обнаружите закрытые ключи (рис. 10).
Рис. 9. Процесс публикации сертификата
Рис. 10. Закрытые ключи
Перейдите в раздел Ключи и сертификаты, Все ключи и убедитесь в том, что созданный вами сертификат есть в списке сертификатов (рис. 11).
Рис. 11. Созданный сертификат в общем списке
Далее созданный сертификат можно использовать, как обычно (что было показано в первой части статьи). Например, его можно использовать для шифрования файлов. Процесс шифрования такой же, поэтому подробно его рассматривать не будем. Скажу лишь, что при шифровании файлов нужно выбрать криптопровайдер Крипто Про ГОСТ из списка Выберите крипто провайдер (рис. 12). Далее вы увидите список соответствующих этому криптопровайдеру ключей.
Рис. 12. Шифрование файлов по ГОСТу
Аналогично, при прозрачном шифровании папки (когда нужно зашифровать все файлы из этой папки) вам нужно выбрать криптопровайдер Крипто Про ГОСТ из соответствующего списка (рис. 13).
Рис. 13. Выбор криптопровайдера при прозрачном шифровании
Также выбрать шифрование по ГОСТу можно выбрать при шифровании диска/раздела (см. рис. 14). В списке Тип шифрования нужно выбрать ГОСТ и установить параметры шифрования.
Рис. 14. Шифрование диска
Выводы Программу CyberSafe не только можно, но и нужно использовать в государственных организациях и банках, поскольку программа поддерживает сертифицированный криптопровайдер (Крипто Про) и позволяет не хранить сертификаты (ключи) на компьютере, а вынести их на внешние носители.Ссылки Уровень криптографической защиты при реализации обмена электронными сообщениями, защищенными электронной подписьюФормуляр ЖТЯИ.00050–03 30 01 (КриптоПро CSP)Методические рекомендацииИсходный код библиотеки шифрованияПервая часть статьи