Руководство по установке набора инструментов PQC

Введение

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

Для этой первой итерации постквантовый криптографический алгоритм сопрягается с криптографическим алгоритмом на основе эллиптической кривой.

Настоящее руководство по настройке содержит инструкции по использованию инструментария PQC DigiCert для:

  • Применения исправления ISARA PQC к исходным файлам OpenSSL.
  • Компилирования своей модифицированной программы OpenSSL.
  • Создания постквантовых криптографических ключей.
  • Создания полную цепочки гибридных сертификатов, включая корневые, промежуточные и серверные сертификаты.
  • Протестируйте сертификаты, используя утилиты OpenSSL s_server и s_client.

Набор инструментов PQC DigiCert доступен для всех клиентов Secure Site Pro. Ознакомьтесь с более подробной информацией о том, что входит в каждый сертификат Secure Site Pro.

Содержимое инструментария PQC

Инструментарий PQC от DigiCert содержит следующие файлы:

  • ISARA Catalyst OpenSSL Connector
  • Измененный openssl.cfg
  • Файлы конфигурации сертификата
  • Пример цепочки гибридных сертификатов

Предварительные условия

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

  • Доступ к файлам ресурсов инструментария PQC от DigiCert
  • 64-битная Ubuntu 16.04 или более поздняя версия (настоящее руководство составлено с использованием Ubuntu 18.04 LTS)
  • Пользователь без полномочий root с доступом sudo («выполнить от имени суперпользователя»)

Подготовленная среда

Перед скачиванием и исправлением файлов подготовьте свою среду.

Сначала установите необходимые зависимости и инструменты.

bash
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y install libssl-dev
sudo apt-get -y install curl unzip make cmake gcc wget zlib1g-dev libjansson-dev

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

bash
mkdir -p /app/digicert-pqc/connector
mkdir -p /app/digicert-pqc/certs/configs
mkdir /app/resources

Скачайте и извлеките инструментарий

Теперь загрузите инструментарий PQC от DigiCert и распакуйте его содержимое.

Скачайте инструментарий PQC

  1. Войдите в свою учетную запись CertCentral

  2. В меню на боковой панели нажмите Сертификаты > Заказы.

  3. На странице «Заказы» найдите свой заказ на сертификат Secure Site Pro и нажмите на номер заказа.

  4. На странице данных заказа на сертификат нажмите Инструментарий PQC.

  5. Нас странице постквантовой криптографии (PQC) нажмите Скачать инструментарий ISARA PQC и сохраните набор инструментов в каталоге /app/resources.

Извлеките файлы инструментария PQC

Затем извлеките содержимое из набора инструментов.

bash
cd /app/resources
unzip ./digicert-pqc-toolkit_2019-07-26.zip

Инструментарий PQC содержит архив ISARA OpenSSL Connector. Извлеките его в /app/digicert-pqc/connector.

bash
cd /app/digicert-pqc/connector
tar xzvf /app/resources/digicert-pqc-toolkit_2019-07-26/openssl_connector-Linux-2019-05-27.tgz

Исправление и компиляция OpenSSL

После того, как вы настроите среду и извлечете все файлы, исправьте и скомпилируйте OpenSSL.

Для начала скачайте OpenSSL версии 1.0.2r в каталог /app/resources.

bash
cd /app/resources
wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2r.tar.gz

Затем извлеките исходные файлы в каталог /app/digicert-pqc.

bash
cd /app/digicert-pqc
tar xzvf /app/resources/openssl-1.0.2r.tar.gz

Теперь примените исправление ISARA OpenSSL к извлеченным исходным файлам. При этом будут применены все необходимые изменения OpenSSL для генерирования квантово-безопасных криптографических алгоритмов.

bash
cd openssl-1.0.2r/
patch -p2 < ../connector/OpenSSL_1_0_2r_ISARA.patch

После завершения исправления замените существующий файл openssl.cfg на измененную версию из набора инструментов. Этот измененный файл конфигурации содержит динамическую запись движка, которая указывает на ISARA OpenSSL IQREngine (/app/digicert-pqc/connector/lib).

bash
cp /app/resources/digicert-pqc-toolkit_2019-07-26/openssl.cnf ./apps

