Я использую технику, заимствованную из книги Брюса Шнайера и Нильса Фергюсона, под названием Практическая криптография .По сути, это сводится к следующему:
Боб делает это:
pubk_A = открытый ключ Алисы
entropy = байты криптографического качества PRNG
encrypted_entropy = RSA_Encrypt pubk_A (энтропия)
hashed_entropy = SHA2-512 (энтропия)
encrypt_key BA = hashed_entropy [0:32]
encrypt_nonce BA = hashed_entropy [32:48]
hmac_key BA = hashed_entropy [48:64]
Боб затем отправляет encrypted_entropy Алисе.
Затем Алиса делает это:
privk_A = закрытый ключ Алисы
entropy = RSA_Decrypt privk_A (encrypted_entropy)
hashed_entropy = SHA2-512 (entropy)
encrypt_key BA = hashed_entropy [0:32]
encrypt_nonce BA = hashed_entropy [32:48]
hmac_key BA = hashed_entropy [48:64]
Это прекрасно работает для генерации ключей, которыеможет быть использованобщаться от Боба до Алисы.Но мне нужны ключи, которые я могу использовать в обоих направлениях.Я думал об изменении алгоритма следующим образом:
Боб делает это с энтропией:
pubk_B = открытый ключ Боба
hashed_entropy BA = SHA2-512 ( SHA2-256 (pubk_A) + энтропия
encrypt_key BA = hashed_entropy [0:32]
encrypt_nonce BA = hashed_entropy [32:48]
hmac_key BA = hashed_entropy [48:64]
hashed_entropy AB = SHA2-512 ( SHA2-256 (pubk_B) + энтропия
encrypt_key AB = hashed_entropy [0:32]
encrypt_nonce AB = hashed_entropy [32:48]
hmac_key AB = hashed_entropy [48:64]
Алиса может сделать то же самое на своей стороне после получения энтропии путем расшифровкиencrypted_entropy.
Как видите, теперь есть два набора ключей: один используется для связи от Боба к Алисе, а другой для связи от Алисы к Бобу.
Есть личто-то не так сэто что?Какие риски безопасности я принимаю?Является ли безопасность системы меньшей или большей, чем если бы у меня просто была небольшая настройка одной стороны?Есть ли лучший способ справиться с этой проблемой без добавления циклов?