База знания Под капака
Протокол и събития
Това, което Nymchat всъщност поставя на кабела, за всеки, който строи срещу него, одитиране или четене на събития от друг клиент на Nostr.
Тази страница е машинно преведена за удобство. Английският оригинал е версията, която се прилага.
Видове събития
| Любезен | Използва се за | Бележки |
|---|---|---|
0 | Метаданни на профила | Стандартен Nostr профил: име, снимка, банер, информация, lud16. |
5 | Искания за изтриване | NIP-09. |
7 | Реакции | NIP-25, с a ['k', originalKind] етикет, така че да се подаде реакция срещу правилния тип канал. |
13 | Печат | Средният слой на съобщение NIP-17. |
14 | Слух за лично съобщение | Неподписано и никога не публикувано самостоятелно. |
1059 | Подаръчна опаковка | NIP-59. Какво всъщност достига реле за лични съобщения и групови чатове. |
1984 | Докладване | NIP-56. |
9734 / 9735 | Zap заявка и zap разписка | NIP-57. |
10030 | Персонализирани списъци с пакети с емотикони | NIP-30. |
20000 | Съобщение на Geohash канал | Ефимерно, маркирано ['g', geohash]. |
23333 | Съобщение за именуван канал | Ефимерно, маркирано ['d', channel]. |
24420 / 24421 | Публични индикатори за въвеждане и разписки за четене | Специфично за Nymchat, за обществени канали. |
25051 / 25052 | Peer-to-peer сигнализиране и състояние на прехвърляне на файлове | Специфично за Нимчат. |
30030 | Персонализирани комплекти емотикони | NIP-30. |
30078 | Данни за приложението | NIP-78. Синхронизиране на анкети и криптирани настройки. |
69420 | Частни разписки за четене и състояние на доставка | Специфично за Nymchat, носено като слух в подаръчна опаковка. Отделен вид от 14 умишлено, така че други клиенти на NIP-17 да не изобразяват празни директни съобщения за всяка разписка. |
NIPs Nymchat изпълнява
| NIP | Какво дава Nymchat |
|---|---|
| NIP-07 | Влезте с разширение за браузър. |
| NIP-09 | Искания за изтриване. |
| NIP-13 | Доказателство за работа. Изходящите съобщения се копаят до поне 16 бита. |
| NIP-17 | Лични директни съобщения и основа за групови чатове. |
| NIP-25 | Реакции. |
| NIP-30 | Персонализирани емотикони. |
| НИП-40 | Времеви клейма за изтичане — изчезващи съобщения. |
| NIP-44 | Криптиране с версии, използвано за печати, обвивки и синхронизиране на настройките. |
| NIP-46 | Дистанционно подписване — bunker://. |
| NIP-56 | Докладване. |
| NIP-57 | Светкавични удари. |
| NIP-59 | Опаковки за подаръци. |
| NIP-78 | Произволни данни за приложението. |
| NIP-98 | HTTP удостоверяване за хостваните крайни точки. |
Криптография
| Къде | Какво |
|---|---|
| Самоличност и подписи | secp256k1 със сигнатури на Schnorr (BIP-340), както уточнява Nostr. |
| Лични съобщения и групови чатове | NIP-44 v2: ECDH на secp256k1, HKDF-SHA256, ChaCha20 с HMAC-SHA256 и подпълване, така че дължината на шифрования текст да не дава дължината на съобщението. |
| Bluetooth мрежови сесии | Шум XX — X25519, ChaCha20-Poly1305 (IETF), Ed25519 за подписи за обяви, SHA-256 и HMAC отдолу. |
| Идентичност в покой | AES-GCM-256. Ключът идва от PBKDF2-SHA256 при 310 000 итерации за парола или ПИН, или от WebAuthn PRF изход чрез HKDF-SHA256 за ключ за достъп или биометрични данни. |
| Обаждания и прехвърляне на файлове | Собствен DTLS-SRTP на WebRTC, договорен чрез обвито в NIP-17 сигнализиране. |
| Случайност | Платформата CSPRNG навсякъде — ключове, nonces и трептенето на времевия печат на опаковката на подарък. |
Защита на метаданни
Два детайла в пътя за опаковане на подаръци си струва да се извикат, защото те отделят NIP-59 от "криптирано, но очевидно от вас към тях":
- Всяка опаковка е подписана от a еднократен ключ генерирани само за това съобщение, така че няма две опаковки, споделящи подател.
- Всяка обвивка
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 и е завършен — няма затворен компонент, на който да се доверим.