Так как вы создаете совместно используемую библиотеку OpenSSL, вам необходимо настроить нестандартные пути перед компилированием исходных файлов.

bash
./config --prefix=/app/digicert-pqc/pqpki-openssl-1.0.2r --openssldir=/app/digicert-pqc/pqpki-openssl-1.0.2r shared

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

bash
make depend
make all
make test
sudo make install

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

bash
export LD_LIBRARY_PATH=/app/digicert-pqc/pqpki-openssl-1.0.2r:/app/digicert-pqc/connector/lib

Если ваша система уже использует переменную LD_LIBRARY_PATH, вы можете добавить :$LD_LIBRARY_PATH к указанной выше команде, чтобы, не нарушая структуру, добавить новые пути.

Создайте цепочку гибридных сертификатов

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

Сначала скопируйте файлы конфигурации сертификатов, которые были включены в инструментарий PQC, в каталог /app/digicert-pqc/certs. Эти файлы конфигурации содержат всю информацию, необходимую для генерирования каждого запроса на сертификат и сертификата.

bash
cd /app/digicert-pqc/certs
cp /app/resources/certificates/root_req.cfg ./configs
cp /app/resources/certificates/intermediate_req.cfg ./configs
cp /app/resources/certificates/server_req.cfg ./configs

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

Корневой сертификат:

bash
/app/digicert-pqc/pqpki-openssl-1.0.2r/bin/openssl genpkey -engine IQREngine -algorithm xmss -pkeyopt tree_height:10 -pkeyopt strategy:cpu_constrained -pkeyopt state_filename:xmss_catalyst_mixed_chain_root_private_key_state.bin -out xmss_catalyst_mixed_chain_root_private_key.pem

Промежуточный сертификат:

bash
/app/digicert-pqc/pqpki-openssl-1.0.2r/bin/openssl genpkey -engine IQREngine -algorithm dilithium -pkeyopt parameter_set:A -out dilithium_catalyst_mixed_chain_intermediate_private_key.pem

Сертификат сервера:

bash
/app/digicert-pqc/pqpki-openssl-1.0.2r/bin/openssl genpkey -engine IQREngine -algorithm rainbow -pkeyopt parameter_set:A -out rainbow_catalyst_mixed_chain_private_key.pem

После того как вы сгенерируете закрытый ключ каждого сертификата, извлеките их открытые ключи.

Корневой сертификат:

bash
/app/digicert-pqc/pqpki-openssl-1.0.2r/bin/openssl pkey -engine IQREngine -in xmss_catalyst_mixed_chain_root_private_key.pem -pubout -out xmss_catalyst_mixed_chain_root_public_key.pem

Промежуточный сертификат:

bash
/app/digicert-pqc/pqpki-openssl-1.0.2r/bin/openssl pkey -engine IQREngine -in dilithium_catalyst_mixed_chain_intermediate_private_key.pem -pubout -out dilithium_catalyst_mixed_chain_intermediate_public_key.pem

Сертификат сервера:

bash
/app/digicert-pqc/pqpki-openssl-1.0.2r/bin/openssl pkey -engine IQREngine -in rainbow_catalyst_mixed_chain_private_key.pem -pubout -out rainbow_catalyst_mixed_chain_public_key.pem

Чтобы убедиться, что все компоненты были созданы правильным образом, выполните команду ls. Если процедура завершилась успешно, вы должны увидеть примерно такой результат:

