Основна статия: Квантово-устойчиво криптиране

Nymchat техническа бележка

Пост-квантово ключово споразумение в Nymchat

Разпространение на ML-KEM-768 публични ключове по Nostr без директория или регистър, и сеитба им от тайна, която няма публична стойност разкрива.

Версия 1.0 Август 2026 Отнася се за Nymchat 3.74+

Добавянето на пост-квантов ключов обмен към пратеник обикновено не е криптографски проблем.Примитивните са стандартизирани и библиотеките съществуват.Трудната част е, че всеки участник сега се нуждае от Втори Този документ описва как Nymchat отговаря на това — откъде идва вторият ключ, как достига до хората, които се нуждаят от него, и какво е позволено на интерфейса да претендира за резултата — и, в последния раздел, какво този резултат не защитава.

1проблемът

Нашите лични съобщения са криптирани с NIP-44, която има две отделящи се половини. половината, която сблъсква простия текст — ChaCha20 с HMAC-SHA256 таг, ключал през HKDF (РФК 5869) — не е значително застрашен от квантов компютър; алгоритъмът на Гроувър струва ускорение с квадратен корен срещу симетричен ключ, а 256 бита абсорбират това. Съгласни елиптична крива Diffie-Hellman над Пъзел 256к1Възстановяването на един частен ключ от публичния му колега ретроактивно разкрива всяка споделена тайна, която ключът някога е произвел.

Заплахата, която това създава, не се отлага, докато такава машина не съществува. Противник с съхранение може да записва шифроващ текст днес и да го дешифрира всеки път, когато способността пристигне. Всичко, което е изпратено сега, което все още има значение, вече е компрометирано.

1.1 Отговорът на този въпрос

