Перейти до вмісту
Назад до Німчату

База знань Під капотом

Протокол і заходи

Що Nymchat насправді ставить на дріт, для тих, хто будує проти нього, його аудит або читання подій з іншого клієнта Nostr.

Види подій

ДобрийВикористовується дляПримітки
0Метадані профілюСтандартний профіль Nostr: ім'я, зображення, банер, інформація, lud16.
5Запити на видаленняНІП-09.
7реакціїНІП-25, з а ['k', originalKind] тег, щоб реакція була подана проти потрібного типу каналу.
13ПечаткаСередній рівень повідомлення NIP-17.
14Чутка про приватне повідомленняБез підпису та ніколи не публікувався самостійно.
1059Подарункова упаковкаНІП-59. Що насправді досягає реле для особистих повідомлень і групових чатів.
1984ЗвітністьНІП-56.
9734 / 9735Zap-запит і zap-квитанціяНІП-57.
10030Спеціальні списки наборів емодзіНІП-30.
20000Повідомлення каналу GeohashЕфемерні, помічені ['g', geohash].
23333Повідомлення з іменованим каналомЕфемерні, помічені ['d', channel].
24420 / 24421Індикатори публічного введення тексту та сповіщення про прочитанняСпеціально для Nymchat, для публічних каналів.
25051 / 25052Однорангова сигналізація та стан передачі файлівNymchat-конкретний.
30030Спеціальні набори емодзіНІП-30.
30078Дані програмиНІП-78. Синхронізація опитувань і зашифрованих налаштувань.
69420Приватні сповіщення про прочитання та статус доставкиСпецифічно для Німчат, у подарунковій упаковці як чутка. Окремий вид від 14 свідомо, тому інші клієнти NIP-17 не відтворюють порожні прямі повідомлення для кожної квитанції.

NIPs Nymchat реалізує

NIPЩо це дає Німчат
НІП-07Увійдіть за допомогою розширення браузера.
НІП-09Запити на видалення.
НІП-13Підтвердження роботи. Вихідні повідомлення видобуто принаймні до 16 біт.
НІП-17Приватні прямі повідомлення та основа для групових чатів.
НІП-25реакції.
НІП-30Власні емодзі.
НІП-40Позначки терміну дії — зникнення повідомлень.
НІП-44Версійне шифрування, яке використовується для запечатувань, обгорток і синхронізації налаштувань.
НІП-46Віддалений підпис — bunker://.
НІП-56Звітність.
НІП-57Блискавка.
НІП-59Подарункові упаковки.
НІП-78Довільні прикладні дані.
НІП-98Аутентифікація HTTP для розміщених кінцевих точок.

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

ДеЩо
Посвідчення особи та підписиsecp256k1 із підписами Schnorr (BIP-340), як вказує Nostr.
Приватні повідомлення та групові чатиNIP-44 v2: ECDH на secp256k1, HKDF-SHA256, ChaCha20 з HMAC-SHA256 і доповнення, щоб довжина зашифрованого тексту не вплинула на довжину повідомлення.
Сесії Bluetooth meshNoise XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 для підписів оголошень, SHA-256 і HMAC під ними.
Ідентичність у спокоїAES-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. The сховище є AGPL-3.0 і завершено — немає жодного закритого компонента, якому можна довіряти.