Как из открытого ключа сделать закрытый
Перейти к содержимому

Как из открытого ключа сделать закрытый

  • автор:

Открытый и закрытый ключ шифрования

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

Надёжность ключа зависит от его длины в битах. В технологии SSL используют шифры 4096 бит для корневого сертификата и 128–256 бит для клиентских. Такая длина достаточна для безопасной передачи данных.

Протокол SSL использует асимметричное шифрование или шифрование с открытым ключом для установки соединения. Несмотря на название, здесь используются 2 ключа: открытый и закрытый. Оба формируются при запросе SSL-сертификата.

Открытый (публичный ключ) доступен всем. Используется для шифрования данных при обращении браузера к серверу.

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

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

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

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

Передать по почте, телефону или смской не получится – перехватят или подслушают.

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

  1. Чтобы аутентифицировать сервер, браузер посетителя проверяет, подписан ли SSL-сертификат сертификатом доверенного центра.
  2. Чтобы договориться о симметричном ключе шифрования сервер и браузер используют асимметричное шифрование с открытым ключом.

Рассмотрим этот процесс на примере реальных ключей:

Боб отправляет Алисе замок, ключ от которого есть только у него.

Замок здесь – публичный ключ.

Алиса закрывает замком Боба ящик с секретом и посылает обратно.

Так же браузер шифрует сообщение с помощью публичного ключа и передаёт на сервер.

Открыть ящик не сможет никто: ни сама Алиса, ни сотрудники почты.

Мошенник точно так же не может расшифровать сообщение браузера без закрытого ключа.

Боб получает ящик, открывает своим единственным ключом и узнаёт секрет.

Сервер расшифровывает сообщение закрытым ключом, который есть только у него.

Как Алиса и Боб ведут тайную переписку, так браузер и сервер устанавливают защищённое HTTPS-соединение и обмениваются данными.

Экспорт открытого ключа ЭЦП

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

  1. Из свойства браузера;
  2. Из программы КриптоПРО.

Экспорт открытого ключа ЭЦП из свойства браузера

В Windows 7, заходим в меню Пуск -Панель управления — Свойство браузера.

В Windows 10, правой кнопкой мыши на меню Пуск — Панель управления.

Также можно открыть Internet Explorer (не Edge в Windows 10) и в меню Сервис выбрать Свойства браузера.

Нажимаем на «Сертификаты».

Выбираем сертификат с которого необходимо экспортировать открытый ключ, нажимаем на «Экспорт».

Откроется окно «Мастер экспорта сертификатов», нажимаем «Далее».

Выбрать «Нет, не экспортировать закрытый ключ».

Выбрать формат файла: «Файлы X.509 (.CER) в кодировке DER».

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

Готово.

Экспорт открытого ключа с помощью программы КриптоПро

Запускаем Пуск -> Все программы -> КриптоПро -> КриптоПро CSP

Выбрать вкладку «Сервис», далее «Просмотреть сертификаты в контейнере».

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

Переходим во вкладку Состав -> Копировать в файл.

Нажимаем «Далее» в окне «Мастер экспорта сертификатов»,

Выбрать «Нет, не экспортировать закрытый ключ».

Выбрать формат файла: «Файлы X.509 (.CER) в кодировке DER».

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

Готово.

Функции закрытого и открытого ключей

CertEnroll.dll реализует интерфейсы IX509PrivateKey и IX509PublicKey . Например, можно использовать интерфейс IX509PrivateKey для выполнения следующих действий с закрытым ключом:

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

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

  • ContainerNameWStr
  • GenKeyFlags
  • GetKeyLen
  • GetKeyLenEx
  • GetSupportedKeySpec
  • KeySpec
  • LimitExchangeKeyToEncipherment
  • PVKFileNameWStr
  • ReuseHardwareKeyIfUnableToGenNew
  • UseExistingKeySet
  • Связанные темы

ContainerNameWStr

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

  1. Вызовите свойство Request для существующего объекта IX509Enrollment .
  2. Вызовите метод GetInnerRequest для запроса, возвращенного на шаге 1, чтобы получить самый внутренний запрос.
  3. Вызовите QueryInterface для объекта IX509CertificateRequest , возвращенного из шага 2, для приведения к объекту IX509CertificateRequestPkcs10 .
  4. Вызовите свойство PrivateKey в запросе PKCS #10.
  5. Вызовите свойство ContainerName для объекта IX509PrivateKey , полученного на шаге 4.

GenKeyFlags

Функция GenKeyFlags , определенная в Xenroll.dll, задает или извлекает флаги, используемые для создания закрытого ключа или пары открытого и закрытого ключей.

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

GetKeyLen

Функция GetKeyLen , определенная в Xenroll.dll, извлекает максимальный или минимальный размер ключа шифрования.

При использовании CertEnroll.dll можно вызвать свойство Length для объекта IX509PrivateKey или IX509PublicKey , чтобы получить размер ключа в битах.

GetKeyLenEx

Функция GetKeyLenEx , определенная в Xenroll.dll, извлекает максимальный или минимальный размер ключа или длину приращения ключа шифрования.