bash
configs
dilithium_catalyst_mixed_chain_intermediate_private_key.pem
dilithium_catalyst_mixed_chain_intermediate_public_key.pem
dilithium_ecdsa_x509_catalyst_mixed_chain_intermediate_certificate.pem
dilithium_ecdsa_x509_catalyst_mixed_chain_intermediate_req.pem
ecdsa_catalyst_mixed_chain_parameters.pem
ecdsa_without_dilithium_catalyst_mixed_chain_intermediate_private_key.pem
ecdsa_without_dilithium_x509_catalyst_mixed_chain_intermediate_certificate.pem
ecdsa_without_dilithium_x509_catalyst_mixed_chain_intermediate_req.pem
ecdsa_without_rainbow_catalyst_mixed_chain_private_key.pem
ecdsa_without_rainbow_x509_catalyst_mixed_chain_certificate.pem
ecdsa_without_rainbow_x509_catalyst_mixed_chain_req.pem
ecdsa_without_xmss_catalyst_mixed_chain_root_private_key.pem
ecdsa_without_xmss_x509_catalyst_mixed_chain_root_certificate.pem
ecdsa_without_xmss_x509_catalyst_mixed_chain_root_req.pem
rainbow_catalyst_mixed_chain_private_key.pem
rainbow_catalyst_mixed_chain_public_key.pem
rainbow_ecdsa_x509_catalyst_mixed_chain_server_certificate.pem
rainbow_ecdsa_x509_catalyst_mixed_chain_server_req.pem
xmss_catalyst_mixed_chain_root_private_key.pem
xmss_catalyst_mixed_chain_root_private_key_state.bin
xmss_catalyst_mixed_chain_root_public_key.pem
xmss_ecdsa_x509_catalyst_mixed_chain_root_certificate.pem

Протестируйте свою цепочку сертификатов

Чтобы протестировать свою цепочку квантово-безопасных гибридных сертификатов, используйте утилиты OpenSSL s_server и s_client. Чтобы использовать обе утилиты одновременно, откройте два сеанса работы с терминалом: один для сервера и один для клиента.

Сначала добавьте значение CN сертификата сервера в файл хостов.

bash
echo "$(hostname -I) digicert.pqc" | sudo tee -a /etc/hosts

Затем убедитесь в том, что вы находитесь в каталоге /app/digicert-pqc/certs.

bash
cd /app/digicert-pqc/certs

Затем на одном из ваших открытых терминалов запустите сервер.

bash
env LD_LIBRARY_PATH=/app/digicert-pqc/pqpki-openssl-1.0.2r:/app/digicert-pqc/connector/lib /app/digicert-pqc/pqpki-openssl-1.0.2r/bin/openssl s_server -engine IQREngine -cert dilithium_ecdsa_x509_catalyst_mixed_chain_intermediate_certificate.pem -certform PEM -key dilithium_catalyst_mixed_chain_intermediate_private_key.pem -keyform PEM -debug -tls1_2

После выполнения указанной выше команды должен появиться увидеть этот результат:

bash
engine "IQREngine" set.
Using default temp DH parameters
ACCEPT

Затем переключитесь в окно второго терминала и убедитесь в том, что вы находитесь в каталоге /app/digicert-pqc/certs.

bash
cd /app/digicert-pqc/certs

Затем с помощью утилиты s_client подключитесь к работающему серверу.

bash
env LD_LIBRARY_PATH=/app/digicert-pqc/pqpki-openssl-1.0.2r:/app/digicert-pqc/connector/lib /app/digicert-pqc/pqpki-openssl-1.0.2r/bin/openssl s_client -engine IQREngine -CAfile xmss_ecdsa_x509_catalyst_mixed_chain_root_certificate.pem -showcerts -tls1_2 -cipher 'ECDHE-NHDH-DILM-AES256-GCM-SHA384'

Если все настроено правильно, в окне терминала, на котором запущена утилита s_client, должен появиться этот результат:

bash
engine "IQREngine" set.
CONNECTED(00000003)
depth=1 C = US, ST = Utah, L = Lehi, O = "DigiCert, Inc.", OU = DigiCert PQC, CN = DigiCert PQC Root
verify return:1
depth=0 C = US, ST = Utah, L = Lehi, O = "DigiCert, Inc.", OU = DigiCert PQC, CN = DigiCert PQC Test Intermediate CA
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
   i:/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Test Intermediate CA
issuer=/C=US/ST=Utah/L=Lehi/O=DigiCert, Inc./OU=DigiCert PQC/CN=DigiCert PQC Root
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 9868 bytes and written 2331 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-NHDH-DILM-AES256-GCM-SHA384
Server public key is 521 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-NHDH-DILM-AES256-GCM-SHA384
    Session-ID: {{Session-ID}}
    Session-ID-ctx: 
    Master-Key: {{Master-Key}}
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    [...]


    Start Time: 1563994600
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

