Nymchat техничка бела книга
Пост-квантен клучен договор во Nymchat
Дистрибуирање на ML-KEM-768 јавни клучеви преку Nostr без директориум или регистар, и сеење на нив од тајна која нема јавна вредност открива.
Додавањето на пост-квантна размена на клучеви на порачателот најчесто не е криптографски проблем. Примитиви се стандардизирани и библиотеките постојат. Вториот Оваа статија опишува како Nymchat одговара на тоа - од каде доаѓа вториот клуч, како стигнува до луѓето кои имаат потреба од него, и што интерфејсот е дозволено да тврди за резултатот - и, во последниот дел, што тој резултат не го штити.
Оваа страница е машински преведена за погодност. Англискиот оригинал е верзијата што се применува.
1Проблемот
Нашите приватни пораки се шифрирани со НИП-44, која има две одвојувачки половини. Половината што се меша со едноставен текст — ChaCha20 со таг HMAC-SHA256, клучен преку ХДФ (РФК 5869- не е значајно загрозено од квантен компјутер; алгоритам на Гровер чини забрзување со квадратни корени против симетричен клуч, а 256 битови го апсорбираат тоа. се согласувате на клучот е елиптична крива Diffie-Hellman над Брн256К1Обновувањето на еден приватен клуч од неговиот јавен колега ретроактивно ги открива сите споделени тајни кои клучот некогаш ги произвел.
Заканата што ја создава ова не е одложена додека не постои таква машина. Противник со складирање може да запише шифриран текст денес и да го дешифрира секогаш кога ќе пристигне способноста. Сè што е испратено сега што сè уште е важно тогаш веќе е компромитирано. Ова е специфичниот напад на пост-квантната размена на клучеви порази, и тоа е причината зошто работата не може да чека за машината да се изгради.
1.1 Прашањата на кои овој документ одговара
Покрај тоа, се препорачува да се користат антибиотици и антибиотици кои се користат за лекување на рак на белите дробови, како и за лекување на рак на белите дробови (ФИФА 203Ова веднаш предизвикува проблем со дистрибуцијата:
Додадете пост-квантна размена и ви треба втора - нејзиниот ML-KEM јавен клуч.
Може да го напишете на хартија, да го прочитате гласно или да го скенирате од екран, и тоа е сè што некој треба да ви го шифрира. ML-KEM-768 јавниот клуч е 1.184 бајти. Не може да се прочита гласно, нема да се вклопи во корисничко име и не припаѓа во QR код покрај идентитетот кој е само 32 бајти.
Тешкиот дел е дека вториот клуч носи три различни проблеми, а остатокот од овој документ е во голема мера одговор на нив:
- Може да се замени. Клуч кој никој не може да го прочита на еден поглед е токму она што напаѓачот го заменува за свој.
- Тоа мора да се согласи на сите уреди на корисникот. Истата сметка на телефонот и лаптопот мора да го покажат истиот клуч, или пораките запечатени на едниот не можат да се отворат на другиот.
- Може да се изгуби. Јавниот клуч е републикуван од тајна, така што она што всушност мора да преживее е таа тајна - и со изградба ништо друго не го реконструира.
2Дизајн на ограничувања
Четири ограничувања го обликуваа одговорот, и тие ги исклучуваат повеќето очигледни дизајни пред да се напише кој било код.
- Што е можно помалку тајни. Нашите корисници веќе носат токму една тајна, nsec. Секоја дополнителна тајна е друг начин да ја изгубите вашата историја, и некој кој знае да резервира nsec нема да знае да резервира ништо друго. Оддел 3.1 покажува дека ова не може да се исполни директно - пост-квантниот клуч добиен од nsec воопшто не обезбедува пост-квантна заштита - така што дизајнот троши токму една тајна и не повеќе: едно парче клучен материјал, генериран еднаш по идентитет, претставен во иста форма како nsec и на исто место, така што секој кој знае како да го задржи еден знае како да го задржи другиот.
- Немаат авторитет Не постои сервер на кој може да се верува за да се каже кој клуч му припаѓа на кого.
- Многу уреди, еден идентитет Кој било клучен материјал што постои мора да заврши идентичен на сите нив, а патеките кои го носат таму не мора сами да бидат читани од противникот против кој функцијата се брани.
- Нема преговори Секоја размена во бендот на “кои шифри ги поддржувате?” е површина што напаѓачот може да ја избрише за да ја присили послабата опција.
3Независна тајна на коренот
Одлуката за оптоварување е дека клучот за декапсулација на ML-KEM е заситен од клучен материјал што нема јавна вредност.
pqRoot = 32 bytes from a CSPRNG, generated ONCE per identity
seed = HKDF-Expand(
HKDF-Extract(salt = "nym-pq-root-v2", IKM = pqRoot),
info = "mlkem768/epoch/" || epoch,
64 bytes)
(ek, dk) = ML-KEM-768.KeyGen(seed)
Коренот е претставен на корисникот како nsec е: Брн32 со човечки читачки префикс
nympqТака се чита како nympq1…, прикажани покрај nsec во екранот на идентитет зад истата открие интеракција, копирани со иста контрола, никогаш не се најавени и никогаш не се испратени никаде во јасна.
Солта е намерно одвоена од домен, така што ниту една друга тајна никогаш не може да го добие истиот пар клучеви. epoch Контра-придвижувањето на ротација (Секција 9 )
3.1 Зошто клучот не може да се изведе од клучот за идентитет
Очигледниот дизајн е да сее клучпарот од тајната што веќе ја има корисникот:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
Тоа е привлечно од четири причини, сите реални: ништо ново да се резервира, бидејќи nsec веќе е резервна; секој уред се согласува по изградба, без протокол за синхронизација да оди погрешно; една заменлива објава по идентитет е очигледно точна, бидејќи уредите не можат да не се согласуваат за клучот; и клучот постои пред да биде објавен, така што клиентот може да запечати нешто за себе на прв пат.
Сите четири придобивки се бескорисни, поради една причина. Алгоритам на Шор работи против објавен npub дава nsec. Потекнувањето на семето е јавен алгоритам над nsec. Значи противникот кој ја скрши класичната половина ја реконструира пост-квантната половина со извршување на истиот HKDF што го извршува секој друг.
ML-KEM клучот за декапсулација мора да дојде од ентропијата која не е ни дериватна од nsec, нити некогаш пренесена под класична само енкрипција.
Самостојно генерирана тајна која потоа се синхронизира помеѓу уредите на корисникот во обична NIP-44 порака е истиот неуспех со дополнителни чекори: противникот ја запишува таа порака денес и го враќа својот класичен клуч подоцна, а коренот излегува.
3.2 Добивање на коренот на другите уреди на корисникот
Ограничување 3 од Дел 2 – еден идентитет, неколку уреди – не може да се задоволи со аритметика тука, бидејќи целата точка е дека клучот не е функција на ништо што веќе ги споделуваат уредите. nympq1… самиот код
Коренот е прикажан како nympq1… Покрај nsec, и вториот уред го прифаќа залепено во истиот панел. Тоа е целиот механизам.
Правилото во Дел 3.1 вели дека коренот никогаш не може да се движи под класично само енкрипција, и секој механизам кој би го направил ова автоматски – синхронизирање преку релеј, обвивање со клучот за идентитет – го крши токму тоа.
Форматот остава простор за заоблен пат: евиденцијата може да носи листа на заоблувања, секоја со AEAD blob под клуч што корисникот може да го репродуцира на друг уред - паски PRF излез, на пример. nympq1… Кодот е единствениот начин да се премине.
Самиот запис живее во сопствената категорија на поставувања, nymchat-pq-rootДури и не носејќи обвивки, таа прави неопходна работа: нејзиното присуство е како вториот уред учи дека овој идентитет веќе има корен, што е она што го спречува да го наметне еден ривал (секција 3.3).
на nymchat-pq-root Категорија Мора не Овој ред носи единствена копија од коренот, така што запечатувањето под клуч кој потекнува од коренот е брава чиј клуч е внатре во кутијата: никој уред никогаш не би можел да го отвори, вклучувајќи го и оној кој го напишал.
Секоја друга категорија на поставки може и треба да го користи клучот што произлегува од коренот. Ова е единственото исклучок, и тоа е исклучок за кружноста наместо за силата.
3.3 Генерација и посвојување
На стартување, држејќи траен идентитет, клиентот работи во овој редослед:
- Барај постоечки
nymchat-pq-rootРекордот е - е пронајден, а овој уред може да го отклучи – да го прифатат и да го прогласат овој идентитет како пост-квантен способен.
- е пронајден, а овој уред не може да го отклучи - не генерирајте нов корен и воопшто не објавувајте оглас. Помолете го корисникот да го поврзе овој уред со внесување на
nympq1…Код од уред кој веќе го има. - Нема рекорди - да генерирате корен, да го објавите записот, да го објавите и да го покажете
nympq1…Кодот му е даден на корисникот еднаш за да може да го зачува.
Чекор 3 е чекор кој е лесно да се погреши, и тоа е причината зошто редоследот е напишан, а не оставен на секоја имплементација.Две уреди кои секој одлучува да генерира корен произведуваат два независни корени под еден идентитет, и тоа е неуспехот на овој редоследот постои за да се спречи.
4Објавување на способноста
Јавната половина од дериватниот кључен пар се објавува како адресиран
СЈО-01
настан — вид 30078, означен со nym-pq:
{
"kind": 30078,
"tags": [
["d", "nym-pq"],
["t", "nym-pq"],
["expiration", "<unix seconds>"]
],
"content": {
"v": 2,
"alg": "mlkem768",
"nym": 1,
"epoch": 0,
"pk2": "<base64url ML-KEM-768 encapsulation key>",
"exp": <unix seconds>,
"devices": [ ... ]
}
}
Addressable значи дека релеј држи еден настан по (kind, pubkey, d-tag), така што републиката го заменува претходното објавување на место.
Потписот е задолжителен. Настанот е потпишан со клучот за идентитет, така што тврдењето “овој ML-KEM клуч припаѓа на овој npub” е токму толку силен како и самиот npub.
Огласувањата истекуваат Седми ден НИП-40 истекот, републикуван на секои 24 часа, држи во записот изјава за клиентот кој сè уште работи наместо оној што некогаш бил.
Пропуштената најава се чита токму како онаа која никогаш не носела клуч: врсниците испраќаат обичен NIP-44, кој секој пријател може да го прочита, а клиентот ја продолжува пост-квантната размена на следната врска, кога повторно ќе ја објави.
Без еден, рекордот го надживува клучот што го именува: уредот кој е избришан, ресетиран или има свој корен заменет остава постојана инструкција да се инкапсулира на клуч кој никој повеќе не го држи, а пораките испратени под него се изгубени без грешка од било која страна.
Полето со клуч го именува својот формат. Полето е pk2Читачот кој не го препознава полето заклучува “Nymchat клиентот, нема пост-квантен клуч” и испраќа обичен NIP-44, кој секој логинг може да го прочита. Тоа е вистинскиот правец на неуспех, и вреди да се каже како правило форматскиот нумерирање постои за да се спроведе: непознатата тврдење за способност мора да чини заштита, никогаш испорака.
4.1 Отсуството е значајно и е тројно оценето
Суптилен, но важен детаљ: најавата е објавена од секој клиент на Nymchat, не само оние кои се способни за пост-квантни, а клучното поле е опционално.
| набљудува | Средства | Испрати однесување |
|---|---|---|
| Објавување со клуч | Nymchat, пост-квантната способност | Хибрид |
| Објавување, воопшто без клуч | Nymchat, класичен само - пост-квантен исклучен, или уред што сè уште не е поврзан со коренот на идентитетот | Класичен NIP-17 |
| Нема објавување | Непознат клиент. Може да биде било кој корисник на Nostr или Bitchat | Класичен, плус обвивка за компатибилност |
Најавувањето без клуч е потпишана изјава дека испраќачот работи со Nymchat, што му овозможува на патот за испраќање да прескокне шпекулативна крос-протокол обвивка што во спротивно ќе мора да ја вклучи за секој што не може да го идентификува.
4.2 Уредот кој не може да го отвори коренот молчи
Објавувањето е заменливо: еден настан по идентитет, последното пишување победи.Тоа е она што го прави дизајнот на еден запис да работи, а тоа е исто така она што го прави неповрзан уред опасен ако го објави.
Значи, уредот кој знае корен постои, но не може да го отвори, воопшто не објавува оглас.Тоа не е скршено и не е исклучено од апликацијата: сè уште чита секоја порака за која има клучеви и сè уште испраќа класично, додека го поттикнува корисникот да го поврзе.
5Откривањето и одлуката за испраќање
Клиентите ги учат клучевите на врсниците на два начини. Постојаната претплата ги покрива луѓето со кои корисникот всушност одговара – отворени разговори и членови на групата – така што нивните соопштенија пристигнуваат како вообичаени настани. За врсниците кои се сретнаа за прв пат, еднократното барање работи во време на испраќање, ограничено на 2,5 секунди; ако не се реши, пораката оди класична, што е однесувањето кое постоело пред пост-квантното додавање, наместо нов режим на неуспех.
Корисникот кој поврзува нов уред, или кој се префрла од пристап на проширување на прелистувачот на локален клуч, станува пост-квантен способен за среден разговор, а трајно кеширан “не” ќе ги задржи на класично шифрирање за животот на огласот.
5.1 Зошто не постои напад со пониски нивоа
Одлуката за рутирање се сведува на едно прашање:
pq = (we hold a signed, unexpired ML-KEM key for this recipient)
Нема преговори за способности, нема листа на поддржани алгоритми и нема поле што напаѓачот може да го избрише за да натера слаб пат. е Неуспехот на отстранета или задржена објава е дека пораката оди класична – статус-квото пред оваа функција – наместо дека хибридната порака е намалена на нешто што може да се измами.
Конвертот исто така држи и има поголемо значење: клиентот испраќа хибрид само Кога држи клуч, и држењето на клучот е доказ дека примателот може да се декапсулира.Не постои состојба во која пораката е испратена пост-квантно до некој кој не може да ја прочита.
6Хибридна конструкција
Немодифициран текст за шифрирање на NIP-44 е внатрешниот слој, а ML-KEM клучеви надворешен AEAD околу него:
inner = nip44_encrypt(plaintext, conversation_key(sender, recipient))
info = "nymchat-pq2" || sender_secp_pk || recip_secp_pk || kem_ct || recip_kem_pk
prk = HKDF-Extract(salt = "nymchat-pq2-v1", IKM = kem_ss)
key = HKDF-Expand(prk, info || "key", 32)
nonce = HKDF-Expand(prk, info || "nonce", 12)
outer = ChaCha20-Poly1305(key, nonce, plaintext = inner, aad = info)
payload = "pq2." || base64url(kem_ct) || "." || base64url(outer)
Двете тајни сеуште мора да се ресетираат за да се прочита пораката: надворешниот слој дава само NIP-44 шифрирачки текст, а отворањето што му е потребно на класичниот ECDH. Квантниот противник кој го скрши secp256k1 го добива внатрешниот клуч и сеуште се соочува со ML-KEM; прекинот на ML-KEM го исекува надворешниот слој и го остава NIP-44 стои.
kem_ssНишто во оваа деривација не го допира суровиот ECDH излез, што е она што се претвора во Дел 6.1.kem_ct,recip_kem_pkИ двата идентитетни клучеви се поврзани како поврзани податоци, така што надворешниот слој е посветен на точниот транскрипт кој го произведува.
ML-KEM клучот на примателот е долготраен, но секоја порака носи независен шифриран текст и затоа независен
kem_ssТоа е она што го прави извлекување на нонце наместо рандомизирање звучи:
Серија: ChaCha20-Poly1305
е прекината со повторна употреба на (клуч, нонце) пар, и тука самиот клуч е нов за секоја порака, така што ниту еден пар не може да се повтори.
6.1 Зошто слоевите остануваат одвоени
Алтернативата е да се мешаат двете тајни во еден клуч за разговор и да се предаде тоа на NIP-44:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
Таа конструкција звучи како криптографија. Таа има еден структурни проблем: таа треба
ecdh_x, суровата x-координата на излезот на ECDH, како клучен материјал - и продолжение на прелистувачот (НИП-07) или далечински потписник (НИП-46Извршува NIP-44 во име на повикувачот и враќа шифриран текст, што е целата точка на држење на клучот некаде каде што апликацијата не може да стигне.
Затоа, мешањето на тајните го исклучува секое најавување кое го чува клучот за идентитет во потписникот, што е да се каже најпрецизните корисници, и ниту еден обем на работа на деривацијата на клучот не може да го промени.
Цената е лента ширина, и тоа не е мал. ML-KEM шифрирање текст е 1.088 бајтови и вози на секоја порака, base64url-кодирани до 1.451 знаци; надворешниот AEAD додава 16-бајт Poly1305 таг и го проширува NIP-44 корисничкото оптоварување што го обвива за една третина. 50-карактерна порака расте од 176 бајти до 1.712, а 2.000-карактерна една од 2.820 до 5.238. Подот е околу 1.5 KB по порака без оглед на тоа колку е краток пораката, што е цената на инкапсулирање свежо секој пат наместо повторно користење на заедничка тајна.
6.2 Самоопишување на платите
на pq2. Префиксот го прави распоредувањето инкорпорирано: тоа е само-опишување, така што клиентот го избира патот за дешифрирање со проверка на корисничкото оптоварување наместо да верува на таг или да се сеќава на она што го поддржува врсници.Читачот кој не го препознава префиксот не успева да го отвори тоа корисно оптоварување наместо погрешно да го прочита, а пораките запечатени пред било која страна би можеле да направат пост-квантен остаток читлив како обичен NIP-44 без миграција.
Декапсулацијата на ML-KEM е дизајнирана никогаш да не пропадне: со оглед на погрешен текст на шифрирање, трансформацијата на Fujisaki-Okamoto враќа детерминистичка псевдо-случајна тајна наместо грешка. Затоа, погрешен клуч воопшто не се појавува на KEM слојот – тој се појавува како неуспех на HMAC во внатрешноста на NIP-44, што е на ист начин како и погрешен класичен клуч површини. Повикувачите ги третираат и двете идентично, така што неуспехот не носи различен сигнал. Тоа е исто така она што ја прави кандидатската листа на Дел 9.1 функционална: клиентот се обидува секој клуч по ред и дозволува на NIP-44 да каже кој е вистинскиот.
6.3 Двете слоеви на подарочната обвивка
A НИП-17 приватна порака е a НИП-59 Подарочна обвивка: непотпишана гласина, запечатена под идентитетот на испраќачот (тип 13), а потоа запечатена под фрлачки клуч генериран по порака (тип 1059).
Пријавувањето на потписникот добива само надворешниот слој. Запечатувањето е произведено од страна на потписникот како обичен NIP-44 – апликацијата никогаш не го гледа клучот кој го прави тоа – така што не може да се хибридизира на место. Ова не чини ништо против нападот во прашање: запечатувањето е достапно само преку обвивката, а запечатувањето е она што го складира рекордер.
7Групни пораки и делумно покривање
Пораката на групата не е еден шифриран текст. Тоа е истиот едноставен текст што се дава на секој член, секоја копија е инкапсулирана со сопствениот ML-KEM клуч на тој член. Членот кој објавил клуч добива хибридна обвивка; оној кој не добива класична обвивка.
Ова создава сметководствен проблем што наивната имплементација добива погрешно. Ако осум од десет членови добијат хибридна копија, пораката е не На противникот му е потребна една класична копија на едноставен текст која е идентична во сите десет, па пораката е заштитена само ако секој Копијата е
Затоа, Nymchat го следи покриеноста по порака за време на фан-оут - бројот е познат само додека се градат обвивките - и знакот известува “квантно-отпорен на 8 од 10 членови” наместо да тврди дека пораката е заштитена. Прифатено Групната порака (само испраќачот го брои фанатот), интерфејсот известува за делумна, а не за целосна заштита.
7.1 Што извештаи на штитот
Штитот ја кажува вистината за Пораката, а не за софтверот кој го испратил:
- Целосна заштита: секоја копија од овој текст излезе хибридна.
- Делимичен: некои копии од групата порака излегоа класично. Нацртани деградирани наместо целосни, бидејќи една класична копија на едноставен текст идентична во сите нив е потребата на противникот.
- Класичниот е изјавен директно, наместо да се прикажува како без значка, бидејќи индикаторот што недостасува е двосмислен помеѓу “незаштитен”, “ скршен”, и “оваа конструкција го нема карактеристиката”.
Пресудата се запишува кога пораката е запечатена, наместо да се пресмета од она што подоцна го рекламира еден колега. Цифертекстот што веќе постои не може да биде подобро заштитен отколку што беше, а интерфејсот кој ги преработува старите пораки на силата на новата објава ќе тврди нешто лажно за бајтови на релеј.
Правилата на групата се поставени на врвот на ова, наместо да го заменат: пораката на групата е целосно заштитена само кога копијата на секој член е, а приманата порака на групата без бројот на покриеност се прикажува делумно.
8Копии адресирани до себе
Неколку работи што клиентот ги складира се шифрирани за сопствениот идентитет на корисникот: синхронизирани поставки, листата со разговори, клучевите на групата и архивата на пораките. Овие носат повеќе за корисникот отколку повеќето поединечни пораки, така што оставајќи ги класични би ги направиле најслабите зачувани артефакти без оглед на тоа колку внимателно самите пораки биле запечатени. nymchat-pq-root самата категорија, која не може да се запечати под клуч што само таа може да го произведе.
Овие артефакти се каде што дизајнот има најголемо значење.Блоб за поставувања или ред на архиви седи на едно место со години, што е токму обликот на нешто што противникот на жетвата-сега-декриптира-подоцна го собира - далеку повеќе од било која поединечна порака, која е барем ефемерна во сопствениот ум на корисникот.
Едно ограничување го регулира форматот тука, а не клучот. секој уредот на сметката, така што секој уред го рекламира она што може да го отвори во списокот што го носи неговото објавување, а сметката пишува само она што сите можат да го прочитаат.
Уредот кој го држи идентитетот, но не и коренот, не може да отвори ништо запечатено на коренот, вклучувајќи ги и неговите сопствени поставки.Тоа е намерна последица, а не надзор, и тоа е причината зошто Дел 3.3 има таков налог за уредот за поврзување наместо наметнување на свеж корен: вториот корен не би го направил блогот читлив, само би го поделил клучниот материјал на идентитетот на два дела.
Уредот кој управува со екстензија на прелистувачот или далечински потписник (NIP-46) нема nsec од кој да произлезе, но го држи кодот за опоравување, а под слоевата конструкција на Дел 6.1 што е сè што е потребно за пост-квантната половина: потписникот го произведува слојот NIP-44 како што секогаш го има, а клиентот го кључува самиот надворешен слој.
9Ротација
на epoch Бројчинот во деривацијата е она што ја прави ротацијата можна без нов материјал за клуч. Зголемувањето го дава свеж пар клучеви од истиот корен и повторно објавена објава; врсниците го земаат новиот клуч од заменливиот запис. Ротацијата затоа не го бара корисникот да напише ништо по втор пат: коренот се генерира еднаш по идентитет и епохата го прави вртењето.
9.1 Старите епохи се чуваат, и ништо не е повторно шифрирано
Клиентот ги гради кандидатите за дешифрирање од тековната епоха до епоха − 3, така што пораката запечатена кратко пред ротацијата се уште се отвора против парот на клучеви што беше тековна кога беше испратена.
Тоа е она што ја прави ротацијата безбедна воопшто: без неа, секоја ротација ќе го загуби она што беше во лет.Сè што веќе е запечатено останува прочитано за животот на идентитетот, бидејќи пораката што корисникот повеќе не може да ја отвори е строго полоша за нив од онаа чија заштита не може да се подобри ретроактивно (секција 10.5).
10Што не го штити
Еден документ кој само го набројува она што дизајнот го постигнува не е опишување на систем, и претерано оценување на безбедносни својства во интерфејс е полошо отколку да го пропушти.
Коренот е втора тајна, а губењето не може да се врати.
Ова е вистинската цена на дизајнот. Ограничувањето во Дел 2 дека корисникот треба да има токму едно нешто да го задржи не може да се исполни: nsec самиот не го реконструира пост-квантниот клуч, бидејќи целата точка е дека нема јавна вредност и никаква друга тајна не ја открива. Ако ниту еден уред не го држи коренот и ниту еден од обвивките на Дел 3.2 не може да се отвори, материјалот запечатен до коренскиот клуч не може да се врати.
Со рачен пренос на единствениот пат, ова е поостри отколку што може прво да се прочита. nympq1… Кодот насекаде има точно една копија од него, на еден уред, а губењето на тој уред ги губи сите пост-квантни пораки, поставувања и ред на архивите запечатени на него.
nsec не помага; тоа е имотот на кој се потпира целиот дизајн.
Напаѓачот го напаѓа најскапиот достапен пат, така што шемата вреди она што вреди нејзиниот најслаб пат за опоравување - незаборавна пасофраза, на пример, ќе ја стави целата работа на она што вреди пасофразата, а пасоризираниот ред е токму артефакт кој противникот собира и меле офлајн во слободно време.
10.2 Автентификација, како различна од доверливоста
Секој потпис во Nostr е Schnorr над secp256k1, и тоа е непроменето тука. Противник со квантен компјутер би можел да фалсификува потписи и да се преправаат на корисник во реално време. Она што хибридната размена на клучеви порази е жетва-сега-декриптира-подоцна: напаѓачот снимање на сообраќај денес не може да го прочита подоцна. Тоа не прави порака незаборавна против противник кој веќе има машина. Оваа разлика е пренесена во апликациите намерно - индикаторот padlock известува за автентикација, штитот известува за доверливост, и тие се одделни глифи, бидејќи пораката може да има еден без друг.
Тоа, исто така, го ограничува она што може да го вети објавувањето во Дел 4. Заврзувањето помеѓу npub и ML-KEM клуч е потпис secp256k1, така што противникот кој може да ги фалсификува може да го замени сопствениот клуч.
10.3 Метадани
Подарокот го крие испраќачот, примателот надвор од еден p Таг, видот и временскиот печат на внатрешната порака. Тоа не го крие фактот дека настанот постои, неговата големина, или кога релеј го прими.
10.4 Офлајн мрежата
Транспортот на Bluetooth мрежата на Nymchat е посебен протокол со свое држење на рацете, и не е опфатен од оваа работа.
10.5 Веќе испратени пораки
Цифертекстот запишан додека двете страни сеуште биле класични останува класичен трајно. Тоа веќе постои и не може повторно да се запечати. Заштитата започнува со пораката каде што двете страни држеа пост-квантни клучеви, а не во моментот кога функцијата беше вклучена.
11Разгледани алтернативи
| Пристап | Зошто не |
|---|---|
| Извлечете го пост-квантниот клуч од клучот за идентитет | Деривацијата е јавен алгоритам над nsec, а квантниот противник го враќа nsec од објавениот npub, така што ја крши класичната половина раце над пост-квантната половина со него. |
| Испратете го коренот до другите уреди на корисникот преку NIP-44 | Корен пренесен под класична само енкрипција може да се опорави од секој кој ја евидентира таа порака и го скрши нејзиниот клуч подоцна, што е противникот што коренот постои за да го запре. |
| Одделно генерирана ML-KEM тастатура на секој уред | Одбиени. Уредите ќе содржат различни клучеви за декопсулација, а едно заменливо објавување по идентитет не може да ги носи сите. Партнерите ќе шифрираат до кој клуч е објавен последен пат, а секој друг уред нема да може да го прочита резултатот. |
| Завртете го коренот под PIN | Одбиен. четирицифрен ПИН е околу 13 битови против офлајн напаѓач држејќи го заоблениот ред. Нудејќи го покрај два 256-битни патеки би погрешно претставувал што вреди најслабиот заоблен ред. |
| Проширете го npub за да ги пренесете двата клучеви | 1,184 бајтови не е споделен идентификатор, и тоа би го прекинало секој постоечки клиент на Nostr со анализирање на адреса која е дефинирана како 32 бајтови. |
| Клучна директориумска услуга | Повторно го воведува авторитетот на мрежата што постои за да се избегне.Кој одговара на пребарувањето одлучува кој може да ја прочита пораката. |
| Приклучи го клучот на секоја порака | Ништо не решава: испраќачот има потреба од Примателот клуч пред првата порака, што е токму случајот без претходната порака да ја пренесе. |
| Способност за преговарање во бендот | Напаѓачот кој може да го отстрани знамето на способноста го присилува класичниот пат. |
| Само пост-квантен, без класична нога | Отфрла децении на анализа на secp256k1 во замена за многу помлад примитив. и двете Фалсификување |
12Паритет на имплементација
Nymchat испорачува две независни имплементации на оваа конструкција – една во JavaScript за веб апликацијата, една во Dart за мобилните апликации, вклучувајќи пристаниште ML-KEM-768 од нула.
Имплементацијата на Dart ML-KEM е валидирана против официјалниот
Ниш ACVP
Погледнете го видеото на М-Кеј (ML-KEM-*-FIPS203) — 25 кључни генерации, 25 инкапсулации и 10 случаи на декапсулација, кои се изведуваат како свој пакет. Овие се векторите што NIST ги објавува за да ја потврди имплементацијата, така што нивното пренесување е доказ дека портот е точен, а не само доказ дека двајцата клиенти се согласуваат едни со други. Покрај тоа, заедничка фиксна на тест векторите – семе деривација, инкапсулација, и кориснички формати, и комплетни подарочни обвивки – се генерираат од референцата на JavaScript и се проверуваат од страна на двата тест пакета. Коренската тајна ја проширува таа фиксна, наместо да ја замени: коренот на семето, коренот на клучот, јавниот отпечаток
nympq1… Дивергенција во било која имплементација не успева да ја изгради, наместо да произведе порака што другиот клиент не може да ја отвори.
Тоа е она што кажува на уредот “ова е коренот што го држам” од “ова е различен еден”, и клиентот кој не може да го репродуцира отпечатокот на друг клиент ќе прочита совршено добар запис како никаков запис воопшто - а потоа, по Делот 3.3, мент втор корен и поделба на идентитетот.
Nymchat е Отворени извори под AGPL-3.0. Криптографското јадро опишано тука е
js/nym-crypto.js и js/modules/pq.js во веб-клиентот, и
lib/core/crypto/ со lib/features/identity/pq_registry.dart во мобилните клиенти.
За кратко, не-техничко објаснување, видете Страница на базата на знаења за квантно отпорно шифрирање.