]> Sergey Matveev's repositories - stargrave-blog.git/commitdiff
Добавил аутентифицированное шифрование на основе публичных ключей
authorSergey Matveev <stargrave@stargrave.org>
Mon, 21 Apr 2025 15:45:11 +0000 (18:45 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 21 Apr 2025 15:45:11 +0000 (18:45 +0300)
http://www.keks.cypherpunks.su/Authcrypt.html
Аутентификация отправителя зашифрованного сообщения без подписи мало кем
предоставляется. Ни в CMS, ни в PGP такого нету например. А было бы
полезно: может работать быстрее, нет non-repudiability свойства, которое
кому-то может не нравится.

По идее, достаточно просто сделать ещё один DH между статическими
ключами (DH(s,s)), а не только один DH(e,s). Засада в том, что у меня
не-ГОСТовые KEM-ы -- гибридные, из традиционных и постквантовых
алгоритмов. А PQC KEM-ы не предоставляют API которым бы можно было
выполнить аналог DH(s,s). Поэтому решил его делать без участия PQC, ведь
это не повлияет на конфиденциальность, только аутентификацию, причём
deniable/repudiable. Результат просто подмешивается HKDF-ом.

Но это всё просто. А вот в чём настоящая засада, так это проблема
нескольких получателей. Дешифровать сообщение может каждый из
получателей. Соответственно и перешифровать сообщение, так как CEK
ключ же один на всех.

Начитался про всякие message franking, про key commitment (снова), про
committing AEAD и ccAEAD (compactly committing). Многие статьи и люди в
рассылках предлагают использовать ccAEAD, commitment которого использовать
в KDF при шифровании CEK-а. Всё это красиво, да, но не применимо к тому
как KEKS/CM шифрует: потоково, разделяя на независимые 128KiB блоки.

В итоге остановился на практически простейшем решении, как это также
сделали и в Saltpack (f9e33af95af9179a24c5539e9e9661d60d0a3c0b).
Добавлять MAC над хэшом от шифротекста для каждого получателя по
отдельности. Хэш от шифротекста -- чтобы один раз его можно было дорого
посчитать, а MAC уже делать над короткой строкой, чисто оптимизация.

Пока всего этого ещё нет в коде, но хотя бы практически поставлена точка
над этой единственной оставшейся задачей. Месяцами время от времени
обдумывал и прикидывал всякие за и против.


No differences found