В окне терминала, на котором запущена утилита s_server, должен появиться этот результат:

bash
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 16 03 01 00 96                                    .....
read from 0x5581e0750b80 [0x5581e07656f8] (150 bytes => 150 (0x96))
0000 - 01 00 00 92 03 03 d9 c0-5a 73 35 d0 4e f2 31 f6   ........Zs5.N.1.
[...]
write to 0x5581e0750b80 [0x5581e076e100] (71 bytes => 71 (0x47))
0000 - 16 03 03 00 42 02 00 00-3e 03 03 c2 3b df 2f 01   ....B...>...;./.
[...]
write to 0x5581e0750b80 [0x5581e0769c43] (4953 bytes => 4953 (0x1359))
0000 - 16 03 03 13 54 0b 00 13-50 00 13 4d 00 13 4a 30   ....T...P..M..J0
[...]
write to 0x5581e0750b80 [0x5581e0769c43] (4609 bytes => 4609 (0x1201))
0000 - 16 03 03 11 fc 0c 00 11-f8 03 00 17 41 04 0d 97   ............A...
[...]
write to 0x5581e0750b80 [0x5581e076e100] (9 bytes => 9 (0x9))
0000 - 16 03 03 00 04 0e 00 00-00                        .........
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 16 03 03 08 48                                    ....H
read from 0x5581e0750b80 [0x5581e07656f8] (2120 bytes => 2120 (0x848))
0000 - 10 00 08 44 41 04 29 0a-07 84 0c f3 a4 e4 3e d1   ...DA.).......>.
[...]
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 14 03 03 00 01                                    .....
read from 0x5581e0750b80 [0x5581e07656f8] (1 bytes => 1 (0x1))
0000 - 01                                                .
read from 0x5581e0750b80 [0x5581e07656f3] (5 bytes => 5 (0x5))
0000 - 16 03 03 00 28                                    ....(
read from 0x5581e0750b80 [0x5581e07656f8] (40 bytes => 40 (0x28))
0000 - e1 d7 30 8b 12 ef d1 dc-31 90 97 d0 0e 54 9c aa   ..0.....1....T..
[...]
write to 0x5581e0750b80 [0x5581e076e100] (175 bytes => 175 (0xAF))
0000 - 16 03 03 00 aa 04 00 00-a6 00 00 1c 20 00 a0 02   ............ ...
[...]
write to 0x5581e0750b80 [0x5581e076e100] (6 bytes => 6 (0x6))
0000 - 14 03 03 00 01 01                                 ......
write to 0x5581e0750b80 [0x5581e076e100] (45 bytes => 45 (0x2D))
0000 - 16 03 03 00 28 d0 99 97-94 6d a1 5c f8 b0 c0 65   ....(....m.\...e
[...]
-----BEGIN SSL SESSION PARAMETERS-----
[...]
-----END SSL SESSION PARAMETERS-----
Shared ciphers:ECDHE-NHDH-DILM-AES256-GCM-SHA384:ECDHE-NHDH-SIDH-DILM-AES256-GCM-SHA384
Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1:HSS+SHA512:XMSS+SHA512:XMSSmt+SHA512:DILITHIUM+SHA512:DILITHIUM+SHA512:0xE0+SHA512
Shared Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1:HSS+SHA512:DILITHIUM+SHA512:DILITHIUM+SHA512
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Supported Elliptic Curves: P-256:P-521:brainpoolP512r1:brainpoolP384r1:P-384:brainpoolP256r1:secp256k1:B-571:K-571:K-409:B-409:K-283:B-283:0xFE01
Shared Elliptic curves: P-256:P-521:brainpoolP512r1:brainpoolP384r1:P-384:brainpoolP256r1:secp256k1:B-571:K-571:K-409:B-409:K-283:B-283:UNDEF
CIPHER is ECDHE-NHDH-DILM-AES256-GCM-SHA384
Secure Renegotiation IS supported

Операция выполнена! Вы успешно создали цепочку квантово-безопасных гибридных сертификатов, используя инструментарий PQC от DigiCert и движок ISARA Catalyst OpenSSL Connector.