tls sasl
This commit is contained in:
1 parent
e3fcee3351
commit
d4b4c92759
29 files changed
+2177
-61
No files matched your search
+31
-7
@@ -12,14 +12,28 @@
|
||||
разблокировка возможна по Face ID/Touch ID.
|
||||
- Пароль для SCRAM нормализуется по RFC 4013 (SASLprep), чтобы совпадать с
|
||||
серверной нормализацией; для PLAIN пароль отправляется как введён.
|
||||
- SCRAM доступен в вариантах SHA-512 (предпочтительный, реализация Luma),
|
||||
SHA-256 и SHA-1 (Martin); механизм выбирается по рекламе сервера.
|
||||
- SCRAM доступен в вариантах SHA-512, SHA-256 и SHA-1 (SHA-512 —
|
||||
реализация Luma), а также в PLUS-вариантах с канальной привязкой
|
||||
(SCRAM-SHA-512-PLUS > SHA-256-PLUS > SHA-1-PLUS): gs2-заголовок
|
||||
«p=tls-exporter,» (RFC 9266) или «p=tls-server-end-point,» доказывает,
|
||||
что SASL-обмен идёт по тому же TLS-каналу, который видит клиент, и
|
||||
ломает MITM-ретрансляцию. PLUS выбирается только когда сервер
|
||||
рекламирует соответствующий channel-binding тип, иначе — обычный SCRAM;
|
||||
механизм выбирается по рекламе сервера.
|
||||
- OMEMO работает в legacy-неймспейсе `eu.siacs.conversations.axolotl` (так
|
||||
умеет закреплённая версия MartinOMEMO); сообщения OMEMO 2
|
||||
(`urn:xmpp:omemo:2`) показываются как нерасшифрованные, а не пустые.
|
||||
- Канал шифруется STARTTLS/direct TLS через SecureTransport с уровнем
|
||||
`negotiatedSSL` (исключает TLS ниже 1.2) и ALPN «xmpp-client»; на системах
|
||||
с поддержкой SecureTransport договаривается TLS 1.3.
|
||||
умеет закреплённая версия MartinOMEMO) и в OMEMO 2 (`urn:xmpp:omemo:2`,
|
||||
payload AES-256-CBC + HMAC-SHA-256 в конверте SCE `urn:xmpp:sce:0`). Luma
|
||||
публикует omemo:2 bundle и список устройств, делит Double Ratchet-сессии с
|
||||
legacy-модулем и помечает протокол каждого ключа на экране шифрования.
|
||||
- Канал шифруется STARTTLS/direct TLS собственным TLS-процессором Luma на
|
||||
OpenSSL 3 (SecureTransport ограничивает потоковый TLS версией 1.2 и не
|
||||
имеет keying exporter): минимум TLS 1.2, максимум TLS 1.3, ALPN
|
||||
«xmpp-client», SNI по домену XMPP. Сертификат проверяется через
|
||||
SecTrust с серверной политикой домена из JID (та же логика
|
||||
CertificateTrustEvaluator). Фактическая версия TLS, шифр и выбранный
|
||||
SASL-механизм (самый стойкий из рекламируемых сервером, с канальной
|
||||
привязкой при её доступности) показываются на экране информации о
|
||||
сервере.
|
||||
- Когда OMEMO включено глобально или для конкретного чата, исходящие сообщения
|
||||
не откатываются на plaintext при ошибке: ошибка показывается пользователю.
|
||||
- Пользователь может осознанно отключить OMEMO глобально или для отдельного
|
||||
@@ -65,6 +79,16 @@
|
||||
- На iOS файл OMEMO-состояния и база локальной истории (SwiftData
|
||||
`.store`) получают data-protection `completeUntilFirstUserAuthentication`.
|
||||
|
||||
- Архивные эхо собственных служебных станз (receipts, chat markers,
|
||||
повторно доставленные копии) и собственные сообщения, которые невозможно
|
||||
расшифровать обратно (нет encrypt-to-self ключа или self-сессия устарела),
|
||||
не превращаются в пузыри «Не удалось расшифровать сообщение»: они
|
||||
отбрасываются, как это делают другие клиенты, чтобы не засорять историю
|
||||
фантомами, которых нет в виде сообщений на сервере.
|
||||
- Сохранение медиа выполняется только по явному действию пользователя:
|
||||
фото/видео/видеосообщения — в медиатеку, файлы и голосовые — в «Файлы»
|
||||
(Загрузки). Расшифрованное содержимое при этом покидает sandbox приложения.
|
||||
|
||||
## Известные ограничения
|
||||
|
||||
- На macOS история (SwiftData SQLite в Application Support) и OMEMO state
|
||||
|
||||
Reference in new issue
Block a user