Pycryptodome Создание взаимно сгенерированного ключа сеанса

Использование pyCryptodome для генерации ключа сеанса между клиентом и сервером для зашифрованного приложения чата. Ключ сеанса генерируется взаимно, используя открытый и закрытый ключи RSA. Сообщения чата затем должны быть зашифрованы с использованием AES с ключом сеанса.

Ключ сеанса состоит из случайного 16-байтового значения как от клиента, так и от сервера, которые добавляются и хешируются вместе.

Я успешно отправил случайный 16-байтовый клиент (PassA), который подписан закрытым ключом клиента и зашифрован открытым ключом сервера, как в протоколе:

{PassA, {H (PassA) privKeyA }}pubKeyB

я использую pkcs1_15.new(clientPrivateKey) чтобы подписать случайные байты, где ключ клиента генерируется: RSA.generate(2048), Затем значение со знаком добавляется к значению случайных байтов в виде открытого текста, и все это шифруется с помощью PKCS1_OAEP.new(serverPublicKey) объект, где ключ сервера генерируется RSA.generate(4096),

У меня проблема в том, что, когда я пытаюсь сделать обратное (отправка случайных 16 байтов с сервера на клиент), я получаю сообщение об ошибке:

Открытый текст слишком длинный.

Причина этого заключается в функции шифрования RSA, которая может принимать только значение:

не длиннее, чем модуль RSA (в байтах) минус 2, минус удвоенный размер выходного хэша.

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

Есть ли решение этой проблемы?

0 ответов

Другие вопросы по тегам