Nymchat техникалык ак документи
Nymchat-тагы пост-кванттык ачкычтарды макулдашуу
ML-KEM-768 ачык ачкычтарын каталог же реестрсиз Nostr аркылуу бөлүштүрүү жана аларды эч кандай ачык маалымат ачпаган сырдан генерлөө.
Мессенджерге посткванттык ачкыч алмашууну кошуу көбүнчө криптографиялык маселе эмес. Примитивдер стандартташтырылган жана китепканалар бар. Эң кыйын бөлүгү — эми ар бир катышуучуга бир ... экинчи ...ачык ачкыч, ал эми децентрализацияланган тармакта аны коюу үчүн так жер жок. Бул макала Nymchat муну кантип чечүүErүн — экинчи ачкыч кайдан келерин, ал аны муктаж болгон адамдарга кантип жетерин жана интерфейс жыйынтык боюнча эмнени айтууга укуктуу экенин — жана акыркы бөлүмдө бул жыйынтык эмнени коргобой тургандыгын сүрөттөйт.
Бул барак ыңгайлуулук үчүн машинада которулган. Англисче оригиналдуу версия колдонулат.
1Маселе
Nostrтун жеке билдирүүлөрү ... менен шифрленген NIP-44, ал эки бөлүнө айрылуучу жарымдан турат. Текстти аралаштыруучу жарым — HMAC-SHA256 теги менен ChaCha20, ачкыч аркылуу HKDF (RFC 5869) — кванттык компьютер тарабынан олуттуу коркунуч астында эмес; Гровердин алгоритми симметриялуу ключга каршы квадраттык тамыр түрүндөгү ылдамдаштырууну камтыйт, ал эми 256 бит муну жумшап алат. Анын жарымы макул болот ачкычта эллиптикалык кривая боюнча Диффи-Хеллман... secp256k1..., жана Шордун алгоритми дискреттик логарифмди түз чечет. Анын ачык нөөлдөн бир жеке ачкычты кайра калыбына келтирүү, ал ачкыч тарабынан мурда түзүлгөн бардык жалпылуу сырларды артка карай ачып салат.
Бул жараткан коркунуч мындай машина пайда болгонго чейин кечиктирилбейт. Сактоо мүмкүнчүлүгү бар каршылаш бүгүнкү шифрленген текстти жазып алып, мүмкүнчүлүк пайда болгондо аны чечип алат. Азыр жөнөтүлгөн жана кийинки убакта да маанилүү боло турган нерселердин баары алдын ала коопсуздугу бузулган. Бул — пост-кванттык ачкыч алмашуу алдын алган өзгөчө чабуул, жана бул иш машина курулушун күтө албайт дегендин себеби.
1.1 Бул макала жооп берген суроо
Алдын алуу ыкмасы жакшы түшүнүлгөн: пост-кванттык ачкычты капсулалоо механизмин классикалык алмашуу менен бирге иштетүү, ошондуктан чабуулчу маалыматты окуу үчүн экөөнү тең сындышы керек. Nymchat ML-KEM-768 (FIPS 203). Бул дароо таралуу маселесин жаратат:
Бүгүнкү күндө Алиске билдирүү жөнөтүү үчүн сизге бир нерсе керек: анын npub'ы. Пост-кванттык алмашууну кошсоңуз, сизге экинчи нерсе керек болот — анын ML-KEM ачык ачкычы. Ал ачкыч кайда жайгашкан жана ага бир нерсе жөнөтө алганга чейин аны кантип аласыз?
Npub өз алдынча бүтүн. Аны кагазга жазып, үн чыгарып окусаңыз же экрандан сканерлеп алсаңыз болот, жана сизге шифрлөө үчүн башка эч нерсенин кереги жок. ML-KEM-768 ачык ачкычы 1184 байт. Аны үн чыгарып окууга болбойт, ал колдонуучунун атына батпайт жана ал болгону 32 байт болгон идентификациянын жанындагы QR-кодго жарашпайт.
Өлчөмү — оңой тарабы. Ал эми кыйын тарабы — экинчи ачкыч үч башка маселени жаратат, жана бул макаланын калган бөлүгү негизинен алардын жообу болуп саналат:
- Аны алмаштырууга болот. Бир караганда эч ким окуй албаган ачкыч — бул чабуулдоочу өзүнүн ачкычына алмаштырып салууга аракет кыла турган нерсенин так өзү. 4-бөлүм аны кол тамга менен өздүккө байлайт, бул болсо маселени толугу менен чечет.
- Ал колдонуучунун түзмөктөрү боюнча шайкеш келиши керек. Телефондогу жана ноутбуктагы бир эле аккаунт бирдей ачкычты көрсөтүшү керек, болбосо бирине мөөр басылган билдирүүлөрдү экинчисинде ачууга мүмкүн эмес. 3.2-бөлүм муну түшүндүрөт.
- Ал жоголуп калышы мүмкүн. Ачык ачкыч сырдуу маалыматтан кайра жарыяланат, ошондуктан иш жүзүндө сакталып калышы керек болгон нерсе — бул ошол сыр, ал эми түзүлүшүнө караганда башка эч нерсе аны кайра калыбына келтире албайт. 10.1-бөлүм бул эмнеге турат экенин так айтат, анткени бул маселе чечилгенден көрө, акы төлөө менен гана ишке ашат.
2Дизайндын чектөөлөрү
Төрт чектөө жоопту калыптандырды жана эч кандай код жазыла электе көпчүлүк байкалар дизайндарды четке кагып салды.
- Мүмкүн болушунча аз сыр. Nostr колдонуучулары так бир гана сырды, nsec'ти алып жүрүшөт. Ар бир кошумча сыр — бул тарыхыңызды жоготуп алуунун башка жолу, ал эми nsec'ти резервдик көчүрмөсү менен сактоону билген адам башка эч нерсени сактоону билбейт. 3.1-бөлүмдө бул маселе түз эле чечилиши мүмкүн эмес экендиги көрсөтүлгөн — nsec'тен алынган пост-кванттык ачкыч такыр пост-кванттык коргоону камсыз кылбайт — ошондуктан дизайн так бир эле сырды колдонот жана андан ашык эмес: ар бир идентификация үчүн бир жолу түзүлгөн, nsec сыяктуу эле формада жана ошол эле жерде берилген бир гана ачкыч материалы, ошондуктан ким бирөөнү кантип сактоону билсе, экинчисин да кантип сактоону билет. 10.1-бөлүмдө бул дагы эмнеге туура келери тууралуу чындык айтылган.
- Бийлик жок. Кайсы ачкыч кимге таандык экенин айтууга ишенүүгө боло турган эч кандай сервер жок. Мындай ар бир сервер билдирүүлөрдү кайра багыттоо мүмкүн болгон чекитке айланат.
- Көптөгөн түзмөктөр, бир инсандык. Nostr идентификациясы адатта бир эле учурда бир нече клиенттен колдонулат. Колдонуудагы бардык ачкыч материалдары алардын баарында бирдей болушу керек, ал эми аларды жеткирүүчү жолдор функция коргоп жаткан каршылаш тарабынан окулбашы зарыл.
- Масоолашуу жок. «Кайсы шифрлерди колдойсуз?» деген суроонун канал ичиндеги каалаган алмашуусу — бул чабуулчу алсыз вариантты колдонууга мажбурлоо үчүн колдонсо боло турган бет. Долбоордо деңгээлди төмөндөтүүгө мүмкүн болгон эч нерсе болбошу керек.
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 жанында, ошол эле ачып көрсөтүү (reveal) функциясы менен көрсөтүлөт, ошол эле башкаруу менен көчүрүлөт, эч качан журналга катталбайт жана эч качан ачык түрдө эч жерге жөнөтүлбөйт. Бул пароль эмес жана бул логин да эмес. Бул колдонуучу сактап алса боло турган ачкыч материалы, дал nsec сыяктуу.
Туз атайын домендик бөлүнүүгө ээ, ошондуктан башка эч кандай сыр ошол эле ачкыч жубун чыгара албайт.
Ал epoch контр айланууну камсыз кылат (9-бөлүм).
3.1 Эмне үчүн ачкычты инсандык ачкычтан чыгарып алуу мүмкүн эмес
Айкынган дизайн — ачкыч жупту колдонуучуда бар болгон секреттен түзүү:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
Ал төрт себептен улам жагымдуу, алардын баары да чыныгы: резервдик көчүрмө (backup) үчүн жаңы нерселер жок, анткени nsec өзү ал резерв болуп саналат; ар бир түзүлүш түзүлүшү боюнча макул келет, ката кетирүүчү синхрондоштуруу протоколу жок; ар бир идентификация үчүн бир алмаштырылуучу билдирүү айкын туура, анткени түзүлүштөр ачкыч боюнча пикир келишпеши мүмкүн; жана ачкыч жарыяланганга чейин эле бар, ошондуктан клиент биринчи иштетүүдө өзүнө бир нерсени мөөрлөй алат.
Төрт пайданын баары бир себептен пайдасыз. Жарыяланган npubке каршы иштетилген Шордун алгоритми nsecти берет. Seed'ди алуу nsec үстүндөгү ачык алгоритм. Демек, классикалык жарым бөлүктү бузган каршылаш, башкалардын баары колдонуп жаткан эле HKDFди иштетүү менен пост-кванттык жарым бөлүктү кайра калыбына келтирет. «Азыр жыйнап, кийин чеч» (harvest-now-decrypt-later) — бул функция токтотууга багытталган жалгыз коркунуч — ушундай жол менен алынган ачкыч эч кандай пайда алып келбейт.
ML-KEM декапсуляциялоочу ачкычы nsec-дан алынышы мүмкүн болбогон жана болгону классикалык шифрлөө менен эч качан өткөрүлбөгөн энтропиядан алынышы керек.
Бул эреженин экинчи пункту биринчиси сыяктуу эле чоң роль ойнойт. Колдонуучунун түзмөктөрүнүн ортосунда кадимки NIP-44 билдирүүсүнүн ичинде синхрондоштурулган өз алдынча түзүлгөн сыр — бул кошумча кадамдар менен жасалган ошол эле ката: каршылаш бул билдирүүнү бүгүн жазып алып, кийинчерээк анын классикалык ачкычын кайра чыгарып алса, негизги ачкыч да ачылып калат. Ошол себептен кийинки бөлүмдөгү жолдор ушундай түзүлгөн жана алардын эч бири «аны башка түзмөгүңүзгө жөнөтүңүз» деген эмес.
3.2 Root'тү колдонуучунун башка түзүлүштөрүнө жеткирүү
2-бөлүмдүн 3-чектөөсү — бир идентификация, бир нече түзүлүш — бул жерде арифметика менен канааттандырылбайт, анткени негизги максат — ачкыч түзүлүштөрдүн мурун эле бөлүшө турган эч бир нерсесинин функциясы эмес экендигинде. Ал ташуу аркылуу канааттандырылышы керек жана дал бир гана жол бар: колдонуучу... nympq1… өзүн-өзү коддоо.
Тамыры ... катары көрсөтүлөт nympq1… nsec жанында жана экинчи түзүлүш аны ошол эле панелге чапталган бойдон кабыл алат. Бул — бүтүндөй механизм. Код берилбеген түзүлүш катыша албайт, муну 4.2-бөлүмдө сүрөттөлөт.
Кол менен которуу — бул биринчи кадам эмес, бул атайын коюлган базалык чектөө. 3.1-бөлүмдөгү эреже боюнча, тамыр эч качан болгону классикалык шифрлоо аркылуу өтпөшү керек, ал эми муну автоматтык түрдө кыла турган ар бир механизм — аны реле аркылуу синхрондоштуруу же идентификациялык ачкычка бөгөттөө — дал ушул эрежени бузат. Колдонуучу жасаган кадам — коргоонун чыныгы экенинин себеби.
Формат капталган жол үчүн мүмкүнчүлүк калтырат: жазуу капталганлардын тизмесин алып жүрүшү мүмкүн, алардын ар бири колдонуучу башка түзүлүштө кайра жараткан ачкычтын алдындагы AEAD блобу — мисалы, passkey PRF чыгарылышы. Бүгүнкү күндө муну камтыган эч нерсе жок жана бир нерсе камтылганга чейин, ... nympq1… код — бул
өтүү үчүн жалгыз жол.
10.1-бөлүм анын баасын көрсөтөт.
Жазуу өзү өзүнүн жөндөөлөр категориясында жайгашкан, nymchat-pq-root, жана башка категориялар сыяктуу эле синхрондоштурулат. Ал «wraps» алып келбесе да, зарыл болгон ишти аткарат: анын бар экени аркылуу экинчи түзүлүш бул идентификациянын мурда эле тамыры бар экенин билет, бул болсо анын каршылас тамырды чыгарып алуусун токтотот (3.3-бөлүм).
Ошол nymchat-pq-root категория тийиш жок тамырдан алынган ML-KEM ачкычы менен шифрлениши керек. Бул сап тамырдын жалгыз көчүрмөсүн алып жүрөт, ошондуктан аны тамырдан алынган ачкыч менен мөөрлөө — ачкычы ичинде жабылган куту сыяктуу: аны жазган түзүлүш менен кош, эч кандай түзүлүш аны ача албайт. Ал классикалык ыкма менен — өзүнө-өзү NIP-44 — же такыр мөөрлөнбөйт. Бул дизайн классикалык гана коргоону кабыл алган жалгыз жер, жана ал муну көтөрө алат: бүгүнкү күндө бул сап тамырды алып жүрбөйт, болгону анын бар экендигин гана билдирет.
Башка бардык жөндөө категориялары тамышка негизделген ачкычты колдоно алат жана колдонушу керек. Бул жалгыз өзгөчөлүк, жана ал күчкө эмес, айланууга тиешелүү өзгөчөлүк.
3.3 Генерация жана кабыл алуу
Башталганда, туруктуу идентификацияны кармап туруп, клиент төмөнкү тартипте иштейт:
- Бар болгонду издеңиз
nymchat-pq-rootжазуу. - Каттоо табылды жана бул түзүлүш аны ача алат — аны кабыл ал жана жарыяла бул идентификацияны пост-кванттык мүмкүнчүлүктөргө ээ катары.
- Жазуу табылды жана бул түзүлүш аны ача албайт — жаңы root түзбөңүз жана эч кандай жарыя бербеңиз. Колдонуучуга ... киргизүү аркылуу бул түзмөктү туташтырууну сунуштаңыз
nympq1…Ал мурунтан бар болгон түзүлүштөн келген код. - Жазуу жок — тамырды түзүү, жазууну жарыялоо, билдирүү жана көрсөтүү
nympq1…Кодду колдонуучуга бир жолу бериңиз, алар аны сактап алышсын.
3-кадам — бул ката кетирүү оңой болгон кадам, ошондуктан тартип ар бир ишке ашырууга калтырылбай, так жазылып коюлган. Ар бири тамыр түзүүнү чечкен эки түзүлүш бир идентификациянын астында эки көз карандысыз тамырды түзөт, ал эми бул тартип ушундай катаны алдын алуу үчүн түзүлгөн.
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": [ ... ]
}
}
Даректелүүлүк дегендиги реле ар бир (түрү, ачык ачкыч, d-tag) үчүн бир окуяны сактайт, ошондуктан кайра жарыялоо мурунку жарыяны өз ордунда алмаштырат. Демек, ар бир идентификациянын так бир учурдагы жазуусу болот, бул болсо «Алистин ачкычын издөө» процессин маалыматтарды салыштыруу тизмеси эмес, бир жолку так алууга айлантат.
Колкосу — милдеттенме. Ис-чара идентификациялык ачкыч менен кол коюлган, ошондуктан «бул ML-KEM ачкычы бул npubке таандык» деген ишеним дал өзүнүн npub сыяктуу эле бекем. Башка капсулалоочу ачкычты алмаштыруу үчүн secp256k1 кол коюусун жасалмалоо талап кылынат. Муну жасай алган кол салуучуга KEM менен коштошунун кереги жок.
Жарыялардын мөөнөтү бүтөт. Жети күндүк NIP-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Гибриддүү конструкция
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жана эки идентификациялык ачкыч тең коштош маалымат катары байланган, ошондуктан сырткы катмар аны түзгөн так транскрипцияга байланган. Шифрленген текстти башка жөнөтүүчүнүн идентификациясына кошуу шифрди чечүү эмес, аутентификациядан өтпөй калууга алып келет.
Инкапсуляция ар бир билдирүү үчүн жаңыдан аткарылат. Кабыл алуучунун ML-KEM ачкычы узак мөөнөттүү, бирок
ар бир билдирүү өз алдынча шифрленген текстти жана ошондуктан өз алдынча
kem_ss. Бул нонсту рандомдоодон көрө аны эсептеп чыгарууну негиздүү кылат:
ChaCha20-Poly1305
(ачкыч, 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 жарымы кардар түз кармаган калыбына келтирүү кодунан эсептелет. Кол коюучулардын кирүүлөрү эки тараптуу жөнөкөй пост-кванттык катышуучулар болуп саналат.
Баасы — өткөрүү жөндөмдүүлүгү, жана ал аз эмес. ML-KEM шифрдик тексти 1088 байтты түзөт жана ар бир билдирүү менен кошо жүрөт, ал base64url форматында 1451 белгиге чейин кеңейет; сырткы AEAD 16 байттык Poly1305 тегин кошуп, ал каптаган NIP-44 жүктөмүн үчтөн бирге чейин чоңойтот. 50 белгиден турган билдирүү 176 байттан 1712 байтка чейин, ал эми 2000 белгиден турган билдирүү 2820 байттан 5238 байтка чейин өсөт. Билдирүү канчалык кыска болбосун, ар бир билдирүү үчүн минималдуу өлчөм болжол менен 1,5 КБ түзөт, бул жалпы сырдуу маалыматты кайра колдонгондон көрө, ар бир жолу жаңыдан капсулалоонун баасы болуп саналат.
6.2 Өзүн-өзү сүрөттөөчү маалыматтар
Ошол pq2. Префикс жайгаштырууну этап-этап менен жүргүзүүгө мүмкүндүк берет: ал өзүн-өзү сыпаттайт, ошондуктан клиент дешифрлоонун жолун тегге ишенүү же шерик тараптын эмнени колдоорун эстеп калуу менен эмес, маалыматтык жүктөмдү (payload) текшерүү аркылуу тандайт. Префикске тааныш эмес окугуч жүктөмдү туура эмес окубастан, аны ачуудан баш тартат, ал эми эки тарап тең пост-кванттык ыкмаларга өтө электе мөөр басылган билдирүүлөр эч кандай миграциясыз кадимки NIP-44 катары окула берет.
ML-KEM декапсуляциясы эч качан иштебей калбашы үчүн иштелип чыккан: ката түзүлгөн шифртекст берилген учурда, Fujisaki-Okamoto трансформациясы катаны эмес, детерминистүү псевдо-рандомдуу секретти кайтарат. Ошондуктан ката ключ KEM катмарында такыр байкалбайт — ал NIP-44 ичиндеги HMAC ишинин ишке ашпай калышы катары көрүнөт, бул классикалык ката ключдун көрүнүү жолу менен бирдей. Чалуучулар экөөнү тең бирдей кабыл алышат, ошондуктан ката айырмалоочу сигнал бербейт. Бул ошондой эле 9.1-бөлүмдөгү талапкерлердин тизмесин иштөөгө жарамдуу кылат: кардар ар бир ключду кезек менен сынап көрөт жана кайсынысы туура экенин NIP-44 айтууга мүмкүндүк берет.
6.3 Белек ороочу кагаздын эки катмары тең
A NIP-17 купуя билдирүү бул NIP-59 подарочтук каптама: кол коюлбаган ушак, жөнөтүүчүнүн идентификациялык ачкычы (түрү 13) менен мөөрөлгөн, андан кийин ар бир билдирүү үчүн түзүлгөн бир жолку ачкычтын (түрү 1059) астында капталган. Идентификациялык ачкычты түздөн-түз кармаган кирүү учурунда, Nymchat эки катмарды тең гибриддештирет, алардын ар бири өзүнүн каптамасына ээ.
Кол коюучунун кирүү процесси сырткы катмарды гана алат. Мөөр кол коюучу тарабынан кадимки NIP-44 катары түзүлөт — тиркеме аны түзүүчү ачкычты эч качан көрбөйт — ошондуктан аны жергиликтүү түрдө гибриддөө мүмкүн эмес. Бул каралган чабуулга каршы эч кандай кошумча чыгым алып келбейт: мөөргө каттама (wrap) аркылуу гана жетүүгө болот, ал эми каттаманы жазуучу сактайт. Жазылган трафикти колдонуучу каршылаш мөөр чабуул үчүн көрүнө электе эле ML-KEMди бузушу керек.
7Группалык билдирүүлөр жана жарым-жартылай камтуу
Топтук билдирүү бир шифртекст эмес. Бул ар бир мүчөгө таратылган бирдей ачык текст, ар бир көчүрмө ошол мүчөнүн өзүнүн ML-KEM ачкычына инкапсуляцияланган. Ачкыч жарыялаган мүчө гибриддик каптама алат; ал эми жарыялабаган мүчө классикалык каптама алат.
Бул жөнөкөй ишке ашырууда ката кетирилүүчү эсептөө маселесин жаратат. Эгерде он мүчөнүн сегизөө гибриддик көчүрмөнү алса, билдирүү мындай: жок сегиз ондук корголгон. Каршылаш он учаактын баарында бирдей болгон ачык тексттин бир классикалык көчүрмөсүнө муктаж, ошондуктан билдирүү ... гана корголот. ар көчүрмө.
Ошондуктан, Nymchat fan-out учурунда ар бир билдирүүгө камтылган камсыздоону көзөмөлдөйт — бул саноо каптамалар түзүлүп жатканда гана белгилүү болот — жана белги билдирүү корголду деп айтуунун ордуна, «10 мүчөнүн 8өө үчүн кванттык туруктуу» деп көрсөтөт. Эгерде эсеп жок болсо, бул бир... үчүн кадимки учур... кабыл алынды Топтук билдирүү (болгону жөнөтүүчү тарабынан таралууну эсептейт), интерфейс толук эмес, жарым-жартылай коргонууну билдирет. Өзүнүн көчүрмөсүн гана негизге алуу менен толук коргонууну талап кылуу билдирүүнүн бүтүндөй абалы боюнча ашыкча баа берүү болот.
7.1 Коргооч эмнени билдирет
Калкан ... жөнүндө чындыкты айтат. билдирүү, аны жөнөткөн программа жөнүндө эмес:
- Толук коргоо: бул тексттин ар бир көчүрмөсү гибриддүү түрдө чыкты.
- Жарым-жартылай: топтук билдирүүнүн айрым көчүрмөлөрү классикалык ыкма менен жөнөтүлдү. Толук эмес, төмөндөтүлгөн түрүндө алынган, анткени каршылашка алардын баарында бирдей болгон ачык тексттин бир гана классикалык көчүрмөсү жетиштүү.
- Классикалык режим белги жок болгон учурдагыдай эмес, түз айтылат, анткени көрсөткүчтүн жоктугу «корголбогон», «бузулган» же «бул версияда бул функция жок» деген маанилердин ортосунда белгисиз болуп калат.
Жыйынтык билдирүү мөөр калтырылган учурда катталат, кийинчерээк өнөктөш жарыялаган маалыматтан кайра эсептелгенден көрө. Мурда эле бар болгон шифрланган текст мурдагыдан да жакшыраак корголушу мүмкүн эмес, ал эми жаңы жарыянын негизинде эски билдирүүлөрдү кайра чийген интерфейс реледеги байттар жөнүндө жалган нерсени айтып жаткан боло бы.
Жогорудагы топтун эрежелери муну алмаштырбастан, анын үстүнө кошулат: топтук билдирүү ар бир мүчөнүн көчүрмөсү корголгондо гана толук корголгон деп эсептелет, ал эми камтылуу саны жок алынган топтук билдирүү жарым-жартылай деп көрсөтүлөт.
8Өзүңүзгө багытталган көчүрмөлөр
Клиент сактаган бир нече нерсе колдонуучунун өзүнүн идентификациясына шифрленген: синхрондоштурулган жөндөөлөр, диалогдордун тизмеси, топтук ачкычтар жана билдирүүлөрдүн архиви. Булар көпчүлүк айрым билдирүүлөрдөн караганда колдонуучу жөнүндө көбүрөөк маалымат берет, ошондуктан, билдирүүлөр өзү канчалык кылдат шифрленгендигине карабастан, аларды классикалык түрдө калтыруу аларды эң алсыз сакталган объектке айлантат. Алар колдонуучунун өзүнүн негизги ачкычына капталган ошол эле гибриддик ыкманы колдонушат — 3.2-бөлүмдө сүрөттөлгөн бир гана өзгөчөлүктөн тышкары, ... nymchat-pq-root категория өзү, ал өзү гана чыгара алган ачкыч менен мөөрлөнө албайт.
Бул артефакттар дизайн эң маанилүү болгон жерлер болуп саналат. Жөндөө блобу же архивдеги сап жылдар бою бир жерде турат, бул "азыр жыйнап, кийин чечмелөө" стратегиясын колдонгон каршылаштын чогултуган маалыматтарынын так түрү — бул каалаган бир билдирүүгө караганда алда канча көбүрөөк, ал эми билдирүү, жок дегенде, колдонуучунун өз эсинде өтмө болуп саналат.
Бул жерде форматты ачкыч эмес, бир чектөө башкарат. Өзүнө даректенген көчүрмө ... тарабынан окула алышы керек. ар аккаунттагы түзүлүш, ошондуктан ар бир түзүлүш өзүнүн жарыясындагы тизмеде эмнени ача аларын билдирет, ал эми аккаунт алардын баары окуй алган нерсени гана жазат. Башка нерсени жазуу түзүлүштүн өзүнүн жөндөөлөрүнө кирүүсүн тоскоолдойт — 3.2-бөлүм башка багыттан келүүчү башка ыкмалар аркылуу ушундай көз көрүнбөгөн катадан качат.
Идентификацияны кармаган, бирок негизги ачкычты (root) кармабаган түзүлүш, анын өзүнүн жөндөөлөрүн кошкондо, негизги ачкычтан алынган ачкыч менен мөөр басылган эч нерсени ача албайт. Бул байкабай кетиликтүү ката эмес, атайылап жасалган натыйжа, ошондуктан 3.3-бөлүмдө жаңы негизги ачкыч чыгаруунун ордуна, аны байланыштыруу боюнча мындай түзүлүш жөнүндө сурам бар: экинчи негизги ачкыч маалыматты (blob) окууга мүмкүн кылбайт, ал болгону идентификациянын ачкыч маалыматтарын экиге бөлөт. Колдонуучу аны байланыштырганга чейин түзүлүш иштеп турат — ал ачкычтары бар нерселерди окуйт жана классикалык ыкма менен жөнөтөт.
Браузер кеңейтүүсүн башкарган түзүлүш же аралык кол коюучу (NIP-46) nsec сактабайт, бирок ал калыбына келтирүү кодун сактайт жана 6.1-бөлүмдүн катмардуу түзүмүнүн негизинде бул пост-кванттык жарым тарапка жетиштүү: кол коюучу мурдагыдай эле NIP-44 катмарын түзөт, ал эми клиент сырткы катмарды өзү шифрлейт. Мындай кирүү эки тараптуу тең кадимки катышуучу болуп эсептелет.
9Айлануу
Ошол epoch Чыгаруудагы эсептөөчү жаңы ачкыч материалын колдонбостон ротацияны мүмкүн кылган нерсе. Аны көбөйтүү ошол эле негизден жаңы ачкыч жубун жана кайра жарыяланган билдирүүнү берет; теңдоштор жаңы ачкычты алмаштырылуучу жазуудан алышат. Ошондуктан ротация колдонуучудан эч нерсени экинчи жолу жазып алууну талап кылбайт: негиз ар бир идентификация үчүн бир жолу түзүлөт жана айланууну эпоха ишке ашырат.
9.1 Эски эпохтор сакталат жана эч нерсе кайра шифрленбейт
Ачкыч ротацияланганда эч нерсе кайра жазылбайт. Кардар учурдагы эпокадан баштап эпока - 3 чейинки чептерлерден дешифровкалоо варианттарын түзөт, ошондуктан ротацияга аз гана убакыт калганда мөөр басылган билдирүү жөнөтүлгөндөгү учурдагы ачкыч жубу менен дагы деле ачылат.
Бул терезе ротацияны коопсуз кылууга мүмкүндүк берет: ал жок болсо, ар бир ротация учурдагы процесстердеги маалыматтарды илеп коёт. Алдын ала мөөр басылган нерселер идентификациянын жашоо мөөнөтүнө чейин окууга жарамдуу бойдон калат, анткени колдонуучу андан ары ача албаган билдирүү, коргоосу артка карай жакшыртылбаган билдирүүгө караганда ага алда канча зыяндуу (10.5-бөлүм).
10Бул эмнени коргобойт
Долбоордун эмнеге жетишерин гана тизмектеген макала системаны сүрөттөп жаткан эмес, ал эми интерфейсте коопсуздук касиетин ашыкча көрсөтүү аны көрсөтпөй коюудан да жаман. Төмөндөгүлөр бул конструкция коргогон чөйрөнүн сыртында калат.
10.1 Тамыр — экинчи сыр, аны жоготууну калыбына келтирүү мүмкүн эмес.
Бул дизайндын чыныгы баасы. 2-бөлүмдөгү колдонуучунун сактоо үчүн так бир эле нерсеси болушу керек деген чектөө аткарылбай калат: nsec өзү эле пост-кванттык ачкычты кайра калыбына келтирбейт, анткени негизги максат — эч кандай ачык маани же башка сыр аны ачпашы керек. Эгерде эч бир түзүлүш тамырды (root) сактабаса жана 3.2-бөлүмдөгү каптамалардын (wraps) эч бирин ачууга мүмкүн болбосо, тамырдан алынган ачкычка бекитилген материалды кайра калыбына келтирүү мүмкүн эмес. Эскроу жок жана аны кармап тура турган эч кандай бийлик атайын жок кылынган.
Кол менен которуу гана жалгыз жол болсо, бул биринчи караганда көрүнгөндөн да курч. Эч качан ... көчүрбөгөн колдонуучу 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 механизми бар өзүнчө протокол болуп саналат жана ал бул иштин алкагына кирбейт. Mesh аркылуу жөнөтүлгөн билдирүүлөр классикалык.
10.5 билдирүү мурда эле жөнөтүлгөн
Тараптардын бири классикалык режимде болгон учурда жазылып алынган шифрдик текст түбөлүккө классикалык бойдон калат. Ал мурунтан эле бар жана аны кайрадан мөөрлөө мүмкүн эмес. Коргоо бул функция иштетилген учурдан эмес, эки тарап тең пост-кванттык ачкычтарды колдонгон билдирүүдөн башталат.
11Каралган альтернативалар
| Ыкма | Эмнеге болбосун? |
|---|---|
| Идентификациялык ачкычтан пост-кванттык ачкычты чыгарыңыз. | Бас тартылды. nsec үчүн туунду ачык алгоритм болуп саналат жана кванттык каршылаш жарыяланган npub'дан nsec'ти кайра табат, ошондуктан классикалык жарым бөлүктү бузуу менен пост-кванттык жарым бөлүктү да кошо бузуп алууга болот. Ал бул макаладагы бардык бөлүштүрүү маселелерин чечти, бирок эч кимге каршы коргогон жок. 3.1-бөлүм. |
| Тамырды NIP-44 аркылуу колдонуучунун башка түзүлүштөрүнө жөнөтүңүз. | Башкача көрүнүштө, бирок ошол эле себептен четке кагылды. Классикалык гана шифрлөө аркылуу өткөрүлгөн тамырды (root) ал билдирүүнү жазып алып, кийин анын ачкычын сынган каалаган адам кайра калыбына келтире алат, ал эми тамыр ушул каршылаштын алдын алуу үчүн түзүлгөн. |
| Ар бир түзүлүштө өзүнчө түзүлгөн ML-KEM ачкыч жубу | Бас тартылды. Түзүлүштөр ар кандай декапсуляциялоо ачкычтарын сактамак, ал эми ар бир идентификация үчүн бир алмаштырылуучу билдирүү алардын баарын камтый албайт. Теңдештер акыркы жолу жарыяланган кайсы гана ачкыч болсо, ошону менен шифрлешкенде, башка бардык түзүлүштөр натыйжаны окуй албай калат. 3.2-бөлүмдүн жолдору аркылуу жылдырылуучу ар бир идентификация үчүн бир тамыр бул маселенин алдын алат. |
| Тамырды PIN-коддун астына каптаңыз | Бас тартылды. Төрт орундуу ПИН-код капталган сапты кармап турган офлайн чабуулчуга каршы болжол менен 13 битти түзөт. Аны эки 256 биттик жол менен бирге сунуштоо эң алсыз капталдын баасын туура эмес көрсөтүп коюшу мүмкүн. |
| Npub'ду эки ачкычты тең камтоо үчүн кеңейтүү | 1,184 байт — бул бөлүшүүгө мүмкүн болгон идентификатор эмес жана ал бардык учурдагы Nostr клиенттеринин 32 байт катары аныкталган даректи талдоосун бузуп жиберет. |
| Негизги каталогдук кызмат | Тармак андан качуу үчүн түзүлгөн бийликти кайра киргизет. Сурамга ким жооп берсе, билдирүүнү ким окуй аларын ошол чечет. |
| Ар бир билдирүүгө ачкычты тиркеңиз | Эч нерсени чечпейт: жөнөтүүчүгө ... керек алып алуучунун биринчи билдирүүдөн мурунку ачкыч, бул так ушундай учур, анткени аны алып жүрө турган мурунку билдирүү жок. |
| Канал ичиндеги мүмкүнчүлүктөрдү макулдашуу | Төмөндөтүүчү бетти түзөт. Мүмкүнчүлүк белгисин алып сала алган чабуулчу классикалык жолду колдонууга мажбурлайт. |
| Пост-кванттык гана, классикалык бөлүгү жок | secp256k1дин ондогон жылдык талдоосун алда канча жаңы примитивге алмаштыруу менен четке кагат. Гибрид ... гана иштебей калат. экөө тең ийгиликсиздик. |
12Ишке ашыруудагы теңдик
Nymchat бул конструкциянын эки өз алдынча ишке ашырылымын сунуштайт — бири веб-тиркеме үчүн JavaScript тилинде, экинчиси мобилдик тиркемелер үчүн Dart тилинде, анын ичинде нөлдөн баштап жазылган ML-KEM-768 порту да бар. Бир эле примитивдин эки ишке ашырылымы адатта тобокелдик болуп саналат, ошондуктан алар бири-бирине макулдугуна ишенгенден көрө, бири-бирине каршы текшерилет.
Dart ML-KEM реализациясы расмийге карата тастыкталат
NIST ACVP
ML-KEM-768 үчүн белгилүү жооптордун тесттери (ML-KEM-*-FIPS20325 ачкыч түзүү, 25 инкапсуляциялоо жана 10 декапсуляциялоо учурлары өзүнчө топтом катары иштетилет. Булар имплементацияны текшерүү үчүн NIST тарабынан жарыяланган векторлор, ошондуктан аларды ийгиликтүү өтүү — бул жөн гана эки клиенттин бири-бири менен макулдугу эмес, порттун тууралыгынын далили. Андан тышкары, тесттик векторлордун жалпы фикстурасы — seed түзүү, инкапсуляциялоо, экиペイдөгү жүк форматтары жана толук "gift wraps" — JavaScript шилтемесинен түзүлөт жана эки тест топтому тарабынан текшерилет. Түпкү сыр (root secret) ал фикстураны алмаштырбастан, аны кеңейтет: түпкү nukтадан seedге, түпкү nukтадан ачкыч жубуна, түпкү nukтанын ачык бармак изи (public fingerprint) жана тышкы катмардын алынган ачкычы, nonce жана байланыштуу маалыматтары өз алдатча векторлору болуп саналат, ошондуктан эки клиент эмне жөнүндө болгондугу боюнча...
nympq1… Код билдирүү менен капаланган байттарды же алар жөнүндө маалыматты билдирет. Ишке ашыруулардын бириндеги айырмачылык, экинчи кардар ача албаган билдирүүнү жаратуунун ордуна, құру (build) процессинин ийгиликсиз болушуна алып келет.
Буллардын арасында манжа изи жөнүндө айтууга татыктуу. Ал түзүлүшкө «бул мен кармаган тамыр» менен «бул башка бирөө» дегенди айырмалоого жардам берет, ал эми башка клиенттин манжа изин кайталап чыга албаган клиент толук кандуу жазууну такыр жок катары кабыл алат — андан кийин, 3.3-бөлүмгө ылайык, экинчи тамырды чыгарып, идентификацияны бөлөт. Ал дал ушул себептен улам вектор болуп саналат.
Nymchat — ачык
булак AGPL-3.0 лицензиясынын алкагында. Бул жерде сүрөттөлгөн криптографиялык ядро -
js/nym-crypto.js жана js/modules/pq.js веб-клиентте, жана
lib/core/crypto/ менен lib/features/identity/pq_registry.dart Мобилдик клиенттерде.
Кыскараак, техникалык эмес түшүндүрмө үчүн, караңыз кванттык чакырыкка туруктуу шифрлоо боюнча билим базасынын баракчасы.