База знань Під капотом
Протокол і заходи
Що Nymchat насправді ставить на дріт, для тих, хто будує проти нього, його аудит або читання подій з іншого клієнта 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 | Однорангова сигналізація та стан передачі файлів | 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 mesh | Noise 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 і завершено — немає жодного закритого компонента, якому можна довіряти.