есть чат между A и B , используем end-to-end шифрование
у A есть пара ключей privKeyA, pubKeyA
у B есть пара ключей privKeyB, pubKeyB
оба знают публичные ключи друг друга
и могут посылать шифрованные сообщения друг друга используя публичный ключ (RSA)
2 теперь для оптимизации мы хотим использовать AES для шифрования
A придумывает sessionKey
и посылает B и в зашифрованном виде использя для этого publicKeyB
3 теперь при посылке сообщения от A в чат мы шифруем сообщение с помощью sessionKey
encryptWithAES(message, sessionKey)
4 при добавлении-удалении любого участника в чате
каждый участник перегенирвает sessionKey
и посылает каждому участнику чата свой session key зашифрованные для него персонально
пакет с паролями выглядит как-то так от user50 для user1,user2
{ u1: encryptedWithPubKey1(u50_sessionPass), u2: encryptedWithPubKey2(u50_sessionPass)}
и каждый получатель сообщения строит маппинг из полученных пакетов с паролями
hash1 -> decrypted u50SessionKey_1
hash2 -> decrypted u50SessionKey_2
и чат сообщение от user50 на группу чата выглядит примерно так
{ text: encryptWithUser50SessionKey(plainText), sessionKey: SOME_HASH_FROM_USER50}
——————
и вот теперь вопрос,
————-
мы хотим сократить размер пересылаемых данных - SOME_HASH_FROM_USER50
и сделать так чтобы каждое сообщение зашифрованное каким-то паролем
который уже ранее присылали было легко ассоциировать с этим паролем
не зная самого пароля
5 и тут 2 метода есть - мой и коллеги
5.1 мой метод
SOME_HASH_FROM_USER50 = md5(u50SessionKey)
а если это много то почему не взять первые 8 байт этого md5
или даже взять crc64
5.2 метод коллеги
SOME_HASH_FROM_USER50 = nonce
и идея в том что мол nonce короче чем md5
и nonce может использоваться как кусочек рандома для генерации пароля (однозначной)
и у каждого юзера по использованному nonce можно однозначно сопоставить использованный пароль
------------
итак - нужен совет - что лучше 5.1 или 5.2 ?
"2 теперь для оптимизации мы хотим использовать AES для шифрования A придумывает sessionKey и посылает B и в зашифрованном виде использя для этого publicKeyB" Гениально. Очень полезно, когда нужно будет передавать очень много зашифрованных данных.
Так у тебя 2 человека в чате или может быть больше? Система с сервером или p2p?
Обсуждают сегодня