За да се постигне това, трябва да се използват специални механизми, за да се предотврати възпаление на лигавицата и да се предотврати възпаление на лигавицата, за да се избегне възпаление на лигавицата. (Пъзел 203Това веднага поражда проблем с разпределението:

Въпросът

Добавете пост-квантов обмен и имате нужда от втори – нейния публичен ключ ML-KEM. Къде живее този ключ и как го получавате, преди да можете да й изпратите нещо?

Например, можете да го напишете на хартия, да го прочетете на глас или да го сканирате от екран и това е всичко, което някой трябва да ви шифрова. Публичният ключ ML-KEM-768 е 1,184 байта. Не може да се чете на глас, няма да се впише в потребителско име и не принадлежи към QR код, освен към идентичност, която е само 32 байта.

По-трудната част е, че втори ключ носи три различни проблеми, а останалата част от тази статия е до голяма степен отговор на тях:

2Дизайн на ограниченията

Четири ограничения оформяха отговора и те изключват повечето очевидни дизайни, преди да се напише какъвто и да е код.

  1. колкото се може по-малко тайни. Всеки допълнителен секрет е друг начин да загубите историята си, а някой, който знае как да архивира nsec, няма да знае как да архивира нищо друго. раздел 3.1 показва, че този не може да бъде изпълнен директно – пост-квантов ключ, получен от nsec, не осигурява никаква пост-квантова защита изобщо – така че дизайнът изразходва точно една тайна и не повече: едно парче ключов материал, генериран веднъж на идентичност, представен в същата форма като nsec и на същото място, така че всеки, който знае как да запази един, знае как да запази другия. раздел 10.1 е честен за това, което все още струва.
  2. Никакъв авторитет Няма сървър, на който може да се вярва, за да се каже кой ключ принадлежи на кого.
  3. Много устройства, една идентичност Какъвто и да е ключов материал, който съществува, трябва да завърши идентичен на всички тях, а пътеките, които го носят там, сами по себе си не трябва да могат да бъдат четени от противника, срещу когото функцията се защитава.
  4. Никакви преговори Всеки обмен в лентата на “кои цифри поддържате?” е повърхност, която нападателят може да изтрие, за да принуди по-слабата опция.

3Независима коренова тайна

Решението, което носи тежестта, е, че ключът за декопсулация на ML-KEM се засява от ключов материал, който няма публична стойност.

pqRoot   = 32 bytes from a CSPRNG, generated ONCE per identity

seed     = HKDF-Expand(
               HKDF-Extract(salt = "nym-pq-root-v2", IKM = pqRoot),
               info = "mlkem768/epoch/" || epoch,
               64 bytes)

(ek, dk) = ML-KEM-768.KeyGen(seed)

Коренът се представя на потребителя по начина, по който е nsec: БГ32 с човекоподобен префикс nympqТака че се чете като nympq1…, показан до nsec в екрана на самоличността зад същото разкриване на взаимодействие, копиран със същия контрол, никога не е влязъл и никога не е изпратен никъде в ясното.

Солта е разделена на домейни по предназначение, така че никоя друга тайна никога не може да получи една и съща двойка ключове. epoch Противопоказания за възстановяване на кръвта (раздел 9).

3.1 Защо ключът не може да бъде извлечен от ключа за самоличност

Очевидният дизайн е да сее ключовата двойка от тайната, която потребителят вече има:

seed = HKDF(salt = "…", IKM = nsec)          // do not do this

Тя е привлекателна по четири причини, всички от които са реални: нищо ново да се архивира, защото nsec вече е резервно копие; всяко устройство, което се съгласява по конструкция, без да има синхронизационен протокол, за да се обърка; едно заместващо обявление за самоличност е очевидно правилно, защото устройствата не могат да не са съгласни за ключа; и ключът, съществуващ преди да бъде публикуван, така че клиентът може да запечата нещо за себе си на първо място.

Всички четири предимства са безполезни, поради една причина. Алгоритъмът на Shor работи срещу публикуван npub дава nsec. Произходът на семената е публичен алгоритъм над nsec. Така че противникът, който счупи класическата половина, възстановява пост-квантовата половина, като изпълнява същия HKDF, който всички останали изпълняват. Против реколтата-сега-декрипт-по-късно - една заплаха функцията съществува, за да спре - ключ, получен по този начин, не добавя нищо.

Правилото всичко произтича от

Ключът за декопсулация на ML-KEM трябва да идва от ентропия, която не може да бъде получена от nsec и никога не се предава под класическо само криптиране.

Независимо генерирана тайна, която след това се синхронизира между устройствата на потребителя в обикновено NIP-44 съобщение, е същата грешка с допълнителни стъпки: противникът записва съобщението днес и възстановява класическия си ключ по-късно, а коренът пада.

3.2 Получаване на корен към други устройства на потребителя

Ограничение 3 от раздел 2 – една идентичност, няколко устройства – не може да бъде удовлетворено от аритметиката тук, защото целият въпрос е, че ключът не е функция на нещо, което устройствата вече споделят. nympq1… Самият код

Коренът се показва като nympq1… На второ място се намира НСЕК, а второто устройство го приема, поставено в същия панел. Това е целият механизъм.

Правилото в раздел 3.1 гласи, че коренът никога не може да пътува под класическо само криптиране и всеки механизъм, който би направил това автоматично – синхронизирането му чрез релей, опаковането му с идентификационния ключ – нарушава точно това.

Форматът оставя място за опакован път: записът може да носи списък с опаковки, всеки от които е AEAD blob под ключ, който потребителят може да възпроизведе на друго устройство - изход на PRF, например. nympq1… Кодът е единственият начин за преминаване. в раздел 10.1 се посочва колко струва.

Самият запис живее в собствената си категория настройки, nymchat-pq-rootДори и да не носи опаковки, той прави необходимата работа: присъствието му е как второто устройство научава, че тази идентичност вече има корен, което е това, което я спира да нанася съперник (раздел 3.3).

Забележка за дизайн: една категория, която не може да използва новия ключ

на nymchat-pq-root Категорията трябва не Този ред носи единственото копие на корена, така че запечатването му под ключ, получен от корена, е ключ, чийто ключ е вътре в кутията: никое устройство не може да го отвори, включително това, което го е написало.

Всяка друга категория настройки може и трябва да използва ключа, получен от корена.Това е единственото изключение и това е изключение за кръгообращението, а не за силата.

3.3 Поколение и осиновяване

При стартиране, притежаващ трайна идентичност, клиентът работи в следния ред:

  1. Търсете съществуващ nymchat-pq-root на рекорда.
  2. Записът е намерен и това устройство може да го разгъне Приемете го и обявете тази идентичност като пост-квантова способност.
  3. Запис е намерен и това устройство не може да го разгъне — не генерирайте нов корен и изобщо не публикувайте никакви съобщения. nympq1… Код от устройство, което вече го има.
  4. Няма рекорди — генериране на корен, публикуване на записа, обявяване и показване на nympq1… Кодът е даден на потребителя веднъж, за да може той да го запише.

Стъпка 3 е стъпка, която е лесно да се обърка, и това е причината, поради която редактирането се записва, а не се оставя на всяко изпълнение.Два устройства, които всеки решава да генерира корен, произвеждат два независими корена под една идентичност, и това е провалът, който този ред съществува, за да предотврати.

4Обявяване на капацитета

Публичната половина от деривативната ключова двойка се публикува като адресируема НОИ-01 събитие — вид 30078, таг nym-pq:

{
  "kind": 30078,
  "tags": [
    ["d", "nym-pq"],
    ["t", "nym-pq"],
    ["expiration", "<unix seconds>"]
  ],
  "content": {
    "v":     2,
    "alg":   "mlkem768",
    "nym":   1,
    "epoch": 0,
    "pk2":   "<base64url ML-KEM-768 encapsulation key>",
    "exp":   <unix seconds>,
    "devices": [ ... ]
  }
}

Addressable означава, че релейът държи едно събитие на (kind, pubkey, d-tag), така че републиката заменя предишното обявление на място.

Подписът е задължителен. Събитието е подписано от идентификационния ключ, така че твърдението &ldquo;този ML-KEM ключ принадлежи на този npub&rdquo; е точно толкова силно, колкото и самия npub.Заместването на различен ключ за капсулиране изисква фалшифициране на подпис secp256k1.Нападателят, който може да направи това, не трябва да се притеснява за KEM.

Обявленията изтичат Седми ден НИП-40 Изтичане на срока на валидност, повторно публикуван на всеки 24 часа, запазва в записа изявление за клиент, който все още се изпълнява, а не този, който е бил преди.

Пропуснатото съобщение се чете точно като такова, което никога не е носело ключ: връстниците изпращат обикновен NIP-44, който всеки потребител може да прочете, а клиентът възобновява пост-квантовия обмен на следващата си връзка, когато отново публикува.Така че тишината за повече от седмица струва защита за съобщенията, изпратени по време на пропастта – те са класически криптирани, а не квантоустойчиви – и не струват нищо друго.

Без един запис надживява ключа, който нарича: устройство, което е изтрито, ресетирано или има коренът му заменен, оставя неподвижна инструкция да се вгражда в ключ, който никой не държи повече, и съобщенията, изпратени под него, се губят без грешка от всяка страна.

Ключовото поле назовава своя формат. Полето е pk2, и цифрата е част от договора, а не декорация: той назовава формата на полезен товар, с който може да се използва ключът. Читателят, който не разпознава полето, завършва &ldquo;Nymchat клиент, няма пост-квантов ключ&rdquo; и изпраща обикновен NIP-44, който всеки вход може да прочете. Това е правилната посока на неуспех, и си струва да се посочи като правило форматът на номериране съществува, за да се наложи: непризнато искане за способност трябва да струва защита, никога доставка. Ключ, който връстникът не може да използва, е по-лош от никакъв ключ изобщо, защото съобщението, което произвежда, е загубено без грешка от всяка страна.

4.1 Отсъствието е смислено и се оценява трикратно

Един фин, но важен детайл: обявлението се публикува от всеки клиент на Nymchat, не само от онези, които са в състояние да следват квантовите данни, а ключовото поле е незадължително.

наблюдаваниСредстваИзпратете поведение
Обява с ключ Nymchat, пост-квантовата способност Хибридният
Съобщение, без ключ Nymchat, класически само - след квантово изключване, или устройство, което все още не е свързано с корена на идентичността Класически NIP-17
Без обявление Неизвестен клиент. Може да бъде всеки потребител на Nostr или Bitchat Класически, плюс опаковка за съвместимост

Събарянето на третия ред в четвъртия ще бъде реална загуба.Оповестяване без ключ е подписано изявление, че подателят управлява Nymchat, което позволява на изпращащия път да пропусне спекулативна кръстосана протоколна опаковка, която в противен случай ще трябва да включва за всеки, който не може да идентифицира.

4.2 Устройство, което не може да отвори корена, остава мълчаливо

Обявлението е заместимо: едно събитие на идентичност, последно писане печели.Това е, което прави дизайна на един запис работи, и това е също така, което прави едно несвързано устройство опасно, ако публикува.

Така че устройство, което знае корен, съществува, но не може да го отвори, изобщо не публикува обявление.Той не е счупен и не е заключен от приложението: той все още чете всяко съобщение, за което има ключовете, и все още изпраща класически, докато подтиква потребителя да го свърже.

5Откритието и решението за изпращане

Клиентите научават ключовете на връстниците си по два начина. Постоянният абонамент обхваща хората, с които потребителят всъщност съответства – отворени разговори и членове на групата – така че техните съобщения идват като обикновени събития.За връстник, срещнат за първи път, еднократна заявка се изпълнява по време на изпращане, ограничено до 2.5 секунди; ако не се реши, съобщението става класическо, което е поведението, което съществува преди пост-квантовото добавяне, а не нов режим на неуспех.

Потребител, който свързва ново устройство, или който се премества от вход за разширение на браузър към локален ключ, става пост-квантово способен в средата на разговора, а постоянно кеширан &ldquo;no&rdquo; ще ги държи на класическо криптиране за живота на обявлението.

5.1 Защо няма атака за понижаване

Решението за маршрутизиране се свежда до един въпрос:

pq = (we hold a signed, unexpired ML-KEM key for this recipient)

Няма преговори за възможности, няма списък с поддържани алгоритми и няма поле, което нападателят може да изчисти, за да принуди по-слабия път. е Неуспешният режим на откъснато или задържано съобщение е, че съобщението става класическо – статуквото преди тази функция – вместо хибридното съобщение да бъде понижено до нещо подвеждащо.

Обратното също държи и има по-голямо значение: клиентът изпраща хибрид само Когато той държи ключ и държи ключа, това е доказателство, че получателят може да го декапсулира.Няма състояние, в което дадено съобщение да бъде изпратено пост-квантово до някой, който не може да го прочете.

6Хибридна конструкция

Немодифициран текст за шифроване на NIP-44 е вътрешният слой, а ML-KEM затваря външен AEAD около него:

inner = nip44_encrypt(plaintext, conversation_key(sender, recipient))

info  = "nymchat-pq2" || sender_secp_pk || recip_secp_pk || kem_ct || recip_kem_pk
prk   = HKDF-Extract(salt = "nymchat-pq2-v1", IKM = kem_ss)
key   = HKDF-Expand(prk, info || "key",   32)
nonce = HKDF-Expand(prk, info || "nonce", 12)

outer = ChaCha20-Poly1305(key, nonce, plaintext = inner, aad = info)

payload = "pq2." || base64url(kem_ct) || "." || base64url(outer)

И двете тайни все още трябва да бъдат възстановени, за да се прочете съобщението: външният слой дава само шифров текст на NIP-44, а отварянето, което се нуждае от класическия ECDH. Квантов противник, който нарушава secp256k1, получава вътрешния ключ и все още се сблъсква с ML-KEM; разкъсване на ML-KEM отрязва външния слой и оставя NIP-44 на място.

Ключът ML-KEM на получателя е дълготраен, но всяко съобщение носи независим шифров текст и следователно независим ключ. kem_ssТова е, което прави извличането на нонс, а не рандомизирането му звучи: Шампоан20-Poly1305 е прекъснат чрез повторно използване на двойка (ключ, нонс), а тук самият ключ е нов за всяко съобщение, така че никоя двойка не може да се повтаря.

6.1 Защо слоевете остават разделени

Алтернативата е да смесите двете тайни в един ключ за разговор и да го предадете на NIP-44:

ck = HKDF-Extract(salt = "…",
                  IKM  = ecdh_x || kem_ss || …)          // do not do this

Тази конструкция звучи като криптография. Тя има един структурен проблем: тя се нуждае от ecdh_x, суровият х-координат на изхода на ECDH, като ключов материал - и разширение на браузъра (NIP-07) или отдалечен подпис (NIP-46Извършва NIP-44 от името на обаждащия и връща шифров текст, който е цялата точка на задържане на ключа някъде, където приложението не може да достигне.

Смесването на тайните следователно изключва всеки вход, който държи идентификационния ключ в подписващия, т.е. най-внимателните потребители, и никаква работа по ключовата деривация не може да го промени.Layering премахва зависимостта: NIP-44 остава цяло и се произвежда от всичко, което държи идентификационния ключ, включително подписващия, докато KEM половината се изчислява от кода за възстановяване, който клиентът държи директно.

Цената е честотната лента и не е малка. ML-KEM шифровия текст е 1,088 байта и се движи по всяко съобщение, base64url-кодирано до 1,451 знака; външният AEAD добавя 16-битова Poly1305 таг и разширява полезния товар на NIP-44, който обгръща с една трета. 50-знаково съобщение нараства от 176 байта до 1,712, а 2000-знаково съобщение от 2,820 до 5,238.

6.2 Самоописани плащания

на pq2. Префиксът прави разгръщането постепенно: той е самоописващ се, така че клиентът избира пътя за декодиране, като проверява полезната тежест, а не като се доверява на етикет или си спомня какво поддържа връстникът.Четец, който не разпознава префикс, не успява да отвори този полезен товар, а не да го прочете неправилно, а съобщенията, запечатани преди всяка страна, биха могли да направят пост-квантовото оставане четливо като обикновен NIP-44 без миграция.

Имплицитно отхвърляне

Декапсулацията на ML-KEM е проектирана така, че никога да не се проваля: като се има предвид неправилно оформеният шифров текст, трансформацията на Fujisaki-Okamoto връща детерминистична псевдо-случайна тайна, а не грешка. Поради това неправилният ключ изобщо не се появява на KEM слоя – той се появява като HMAC провал вътре в NIP-44, което е по същия начин като неправилните класически ключови повърхности. Обаждащите се третират и двете еднакво, така че провалът не носи отличителен сигнал. Това също прави списъка с кандидати на Раздел 9.1 работещ: клиентът опитва всеки ключ на свой ред и позволява на NIP-44 да каже кой е правилният.

6.3 И двата слоя на подаръчната опаковка

A NIP-17 Частното съобщение е NIP-59 Подаръчна опаковка: неподписана слух, запечатана под идентификационния ключ на подателя (вид 13), след това опакована под ключ за хвърляне, генериран за всяко съобщение (вид 1059).

A hybrid NIP-59 gift wrap: the rumor sealed under the sender's key, that seal wrapped under a per-message ephemeral key, both layers carrying a NIP-44 ciphertext inside a post-quantum AEAD. kind 1059 — wrap  ·  signed by a per-message ephemeral key content = pq2.<kem_ct>.<aead>   inner = NIP-44(eph, recip)   outer key = ML-KEM(recip) kind 13 — seal  ·  signed by the sender's identity key content = pq2.<kem_ct>.<aead>   inner = NIP-44(sender, recip)   outer key = ML-KEM(recip) rumor — unsigned the message: kind, content, tags, author pubkey unsigned on purpose — a signature would be portable proof
И двата слоя за криптиране са хибридни, всеки с независима ML-KEM капсулация. Външният слой е заключен в тайна, така че обвивката не разкрива подателя.

Входът на подписващия получава само външния слой. Печатът се произвежда от подписващия като обикновен NIP-44 — приложението никога не вижда ключа, който го прави — така че не може да бъде хибридизиран на място. Това не струва нищо срещу атаката в случая: печатът е достъпен само чрез опаковката, а опаковката е това, което записващият съхранява.

7Групови съобщения и частично покритие

Групово съобщение не е един шифров текст. Това е един и същ прост текст, издаден на всеки член, всяко копие е капсулирано в собствения ML-KEM ключ на този член.

Това създава счетоводен проблем, че наивното изпълнение е погрешно.Ако осем от десет членове получат хибридно копие, съобщението е не Противникът се нуждае от едно класическо копие на прост текст, което е идентично във всичките десет, така че съобщението е защитено само ако всеки Копията е

Следователно Nymchat проследява обхвата на всяко съобщение по време на фен-аут - броят е познаваем само докато опаковките се изграждат - и знамето съобщава "квантово-устойчив" до 8 от 10 членове, вместо да твърди, че съобщението е защитено. Получаване групово съобщение (само изпращачът брои фен-аут), интерфейсът съобщава частична, а не пълна защита.

7.1 Какво съобщава Щитът

Щитът казва истината за Съобщение, не за софтуера, който го е изпратил:

Присъдата се записва, когато съобщението е запечатано, а не преизчислено от това, което връстникът рекламира по-късно. Цифертекст, който вече съществува, не може да бъде по-добре защитен, отколкото беше, и интерфейс, който пресъздава старите съобщения по силата на ново съобщение, ще твърди нещо невярно за байтовете на релей.

Правилата на групата, изброени по-горе, са на върха на това, вместо да го заменят: съобщението на групата е напълно защитено само когато е било копие на всеки член, а полученото съобщение на групата без броене на покритието показва частично.

8Копии, адресирани към себе си

Няколко неща, които клиентът съхранява, са криптирани за собствената идентичност на потребителя: синхронизираните настройки, списъка с разговори, груповите ключове и архива на съобщенията. Те носят повече информация за потребителя, отколкото повечето единични съобщения, така че оставянето им класически би ги направило най-слабо съхраняваните артефакти, независимо от това колко внимателно са запечатани самите съобщения. nymchat-pq-root самата категория, която не може да бъде запечатана под ключ, който само тя може да произведе.

Блобът на настройките или редът на архива седи на едно място в продължение на години, което е точно формата на нещата, които събира опонентът - сега, дешифриран - по-късно - много повече от всяко едно съобщение, което е поне ефимерално в собствения ум на потребителя.

Едно ограничение управлява формата тук, а не ключа. всеки устройството на сметката, така че всяко устройство рекламира това, което може да отвори в списъка, който неговото обявление носи, и сметката пише само това, което всички те могат да четат.

Ограничение, което си струва да се посочи

Устройство, което притежава самоличността, но не и корена, не може да отвори нещо, запечатано с коренния ключ, включително собствените му настройки.Това е преднамерено следствие, а не надзор и затова Раздел 3.3 има такова устройство за свързване, вместо да начертава нов корен: втори корен не би направил блоба четим, той само би разделил ключовия материал на самоличността на две.Докато потребителят не го свърже, устройството продължава да работи – чете това, за което има ключовете и изпраща класически.

Устройството, задвижващо разширение на браузъра или отдалечен подпис (NIP-46) не притежава nsec, от който да произхожда, но притежава кода за възстановяване и под слоевата конструкция на Раздел 6.1 това е всичко, от което се нуждае пост-квантовата половина: подписчикът произвежда слоя NIP-44, както винаги има, а клиентът ключовете на самия външен слой.

9ротация

на epoch Коефициентът в деривацията е това, което прави ротацията възможна без нов ключов материал. Увеличаването му дава нова двойка ключове от същия корен и повторно публикувано съобщение; връстниците вземат новия ключ от заместващия запис.

9.1 Старите епохи се пазят и нищо не се криптира отново

Клиентът създава кандидати за дешифриране от текущата епоха до епохата &minus; 3, така че съобщение, запечатано малко преди завъртането, все още се отваря срещу ключовата двойка, която е била текуща, когато е изпратена.

Това е прозорецът, който прави въртенето безопасно да се направи изобщо: без него всяко въртене ще загуби всичко, което е в полет.Всичко, което вече е запечатано, остава четливо за целия живот на самоличността, защото съобщението, което потребителят вече не може да отвори, е строго по-лошо за тях от това, чиято защита не може да бъде подобрена с обратна сила (раздел 10.5).

10Какво не предпазва

Документ, който изброява само това, което проектът постига, не описва система, а преувеличаването на свойството за сигурност в интерфейс е по-лошо, отколкото да го пропуснете.

Коренът е втора тайна и да я загубиш е невъзстановимо.

Това е реалната цена на дизайна. Ограничението в раздел 2, че потребителят трябва да има точно едно нещо, което да запази, не може да бъде изпълнено: nsec сам по себе си не възстановява пост-квантовия ключ, защото целият въпрос е, че няма обществена стойност и никаква друга тайна, която да го разкрива. Ако нито едно устройство не държи корена и нито едно от обвивките на раздел 3.2 не може да бъде отворено, материалът, запечатан до коренния ключ, не може да бъде възстановен.

С ръчно прехвърляне на единствения път, това е по-остър, отколкото може да се чете първо. nympq1… Кодът навсякъде има точно едно копие от него, на едно устройство, и загубата на това устройство губи всяко пост-квантово съобщение, настройки и ред на архива, запечатан на него. nsec Това не помага; това е собствеността, върху която се основава целият дизайн.

Нападателят атакува най-евтиния наличен път, така че една схема струва това, което струва най-слабия си маршрут за възстановяване - запомняща се парола, например, би поставила цялото нещо на това, което струва паролата, а опакованият ред е точно артефактът, който по-късно опонентът събира и смила офлайн в свободно време.

10.2 Автентичност, различна от поверителността

Всеки подпис в Nostr е Schnorr над secp256k1, и това е непроменено тук. Противник с квантов компютър може да подправя подписи и да се преструва на потребител в реално време. Това, което хибридният ключов обмен поразява, е реколтата-сега-дешифриране-по-късно: нападателят, който записва трафик днес, не може да го прочете по-късно. Това не прави съобщение незабравимо срещу противник, който вече има машината. Тази разлика се пренася в приложенията умишлено - индикаторът на padlock съобщава за удостоверяване, щитът съобщава за поверителност и те са отделни глифи, защото едно съобщение може да има едно без друго.

Също така ограничава това, което може да обещае обявлението в раздел 4.Свързването между npub и ML-KEM ключ е подпис secp256k1, така че противникът, който може да ги фалшифицира, може да замени свой собствен ключ.

10.3 Метаданни

Подаръчната опаковка скрива изпращача, получателя отвъд един p етикет, вид и времева марка на вътрешното съобщение. Той не крие, че едно събитие съществува, неговия размер, или когато релей го е получил.

10.4 Офлайн мрежата

Транспортът на Bluetooth мрежата на Nymchat е отделен протокол със собствено ръкостискане и не е обхванат от тази работа.

10.5 Вече изпратени съобщения

Цифертекстът, записан, докато и двете страни все още са класически, остава класически постоянно. Той вече съществува и не може да бъде повторно запечатан.Защитата започва в съобщението, където двете страни държат пост-квантови клавиши, а не в момента, в който функцията е включена.

11Обмислени алтернативи

ПодходЗащо не
Извличане на квантовия ключ от идентификационния ключ Деривацията е публичен алгоритъм над nsec, а квантов противник възстановява nsec от публикувания npub, така че разбивайки класическата половина ръце над пост-квантовата половина с него.
Изпращане на корена на други устройства на потребителя чрез NIP-44 Корен, предаден под класическо само криптиране, може да бъде възстановен от всеки, който е записал това съобщение и счупи ключа му по-късно, което е противникът коренът съществува, за да спре.
Отделно генерирана ML-KEM клавишна двойка на всяко устройство Отхвърлени. Устройствата ще държат различни ключове за декопсулиране и едно заместващо съобщение на идентичност не може да ги носи всички. Приятелите ще шифроват до кой ключ е публикуван последно, а всяко друго устройство няма да може да прочете резултата.
Завъртете корена под PIN Четирицифрен ПИН е около 13 бита срещу офлайн нападател, който държи опакования ред. Предлагането му до две 256-битови пътеки би представлявало погрешно стойността на най-слабата опаковка.
Разширете npub, за да носите и двата ключа 1,184 байта не е споделен идентификатор и това би нарушило всеки съществуващ клиент на Nostr да анализира адрес, който е дефиниран като 32 байта.
Ключови услуги за директории Възстановява авторитета, който мрежата съществува, за да избегне.Който отговори на търсенето, решава кой може да прочете съобщението.
Прикрепете ключа към всяко съобщение Решава нищо: изпращачът се нуждае от на получателя ключ преди първото съобщение, което е точно случаят без предишно съобщение да го носи.
Възможност за преговори в рамките на лентата Създава повърхност за понижаване. Нападателят, който може да премахне знамето на способността, принуждава класическия път.
Само пост-квантово, без класически крак Отхвърля десетилетия анализ на secp256k1 в замяна на много по-млад примитив. и двете от Fail.

12Прилагане на паритет

Nymchat доставя две независими реализации на тази конструкция – една в JavaScript за уеб приложението, една в Dart за мобилните приложения, включително порт от нулата ML-KEM-768.

Изпълнението на Dart ML-KEM е валидирано срещу официалното NIST ACVP Изследване на резултатите от изпитването по чл.168 от ЗЗД (ML-KEM-*-FIPS203) — 25 ключово поколение, 25 инкапсулиране и 10 декапсулиране случаи, работещи като свой собствен пакет. Това са векторите, които NIST публикува, за да валидира изпълнението, така че преминаването им е доказателство, че портът е правилен, а не просто доказателство, че двамата клиенти са съгласни помежду си. Освен това, споделена фиксация на тестови вектори — семенна деривация, инкапсулиране, както полезни формати, така и пълни подаръчни опаковки — се генерира от JavaScript референцията и се проверява от двата тестов пакета. Кореновата тайна разширява тази фиксация, вместо да я замества: корен на семе, корен на ключова двойка, публичен пръстов отпечатък на ко nympq1… Разминаване в едно от изпълненията се проваля изграждането, вместо да произвежда съобщение, което другият клиент не може да отвори.

Това е, което казва на устройството &ldquo;това е коренът, който държа&rdquo; от &ldquo;това е различен един&rdquo;, и клиент, който не може да възпроизведе пръстовия отпечатък на друг клиент, ще прочете перфектно добър запис като никакъв запис изобщо - и след това, следвайки раздел 3.3, измийте втори корен и разделете самоличността.

Nymchat е Отворени източници под AGPL-3.0. Криптографското ядро, описано тук, е js/nym-crypto.js и js/modules/pq.js в уебсайта на клиента и lib/core/crypto/ с lib/features/identity/pq_registry.dart на мобилните клиенти.

За по-кратко, нетехническо обяснение вижте Страница на базата знания за квантово-устойчивото криптиране.