Электронная подпись по Российским нормативам: практическое использование на предприятиях

в 7:00, , рубрики: Блог компании КиберСофт, защита данных, информационная безопасность, цифровая подпись, цифровые сертификаты, шифрование

Государственные и коммерческие предприятия

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

На просторах России сертифицированные криптопровайдеры предоставляют не так уж и много компаний: ООО «КРИПТО-ПРО», ООО «Лисси», ОАО «ИнфоТеКС», ЗАО «Сигнал-КОМ» и некоторые другие.
Программа 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
Рис. 1. КриптоПро CSP успешно установлен

Далее запустите программу CyberSafe. При первом запуске после установки КриптоПро CSP нужно обязательно установить сертификат CyberSafe GOST CA (рис. 2).

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 2
Рис. 2. Установите сертификат

После установки сертификата CyberSafe GOST CA самое время поговорить о токенах. Токен — это USB-устройство, которое используется для авторизации пользователя, защиты электронной переписки, безопасного доступа к удаленным информационным ресурсам, а также для хранения криптографических ключей. Поскольку токены — довольно дорогие устройства, программа CyberSafe может вместо них использовать обычные флешки. На флешке будут храниться помещенные на нее ключи. Однако на токенах ваши ключи защищены от копирования, а на флешке — нет. Но учитывая стоимость токенов, такое решение вполне оправдано. Другими словами, программа CyberSafe экономит ваши деньги.
При использовании как токенов, так и обычных флешек для хранения ключей, ваши ключи будут храниться не на компьютере, а на внешнем носителе (токене или флешке).
Итак, создадим сертификат Крипто-Про. Выберите команду меню Сертификаты, Создать. В окне Создание сертификата введите адрес электронной почты, пароль, наименование и другую информацию. Убедитесь, что вы включили флажок Создать Крипто-Про сертификат (рис. 3). Если этого флажка нет, убедитесь, что вы установили КриптоПро CSP и после установки перезапустили CyberSafe.

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 3
Рис. 3. Создание сертификата Крипто-Про

Следующий шаг — очень важен. Вам нужно выбрать, где именно хранить контейнер закрытого ключа — на USB-диске (рис. 4а) или на токене (рис. 4б). Выберите токен или съемный диск, на котором вы хотите хранить сертификат (только убедитесь в правильности выбора), или же выберите Реестр, если вы хотите хранить сертификат в компьютере.

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 4
Рис. 4а. Сертификат будет храниться на флешке

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 5
Рис. 4б. Сертификат будет храниться на токене

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

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 6
Рис. 5. Процесс создания ключа

Далее нужно создать пароль для самого контейнера (рис. 6а) или pin-код (рис. 6б) — для токена. Этот пароль должен отличаться от пароля сертификата по соображениям безопасности.

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 7
Рис. 6а. Пароль контейнера (флешка)

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 8
Рис. 6б. Pin-код для контейнера (токен)

Далее вы увидите сообщение о том, что сертификат успешно создан (рис. 7), а после нажатия кнопки Готово вам нужно открыть свой почтовый ящик и найти там код подтверждения публикации сертификата (если, конечно, вы выбрали публикацию сертификата) и ввести его в появившееся окно (рис. 8).

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 9
Рис. 7. Сертификат успешно создан

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 10
Рис. 8. Введите код подтверждения публикации сертификата

Во время публикации сертификата вы увидите, что он состоит из шести файлов (рис. 9). После публикации сертификата вы увидите сообщение об его успешной публикации на сервере. Ясное дело, что на момент публикации соединение с Интернетом должно быть установлено. Откройте Проводник и просмотрите содержимое флешки. В каталоге <наименование>.000 вы обнаружите закрытые ключи (рис. 10).

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 11
Рис. 9. Процесс публикации сертификата

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 12
Рис. 10. Закрытые ключи

Перейдите в раздел Ключи и сертификаты, Все ключи и убедитесь в том, что созданный вами сертификат есть в списке сертификатов (рис. 11).

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 13
Рис. 11. Созданный сертификат в общем списке

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

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 14
Рис. 12. Шифрование файлов по ГОСТу

Аналогично, при прозрачном шифровании папки (когда нужно зашифровать все файлы из этой папки) вам нужно выбрать криптопровайдер Крипто Про ГОСТ из соответствующего списка (рис. 13).

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 15
Рис. 13. Выбор криптопровайдера при прозрачном шифровании

Также выбрать шифрование по ГОСТу можно выбрать при шифровании диска/раздела (см. рис. 14). В списке Тип шифрования нужно выбрать ГОСТ и установить параметры шифрования.

Электронная подпись по Российским нормативам: практическое использование на предприятиях - 16
Рис. 14. Шифрование диска

Выводы

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

Ссылки

Уровень криптографической защиты при реализации обмена электронными сообщениями, защищенными электронной подписью
Формуляр ЖТЯИ.00050-03 30 01 (КриптоПро CSP)
Методические рекомендации
Исходный код библиотеки шифрования
Первая часть статьи

Автор: CyberSafeRus

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js