При использовании CertEnroll.dll можно вызвать свойство Length для объекта IX509PrivateKey или IX509PublicKey , чтобы получить размер ключа в битах. Если алгоритм поддерживает добавочную длину ключа, можно вызвать свойство IncrementLength объекта ICspAlgorithm , чтобы получить значение приращения. Можно также вызвать свойства MinLength и MaxLength , чтобы получить минимальный и максимальный размер ключа.

GetSupportedKeySpec

Функция GetSupportedKeySpec , определенная в Xenroll.dll, извлекает значение, указывающее, поддерживает ли CSP ключи обмена, ключи подписывания или и то, и другое.

При использовании CertEnroll.dll можно вызвать свойство KeySpec в объектах IX509PrivateKey или ICspInformation , чтобы получить операции, поддерживаемые ключом.

KeySpec

Функция KeySpec, определенная в Xenroll.dll, задает или извлекает тип ключа.

При использовании CertEnroll.dll можно вызвать свойство KeySpec для объекта IX509PrivateKey , чтобы получить операции, поддерживаемые ключом.

LimitExchangeKeyToEncipherment

Функция LimitExchangeKeyToEncipherment , определенная в Xenroll.dll, задает или извлекает логическое значение, указывающее, можно ли использовать ключ шифрования только для данных или шифрования ключа.

CertEnroll.dll не содержит прямого эквивалента этой функции. Однако можно достичь почти эквивалентного результата, указав объект IX509ExtensionKeyUsage и добавив его в запрос сертификата.

PVKFileNameWStr

Функция PVKFileNameWStr , определенная в Xenroll.dll, задает или извлекает имя файла, содержащего экспортированные ключи.

При использовании CertEnroll.dll можно вызвать метод Export для объекта IX509PrivateKey для экспорта ключа в BSTR. Вы можете вызвать метод ExportPublicKey для экспорта части открытого ключа асимметричной пары ключей.

ReuseHardwareKeyIfUnableToGenNew

Функция ReuseHardwareKeyIfUnableToGenNew , определенная в Xenroll.dll, задает или извлекает логическое значение, указывающее, используется ли существующий ключ повторно при возникновении ошибки при создании нового ключа.

При использовании CertEnroll.dll можно вызвать метод InitializeFromCertificate для объекта IX509CertificateRequestPkcs10 и указать значение типа перечисления X509RequestInheritOptions для повторного использования существующего закрытого ключа.

UseExistingKeySet

Функция UseExistingKeySet , определенная в Xenroll.dll, задает или извлекает логическое значение, указывающее, следует ли использовать существующие ключи.

При использовании CertEnroll.dll можно вызвать метод InitializeFromCertificate для объекта IX509CertificateRequestPkcs10 и указать значение типа перечисления X509RequestInheritOptions для повторного использования существующих закрытых и открытых ключей.

Чем отличаются открытый и закрытый ключи ЭЦП?

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

Открытый ключ ЭЦП

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

Закрытый ключ ЭЦП

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

Как найти и выгрузить ключи на компьютер?

  • В ОС Windows необходимо открыть: «Пуск» — «Панель управления» — «Свойства браузера».
  • В появившемся окне выбрать вкладку «Содержание», а далее — «Сертификаты».
  • Появится список сертификатов, в котором следует выбрать нужный, а затем нажать кнопку «Экспорт».
  • Появится окно «Мастер экспорта сертификатов», где нужно выбрать «Не экспортировать закрытый ключ», если это не требуется.
  • Выбрать формат файла «Файлы в DER-кодировке X.509 (.CER)».
  • Выбрать место хранения ключа и сохранить.

Через КриптоПро CSP:

  • В ОС Windows надо перейти в «Пуск» — «Панель управления» — «КриптоПро CSP».
  • В открывшемся окне следует выбрать вкладку «Сервис» и нажать «Просмотреть сертификаты в контейнере».
  • Через кнопку «Обзор» нужно выбрать контейнер.
  • В окне «Сертификат для просмотра» следует нажать кнопку «Свойства» и на вкладке «Состав» нажать «Копировать в файл».
  • Далее порядок действий в окне «Мастер экспорта сертификатов» аналогичный: выбрать, нужно ли сохранять закрытый ключ, установить формат и определить место хранения.

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

Выгрузка закрытого ключа через свойства браузера выполняется по тому же алгоритму, что и в случае с открытым. Только в окне «Мастер экспорта сертификатов» нужно выбрать «Экспортировать закрытый ключ». А порядок действий при выгрузке из КриптоПро CSP следующий:

  • В ОС Windows нажать «Пуск» перейти на «Панель управления» и выбрать «КриптоПро CSP».
  • Далее — вкладка «Сервис» и кнопка «Скопировать контейнер».
  • Через кнопку «Обзор» нужно выбрать контейнер и подтвердить (потребуется ввести PIN-код).
  • Затем нужно ввести название копии закрытого ключа и нажать «Готово».
  • Далее нужно выбрать, куда будет записан ключ, установить пароль для обеспечения дополнительной защиты и подтвердить действия.

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

Заказав электронную цифровую подпись в СберКорус, вы сможете самостоятельно настроить компьютер для работы с ЭЦП, посмотрев видеоинструкцию. При возникновении сложностей мы поможем настроить компьютер бесплатно. А также в любое время проконсультируем по интересующим вопросам.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *