惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
IT之家
IT之家
Cyberwarzone
Cyberwarzone
T
Troy Hunt's Blog
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
T
Threat Research - Cisco Blogs
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
G
GRAHAM CLULEY
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
博客园 - 叶小钗
Last Week in AI
Last Week in AI
C
CERT Recently Published Vulnerability Notes
The Hacker News
The Hacker News
Jina AI
Jina AI
T
Tor Project blog
V
Vulnerabilities – Threatpost
酷 壳 – CoolShell
酷 壳 – CoolShell
Spread Privacy
Spread Privacy
博客园_首页
C
Cybersecurity and Infrastructure Security Agency CISA
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Simon Willison's Weblog
Simon Willison's Weblog
Security Latest
Security Latest
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 司徒正美
V2EX - 技术
V2EX - 技术
I
Intezer
The Cloudflare Blog
Cisco Talos Blog
Cisco Talos Blog
SecWiki News
SecWiki News
博客园 - 【当耐特】
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
Lohrmann on Cybersecurity
Scott Helme
Scott Helme
Google Online Security Blog
Google Online Security Blog
量子位
The Last Watchdog
The Last Watchdog
AI
AI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Security Affairs
P
Palo Alto Networks Blog
S
Secure Thoughts
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Attack and Defense Labs
Attack and Defense Labs

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Meta 1 мая показала как они хранят ключи от ваших бэкапов WhatsApp. Разбираю архитектуру и сравниваю
Виктор · 2026-05-23 · via Все публикации подряд на Хабре

Средний

10 мин

16K

Дисклеймер: в статье несколько раз упомянут мой собственный мессенджер ONEMIX. Если такое триггерит — закройте сейчас, не обижусь. Если интересно как решают одну и ту же инженерную задачу в Meta и в команде из одного человека, поехали.

Первого мая на Engineering at Meta вышел пост «How Meta Is Strengthening End-to-End Encrypted Backups». Одиннадцатого мая продолжение про Labyrinth 1.1, реализацию для Android. Я прочитал оба, потом полез в whitepaper, потом сравнил с тем что делаю у себя, и решил написать разбор. Не пересказ маркетингового материала, а нормальный технический разбор. Что они сделали, почему именно так, где у меня болело по дороге, какие компромиссы они выбрали, какие выбрал я.

Сразу важная оговорка про что эта статья. Она не про шифрование сообщений в транзите. Signal Protocol, Double Ratchet, X3DH — всё это давно стандарт, все нормальные мессенджеры это используют. WhatsApp лицензировал Signal Protocol ещё в 2016-м. Транзит решённая задача.

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

Где была дырка

Представьте картину. Вы пишете сообщение в WhatsApp. Оно шифруется на вашем телефоне ключом, который никто кроме адресата не знает. Долетает до сервера WhatsApp в зашифрованном виде, сервер не может его прочесть. Перелетает на устройство адресата, расшифровывается там. Всё работает с 2016 года.

Дальше история становится менее красивой. Раз в сутки ваш WhatsApp делает бэкап чатов в iCloud (на iPhone) или Google Drive (на Android). И до недавнего времени этот бэкап лежал у Apple или Google в открытом виде. То есть Apple физически могла его прочитать. Google тоже могла. По запросу спецслужб любой страны эти бэкапы выдавались. Несколько громких уголовных дел в США закрывали именно так: подозреваемый общался в WhatsApp, обвинение получало бэкап из iCloud.

Получалось что E2E в мессенджере был, а на уровне всей системы не было. Потому что один из двух собеседников почти наверняка делает бэкап в облако, и через этот бэкап доступ ко всей переписке получает третья сторона.

В 2021 году Meta сделала первый заход и добавила E2E для бэкапов. Тогда же я впервые прочитал их whitepaper и подумал что у них там какие-то странные ребята, половину деталей оставили на потом, ключевой компонент (HSM-флот) описан в три абзаца, ничего не понятно. Пять лет ждал нормального разбора.

Дождался. В мае 2026-го Meta опубликовала наконец полную картину и заодно сделала следующий шаг: over-the-air распространение публичных ключей флота и независимая аудируемость через Cloudflare. Идём разбираться.

Базовая модель угроз

Прежде чем лезть в архитектуру, нужно понять что именно мы защищаем. От кого защищаем отдельный вопрос, и тут есть несколько ролей.

Сам пользователь. Он хочет иметь доступ к своему бэкапу после смены устройства. Если он забыл пароль, должен быть способ восстановить. Но восстановление не должно быть таким простым чтобы им мог воспользоваться кто-то другой.

Облачный провайдер. Apple iCloud, Google Drive. Они хранят зашифрованный блоб бэкапа физически. Угроза от них в том что они могут попытаться расшифровать. Если у них в руках только зашифрованный блоб без ключа, они бессильны.

Сама Meta. Ключевая роль во всей конструкции. Meta управляет инфраструктурой проверки ключей. Если архитектура построена так, что Meta может одна, без участия пользователя, восстановить ключ, значит Meta может всё. Это плохая модель. Хорошая модель: Meta управляет инфраструктурой, но даже сама не может расшифровать без знания пароля пользователя.

Государство. Самая неудобная роль для проектировщика системы. Государство может прийти к Meta с ордером и потребовать выдать ключ. Если Meta может выдать, значит выдаст рано или поздно. Если Meta физически не может, требование становится бессмысленным.

Внутренний инсайдер. Сотрудник Meta с админскими правами. Может ли он один украсть ключи? Может ли группа из нескольких? Этот вектор всегда недооценивают.

Цель архитектуры построить систему, в которой ключ бэкапа знают только две стороны: пользователь и HSM-флот. Причём HSM-флот должен быть устроен так, что даже сама Meta как организация не может его заставить выдать ключ без участия пользователя.

Сделать такую систему сложно. Meta построила её на трёх компонентах: HSM-флот как распределённый кворум, протокол OPAQUE для регистрации и проверки пароля без раскрытия, и независимый аудит через Cloudflare. Дальше по каждому компоненту.

HSM-флот: почему один не годится

HSM это Hardware Security Module. Железяка, которая внутри умеет хранить криптографические ключи и выполнять операции с ними, но не отдаёт ключи наружу никогда. Даже физический доступ к плате не даёт прочитать ключ. Внутри обычно есть антитамперинг: если попытаться вскрыть, ключи самоуничтожатся.

Один HSM сильно, но недостаточно. Есть несколько проблем. Первая, HSM может физически сломаться. Если в нём сидит ключ от бэкапа десятка миллионов человек и он сгорел, это очень плохой день. Вторая, один HSM это одна точка отказа и одна точка взлома. Если кто-то получит физический доступ и каким-то экзотическим способом снимет ключи (теоретически возможно через побочные каналы, термическую атаку и так далее), он получит всё.

Поэтому Meta использует не один HSM, а флот. Географически распределённый по нескольким дата-центрам. Реплицируется операция по majority-consensus, то есть для подтверждения операции нужно согласие большинства узлов флота. Это даёт две гарантии. Отказ нескольких узлов не валит сервис. И чтобы взломать ключ, надо одновременно скомпрометировать большинство географически разнесённых узлов, что несоизмеримо сложнее чем один.

Каждый узел флота имеет свою пару ключей. Публичная часть пары используется клиентом WhatsApp для установки защищённой сессии. Приватная часть никогда не покидает HSM.

Здесь возникает закономерный вопрос. Как клиент WhatsApp знает что он разговаривает именно с легитимным HSM-флотом Meta, а не с подставным сервером? В WhatsApp это решено лобовым способом: публичные ключи флота захардкожены в код приложения. Обновили флот, обновили приложение, выпустили апдейт через стор. Работает.

Но для Messenger такой подход не подошёл. Messenger меняет флоты HSM чаще, чем выпускаются апдейты приложения. Поэтому в мае 2026 Meta представила механизм OTA-распространения публичных ключей флота. И вот тут вступает Cloudflare.

Cloudflare как независимый свидетель

Когда клиент Messenger подключается к HSM-флоту, флот возвращает свой публичный ключ в составе так называемого validation bundle. Этот bundle подписан Cloudflare и контрсайнен самой Meta.

Зачем тут Cloudflare. Если бы bundle подписывала только Meta, то Meta могла бы по своему желанию выпустить bundle с подставным ключом и подсунуть его пользователю. Пользователь установил бы защищённую сессию с подставным HSM, который на самом деле принадлежит Meta или государству, и слил бы свой пароль.

Cloudflare в этой схеме играет роль независимого свидетеля. Она независимо валидирует что ключ принадлежит легитимному развёртыванию, подписывает bundle и ведёт публичный audit log всех выпущенных bundle. Любой исследователь может зайти и проверить какие именно ключи были выпущены и не было ли подмены.

Архитектурный приём здесь любопытный. Он не делает Meta доверенной стороной. Он добавляет вторую сторону, у которой нет особых причин сговориться с Meta для подмены. Аудит лог открыт, любой может смотреть, подмена будет видна.

Слабое место у схемы тоже есть, и это сама Cloudflare. Если Cloudflare скомпрометируют или принудят к сотрудничеству, всё ломается. Cloudflare американская компания, и в случае национальной безопасности она тоже подчиняется тем же субпоенам что и Meta. То есть архитектура защищает от обычного гражданского запроса и от ситуации когда Meta хочет подсмотреть. От FISA-warrant она защищает уже не до конца.

OPAQUE: пароль которого никто не знает

Самая красивая часть всей системы.

Задача такая. Пользователь хочет защитить свой бэкап паролем. Пароль он будет помнить в голове. При восстановлении на новом устройстве он введёт пароль и должен получить ключ от бэкапа. Сервер должен проверить что пароль правильный.

Простое решение: сервер хранит хеш пароля, при вводе сравнивает, если совпало, выдаёт ключ. Плохое решение. Если сервер скомпрометирован, утечёт хеш, и его можно брутфорсить оффлайн. Если сервер недобросовестный, он может однажды просто отдать ключ без проверки.

OPAQUE решает обе проблемы. Это асимметричный протокол парольной аутентификации, разработанный в академии в 2018 году и стандартизированный IETF в 2024. Идея простая на пальцах. Пользователь и сервер выполняют криптографический обмен, в результате которого сервер математически проверяет знание пользователем пароля, но сам пароль никогда не видит и не хранит. Даже хеш не хранит в обычном смысле.

В архитектуре Meta это работает так. При первичной настройке бэкапа клиент генерирует 256-битный ключ через CSPRNG. Этот ключ нужно где-то сохранить так, чтобы потом можно было восстановить только через знание пароля. Клиент запускает OPAQUE-регистрацию с HSM-флотом: вводится пароль, генерируются эфемерные значения, в HSM сохраняется специальная запись, привязанная к устройству. Сам пароль уходит в небытие, клиент его не передаёт открыто, HSM не видит.

При восстановлении на новом устройстве запускается OPAQUE-аутентификация. Клиент доказывает HSM знание пароля без раскрытия. HSM убеждается в правильности доказательства и выдаёт ключ. Если пароль неправильный, доказательство не сходится, ключ не выдаётся. Брутфорсить по сети нельзя, потому что HSM считает попытки и блокирует.

Дальше нюанс. Даже если кто-то получит полный дамп памяти HSM (что почти невозможно, но допустим), он не получит из него пароля и не сможет восстановить ключи без проведения OPAQUE-обмена с легитимной парой ключей. Атакующий получит мёртвый материал, из которого без знания пароля ничего не вытащишь.

OPAQUE, на мой вкус, одна из самых красивых вещей в прикладной криптографии последних десяти лет. Если хочется глубже, оригинальная статья называется «OPAQUE: An Asymmetric PAKE Protocol Secure Against Pre-Computation Attacks», авторы Jarecki, Krawczyk, Xu, 2018 год. Стандартизация RFC 9807, август 2024.

Что Meta не показала

Критическая часть. Без неё это пресс-релиз, а не разбор.

Первое. Whitepaper описывает протокол, но не описывает физическую безопасность дата-центров где стоят HSM. Это понятно, такая информация закрытая и должна оставаться закрытой. Но это означает что внутренний инсайдер с физическим доступом всё-таки потенциально может что-то сделать. Сколько человек могут пройти к HSM, какие там процедуры разделения обязанностей, мы не знаем.

Второе. Cloudflare как точка независимости работает только если Cloudflare действительно независима. Если завтра окажется что у CEO Meta и CEO Cloudflare есть приватные договорённости, или обе компании одновременно получат секретный приказ от FBI, схема не сработает. Это неустранимая слабость любой архитектуры с двумя американскими корпорациями.

Третье. Модель «пароль защищает ключ» имеет фундаментальный потолок. Если пользователь поставит пароль «1234», никакая криптография ему не поможет. HSM конечно блокирует брутфорс по сети, но если пароль слабый и атакующий каким-то образом получил оффлайн-копию OPAQUE-записи (через инсайдера, через эксплойт в HSM), он может попробовать словарь. Защита здесь больше про процедурные ограничения чем про криптостойкость.

Четвёртое, и это даже не критика. Архитектура Meta очень дорогая. HSM-флоты в нескольких дата-центрах, интеграция с Cloudflare, аудиты, whitepaper, постоянная команда криптографов. Это всё стоит десятков миллионов долларов в год. Для крупной корпорации с миллиардом пользователей окупается. Для соло-разработчика или маленькой команды нерешаемо в лоб.

Вот к этому моменту имеет смысл перейти к тому как ту же задачу решаю я.

Как это устроено в ONEMIX

Несколько вводных. ONEMIX это мессенджер который я пишу как соло-разработчик. React Native клиент, FastAPI бэкенд, E2E через Double Ratchet, голосовые и видеозвонки через WebRTC плюс LiveKit. Я не Meta. У меня нет миллионов долларов на HSM-флоты в Чикаго, Дублине и Сингапуре с majority-consensus replication. У меня есть один арендованный сервер и в перспективе один физический сервер в России.

Поэтому моя архитектура бэкапов строится на другом базовом принципе. Не «мы хорошо защищаем серверный ключ», а «у нас нет серверного ключа». Это называется server-blind architecture, и компромиссы там ровно противоположные.

Конкретно. Бэкап шифруется на устройстве пользователя 256-битным ключом, сгенерированным локально. Ключ никуда не отправляется. Совсем никуда: ни на сервер, ни в третью сторону. Шифрованный блоб бэкапа уходит на сервер без ключа. Сервер видит только зашифрованную кучу байт и физически не может с ней ничего сделать.

Восстановление работает через recovery phrase. 24 слова BIP-39, как в криптокошельках. Пользователь сохраняет себе эту фразу при первой настройке. На новом устройстве вводит её обратно, из неё через PBKDF2 + HKDF получается тот же 256-битный ключ, которым расшифровывается бэкап с сервера.

У подхода есть очевидное преимущество и не менее очевидный недостаток. С преимуществом всё ясно: я как оператор сервиса не могу прочитать ничьи сообщения, потому что у меня нет ничего что можно было бы пытать. Государство не может прийти ко мне с ордером и потребовать выдать ключи. Мне нечего выдавать. OPAQUE-протокол не нужен, потому что нечего проверять. HSM не нужен, потому что нечего хранить.

Недостаток в том, что если пользователь потерял recovery phrase, всё. Никакого восстановления через секретный вопрос, никакого «забыли пароль, ответьте про девичью фамилию матери», никакого реквеста в саппорт. Чаты умерли вместе с фразой.

Так задумано. У Meta выбран один компромисс: пользователь может восстановиться через пароль, но цена этого сложная инфраструктура из HSM и Cloudflare плюс неустранимое теоретическое доверие к американской юрисдикции. У меня выбран другой: пользователь сам отвечает за свои ключи, но взамен получает реальную, не зависящую от моего поведения, гарантию приватности.

Какой подход правильнее, зависит от модели угроз пользователя. Для миллиарда обычных людей которые путают пароль от почты с PIN-кодом от карты, подход Meta лучше. Они физически не управятся с recovery phrase. Для аудитории которой нужна максимальная гарантия, подход ONEMIX лучше, потому что там нет третьей стороны которой нужно доверять.

Я честно говорю обоим типам пользователей: если вам нужен мессенджер для обычной жизни с быстрым восстановлением, оставайтесь в WhatsApp, у них хорошо. Если нужен мессенджер для разговоров которые точно не должны попасть в чужие руки, и вы готовы сами хранить 24 слова, onemix.me.

Что из этого можно унести домой

Я выписал для себя несколько технических наблюдений после чтения whitepapers и сравнения со своим кодом.

OPAQUE стоит внимания. Если вы строите любую систему где пользователь должен иметь возможность восстановить какой-то секрет через пароль, и при этом сервер не должен видеть пароль, посмотрите на OPAQUE. RFC 9807 короткий, libopaque есть для нескольких языков. Я для своих внутренних кейсов планирую интегрировать его в админку, чтобы перестать хранить хеши паролей от админок целиком.

Архитектура с независимым свидетелем через Cloudflare сильный приём. Cloudflare изначально не претендует на роль независимой сертифицирующей стороны, но фактически становится ей. Этот паттерн можно использовать в любой системе где две стороны не доверяют друг другу полностью. Добавьте третью сторону у которой нет интереса сговариваться, и схема становится сильно крепче. Я думаю про похожее для своего сервера ключей — пока не реализовано, но направление понятное.

HSM не только для финтеха. В моей картине мира HSM до недавнего времени ассоциировались только с банковским процессингом и сертификатными центрами. Meta показывает что для мессенджеров с миллиардом пользователей это тоже разумный компромисс. Для меньших масштабов есть software-HSM, например SoftHSM, который даёт часть тех же гарантий без капитальных затрат на железо.

Server-blind как альтернатива. Если вы можете позволить себе сказать пользователю «храни свой recovery phrase сам», можно построить систему которая фундаментально проще и фундаментально безопаснее любого HSM-flow. Подходит не всем. Bitcoin, MetaMask, Session устроены именно так.

И главное. E2E в транзите без E2E в бэкапе это половина решения. Если у вас Double Ratchet работает идеально, но бэкап едет в облачное хранилище в открытом виде, ваш E2E работает только для участка между двумя телефонами. На флангах протекает. К бэкапу и хранилищу нужно относиться с тем же уровнем серьёзности что и к транзиту, иначе вся работа над транзитной криптографией обнуляется.

Сам пост Meta короткий, но whitepaper по ссылке стоит того чтобы потратить вечер. Особенно если вы строите что-то своё в области приватности и безопасной коммуникации.

Я строю уже год с лишним. У себя на Хабре пишу разборы по отдельным кускам ONEMIX (Double Ratchet, кеш сообщений, выбор стека для звонков), и это, в общем, такой же открытый whitepaper в рассрочку, как у Meta, только сильно меньше. На вопросы в комментах отвечу, на критику криптографов реагирую с интересом.