Nymchat техник белдерешмә
Nymchatта квантаннан соңгы ачкычны килешү
ML-KEM-768 ачык ключларын каталог яки реестрсыз Nostr аша тарату һәм аларны берни ендә дә ачык кыйммәтләр аша күртелмәгән секрет аша төмелләргә.
Messengerгә пост-квантлы ачкыч алмашуны өстәү күпчәнлекле криптография проблемасы түгел. Пристивлар стандартлаштырылган һәм китапханналар бар. Кыйынрак часть — хәзер һәрбер катнашучыга ... кирәк. икенче ачык ключ, ә децентральләштерелгән сетьдә аны урнаштырырга ачык урын юк. Бу эссе Nymchatның бу сорауга ничек җавап бирешкәнин — икенче ключның нинди җердән килүен, ул кирәкле кешеләргә ничек җитүвен һәм интерфейс нәтиҗә турында нинди билгеләмәләр бирә алуы турында — тасвирлый; ә соңгы бүлектә бу нәтиҗә нәрсәне кургай алмый икәнен аңлата.
Бу бит уңайлык өчен машинага тәрҗемә ителгән. Инглизчә оригиналь - кулланыла торган версия.
1Проблема
Nostr шәхси хәбәрләре ... белән шифрлана NIP-44, аның ажыратыла алучы ике бүлеге бар. Текстны чаташтыручы бүлеге — HMAC-SHA256 теге белән ChaCha20, ачкычы аша... HKDF (RFC 5869) — квант компьютернары тарафыннан значимый чакрыту астында түгел; Гровер алгоритмы симметрияле ключга каршы квадратлык тизләткеч бирә, 256 бит буны йоклый. Шуның половины... риза була клуч өстендә эллиптик криваялы Диффи-Хеллман өстендә secp256k1, һәм Шор алгоритмы дискрет логарифмны турыдан-туры чичә. Аның публик парносынан бер приват ключны кайтарып алу үткән заманнан бүлеп чыправлый шул ключ аша җитештерелгән һәрбер уртак сырны.
Бу дәрәҗәдәге улAn бу машина бар булгандага кадәр кичелмә. Саклау уңыны булган каршылаш бүген шифрланган текстны җыел итә ала һәм бу мөмкинлек килгәндә аны шифрдан ача ала. Хәзер җибәрелгән һәм анчанда да мөһим булган һәр нәрсе тәгәлдерүгә дуча булып тора. Бу — кванттан соң ачкыч алмашу җиңә тотуча атала һәм шуңа күрә эшне бу машина чыгарга кадәр күтәртә алмыйбыз.
1.1 Бу мәкалә җавап бирә торган сорау
Чирешү яхшылы аңлашылган: классик алмашу белән бергә постквантлы ключ капсулалау механизмын кулланырга, шулай итеп, һәрнәрсәне укыу өчен һакер икесен дә сыймырга кирәк була. Nymchat ML-KEM-768 куллана (FIPS 203). Бу тиз дә таркатыш проблемасын туудыра:
Aliceгә бүген хәбәр язышу өчен бер нәрсе кирәк: аның npub-ы. Квантан соңкы алмашуны өстәсәңгез, икенче нәрсе кирәк — аның ML-KEM ачык ачкычы. Бу ачкыч кайда урнашкан һәм аңа бернәр җибәрмәдән алдыннан аны ничек алырга мөмкин?
Npub — ул үзлекле. Аны кагазга язып, катып укып яки экраннан сканерләп алу мөмкин, һәм ул сиңа шифрлау өчен кирәкле генә нәрсә. ML-KEM-768 ачык ачкысы 1,184 байт. Аны катып укып булмый, ул имяга (username) сыймай һәм ул 32 байт гына булган идентифкация белән бергә QR-код эчендә булырга мөмкин түгел.
Зурлык — җиңел ягы. Кыйынрак ягы — икенче ключның өч төрле проблема алып килүе, бу мәкаләнең калган өлеше күп итеп аларны җаваплау булып тора:
- Аны алмаштыра була. Бер карау белән беркем дә төшендез укый алмыйган ачкыч — ул атакалаучы үзенеке белән алмаштырачак нәрсәнең үзе. 4 нче бүлек аны имза ярдәмендә шәхслыйга байлый, бу исә бу мәсьәләне бердәм чирешер.
- Улwyddelның җыелгычларында синхронлы булырга тиеш. Телефон һәм ноутбуктагы бер диктле аккаунт бер диктле ключны күрсәтәргә тиеш, әллә берсе белән ябылган хәбәрләр икенчеседә ачыла алмый. 3.2 бүлек буны аңлата.
- Югалырга мөмкин. Ачык ключ сырдан яңартыла, шуңа күрә чын мәгънәдә сакланып калырга тиешле нәрсә — ул шушы сыр, һәм конструкция буенча башка ничем аны яңадан төзмәс. 10.1 бүлек буның ка цену турында ачык әйтә, чөнки бу мәсьәлә чирелергә түгел, ә бу өчен түләү керә.
2Дизайн чәкъләүләре
Төлгез чикләү шартлары җавапны формалаштырды һәм алар код язылуыннан әлди ук күпчелек ачык дизайннарны алып тасалый.
- Сырлар чикләнгән булсын. Nostr кушынучыларында үзендә бер генә сыр бар, ул — nsec. Яңа сырларның һәрберсе — тарихыгызны югалтырга мөмкинлек бирүче бер башка юл; nsec-ны сакларга (backup) белгән кеше башка ниндиген дә сакларга белмәйсә. 3.1 бүлем шулны күрсәтә: бу мәсьәләне турыдан-туры хәл итү мөмкин түгел — nsec-нән алынган пост-квантлы ачкыч берничә пост-квантлы курканыш бирми — шуңа күрә дизайн бер генә сырны калдыра: һәр аңгалт (identity) өчен бер тапкыр генә яратылган, nsec форматында һәм үзе дә nsec урыннарында бирелә торган бер генә ачкыч материалы. Бу ничек ясала: бернәсени сакларга белгән кеше, икенчесен дә сакларга белә. 10.1 бүлем бу процессның бирелә торган биренешләре турында ачык сүзләгән.
- Вәкаләт юк. Кайсы ачкычның кемгә билешкәнен әйтергә иверенергә мөмкин булган сервер юк. Кулланган һәрбер сервер хәбәрләрне башка юллага эзертә алачак ноктага әйләнә.
- Күп җыелгычлар, бер шәхсият. Nostr идентихлеге бер вакытта берничә клиенттан кулланыла. Ачкыч материалнарының барысы да барысында да бер теләгән булырга тиеш, ә ачкычны жеткерер юллар функция якланырга тырышырга җыен хыйнәткер тарафыннан укыла алмарга тиеш.
- Килешүләр мөмкин түгел. «Кайсы шифрләрне кабул итәсез?» дигән сорауны канал эчендә үзара алмашу — атакергә слабырак вариантны кулланырга мәҗбүрләү өчен мәгълүматны китереп алырга мөмкин булган атака өсте. Дизайнда төшәрү (downgrade) өчен бернәр булмарга тиеш.
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 кебек күрсәтелә: bech32 кеше укый ала турган префикс белән
nympq, шулай укыла nympq1…, nsec рядомда, тоżsентлек экранында, шул ук ачу үзарышы аша күрсәтелә, шул ук контроль белән күчертелә, һисапка алынмый һәм берни яəрへ ачык видтә җибәрелми. Бу пароль түгел һәм логин да түгел. Бу nsec кебек, кулланучы саклап кала ала турган ключ материалы.
Төзе аңлап доменнән бүленгән, шуңа күрә башка берсекрем дә шул ук парны төзмәслык мөмкин түгел. Шул... epoch контр әйләнешне тәэмин итә (9 нче бүлек).
3.1 Ни өчен ачкычны идентификация ачкычыннан алырга булмый
Аңлаешлы дизайн — парны (keypair) пользовательнең эйдәдә булган секреттан тудыру:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
Бу түшенчә түртенче сәбәп белән кызыклы, аларның барысы да чын: саклау өчен яңа нәрсә кирәк түгел, чөнки nsec үзенең үзе саклау булып тора; һәр җитәклек конструкция буенча килешкән, шулай и텝 синхронизация протоколының сызылу куркынычы юк; һәр идентифкация өчен бер генә алмаштырыла торырга мөмкин булган хәбәр дөрес дип санала, чөнки җитәклекләр ачкыч буенча килешмәс дигән уем юк; һәм ачкыч чын чыгарылмасданнә прежде булган, шулай и텝 клиент беренче тапшыруда үзенең үзенә нәрсәдерне бүгелә ала.
Четырь өстәмлек тә бер сәбәптән кадерсез. Чыгарылган npubгә карата кулланылган Шор алгоритмы nsec нәтиҗәсен бирә. Seed алу — nsec өстендәге ачык алгоритм. Шуңа күрә, классик ярымны сынган каршылаш, башкалар кулланырга яраклаган шул ук HKDF-ны кулланырга җитәрлек, пост-квант ярымны кайтара ала. «Хәзер җыйна — соңрак сыз» (harvest-now-decrypt-later) — бу функция туктатырга тирәләгән бер генә куркыныч — шулай алынган ключ бернәр дә өстәмә.
ML-KEM декапсуляция ачкычы nsec-ннан алынырга мөмкин булмаган һәм классик шифрлау аша бер куп җибәрелмәгән энтропиядән алынырга тиеш.
Бу кагыйдәнең икенче бүлеге бернчесе генә зур роль уйный. Үзе генә ясалган сыр аннары NIP-44 хәбәре аша берничә җәһаз арасында синхронлаштырылса, бу — бер төрле сыймыклылык, тик аның өстәм адымнары бар: каршылыклы тараф хәбәрне бүген көтер һәм аның классик ачкычын соңрак тапса, төп сызык да чыгып кетер. Шул сәбәптән киләсьәле бүлекдәге юллар именно шундай һәм аларның берсе дә «аны башка җәһазыңа җибәр» дип аталырга мөмкин түгел.
3.2 Rootны بەлгеле пользовательнең башка устройстваларына алырга
2 нче бүлекнең 3 нче шартleaf — бер төлек, берничә җитәлек — биредә арифметик тәкърып белән үтәлергә мөмкин түгел, чөнки төп мәгънә — ключ җитәлекләр алчактаннан уртаклыклары булган берни нәрсәсе дә функциясы түгел икән. Ул ташу (transport) аша үтәленәргә кирәк, һәм биредә бер генә юл бар: кутланучы... nympq1… үзләрене кодлыйлар.
Корень шул видә күрсәтелә nympq1… nsec янында, һәм икенче җитөз аны бер төрле панельгә чапсаmış ҳолда кабул итә. Бу — механизмның бүтлек механизмы. Код бителмәгән җитөз катнаша алмый, буны 4.2 бүлегендә тасвирлый.
Кул белән күчертү — алгынчы адым түгел, ә аңлап сакланган төбен. 3.1 бүлегендәге кагыйдә түбәкне тик классик шифрлау аша үтмәсен дип әйтер, ә бу процессны автоматлы итәрлеген һәрбер механизм — аны реле аша синхронлау яки аны идентификация кәртеренең йомышка тыюы — дәл шуны буза. Кулланучы үткәргән бу адым курканышның чын булышы өчен сәбәп булып тора.
Формат wrapланган юл өчен урын калдыра: рекорд wrapлар исемлеген ашырырга мөмкин, аларның һәрберсе башка җәһазда кулланучы яңадан чыгарырга мөмкин булган ключ астындагы AEAD blob — мәсәлән, passkey PRF нәтиҗәсе. Бүгенге көндә бу функция җиткерелми, һәм бернисе җиткергәнчә, ... nympq1… Код — үтүнең бер генә юлы. 10.1 бүлек аның бәясе ничә икәнен билгеләгән.
Тизмәнең үзе үзенең үзгәртеп değiştirү категориясында урнашкан, nymchat-pq-root, һәм башка категориялар кебек синхронлаштыра. Wraps булмаса да, ул зарур эшне башкара: аның булганлыгы икенче устройство бу идентификациянең үзенең төп (root) икәнен белә, бу исә аның каршылыклы бер тәкъдире ясавын туктата (3.3 бүлек).
Бу nymchat-pq-root категория булырга тиеш түгел төп-ключтан алынган ML-KEM ачкычына шифрланган. Бу ряд төпнең бер генә нусхасын тасывый, шуңа күрә аны төпкә нигезләнгән ачкыч белән бикләү — ачкычы корбаның үзендә булган бәйләмә: аны бер нинди дә җыелгыч та ачып алган булмый, шул исәптән аны язырга язган җыелгыч та. Ул классик ысемнә — NIP-44 үзегә — яки берничә дә бикләнмәгән. Бу — дизайн классик-гынагыгы ящитләүне кабул иткән бер генә урын, һәм бу үткәрә ала: бүгенге көндә рядта төп юк, тик аның бар икән дигән факт гына бар.
Барлык башка тәртипләүләр категориялары да түбәктән алынган ключны кулланырга мөмкин һәм кулланырга кирәк. Бу — бер гаешлек, һәм ул көч турында түгел, ә циклилек турындагы гаешлек.
3.3 Ясау һәм кабул итү
Система эшләргә башлаганда, турак идентифкациясе белән клиент түслемтәдә эшли:
- Бар булган эзләнегез
nymchat-pq-rootзапись. - Запись табылды, һәм бу җыик аны ача ала. — аны кабул ит һәм бу идентифканы постквантлы мөмкинлекле буларак анонс ит.
- Язу табылды, ә бу җыһаз аны ача алмый — яңа төк (root) яратмагыз һәм бернәмсе хәбәрне дә ялмасын. Куданычтан ... кертеп, бу җыелгычны бәйләнергә сорагыз.
nympq1…Үзе код булган аппараттан код. - Язмак юк — сы ярат, языуны яртат, хәбәр ит һәм ... күрсәт
nympq1…Кодны кулданучыга бер генә җибәрегез, ул аны саклап алу өчен.
3 нче адым — хата ясау җибәр адым, һәм шул сәбәптән тәртип һәр реализацияга калдырылмый, ә язылып бирә. Төп ясарга караган ике җыелгыч бер төлек идентификатор аша ике аерыılmış төп чыгара, һәм бу тәртип шушы хәлне алдын алу өчен кирәк.
4Мөмкинлекләр турындагы ачыклау
Алынган ачкычлар җыенның ачык өлеше яэвга адресланалыш буларак чыгарыла.
NIP-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 кədәр көчле. Башка капсулалау ачкычын алмаштыру өчен secp256k1 имзасын ясалма итеп ясау кирәк. Шулны кыла ала турган һакерга KEM белән шөлемләнергә кирәк түгел.
Игъланнар мөһәл теле тәмамлана. Җи көннәлек NIP-40 мөһәл애те үтеү, һәр 24 сәгатьтә яңадан басылу, төкермне клиентның үткән клиент түгел, ә әле дә дәвам иткән клиент турындагы төкермә булып калдыра. Түбәнгы үзәк мөһәл애те юк; аның турындагы идга гына мөһәл애те үтә.
Вакыты үткән хәбәрни hiç ачкычсыз булган хәбәр кебек төшенә укыйлар: тәңдәшләр һәрбер логин укый алачак гади NIP-44 җибәрәләр, ә клиент хәбәрне кайта яңартганда, киләсьә bağlantәсендә пост-квантлы алмашнуны дәвам итә. Шулай итеп, бер ҳафтадан башка тыныч тоту аралыкта җибәрелгән хәбәрләрне курганышны югатырга чагыштыра — алар квант аталавына каршылыкка ия түгел, ә классик шифрланган — һәм башка бернәргә бернәр үткәрми. Хәбәрнең киләсенә бернәр дә тәэсир итми, алдан алынган хәбәрләр укырга булмай дигән түгел һәм кайтарга бернәр дә кирәк түгел.
Бу асимметрия срокның тәмамлануының сәбәбе, ул аның саналип булган хәле түгел. Анысыз, язма үз ачкычыннан да дәвәмле яши: сөнгән, яңартылган яки төп элементе алынган җыга Toch, беркем дә калдырмаган ачкыч белән капсулалау буенча туктатмасыз инструкция калдыра, һәм аның аша җибәрелгән хәбәрләр бер якта да хата күрсәтелмәеннән югалып китә. җите көн бу вакытны чикләп бирә һәм клиентларның күреп калуына тәвассылык итмәс$(e)н, релеларга язманы үзләре уңыту мөмкинлеген бирә.
Ачкыч поле аның форматын атап беleştir. Күшер... pk2, һәм цифр декорация түгел, ул контрактның бер өлеш булып тора: ул ачкыч каулга (payload) форматының исемен билгели. Бу полены танымаган укыучы «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)
Мүмкинлекләрне килешерү юк, дәргезләнгән алгоритмнар исемлеге юк һәм атакучы слабыр юлны күмәлләү өчен чистар итә алган идән дә юк. Хәбәрнамәне тоту. is килешү, һәм ул имзаланган. Кыскартылган яки урынга куелмаган хәбәр ителмәе очрау режимы — гибрид хәбәрне жасалма хәбәргә төшереве түгел, ә хәбәрнең классик режимга — бу функция чыгарылганга кадәрге статус-квога — күчәве.
Керәсен дә дөрес һәм ул күбрәк мөһим: клиент гибрид җибәрә гына аның калитәсе булганда һәм калитә тоту — калучының декопсуляция ясавы икәнлеген дәлелләүче хәл. Кванттан соңгы (post-quantum) хәбәрне аны укый алмый торган кешегә җибәрү өчен бер дә мөмкин булмаган хәл юк.
6Гибрид конструкция
Nymchat NIP-44 ни алмаштырмый. Ул аны каплап ала. Үзгәрмәгән 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һәм ике идентификация юкмасы да бирелгән мәгълүмат (associated data) буларак теркәлә, шуңа күрә тышкы катлам аны ясаган төп текст (transcript) белән бәйләнгән. Шифрланган текстны башка җибәрүченең идентификациясенә кушып кую шифрны ячәү түгел, ә аутентификациядан үтмәвегә алып килә.
Инкапсуляция һәр хәбәр өчен яңадан башкарыла. Алучының ML-KEM ачкычы дәвамлы булып тора, әмма һәр хәбәр тәваңсыз шифрланган текстны һәм шуңа күрә тәваңсыз ташый
kem_ss. Шул нәрсә nonceны рандомлаштырга караганда аны төзеүне төгәл итә:
ChaCha20-Poly1305
(key, nonce) җәбәрләмәсен (пар) кайта куллану белән бэрелә, ә биредә ключның үзенең һәр хәбәр өчен яңа булышы сәбәпле, шуңа күрә бер җәбәрләм (пар) кайтала алмый.
6.1 Ни өчен катлар бүлек кала
Альтернатива — ике секретны бер сөйләшү ачкычына берләштерү һәм аны NIP-44гә тапшырыш:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
Бу конструкция криптография буларак дөрес. Аның бер структур проблемасы бар: аңа кирәк
ecdh_x, ECDH чыгарылышының чисте x-координатасы ачкыч материалы буларак — һәм браузер берләшмәсе (NIP-07) яки алыскы имзалаучы (NIP-46) ул бу күрсәткәничне һич качан кайтармый. Ул чакыручы урынына NIP-44 операциясын үткәрә һәм шифрланган текстны кайтара, бу — ачкычны приложение җитә алмыйган берәр урында саклауның төп максаты булып тора.
Секретларны аралаштыру шунда ниди, шәхсәт ачкычын имзалаучыда (signer) саклаучы һәрбер керүне төшерә, ул ниндигә дә — иң сак пользовательләрне — әйтеми, һәм ачкыч туудырыш (key derivation) өстендәге һәрндиен дә буны үзгәртә алмый. Ҡабатлашу тәвалюллектән азбулы чилә: NIP-44 бүтлек кала һәм имчәлаучы булсак, шәхсәт ачкычын саклаучы нәрсәме исә, шуны тарафыннан чыгарыла, ә KEM чиге клиент тикләгән торланды кодыннан (recovery code) хисепләнә. Имзалаучы керүләре ике якта да гади пост-квантлы катышучылар булып тора.
Төлләш — каналдан үткәнелек күләме, һәм ул чыкка ук юк түгел. ML-KEM шифрланган тексты 1088 байт тәшкил итә һәм һәр хәбәргә эleştirә, base64url форматында ул 1451 символга кадәр үсә; тышкы AEAD 16 байтлы Poly1305 теге (tag) өстә һәм ул каплаган NIP-44 зәяләмәсен (payload) өчтән бергә күбәйтә. 50 символлы хәбәр 176 байттан 1712 байтка, ә 2000 символлы хәбәр 2820 байттан 5238 байтка кадәр үсә. Хәбәр ничтәнчә кыска булса да, һәр хәбәр өчен минималь күләм тахлый 1,5 КБ тәшкил итә, бу — уртак сырны кабатлап кулланыргарлык, һәр тапкыр яңадан капсулалау аша түләү ителә торган төлләш.
6.2 Үзе үзе тасвирлый торган җыелмәләр
Бу pq2. Префикс урнаштыруны этаплы ясый: ул үз-үзе турында мәгълүмат бирә, шуңа күрә клиент тегга ишенәргә яки партнёр нинди форматны кабул итә дигәнне истә тотырга кирәк түгел, ә payloadны тикшереп, дешифровка юлын сайлый. Префиксне танымаган укыгыч мәгълүматны хаталы укырга тырышмый, ә аны ача алмый, ә пост-квантлы защита ясалмадан әгәр дә хәбәрләр ябылган булса, алар берни миграциясез гади NIP-44 форматында укыла ала очаклары кала.
ML-KEM декапсуляциялашу бер куплыга да сбой бирергә йөксәтелгән: сыйфәтсезне шифрланган текст бирелгәндә, Fujisaki-Okamoto трансформациясы хата түгел, ә детерминистик псевдо-рандомлы сыр ясылышын кайтара. Шуңа күрә, яллаш ключ KEM ягытлаmdan күренми — ул NIP-44 эчендәге HMAC сбой буларак күрәлә, ул классик яллаш ключның күрелү ысулы белән бер теләк. Чакыручылар икесен дә бер төрлелә каралар, шуңа күрә сбойның берәр айнытучы билгесе юк. Бу, шулай ук, 9.1 бүлекнең кандидатлар исемлеген эшкә яракашлы ите: клиент һәрбер ключны чирешләп сынап күрә һәм NIP-44 ниндисенә туры geldi икәнен әйтә.
6.3 Бүләк бүләге ике катламы да
A NIP-17 җассы хәбәр — бу NIP-59 gift wrap: имзаланганмаган сүз, ул җибәрүче исполни ачкычы (13 төрле) астында мөһрләнгән, аннан соң һәр хәбәр өчен яңадан яратылган бердәмлекле ачкыч (1059 төрле) астында кутерү. Исполни ачкычын тунык тотучы входта Nymchat ике катламны да гибридлай, һәрбер катлам үзенең капсулациясына ия.
Имзалаучы керүе тышкы катламны гына ала. Мөһр имзалаучы тарафыннан гади NIP-44 булак ителә — приложение аны ясаган ачкычны бер куп иртем дә күрми — шуңа күрә аны усайт гибридланмарга мөмкин түгел. Бу каралган атакага каршы берниен дә үземә китерми: мөһргә тик бүтермә аша гына жетәргә мөмкин, ә бүтермә — рекордлаучы саклаган нәрсә. Язылган трафикны эйәләгән каршылаштучы атака ясау өчен мөһр күренмәсендә җиттән ML-KEMны сыймырга тиеш.
7Группа хәбәрләре һәм парсиаль каплау
Группа хәбәре — ул бер шифрланган текст түгел. Бу һәр членга таратыла торган бер төрле ачык текст, һәр нусха шул членның үзенең ML-KEM ачкычы белән капсулалана. Ачкыч чыгарган член гибрид wrap ала; чыгармаган член классик wrap ала.
Бу яңылган реализация төгәл исәпләми торган бухгалтерлык проблема тудыра. Әгәр ун членның восьме гибрид копия алса, хәбәр... түгел сексен уннан сексен кургалланган. Противниккә барлык ун нусхада да бер теләшле булган ачык текстның бер классик нусхасы кирәк, шуный да хәбәр тик... һәрбер Нусха...
Нымчат шуңаEllä тарату (fan-out) вакытында һәр хәбәрнең күмәтлеген күзәтли — саны тик wrap-лар ясау процессы tijekom гына белэмә — һәм белеш (badge) хәбәрне кургалган булышын әйтүдән күрә, «10 членның 8сенә квант-устойчим» дип күрсәтә. Саны юк булган очракта, бу [а...] өчен нормаль хәл... алынган группа хәбәре (җибәрүче генә таралышны исәплә), интерфейс тулы түгел, ә өлешле курка ныклыгы турында хәбәр бирә. Үз нусхаңа исходяр итеп тулы курка ныклыгын әйтү — хәбәрнең бүтлек турында ашыртып әйтү булыр иде.
7.1 Щит нәрсә хәбәр итә
Калкан ... турында чынлыкны әйтә хәбәр, аны җибәргән программа турында түгел:
- Тулы курканыш: бу ачык текстның һәр күчермәсе гибрид рәвешендә чыгарылды.
- Частично: төрле билгелек хәбәрнең берничә нусхасы классик ысемнә җибәрелде. Алар тулы түгел, ә кимэйтелгән күньярдма итеп алынды, чөнки каршылык күрсәтүчегә аларның башындагы бер төрле ачык текстның (plaintext) бер классик нусхасы кирәк булган нәрсә икән.
- Классик режим белге юклыгы белән түгел, ә ачык әйтелә, чөнки күрсәтмичнең юклыгы «кургалма түгел», «сынык» һәм «бу версиядә бу функция юк» дигәннарсалар арасында аңлашуны кыйинлаштыра.
Карар хәбәр бикләнгән вакытта теркәлә, ул кичектендә партнер афишлыйрган нәрсәдән кайта исәпләнми. Шифрланган текст әзер булган вакыттан күрә яхшырак кургалınган булмый, ә яңа афишлар нигезендә иске хәбәрләрне кайта төзелгән интерфейс ретлайдагы байтлар турында туры булмаган нәрсәне әйтәчәк.
Югарыда күрсәтелгән группа кагыйдәләре буны алмаштырмас кенә, аның өстенә кушыла: группа хәбәрмәсе тик һәр членның нусхасы тулы кургалган булса гына тулы кургалган дип санала, ә кавера саны күрсәтелмәгән алынган группа хәбәрмәсе 'киңәйтелгән' (partial) дип күрсәтелә.
8Үзегезгә адресланган күчермәләр
Клиент саклаган берничә нәрсе узутның үз идентифлегенә шифрлана: синхронлашыртылган көйләмәләр, аралашулар исемлеге, группа ключнары һәм билгеләмәләр архивы. Бу нәрсәләр берничә билгеләмәгә караганда узут турында күбрәк мәгълүмат бирә, шуңа күрә, билгеләмәләрне ничек сакласаң да, аларны классик хәльдә калдыру аларны сакланган иң дәйсез артефакт итәчәк. Алар бер бәйле ысулны кулланалар, ул узутның үз түбә ключыннан алынган ключына капсулаланган — 3.2 бүлегендә тасвирланган бер генә мөгаенә кадәр, nymchat-pq-root Категория үзе, аны тик ул ùе үзе чыга торган ключ белән ябырга мөмкин түгел.
Бу артефактлар — дизайнның иң мөһим булырга тиешле урыннары. Тәртипләү блогы яки архив сабы еллар буе бер урында торый, ул — «хәзер җыйна, соңрак шифр ач» тактикасын кулланучы каршылаш җыйнайган нәрсәләрнең үрнәге — бер хәбәргә караганда әллә күбрәк, чөнки хәбәр пользовательнең үзендә тыягынча вакытча гына.
Бу ерда форматны ачкыч түгел, әлэм, бер чикләү билгели. Үзе адресланган күчермә ... тарафыннан укыла алырга тиеш. һәрбер аккаунттагы җитөз, шулай итеп һәр җитөз үз аңлатмасындагы реестрда ачырга мөмкин булган нәрсәләрен игълал итә, ә аккаунт барысы да укый ала торган нәрсә генә языла. Башка нәрсә язу җитөзны үз үзенең көйләү параметрларыннан алырга мөмкин — 3.2 бүлек бу инсез килүче хатаны башка ыкмалар белән, башка ягыннан килү юлы белән алдый.
Идентитине тоташаган, әмма төп (root) ачкычын тоташмаган җитәз, үзенең үзенең теләвене (settings) бирле, төп ачкычыннан алынган ачкыч белән бүгелгән бернәрне дә ача алмый. Бу — байлавыш түгел, ә планлы нәтиҗә; 3.3 бүлегендә яңа төп ясау (minting) тәкъдим итүдән күрә, аңа бәйләштерү (linking) турындагы җитәз күрсәтмәсе чыгарылган: икенче төп мәгълүмат блогын (blob) укыргалы итмәсчә, ул идентити ачкыч материалларын икегә бүлеп җибәрә. Көюче аны бәйләшмәнгә ← җитәз эшлир — ул үзенең ачкычлары булган нәрсәләрне укыр һәм классик ыкма белән җибәрә.
Браузер өстендәге кушымтаны башкара торган җыелгыч яки ерак имзалаучы (NIP-46) алынырга nsec тоташтырмай, әмма торнап килү кодын тоташтыра һәм 6.1 бүлекнең катламлы төзелешеннә таянып, пост-квантлы ярым өчен шулай ук кирәк: имзалаучы NIP-44 катламын һәрвакытгыдай ясап чыга, ә клиент тышкы катламны үзене кодлый. Бу төрле керү ике якта да гади катнашывчи булып тора.
9Җиелмә
Бу epoch Выводлаудагы счётчик яңа ключ материалларынсыз ротация үткәрүне мөмкин ителә. Аны арттыру бер төптән яңа ключ җәбәрен һәм кабат яңартылган хәбәрне бирә; уңпарлар яңа ключны алмаштырыла торган языкмадан алалар. Шуңа күрә ротация кулланучыдан берәр нәрсәне икеләп язып тотырга сорамый: төп һәр шәхсият өчен бер генә ясала һәм ротацияне эпоха ясый.
9.1 Иске эпохалар саклана һәм бернисе дә кайтадан шифрланмый
Ачкыч ротацияләнгендә бернәрсе дә кабат язылмый. Клиент дешифровкалау кандидатларын хәзерге эпочтан эпоч − 3 кадәр төшү белән төзә, шуңа күрә ротациягә аз гына алдыннан бүгелгән хәбәр, ул җибәрелгән вакытта актуаль булган ачкычлар җыеннары белән һәлләп ачыла.
Бу вакыт аралыгы ротация ясауны курсавыклы итә: ул булмаса, һәр ротация үткән вакытта эшчән булган нәрсәне дә үзгәрмәс калдырыр иде. Бикләнгән нәрсә дә идентифкация тормышы буюча укылалы булып кала, чөнки төркеме ача алмыйган хәбәр, курка ныклый артдан яхшылатырга мөмкин булмаган хәбәргә караганда алар өчен күбрәк зыянлы (10.5 бүлек).
10Бу нәрсәләрне кургамый
Дизайн нәтиҗәләрен генә күрсәткән документ системаны тасвирлап бирми, интерфейсдә безопасность сыйфатын ашалартып биреү исә аны тасканнан да күбрәк зыянлы. Түбәндәгеләр бу конструкция кор защита иткән чикләрдән тыш.
10.1 Кор — икенче сыр, ә аны югатырга булса, аны кайтару мөмкин түгел.
Бу — дизайнның чын баәсе. 2 нче бүлектәге куэнаткалау буенча, куэнаткалаучының саклау өчен бер генә нәрсә булырга тиеш икән, бу шартны үтәреп булмый: nsec бер генә үзе пост-квантлы ключны калып килтерми, чөнки төп мәгънә — бернинди дә публик кыймәт яки башка бернинди сыр аны ачмый. Әгәр берниче дә түбәке (root) саклаучы җыелгыч юк булса һәм 3.2 бүлектәге wrapларның бернисе дә ачыла алмаса, түбәкендән алынган ключ белән биктелгән мәгълүматны кайта алырга мөмкин түгел. Бернинде эскроу юк һәм аны саклап тотучы бернинди башка орган да аចេкләп юк.
Кул белән күчертү бер генә юл булганда, бу беренчән караганда да катырак икән. Күчертмәүче бер пользователь... nympq1… код кайда да аның бер генә нусхасын бер гаразметтә тота һәм шу гаразметны югату аңа бүгелгән һәрбер пост-квантлы хәбәрне, сеттингләр блогын һәм архив сабын юганып бара. Шу
nsec Ярдәм итми; ул — бүтлек төзелеше нигезендә торган чифат.
Киләчәк өстәлгән һәрбер берләштертелгән юл кулда булучы юл үтәргә тиешле стандартны үтәргә тиеш. Атакучы мөмкин булган иң кү렴ле юлны сайлый, шуңа күрә схеманың бәлеге аның иң слабыр кагынарга юлының бәлеге белән бәяләнә — мәсәлән, истеләгеч пароль фразасы бар булса, барлык система да пароль фразасының бәлеге генә кадәр бәяләнә, ә берләштертелгән сатур — ул «хәзер җыйна — соңрак дешифрала» тактикасын кулланучы атакучының хәзер җыйнап, аннан соң үзе җитわせて офлайн режимда эш итергә кулланыр артефакты булып тора.
10.2 Аутентификация, конфиденциальлектән айырылган
Nostr-даге һәр имза secp256k1 өстендәге Schnorr имзасы булып тора һәм бу биредә дә үзгәрмәгән. Квант компьютеры булган каршылык эйәләүче имзаларны жасап чыга ала һәм реаль вакытта пользователь булып күрәнергә мөмкин. Гибридларлаштырылган ключ алмашу «хәзер җыйна — соңрак шифрдан чыгарма» (harvest-now-decrypt-later) тактикасын җиңәргә ярдәм итә: бүген трафикны язучы хәтереләп итүче аны соңрак укый алмый. Бу хәбәрне ул машинага иеләп торган каршылык эйәләүчегә каршы жасарга мөмкин булмаган итми. Бу айырымлылык приложениеларны күпләп кертелгән — бәрләк индикаторы аутентификация турында хәбәр бирә, щит махфиятлелек турында хәбәр бирә һәм алар төрле глифлар, чөнки хәбәрнең берсе булса да, икенчесе булмавы мөмкин.
Бу 4 нче бүлектәге хәбәр нинди билгеләр бирергә мөмкинлеген чикләп тора. npub һәм ML-KEM ачкычы арасындагы бәйләнеш — secp256k1 имзасы, шуңа күрә ахыргысыны ялһау ителгән хыйнәткер үз ачкычын алыштыра ала. Киләчәк хыйнәткергә каршы махфиятлелек һәм аңа каршы ышанычлылык бер чикле түгел.
10.3 Метаданные
Сыйлагының катыланышы җибәрүчене яшыта, кабул итүчене бер... p эчке хәбәрнең теги, төрчелеге һәм вакыт билгесе. Ул очравычның бар булуын, аның күләме яки реле аны кабул иткән вакытны тышлый алмый. Трафик анализны бу проектның бернәрсе дә карамаган.
10.4 Офлайн тор
Nymchatның Bluetooth mesh транспорты үзенең үзенең хәлләшү (handshake) механизмы булган ало протокол булып тора һәм ул бу эшне cover (капламый) түгел. Mesh аша җибәреләгеч хәбәрләр классик.
10.5 хәбәр исе җибәрелгән
Бер тәреф классик хәләтндә булганда җыелган шифрланган текст һәрвакыт классик булып кала. Ул булган һәм аны яңадан шифрлый алмасыз. Саклау функция күтәрү моментында түгел, ә ике тәреф тә квантан соңкы ачкычларны куллана ба시기 язылган хәбәрҙән башлана.
11Каралган альтернативалар
| Ыкнам | Нәгә дә? |
|---|---|
| Идентификация ключевеннән пост-квантлы ключ чыгарыгыз | Кабул ителмәде. Derivation nsec өстеннән ачык алгоритм булып тора һәм квантлы хөнәхтәче җыелган npubнән nsecнә җитә ала, шуңа күрә классик яремне сындыру пост-квантлы яремне дә бергә биреп яту. Бу мәкаләдәге барлык бүлү проблемаларын чистерды, әмма берниенә дә каршы тормады. 3.1 бүлем. |
| Сыйракны NIP-44 аша җайдаланучының башка устройстваларына җибәрегез. | Берни генә сәбәп белән, ләкин башка төрле киемдә түгелләне. Классик шифрлау аша җибәрелгән түбәк (root) хәбәрен рәвемгә алган һәм аның ачкычын соңрак сыймыган һәркем тарафыннан алынырга мөмкин, ә түбәк (root) үшенә дә а именно каршы тору өчен соңдырылган. |
| Һәр җыелмагында аеры-бер ясалган ML-KEM парлы ачкычы | Кабул ителмәде. Уриклар төрле декапсуляциялау ачкычларын тотышыр иделәр һәм һәр идентификатор өчен бер генә алынып алынып чыгалыша ала турган хәбәр барысын да ташый алмый. Партнёрлар иң соңгы чыгарылган ачкыч белән шифрлыйрлар иде һәм башка берәмлекләр нәтиҗәне укый алмыйлар иде. 3.2 бүлегендәге юллар аша күчтән күчкән, һәр идентификатор өчен бер галт (кор) булу шуны алдый. |
| Корневойны PIN астына каплагыз. | Кабул ителмәде. Катытылган сатырны тотучы офлайн һакерга каршы дөрт цифрлы PIN ташак 13 битлыр. Аны ике 256 битлы юллар белән бергә күрсәтү иң су слабый wrap нинди бәягә сайлы икәнен дөрес түзелмә(-н) бирмәргә ия. |
| npubны ике ключны да күтәрү өчен кеңәйтү | 1184 байт — бөлешә алынabilecek идентификатор түгел, һәм ул 32 байт булып билгеләнгән адресны барлык булган Nostr клиентларының парсингын bozган булар иде. |
| Төп каталог хезмәте | Сетьне качу өчен булган властьны кайтадан керту. Сорауны (lookup) кем җавап бирсә, ул хәбәрне кем укый алачакны карар итә. |
| Һәр хәбәргә ачкычны биргелә | Бу ниччем чиккерми: җибәрүчегә ... кирәк алучының Беренче хәбәр алдыннан ачкыч, бу үӗно аны ташыу өчен алдыннан хәбәр юк булган хәл. |
| Канал ичендәге мөмкинлекләрне килешү | Төшәрлек атаклау өзерын ясый. Мөмкинлек флагын алып ташлый алачак атакучы классик юлны кулланырга мәҗбүр итә. |
| Квантаннан соңгылар гына, классик өлеш юк | secp256k1 алгоритмының уннарлаган еллар дәвам иткән анализларын бик яңа примитив белән алмаштыра. Гибрид тик ... гына вайран була. икесе дә Уңышсызлык. |
12Реализация тиңлеге
Nymchat бу конструкцияның ике тәкълимләверен бирә: берсе веб-заклад өчен JavaScript-та, икенчесе мобиль кушымталар өчен Dart-та, шул арада башынан ясалган ML-KEM-768 порты да бар. Бер элементның ике реализациясы очраганда, гадәттә ул риск булып тора, шуңа күрә аларны бер-берсенә туры килерлегенә икерүдән күрә, аларны бер-берсенә каршы тикшерү өчен кулланалар.
Dart ML-KEM реализациясы рәсми версия белән тикселгән.
NIST ACVP
ML-KEM-768 өчен мәлиүметле җавапларлы тестлар (ML-KEM-*-FIPS20325 ачкыч ярату, 25 капсулалау һәм 10 декапсулалау казанары үзләренең тест пакеты исепендә эшләнелә. Алар NIST имплементацияны тикшерү өчен ялгын иткән векторлар, шуңа күрә алардан үтү — ул портның дөреслеген дәлелләгән фактор, түгел диү, ике клиентның бер-берсенә карашы бер теләкләмәсенә килгәнлек түгел. Андан тыш, тест векторларының уртак фикстурасы — seed алышу, капсулалау, ике payload форматы һәм тулы gift wraps — JavaScript референсы нигезендә ясала һәм ике тест пакеты тарафыннан да тикшерелә. Root secret фикстураны алмаштырмый, ә аңа тулыландыра: root-тан seed-ка, root-тан keypair-ка, root-ның публик fingerprint-ы һәм тышкы слойның алынган ачкычы, nonce һәм карашлы мәгълүматлары үзләренең векторлары булып тора, шуңа күрә ике клиент нәрсә турында...
nympq1… Код хәбәрне бүкләү өчен кулланыла торган байтларга кагылышлы яки шулар турында. Реализацияләр арасындагы расхәллек башка клиент ачмау мөмкин булган хәбәр чыгарырга икеләрдән берсе дә рөхсәт бирми, аның орнына сборка сыймыксыз була.
Булар арасында бирешәмлек (fingerprint) исемен атарга лаеклы. Ул аппаратка «бу мин тотышлаган төк» һәм «бу башка төк» дип аерып белергә ярдәм итә, ә башка клиентның бирешәмлеген кайталар бирле клиент яхшы төкермәне бер төкермә юк дип төшентә — аннан соң, 3.3 бүлектәге тәсьир буенча, икенче төк ясый һәм идентификацияне бүлә. Ул дә дә именно шу сәбәптән вектор булып тора.
Nymchat бу ачык
чыганаш AGPL-3.0 лицензиясы ачкында. Бу ердә тасвирланган криптографик ядро —
js/nym-crypto.js һәм js/modules/pq.js веб-клиентта, һәм
lib/core/crypto/ белән lib/features/identity/pq_registry.dart мобиль клиентларда.
Кыскарак, техникалык булмаган аңлатма өчен карагыз квантлы аталарга каршы шифрлау турындагы белешмә базасы страницасы.