Вычисление общего секрета
Это заключительный и самый важный шаг. Здесь обе стороны будут использовать свой собственный закрытый ключ и открытый ключ другой стороны для независимого вычисления общего секрета. Если протокол успешен, они обе получат абсолютно одинаковое секретное значение.
Сначала вычислим общий секрет с точки зрения Стороны А. Сторона А использует свой закрытый ключ (a_private_key.pem) и открытый ключ Стороны Б (b_public_key.pem).
Выполните следующую команду:
openssl pkeyutl -derive -inkey a_private_key.pem -peerkey b_public_key.pem -out a_shared_secret.bin
pkeyutl: Утилита для выполнения операций с открытыми ключами.
-derive: Это действие указывает утилите вывести общий секрет.
-inkey a_private_key.pem: Указывает собственный закрытый ключ Стороны А.
-peerkey b_public_key.pem: Указывает открытый ключ другой стороны (собеседника, "peer").
-out a_shared_secret.bin: Сохраняет полученный бинарный секрет в файл.
Далее вычислим общий секрет с точки зрения Стороны Б. Сторона Б использует свой закрытый ключ (b_private_key.pem) и открытый ключ Стороны А (a_public_key.pem).
Выполните следующую команду:
openssl pkeyutl -derive -inkey b_private_key.pem -peerkey a_public_key.pem -out b_shared_secret.bin
Теперь у вас есть два файла: a_shared_secret.bin и b_shared_secret.bin. Чтобы проверить успешность обмена ключами, эти два файла должны быть идентичны. Вы можете использовать команду cmp (compare) для проверки этого.
cmp a_shared_secret.bin b_shared_secret.bin
Если файлы идентичны, эта команда не выдаст никакого вывода и завершится тихо. Эта тишина означает успех!
Для более наглядного подтверждения вы также можете вычислить криптографический хеш обоих файлов. Хеши должны совпадать.
sha256sum *.bin
Вы должны увидеть вывод, где оба файла имеют абсолютно одинаковый хеш SHA256. Фактические значения хешей будут различаться при каждом запуске, но они должны быть идентичными для обоих файлов:
e3705a4ab5ae5d86f59dfe968f0177b49d5144e2d731dbd8d41b2eda318412ec a_shared_secret.bin
e3705a4ab5ae5d86f59dfe968f0177b49d5144e2d731dbd8d41b2eda318412ec b_shared_secret.bin
(Примечание: Ваши значения хешей будут отличаться от этого примера, но важно то, что хеши для a_shared_secret.bin и b_shared_secret.bin должны быть идентичными, что доказывает, что обе стороны вывели один и тот же общий секрет.)
Поздравляем, вы успешно выполнили обмен ключами Диффи-Хеллмана!