Перейти к содержимому
Вернуться в Нимчат

База знаний Под капотом

Протокол и события

Что на самом деле предлагает Нимчат, для тех, кто противится этому, его аудит или чтение событий из другого клиента 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Произвольные данные приложения.
НИП-98HTTP-аутентификация для размещенных конечных точек.

Криптография

ГдеЧто
Личность и подписи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 и является полным — нет закрытого компонента, которому можно было бы доверять.