Как работает шифрование Double Ratchet (простым языком)
Простое объяснение алгоритма Double Ratchet - движка прямой секретности в PrivaMesh и Signal - без криптографического образования.
Если вы когда-нибудь думали, как приложения вроде PrivaMesh и Signal обещают, что украденный ключ не откроет ваши старые сообщения, ответ - алгоритм под названием Double Ratchet. Звучит сложно. На деле нет. Вот как он работает, без единой формулы.
Какую проблему он решает
Представьте двух людей, Ана и Бен, которые шифруют сообщения одним общим ключом. Это работает - пока ключ не утечёт. Как только злоумышленник его получит, все сообщения, отправленные этим ключом, становятся читаемыми - и прошлые, и будущие. Один ключ на всю переписку - это одна очень заманчивая цель.
Нам нужны две более сильные гарантии:
- Прямая секретность - если сегодняшний ключ утёк, вчерашние сообщения остаются закрытыми.
- Защита после компрометации - если злоумышленник ненадолго проник, система восстанавливается и снова его отсекает.
Double Ratchet даёт обе, никогда не переиспользуя ключ. У каждого сообщения свой.
Что значит «храповик» (ratchet)
Храповик - деталь, которая крутится только в одну сторону, назад не идёт. В криптографии храповик - это функция, которая берёт ключ, выдаёт следующий и делает невозможным обратный ход. Как только вы шагнули вперёд, старый ключ исчез и не восстанавливается. Это одностороннее свойство - и есть весь фокус: удали использованный ключ, и даже вы сами его не вернёте, а значит и злоумышленник тоже.
Два храповика
«Double» - потому что крутятся два храповика вместе.
1. Симметричный храповик
Каждый раз, когда вы отправляете сообщение, быстрая односторонняя функция (на HKDF и HMAC-SHA256) щёлкает храповиком один раз и выдаёт свежий ключ сообщения. Вы шифруете им, затем выбрасываете. Следующее сообщение снова щёлкает храповиком - новый ключ. Сообщение один и сообщение два зашифрованы совершенно несвязанными ключами.
2. Диффи-Хеллман храповик
Один симметричный храповик не умеет восстанавливаться после компрометации - если кто-то узнал его состояние, он может следовать дальше. Поэтому второй храповик подмешивает свежую случайность. Каждый раз, когда разговор меняет направление (Ана отвечает, потом Бен отвечает), устройства выполняют новый обмен ключами Диффи-Хеллмана на Curve25519 и вплетают результат в цепочку. Именно эта инъекция нового секрета выбрасывает злоумышленника: ему нужен новый приватный ключ, который никогда не покидал устройство.
Собираем вместе
Разговор выглядит так: в пределах хода одного человека симметричный храповик щёлкает на каждое сообщение. Когда ход переходит, Диффи-Хеллман храповик щёлкает и пересевает всё заново. Ключи рождаются, используются один раз и постоянно уничтожаются. Мастер-ключа, который лежал бы и ждал кражи, не существует.
Почему PrivaMesh его сохраняет
Некоторые децентрализованные мессенджеры отказались от храповика ради простоты маршрутизации. PrivaMesh намеренно его оставил. Поскольку у PrivaMesh нет серверов, а сообщения живут как зашифрованные блобы на Solana, сильные ключи на каждое сообщение важны ещё больше - шифротекст публичен, поэтому шифрование вокруг него должно быть безупречным. Double Ratchet сочетается с AES-256-GCM для запечатывания нагрузки и дополнением сообщений для скрытия длины.
Одна честная оговорка
У прямой секретности есть цена, и её стоит назвать прямо: поскольку использованные ключи уничтожаются, старые сообщения нельзя восстановить - ни злоумышленнику, ни вам. Восстановите seed-фразу на новом телефоне - и вернёте средства и личность, но не историю переписки. Это не баг. Это гарантия, работающая ровно так, как задумано. В мире серверов, которые хранят всё вечно, мессенджер, который по-настоящему забывает, - редкая и ценная вещь.