База знаний Под капотом
Протокол и события
Что на самом деле предлагает Нимчат, для тех, кто противится этому, его аудит или чтение событий из другого клиента Nostr.
Эта страница для удобства переведена автоматически. Применяется английский оригинал.
Виды событий
| Добрый | Используется для | Примечания |
|---|---|---|
0 | Метаданные профиля | Стандартный профиль Nostr: имя, изображение, баннер, о компании, lud16. |
5 | Запросы на удаление | НИП-09. |
7 | Реакции | НИП-25, с ['k', originalKind] тег, чтобы реакция была отправлена на правильный тип канала. |
13 | Тюлень | Средний уровень сообщения NIP-17. |
14 | Слух в личных сообщениях | Без подписи и никогда не публиковался отдельно. |
1059 | Подарочная упаковка | НИП-59. Что на самом деле доходит до ретранслятора для личных сообщений и групповых чатов. |
1984 | Отчетность | НИП-56. |
9734 / 9735 | Запрос ZAP и получение ZAP | НИП-57. |
10030 | Пользовательские списки пакетов смайлов | НИП-30. |
20000 | Сообщение канала Geohash | Эфемерный, с тегами ['g', geohash]. |
23333 | Сообщение именованного канала | Эфемерный, с тегами ['d', channel]. |
24420 / 24421 | Индикаторы публичного ввода и уведомления о прочтении | Специально для Nymchat, для общедоступных каналов. |
25051 / 25052 | Одноранговая сигнализация и статус передачи файлов | Специально для нимчата. |
30030 | Пользовательские наборы смайлов | НИП-30. |
30078 | Данные приложения | НИП-78. Опросы и зашифрованные настройки синхронизируются. |
69420 | Частные уведомления о прочтении и статус доставки | Специально для Нимчата, по слухам, в подарочной упаковке. Отдельный вид от 14 намеренно, чтобы другие клиенты NIP-17 не отображали пустые прямые сообщения для каждого получения. |
НИПы, которые реализует Nymchat
| НПВ | Что это дает Нимчату |
|---|---|
| НИП-07 | Войдите с помощью расширения для браузера. |
| НИП-09 | Запросы на удаление. |
| НИП-13 | Доказательство работы. Исходящие сообщения обрабатываются как минимум до 16 бит. |
| НИП-17 | Частные прямые сообщения и основа для групповых чатов. |
| НИП-25 | Реакции. |
| НИП-30 | Пользовательские смайлы. |
| НИП-40 | Временные метки истечения срока действия — исчезающие сообщения. |
| НИП-44 | Версионное шифрование, используемое для печати, обертывания и синхронизации настроек. |
| НИП-46 | Удаленное подписание — bunker://. |
| НИП-56 | Отчетность. |
| НИП-57 | Молния сверкает. |
| НИП-59 | Подарочные упаковки. |
| НИП-78 | Произвольные данные приложения. |
| НИП-98 | HTTP-аутентификация для размещенных конечных точек. |
Криптография
| Где | Что |
|---|---|
| Личность и подписи | secp256k1 с подписями Шнорра (BIP-340), как указывает Nostr. |
| Личные сообщения и групповые чаты | NIP-44 v2: ECDH на secp256k1, HKDF-SHA256, ChaCha20 с HMAC-SHA256 и заполнение, чтобы длина зашифрованного текста не выдавала длину сообщения. |
| Сетчатые сеансы Bluetooth | Шум XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 для подписей объявлений, SHA-256 и HMAC внизу. |
| Личность в состоянии покоя | АЕС-GCM-256. Ключ поступает из PBKDF2-SHA256 при 310 000 итераций для пароля или PIN-кода или из выходных данных WebAuthn PRF через HKDF-SHA256 для ключа доступа или биометрических данных. |
| Звонки и передача файлов | Собственный DTLS-SRTP WebRTC, согласованный через сигнализацию, завернутую в NIP-17. |
| Случайность | Платформа CSPRNG повсюду — ключи, одноразовые номера и дрожание временных меток подарочной упаковки. |
Защита метаданных
Стоит обратить внимание на две детали пути подарочной упаковки, поскольку именно они представляют собой отдельный NIP-59. из "зашифровано, но явно от тебя к ним":
- Каждая упаковка подписана одноразовый ключ создано только для этого сообщения, поэтому никакие две оболочки не имеют общего отправителя.
- Каждая упаковка
created_atявляется случайным образом задним числом до двух часы используя CSPRNG, поэтому время отправки и получения не может быть выровнено.
В групповые чаты добавлена ротация эфемерных сообщений получатель клавиши сверху — см. Как работает групповое шифрование.
Криптопримитивы находятся в js/nym-crypto.js и
js/modules/key-vault.js в веб-приложении и в разделе
android-ios-app/lib/core/crypto/ и
lib/services/mesh/noise/ в приложении Flutter.
репозиторий
является AGPL-3.0 и является полным — нет закрытого компонента, которому можно было бы доверять.