Nymchat whitepaper ya kiufundi
Mkataba wa Key Post-Quantum katika Nymchat
Usambazaji wa muhimu za umma wa ML-KEM-768 juu ya Nostr bila orodha au orodha, na kupanda kutoka kwa siri ambayo hakuna thamani ya umma inafichua.
Kuongezea kubadilishana kichwa baada ya quantum kwa messenger ni kwa ujumla si tatizo la encryption. primitives ni standardized na maktaba kuna. sehemu ngumu ni kwamba kila mshiriki sasa anahitaji ya pili Makala hii inaelezea jinsi Nymchat inavyosema kwamba - wapi muhimu ya pili hutoka, jinsi inavyoweza kufikia watu ambao wanahitaji, na ni nini interface inaruhusiwa kudai kuhusu matokeo - na, katika sehemu ya mwisho, nini matokeo hayawezi kulinda.
Ukurasa huu umetafsiriwa kwa mashine kwa urahisi. Toleo la asili la Kiingereza ndilo linalotumika.
1tatizo la
Ujumbe wetu wa kibinafsi unahusishwa na NIP-44, ambayo ina nusu mbili ambazo zinaweza kutengwa. nusu ambayo inapiga kelele kwa maandishi ya moja kwa moja — ChaCha20 na alama ya HMAC-SHA256, imefungwa kupitia wa HKDF (Kifungu cha RFC 5869) — sio hatarini na kompyuta ya quantum; algorithm ya Grover inachukua kasi ya mizizi ya mraba dhidi ya key symmetric, na bit 256 inachukua hiyo. kukubaliana juu ya kichwa ni elliptic curve Diffie-Hellman juu ya Kifungu cha 256K1Kuokoa muhimu moja ya kibinafsi kutoka kwa mwenzake wake wa umma retroactively inaonyesha kila siri iliyoshirikiwa ambayo kifungo kilichotengenezwa.
Hatari hii inajenga haifai mpaka mashine kama hiyo iko. mpinzani na uhifadhi anaweza kurekodi maandishi ya encryption leo na kurekodi wakati wowote uwezo anakuja. Kila kitu kilichotumwa sasa ambacho bado ni muhimu wakati huo tayari kimeharibiwa. Hii ni mashambulizi maalum baada ya kubadilishana kichwa cha quantum hupoteza, na ndiyo sababu kazi haiwezi kusubiri kwa mashine kujengwa.
1.1 Maswali ambayo makala hii inatoa majibu
Kuanzisha mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi juu ya mlinzi.Maelezo ya 203Hii mara moja husababisha tatizo la usambazaji:
Kuwasiliana na Alice leo, unahitaji kitu kimoja: npub yake. Kuongeza kubadilishana baada ya quantum na unahitaji pili — ML-KEM yake ya umma.
NPUB ni yenyewe. Unaweza kuandika juu ya karatasi, kusoma kwa sauti, au kupeleleza kutoka skrini, na ni kila mtu anahitaji kufichua kwako. ML-KEM-768 muhimu ya umma ni 1,184 bytes. Haiwezi kusoma kwa sauti, haipatikani katika jina la mtumiaji, na haipatikani katika QR code pamoja na utambulisho ambao ni 32 bytes tu.
Sehemu ngumu zaidi ni kwamba kifungo cha pili kinatoa matatizo matatu tofauti, na sehemu nyingine ya makala hii ni jibu kwa kiasi kikubwa kwao:
- Hii inaweza kubadilishwa. Kichwa ambacho hakuna mtu anayeweza kusoma kwa mtazamo mmoja ni kitu ambacho mshambuliaji anabadilika kwa ajili yao wenyewe. Sehemu ya 4 inahusisha utambulisho na saini, ambayo huweka hii moja kwa moja.
- Inapaswa kukubaliana katika vifaa vya mtumiaji. Akaunti moja kwenye simu na kompyuta inapaswa kuonyesha kifungo kimoja, au ujumbe uliofungwa kwa mmoja hauwezi kufunguliwa kwenye mwingine.
- Inaweza kuwa kupoteza. Kichwa cha umma kinachochapishwa kutoka kwa siri, hivyo kile ambacho kinapaswa kuishi ni siri hiyo - na kwa ujenzi hakuna kitu kingine kinachojenga.
2Muundo wa vikwazo
Mashirika manne yameunda jibu, na kuondoa mipangilio mengi ya dhahiri kabla ya maandishi yoyote kuandikwa.
- kidogo iwezekanavyo ya siri. Watumiaji wetu tayari wana siri moja, nsec. Kila siri ya ziada ni njia nyingine ya kupoteza historia yako, na mtu ambaye anajua kurekebisha nsec hawatajua kurekebisha kitu kingine chochote. Sehemu ya 3.1 inaonyesha kwamba hii haiwezi kukutana moja kwa moja - key post-quantum iliyotokana na nsec haitoi ulinzi wa post-quantum kabisa - hivyo kubuni hutumia siri moja na hakuna zaidi: kipande kimoja cha vifaa muhimu, kilichozalishwa mara moja kwa kila utambulisho, iliyotolewa katika sura sawa na nsec na mahali fulani, ili mtu yeyote anayejua jinsi ya kuhifadhi moja anajua jinsi ya kuhifadhi nyingine. Sehemu ya 10.1 ni haki kuhusu gharama gani bado inachukua.
- Hakuna mamlaka ya Hakuna seva ambayo inaweza kuaminika kuelezea kifungo kinachomiliki na nani.
- Vifaa vingi, utambulisho wa moja. Utambulisho wa Nostr kwa kawaida hutumiwa kutoka kwa wateja kadhaa kwa wakati mmoja. Kila chombo muhimu kinachokuwa kinapatikana kinapaswa kuishia sawa juu ya wote, na njia ambazo zinachukua huko haipaswi kusoma na mpinzani ambaye kipengele kinachopinga.
- Hakuna mazungumzo yoyote. Kila kubadilishana katika band ya “nchi gani unayounga mkono?” ni uso ambao mshambuliaji anaweza kuharibu ili kulazimisha chaguo la dhaifu.
3Siri ya Root ya Independent
Uamuzi wa mzigo ni kwamba ML-KEM decapsulation key ni mbegu kutoka vifaa muhimu ambazo hakuna thamani ya umma inafichua. Kila utambulisho anapata siri moja ya mizizi, iliyotolewa mara moja:
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)
Root inapatikana kwa mtumiaji kwa njia ya nsec ni: Kifungu cha 32 Kwa maneno ya mwanadamu
nympqKwa hiyo, inasoma kama nympq1…, iliyoonyeshwa karibu na nsec katika skrini ya utambulisho nyuma ya mwingiliano huo wa kufichua, iliyoandikwa na udhibiti huo, kamwe haijaingia na kamwe kutumwa mahali popote katika wazi.
Maji ni kikoa tofauti kwa makusudi, hivyo hakuna siri nyingine inaweza kamwe kuondokana na muhimu sawa. epoch Kuanzisha mlinzi juu ya msalaba (Sehemu ya 9).
3.1 Kwa nini kichwa haiwezi kupatikana kutoka kwa kichwa cha utambulisho
Muundo wa wazi ni kupanda keypair kutoka kwa siri ambayo mtumiaji tayari ana:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
Ni ya kuvutia kwa sababu nne, wote ni halisi: hakuna kitu kipya cha kuhifadhi, kwa sababu nsec tayari ni hifadhi; kila kifaa kilichoidhinishwa kwa ujenzi, na hakuna mkataba wa synchronization kutoweka vibaya; moja ya matangazo ya kubadilisha kwa kila utambulisho ni wazi kuwa sahihi, kwa sababu vifaa vinaweza kupinga kuhusu kifungo; na kifungo kilichopo kabla ya kuchapishwa, ili mteja anaweza kufunga kitu kwa mwenyewe kwa mara ya kwanza.
Faida zote nne hazina thamani, kwa sababu moja. algorithm ya Shor inayoendesha dhidi ya npub iliyochapishwa hutoa nsec. derivation mbegu ni algorithm ya umma juu ya nsec. Hivyo mpinzani ambaye kuharibu nusu ya kawaida hurejesha nusu ya baada ya quantum kwa kuendesha HKDF moja ambayo kila mtu mwingine huendesha. dhidi ya mazao ya sasa-kufafanua baadaye - moja ya hatari ya kipengele kinaendelea kuacha - kifungo kilichopatikana kwa njia hii haina kuongeza chochote.
ML-KEM decapsulation key lazima kuja kutoka entropy ambayo haipatikani kutoka nsec wala kamwe kuhamishwa chini ya encryption classic tu.
Sura ya pili ya sheria hiyo inafanya kazi sawa na ya kwanza. siri inayotengenezwa kwa kujitegemea ambayo kisha inashikiliwa kati ya vifaa vya mtumiaji ndani ya ujumbe wa kawaida wa NIP-44 ni kushindwa sawa na hatua za ziada: mpinzani anarekodi ujumbe huo leo na kurejesha kifungo chake cha kawaida baadaye, na mizizi huanguka.
3.2 Kupata mizizi kwenye vifaa vingine vya mtumiaji
Hifadhi ya 3 ya Sehemu ya 2 - utambulisho mmoja, vifaa kadhaa - haiwezi kukidhiwa na arithmetics hapa, kwa sababu suala la jumla ni kwamba muhimu sio kazi ya kitu chochote vifaa tayari kushiriki. nympq1… Kodi ya mwenyewe.
Rangi hii inapatikana kama nympq1… upande wa nsec, na kifaa cha pili kinakubali kuingiliwa kwenye paneli hiyo. Hiyo ni utaratibu wote. kifaa ambacho hakutoa msimbo hauwezi kushiriki, ambayo Sehemu ya 4.2 inaelezea.
Uhamisho wa mikono ni hatua ya mapenzi badala ya hatua ya kwanza. sheria katika Sehemu ya 3.1 inasema asili inaweza kamwe kusafiri chini ya encryption classic-only, na kila mbinu ambayo ingekuwa kufanya hii ya moja kwa moja - syncing kwa njia ya relay, kuingiza kwa kichwa cha utambulisho - ni kinyume na hii. hatua mtumiaji hufanya ni sababu ya ulinzi ni halisi.
Muundo huacha nafasi kwa njia iliyowekwa: rekodi inaweza kuwa na orodha ya wraps, kila moja ya AEAD blob chini ya kifungo ambacho mtumiaji anaweza kuigiza kwenye kifaa kingine - matokeo ya PRF ya passkey, kwa mfano. nympq1… Mstari wa chini: Roho inawakilisha thamani nzuri.
rekodi yenyewe anaishi katika jamii yake mwenyewe ya mipangilio, nymchat-pq-rootHata kwa kuendesha vikwazo hakuna inafanya kazi muhimu: uwepo wake ni jinsi kifaa cha pili kinatambua kwamba utambulisho huu tayari una mizizi, ambayo ni kile kinachomzuia kuingiza mpinzani mmoja (Sehemu ya 3.3).
ya nymchat-pq-root Sehemu ya lazima sivyo mstari huo una nakala ya pekee ya mizizi, hivyo kutibu chini ya kichwa kilichotokana na mizizi ni mlomo ambao kichwa chake ni ndani ya sanduku: hakuna kifaa kilichoweza kufungua, ikiwa ni pamoja na yule aliyeandika. Ni mkali sana - NIP-44 kwa mwenyewe - au sio kabisa. Hii ni mahali moja ambapo kubuni inakubali ulinzi wa kisasa tu, na inaweza kulipia: mstari hauna mizizi leo, tu ukweli kwamba kuna.
Kila aina nyingine ya mipangilio inaweza na inapaswa kutumia kifungo cha mizizi. Hii ni kipengele kimoja, na ni kipengele cha mzunguko badala ya nguvu.
3.3 Uzazi na utoaji
Katika boot, kuwa na utambulisho wa kudumu, mteja hufanya kazi kwa utaratibu huu:
- Kuangalia kwa ajili ya sasa
nymchat-pq-rootRekodi ya. - rekodi iliyopatikana, na kifaa hiki kinaweza kufuta - kuchukua na kutangaza utambulisho huu kama uwezo wa baada ya quantum.
- rekodi iliyopatikana, na kifaa hiki haiwezi kufuta - usiruhusu kuzalisha mizizi mpya, na usiruhusu kuchapisha matangazo yoyote.
nympq1…Kodi kutoka kwa kifaa ambacho tayari kina. - Hakuna rekodi ya - kuunda mizizi, kuchapisha rekodi, kutangaza, na kuonyesha
nympq1…code kwa mtumiaji mara moja ili waweze kuokoa.
Hatua ya 3 ni hatua ambayo ni rahisi kupoteza makosa, na ndiyo sababu utaratibu unaandikwa badala ya kuondolewa kwa kila utekelezaji. vifaa viwili ambavyo kila mmoja ataamua kuzalisha mizizi huunda mizizi mawili ya kujitegemea chini ya utambulisho mmoja, na hiyo ni kushindwa kwa utaratibu huu unaopatikana kuzuia.
4Taarifa ya uwezo
Nusu ya umma ya keypair iliyotokana inachapishwa kama anwani
Kifungu cha 01
Mkataba wa 30078 - Mkataba wa 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 inamaanisha relay inachukua tukio moja kwa kila (kind, pubkey, d-tag), hivyo republish huchukua nafasi ya matangazo ya awali. Kila utambulisho kwa hiyo ina rekodi moja ya sasa, ambayo ni nini inafanya “angalia kichwa cha Alice ” kupata moja ya wazi badala ya orodha ya kuunganisha.
Mkataba huo ni wa kuzuia. Hatua hiyo imeandikwa na kifungo cha utambulisho, hivyo madai ya “kifungo hiki cha ML-KEM kinahusiana na npub hii” ni yenye nguvu sawa na npub yenyewe. Kukaribisha kifungo kingine cha encapsulation kinahitaji kuunda saini ya secp256k1. Mshambuliaji ambaye anaweza kufanya hivyo hana haja ya kuwa na wasiwasi na KEM.
Matangazo ya kuondoka. Siku ya saba NIP-40 Mwisho, kuchapishwa upya kila saa 24, inahifadhi ripoti ya taarifa kuhusu mteja ambaye bado anaendesha badala ya moja ambayo ilikuwa.
Kumbukumbu iliyopangwa inasomwa kwa usahihi kama moja ambayo haijawahi kuleta kifungo: washirika hutoa NIP ya kawaida ya 44, ambayo kila login inaweza kusoma, na mteja anaendelea kubadilishana baada ya quantum kwenye uhusiano wake ujao, wakati inapochapishwa tena. Hivyo kusimama kwa zaidi ya wiki inachukua ulinzi kwa ujumbe uliotumwa wakati wa upungufu - wao ni classic encrypted badala ya quantum-resistant - na gharama kitu kingine chochote. utoaji ni usioathiriwa, hakuna kitu ambacho tayari kilichopatikana kinaweza kusoma, na hakuna hatua inahitajika wakati wa kurudi.
Hiyo asymmetry ni sababu ya kumalizika badala ya ajali yake. bila moja, rekodi huishi zaidi ya muhimu anayeitwa: kifaa ambacho ni kufutwa, kurejeshwa, au ina mizizi yake imechukuliwa anaacha maagizo ya kudumu ya kuingiza kwenye kifungo ambacho hakuna mtu anachukua tena, na ujumbe zilizotumwa chini yake hupoteza bila makosa kwa pande zote mbili. siku saba hufungua dirisha hilo, na kuruhusu relays kupoteza rekodi wenyewe badala ya kutegemea wateja kutambua.
Jengo la msingi huitwa muundo wake. Uwanja huu ni pk2, na nambari ni sehemu ya mkataba badala ya kupendeza: inamaanisha muundo wa uzito ambao kichwa inaweza kutumika na. Msomaji ambaye haina kutambua uwanja hufikia “Nymchat mteja, hakuna post-quantum key” na hutoa kawaida NIP-44, ambayo kila kuingia inaweza kusoma. Hiyo ni mwelekeo sahihi wa kushindwa, na ni thamani ya kusema kama kanuni nambari ya muundo inapatikana kutekeleza: madai ya uwezo isiyojulikana inapaswa kulipa ulinzi, kamwe utoaji.
4.1 Kutokuwepo ni ya maana, na ya tatu
Ufafanuzi mdogo lakini muhimu: matangazo huchapishwa na kila mteja wa Nymchat, sio tu wale wanaoweza baada ya quantum, na uwanja wa msingi ni chaguo.
| Maoni ya | Maana | Tumia tabia ya |
|---|---|---|
| Ujumbe kwa kifungo | Nymchat, baada ya quantum uwezo | Hifadhi ya |
| Ujumbe, hakuna kichwa chochote | Nymchat, classic tu - post-quantum off, au kifaa ambacho bado haijaunganishwa na mizizi ya utambulisho | Mifano ya NIP-17 |
| Hakuna matangazo ya | Mteja asiyejua. inaweza kuwa mtumiaji yeyote wa Nostr au Bitchat | Classic, pamoja na vifaa vya kuunganisha |
Kuanguka mstari wa tatu kwenye mstari wa nne itakuwa hasara halisi. matangazo yasiyo na kichwa ni taarifa iliyosajiliwa kwamba mtoa huendesha Nymchat, ambayo inaruhusu njia ya kutuma kupita mchanganyiko wa mstari wa mstari wa mstari itakuwa vinginevyo lazima kuingiza kwa mtu yeyote ambayo haiwezi kutambua.
4.2 Vifaa ambavyo haviwezi kufungua mizizi huwa kimya
Matangazo yanaweza kubadilishwa: tukio moja kwa kila utambulisho, kuandika mwisho kushinda. Hiyo ni nini hufanya muundo wa rekodi moja kufanya kazi, na pia ni nini hufanya kifaa kisichounganishwa kuwa hatari ikiwa huchapisha.
Hivyo kifaa ambacho kinafahamu mizizi kinachoishi lakini haiwezi kufungua huchapisha taarifa yoyote.Hakuna kuharibiwa na haifungiwa kutoka kwa programu: bado kinaweza kusoma kila ujumbe ambacho kina vifungo na bado hutoa kwa kifahari, wakati wito wa mtumiaji kuunganisha.Usikivu ni tabia sahihi kwa kifaa ambacho haiwezi kuzungumza kwa utambulisho.
5Ufafanuzi na uamuzi wa kutuma
Wateja kujifunza vifungo vya marafiki kwa njia mbili. Usajili wa kudumu unahusisha watu ambao mtumiaji anafuatilia kwa kweli - mazungumzo ya wazi na wanachama wa kikundi - hivyo matangazo yao yanakuja kama matukio ya kawaida. Kwa mara ya kwanza ya kukutana na marafiki, swali moja inafanya kazi wakati wa kutuma, ikilinganishwa na sekunde 2.5; ikiwa haipatikani, ujumbe unakuja classic, ambayo ni tabia ambayo ilikuwepo kabla ya post-quantum iliongezwa badala ya mode mpya ya kushindwa.
Matokeo hasi huhifadhiwa kwa dakika kumi badala ya daima. mtumiaji ambaye huunganisha kifaa kipya, au ambaye huhamia kutoka kwa login ya upanuzi wa kivinjari kwa kifungo cha ndani, anakuwa post-quantum uwezo wa kati ya mazungumzo, na daima kuhifadhiwa “no” itahifadhiwa kwenye encryption classic kwa maisha ya matangazo.
5.1 Kwa nini hakuna mashambulizi ya chini
Uamuzi wa njia hupunguza kwa swali moja tu:
pq = (we hold a signed, unexpired ML-KEM key for this recipient)
Hakuna mazungumzo ya uwezo, hakuna orodha ya algorithms inayounga mkono, na hakuna uwanja ambao mshambuliaji anaweza kuondoa kwa nguvu njia dhaifu. ni Njia ya kushindwa ya matangazo yaliyotolewa au yaliyopunguzwa ni kwamba ujumbe unakuja classic - hali ya sasa kabla ya kipengele hiki - badala ya kwamba ujumbe wa hybrid ni kupunguzwa kwa kitu chochote kinachowezekana.
Mbali na hilo pia inachukua na inahusiana zaidi: mteja anatoa hybrid tu ya Wakati anahifadhi kifungo, na kushikilia kifungo ni ushahidi kwamba mpokeaji anaweza kufuta. Hakuna hali ambapo ujumbe unatumwa baada ya quantum kwa mtu ambaye hawezi kusoma.
6Ujenzi wa Hybrid
Nymchat haina kubadilisha NIP-44. Inapiga. NIP-44 isiyobadilishwa ni safu ya ndani, na ML-KEM inachukua AEAD ya nje karibu naye:
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)
Hizi siri zote mbili bado zinapaswa kupatikana kusoma ujumbe: ngazi ya nje inatoa tu NIP-44 encryption maandishi, na kufungua kwamba inahitaji ECDH classic. mpinzani quantum ambaye kuvunja secp256k1 anapata kichwa cha ndani na bado anakabiliwa na ML-KEM; kuvunja ya ML-KEM huchora ngazi ya nje na kuacha NIP-44 imara.
kem_ssHakuna kitu katika uingizaji huu kinachohusika na matokeo ya ECDH ya asili, ambayo ni nini Sehemu ya 6.1 inafanya.kem_ct,recip_kem_pkna vifungo viwili vya utambulisho vinahusishwa kama data zinazohusiana, hivyo kiwango cha nje kinahusishwa na transcript sahihi ambayo ilizalisha.
Kichwa cha ML-KEM cha mpokeaji kina maisha ya muda mrefu, lakini kila ujumbe unachukua maandishi ya siri ya kujitegemea na kwa hiyo ni ya kujitegemea.
kem_ssHiyo ni nini hufanya kuondokana na nonce badala ya randomize ni sauti:
ChaCha20-Poly1305 kwa ajili ya
ni kuharibiwa kwa kutumia tena (kifungo, nonce) pande, na hapa kifungo mwenyewe ni mpya kwa kila ujumbe, hivyo hakuna pande inaweza kurudia.
6.1 Kwa nini vichwa vinaendelea kuwa tofauti
Chaguo jingine ni kuchanganya siri zote mbili katika kifungo kimoja cha mazungumzo na kuwasilisha kwa NIP-44:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
Muundo huu ni sauti kama cryptography. Ina tatizo moja la muundo: inahitaji
ecdh_xMifano ya Mifano ya Mifano ya Mifano ya Mifano ya Mifano ya Mifano (NIP-07) au saini ya mbali (NIP-46Yeye hufanya NIP-44 kwa niaba ya mwaliko na anatoa nyuma maandishi ya encryption, ambayo ni hatua nzima ya kuweka kifungo mahali ambapo programu haiwezi kufikia.
Kwa hiyo, kuchanganya siri huondoa kila login ambayo inahifadhi kifungo cha utambulisho katika signer, ambayo ni kusema watumiaji wa makini zaidi, na hakuna kiwango cha kazi juu ya derivation ya kifungo kinaweza kubadilisha. Layering huondoa utegemezi: NIP-44 inabaki yote na huundwa na chochote kinachohifadhi kifungo cha utambulisho, signer ikiwa ni pamoja, wakati nusu ya KEM inachukuliwa kutoka kwa msimbo wa kurejesha unaohifadhiwa moja kwa moja.
Gharama ni bandwidth, na sio ndogo. ML-KEM encryption ni bytes 1,088 na huendesha kila ujumbe, base64url-coded kwa wahusika 1,451; AEAD ya nje huongeza kifungo cha 16-byte cha Poly1305 na huendeleza matumizi ya NIP-44 ambayo inapiga kwa theluthi moja. Ujumbe wa wahusika wa 50 huongezeka kutoka bajeti 176 hadi 1,712, na mmoja wa wahusika wa 2,000 kutoka 2,820 hadi 5,238. Jengo ni karibu 1.5 KB kwa ujumbe bila kujali jinsi ujumbe ni mfupi, ambayo ni bei ya kufungia upya kila wakati badala ya kutumia siri iliyoshirikiwa.
6.2 Maelezo ya mwenyewe ya payloads
ya pq2. prefix hufanya utekelezaji wa kuongezeka: ni mwenyewe-kuelezea, hivyo mteja huchagua njia ya ufumbuzi kwa kuangalia matumizi badala ya kuamini alama au kukumbuka kile peer inasaidia. Msomaji ambaye hana kutambua prefix hakuweza kufungua kazi hiyo badala ya kusoma kwa makosa, na ujumbe uliofungwa kabla ya upande wowote unaweza kufanya post-quantum kusoma kama kawaida NIP-44 bila uhamiaji.
ML-KEM decapsulation ni iliyoundwa ili kamwe kushindwa: kutokana na maandishi yaliyoboreshwa, mabadiliko ya Fujisaki-Okamoto hutoa siri ya deterministic pseudo-random badala ya makosa. Kwa hiyo, kifungo cha uongo kinakuja kwenye kifungo cha KEM kabisa - kinakuja kama kushindwa kwa HMAC ndani ya NIP-44, ambayo ni njia sawa ya vifungo vya uongo vya kifungo cha kifahari. Witoaji hutafakari wawili sawa, hivyo kushindwa hauna ishara ya kutambua. Hiyo pia ni nini hufanya orodha ya wagombea ya Sehemu ya 9.1 inafanya kazi: mteja hujaribu kila kifungo kwa upande na huwawezesha NIP-44 kusema ni nani alikuwa sahihi.
6.3 vichwa viwili vya wrap ya zawadi
A NIP-17 Ujumbe wa kibinafsi ni a NIP-59 karatasi ya zawadi: rumor isiyojulikana, iliyohifadhiwa chini ya kifungo cha utambulisho cha mtoa (kila aina ya 13), kisha iliyohifadhiwa chini ya kifungo cha kuchukuliwa kilichoundwa kwa ujumbe (kila aina ya 1059).
Usajili wa mtumiaji unapata kiwango cha nje tu. Usajili unatengenezwa na mtumiaji kama NIP-44 ya kawaida - maombi hayajawahi kuona kifungo ambacho hufanya hivyo - hivyo haiwezi kuingizwa katika nafasi. Hii haina gharama yoyote dhidi ya mashambulizi yanayohusiana: kifungo kinaweza kufikia tu kupitia kuunganisha, na kifungo ni kile ambacho rekodi inachukua. Mchezaji anayehifadhi trafiki iliyoandikwa anapaswa kuvunja ML-KEM kabla ya kifungo kinaonekana hata kushambulia.
7Ujumbe wa kikundi na ufungaji wa sehemu
Ujumbe wa kikundi sio maandishi ya siri moja. Ni maandishi ya moja kwa moja yaliyotolewa kwa kila mwanachama, kila nakala iliyoingizwa kwenye kifungo cha ML-KEM cha mwanachama huyo. Mshiriki ambaye amechapisha kifungo anapata wrap hybrid; mtu ambaye hana kupata wrap classic.
Hii inazalisha tatizo la hesabu kwamba utekelezaji usio na ujuzi unapata makosa. Ikiwa washiriki nane kati ya kumi wanapokea nakala ya hybrid, ujumbe ni sivyo mpinzani anahitaji nakala moja ya kawaida ya maandishi ya wazi ambayo ni sawa katika yote kumi, hivyo ujumbe ni ulinzi tu kama kila Hivyo ni nakala.
Nymchat kwa hiyo kufuatilia utajiri wa ujumbe kwa ujumbe wakati wa fan-out - idadi inaweza tu kujua wakati wraps ni kujengwa - na badge ripoti “ quantum-resistant kwa 8 ya wanachama 10” badala ya kudai ujumbe ni ulinzi. ya kupokea ujumbe wa kikundi (tu mtoa anachukua fan-out), interface taarifa sehemu badala ya ulinzi kamili. kudai ulinzi kamili juu ya nguvu ya nakala yake mwenyewe pekee itakuwa overstatement kuhusu ujumbe wote.
7.1 Nini ripoti ya Shield
Mlinzi anasema ukweli juu ya Ujumbe wa, sio kuhusu programu ambayo ilituma:
- Ulinzi kamili: kila nakala ya maandishi haya ya kawaida ilitoka hybrid.
- Sehemu: Baadhi ya nakala za ujumbe wa kikundi ziliondolewa kikamilifu. Kuondolewa badala ya kikamilifu, kwa sababu nakala moja ya kikamilifu ya maandishi ya moja kwa moja sawa katika yote yao ni mahitaji ya mpinzani.
- Classic inasema moja kwa moja badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge badge
Hukumu hurekodiwa wakati ujumbe unashikiliwa badala ya kurekodiwa kutoka kwa kile ambacho mtumiaji anatoa baadaye. Cifhertext ambayo tayari inapatikana haiwezi kuwa salama zaidi kuliko ilivyokuwa, na interface ambayo kurekebisha ujumbe wa zamani juu ya nguvu ya matangazo mapya itasisitiza kitu cha uongo kuhusu bytes kwenye relay.
Kanuni za kikundi juu ya makundi juu ya hii badala ya kubadilisha: ujumbe wa kikundi ni kamili ulinzi tu wakati kila mwanachama nakala ilikuwa, na ujumbe wa kikundi kupokea bila idadi ya utajiri inaonyesha sehemu.
8Maandiko yaliyoandikwa kwa mwenyewe
Mambo kadhaa ambayo mteja anahifadhiwa kwa utambulisho wa mtumiaji mwenyewe: mipangilio iliyosambazwa, orodha ya mazungumzo, makala ya kikundi, na kumbukumbu ya ujumbe. Hizi zinachukua zaidi kuhusu mtumiaji kuliko ujumbe wengi wa moja, hivyo kuondoka kwa classic itakuwa kitu cha dhaifu zaidi kilichowekwa bila kujali jinsi ujumbe wenyewe zilikuwa zimefungwa kwa makini. nymchat-pq-root jamii yenyewe, ambayo haiwezi kufungwa chini ya kichwa ambacho inaweza tu kuzalisha.
Blob ya mipangilio au mstari wa makaratasi unaishi mahali fulani kwa miaka, ambayo ni hasa sura ya kitu ambacho mpinzani anakuja - zaidi kuliko ujumbe wowote, ambayo ni angalau ya muda mfupi katika akili ya mtumiaji mwenyewe.
Moja ya vikwazo husimamia muundo hapa badala ya muhimu. nakala yenye anwani lazima iwe inaweza kusomwa na kila kifaa kwenye akaunti, hivyo kila kifaa kinatoa matangazo ya kile kinachoweza kufungua katika orodha inayotolewa na matangazo yake, na akaunti huandika tu kile ambacho wote wanaweza kusoma. Kuandika kitu kingine chochote kilifungua kifaa nje ya mipangilio yake mwenyewe - makosa ya kimya sawa ambayo Sehemu ya 3.2 inapinga kwa njia nyingine, kuja kutoka mwelekeo tofauti.
Kifaa ambacho kina utambulisho lakini sio mizizi haiwezi kufungua kitu chochote kilichopigwa kwenye kichwa cha mizizi, ikiwa ni pamoja na mipangilio yake mwenyewe. Hiyo ni matokeo ya makusudi, sio usimamizi, na ndiyo sababu Sehemu ya 3.3 ina kifaa kama kilichopendekeza kwa kuunganisha badala ya kuunganisha mizizi mapya: mizizi ya pili haifai kusoma blob, inachanganya tu vifaa vya msingi vya utambulisho katika mbili.
Kifaa ambacho kinaendesha upanuzi wa kivinjari au signer ya mbali (NIP-46) haina nsec inayotoka, lakini ina msimbo wa kurejesha, na chini ya ujenzi wa kiwango cha Sehemu ya 6.1 ambayo ni nusu ya baada ya quantum inahitajika: signer hutoa kiwango cha NIP-44 kama ilivyo daima, na mteja huchagua kiwango cha nje mwenyewe.
9Rota ya
ya epoch Counter katika derivation ni nini hufanya rotation iwezekanavyo bila nyenzo mpya muhimu. Kuongezeka kwa hiyo hutoa nyaraka mpya ya nyayo kutoka mizizi moja na matangazo iliyochapishwa tena; wenzake kuchukua nyayo mpya kutoka rekodi iliyoweza kubadilishwa.
9.1 Enzi za zamani zinahifadhiwa, na hakuna kitu kinachojulikana tena
Hakuna kitu kinachoripotiwa tena wakati kifungo kinageuka. Mteja huunda wagombea wa ufunuo kutoka wakati wa sasa hadi wakati wa − 3, hivyo ujumbe uliofungwa muda mfupi kabla ya uongofu bado unapatikana dhidi ya kifungo cha sasa kilichokuwa wakati kilichotumwa.
Hiyo ni kitu ambacho hufanya rotation salama kufanya kabisa: bila yake, kila rotation itapoteza chochote kilichokuwa katika ndege. Kila kitu ambacho tayari kilichojengwa kinaendelea kusoma kwa maisha ya utambulisho, kwa sababu ujumbe ambao mtumiaji hawezi tena kufungua ni mbaya zaidi kwao kuliko moja ambayo ulinzi wake hauwezi kuboreshwa nyuma (Sehemu ya 10.5).
10Nini hii haina kulinda
Makala ambayo inasoma tu kile unachofanya muundo haina kuelezea mfumo, na kuongezea mali ya usalama katika interface ni mbaya zaidi kuliko kusahau.
10.1 Rangi ni siri ya pili, na kupoteza ni haipatikani
Hii ni gharama halisi ya kubuni. Kizuizi katika Sehemu ya 2 kwamba mtumiaji anapaswa kuwa na kitu kimoja cha kuweka haiwezi kukidhiwa: nsec pekee haina kurejesha kichwa cha post-quantum, kwa sababu suala la yote ni kwamba hakuna thamani ya umma na hakuna siri nyingine inafichua. Ikiwa hakuna kifaa kinachukua mizizi na hakuna vifungo vya Sehemu ya 3.2 vinaweza kufunguliwa, vifaa vilivyofungwa kwa kichwa cha mizizi haiwezi kurejeshwa.
Kwa usambazaji wa mikono njia pekee, hii ni mwepesi zaidi kuliko inaweza kusoma kwanza. nympq1… code mahali popote ina nakala moja tu ya hiyo, kwenye kifaa kimoja, na kupoteza kifaa hicho hupoteza kila ujumbe wa post-quantum, mipangilio ya blob na mstari wa kumbukumbu uliofungwa kwake.
nsec haina manufaa; hiyo ni mali ambayo muundo wote unategemea.
Mshambuliaji atapiga njia ya bei nafuu inapatikana, hivyo mpango ni thamani ya njia yake dhaifu ya kurejesha ni thamani - passphrase kumbukumbu, kwa mfano, ingekuwa kuweka mambo yote juu ya chochote passphrase ni thamani, na mstari kuunganishwa ni kweli artefact mpinzani kukusanya-kwa sasa-kufafanua-katika baadaye kukusanya na mnyororo offline wakati wa burudani.
10.2 Utambulisho, kama tofauti na siri
Kila saini katika Nostr ni Schnorr juu ya secp256k1, na hii haijabadilika hapa. mpinzani na kompyuta ya quantum anaweza kuiba saini na kuonyesha mtumiaji katika muda halisi. Nini mageuzi ya kichwa ya hybrid inashindwa ni kukusanya-now-decrypt-na baadaye: mshambuliaji anayerekodi trafiki leo hawezi kusoma baadaye. Haifanya ujumbe usipowezekana dhidi ya mpinzani ambaye tayari ana mashine. Utambuzi huu unachukuliwa katika maombi kwa makusudi - alama ya padlock inaripoti usajili, alama ya siri inaripoti usiri, na wao ni glyphs tofauti kwa sababu ujumbe unaweza kuwa na moja bila nyingine.
Pia hupunguza kile ambacho taarifa katika Sehemu ya 4 inaweza kuahidi. Kuunganisha kati ya npub na ML-KEM key ni saini ya secp256k1, hivyo mpinzani ambaye anaweza kuiba hizi anaweza kubadilisha kifungo chake mwenyewe. siri dhidi ya mpinzani wa baadaye sio sawa na ukweli dhidi ya mmoja.
3.3 Maelezo ya Metadata
Ujumbe wa kiroho unamfukuza msomaji, mpokeaji zaidi ya mmoja p tag, aina, na timestamp ya ujumbe wa ndani. Haifichui kwamba tukio linapatikana, ukubwa wake, au wakati relay alipokea. uchambuzi wa trafiki haujadiliwa na sehemu yoyote ya kubuni hii.
4.3 Maelezo ya mtandao wa offline
Uhamisho wa bluetooth wa Nymchat ni mkataba tofauti na mikono yake mwenyewe, na haukujumuishwa na kazi hii.
10.5 Ujumbe uliotumwa tayari
Ciphertext iliyoandikwa wakati pande zote mbili zilikuwa bado classic classic daima. Ni tayari kuna na haiwezi kufungwa upya. Ulinzi huanza kwenye ujumbe ambapo pande zote mbili zilikuwa na vifungo vya post-quantum, sio wakati kipengele kilichowekwa.
11Mabadiliko ya kufikiri
| Njia ya | Kwa nini si |
|---|---|
| Kuondoa kichwa cha post-quantum kutoka kichwa cha utambulisho | Kuondolewa. derivation ni algorithm ya umma juu ya nsec, na mpinzani wa quantum hupata nsec kutoka npub iliyochapishwa, hivyo kuvunja nusu classic mikono juu ya nusu ya baada ya quantum na hilo. |
| Kutuma mizizi kwa vifaa vingine vya mtumiaji kupitia NIP-44 | Rangi iliyotumwa chini ya encryption ya kisasa tu inaweza kupatikana na mtu yeyote ambaye alijaribu ujumbe huo na kuharibu kichwa chake baadaye, ambayo ni adui ambaye mizizi inapatikana kuzuia. |
| Kiungo cha ML-KEM kilichotengenezwa tofauti kwenye kila kifaa | Vifaa vitakuwa na vifungo vingine vya decapsulation, na kipengele kimoja kinachoweza kubadilishwa kwa kila utambulisho hauwezi kuwa na wote. Wawasiliani watajifunza kwenye kifungo ambacho kilichochapishwa mwisho, na kila kifaa kingine kitakuwa hauwezi kusoma matokeo. Mchakato mmoja kwa kila utambulisho, ulioendeshwa na njia za Sehemu ya 3.2, ni kile kilichopinga. |
| Weka mizizi chini ya PIN | Kuzuia. PIN ya namba nne ni karibu bit 13 dhidi ya mshambuliaji wa nje ambaye ana mstari wa kuunganishwa. Kutoa pamoja na njia mbili za 256-bit ingekuwa kuonyesha vibaya thamani ya kuunganisha dhaifu. |
| Kuendesha NPUB ili kuendesha vifungo viwili | 1,184 bytes sio kitambulisho cha kuchaguliwa, na litapiga hatua kila mteja wa sasa wa Nostr anayefafanua anwani inayojulikana kama 32 bytes. |
| Huduma ya Key Directory | Inaonyesha tena mamlaka ambayo mtandao unayoishi ili kuepuka.Mtu yeyote anayejibu utafutaji anaamua nani anaweza kusoma ujumbe. |
| Kuunganisha kifungo kwa kila ujumbe | Hakuna suluhisho: Mtumiaji anahitaji Mtumiaji wa chaguo kabla ya ujumbe wa kwanza, ambayo ni hasa kesi na hakuna ujumbe wa awali wa kuleta. |
| Uwezo wa Mazungumzo ya Band | Inaunda eneo la kupungua. Mshambuliaji ambaye anaweza kuondoa bendera ya uwezo inachukua njia ya kawaida. |
| Post-quantum tu, hakuna miguu ya jadi | Kuondoa miongo kadhaa ya uchambuzi wa secp256k1 kwa kubadilisha primitive mdogo zaidi. zote mbili ya faili. |
12Utekelezaji wa Parity
Nymchat inatoa utekelezaji wa kujitegemea wawili wa ujenzi huu - moja katika JavaScript kwa maombi ya wavuti, moja katika Dart kwa maombi ya simu, ikiwa ni pamoja na mlango wa ML-KEM-768.
Utekelezaji wa Dart ML-KEM umeidhinishwa dhidi ya rasmi
Nishati ya ACVP
Ufafanuzi wa Mifumo ya Mifumo ya Mifumo ya Mifumo ya Mifumo ya Mifumo ya Mifumo ya Mifumo (ML-KEM-*-FIPS203) — 25 key-generation, 25 encapsulation na 10 kesi decapsulation, kuendesha kama suite yao wenyewe. Hizi ni vektor NIST inachapisha kuthibitisha utekelezaji, hivyo kupita yao ni ushahidi kwamba bandari ni sahihi, si ushahidi tu kwamba wateja wawili wanakubaliana na kila mmoja. Zaidi ya hayo, pamoja fixture ya vektor ya mtihani - derivation ya mbegu, encapsulation, wote faida format, na kamili gift wraps - ni kuzalisha kutoka kwa JavaScript reference na kuthibitishwa na zote mbili mtihani suites. siri ya mizizi kupanua fixture hiyo badala ya kubadilisha yake: mizizi kwa mbegu, mizizi kwa keypair, picha ya umma ya mizizi, na derived key, nonce na data zinazohusiana ya ngazi ya nje ni vektor yao
nympq1… Kodi inamaanisha au kuhusu bajeti ambayo ujumbe unafungwa na. Kutofautiana katika utekelezaji wowote unashindwa kujenga badala ya kuzalisha ujumbe ambao mteja mwingine hawezi kufungua.
Hiyo ni nini inasema kifaa “ hii ni mizizi niliyo nayo” kutoka “ hii ni moja tofauti, na mteja ambaye hakuweza kuiga picha ya mteja mwingine angeweza kusoma rekodi nzuri kabisa kama hakuna rekodi kabisa - na kisha, kufuatia Sehemu ya 3.3, kupiga mizizi ya pili na kugawana utambulisho.
ya Nymchat Chanzo cha wazi chini ya AGPL-3.0. Nyumba ya cryptographic iliyoelezwa hapa ni
js/nym-crypto.js na js/modules/pq.js kwenye tovuti ya mtumiaji, na
lib/core/crypto/ kwa lib/features/identity/pq_registry.dart kwa wateja wa simu.
Kwa maelezo ya muda mfupi, yasiyo ya kiufundi, angalia Ukurasa wa msingi wa ujuzi juu ya encryption ya quantum-resistant.