Nymchat whitepaper techniczny
Post-Quantum Key Agreement w Nymchat
Rozprowadzanie kluczy publicznych ML-KEM-768 przez Nostr bez katalogu lub rejestru i zasiewanie ich z tajemnicy, której żadna wartość publiczna nie ujawnia.
Dodawanie wymiany kluczy post-kwantowych do posłańca nie jest zazwyczaj problemem kryptograficznym.Prymitywne są standaryzowane, a biblioteki istnieją. Druga Ten artykuł opisuje, jak Nymchat odpowiada na to – skąd pochodzi drugi klucz, jak dociera do ludzi, którzy go potrzebują, i co interfejs może domagać się o wyniku – i, w ostatniej sekcji, co ten wynik nie chroni.
Dla wygody ta strona została przetłumaczona maszynowo. Obowiązującą wersją jest oryginał w języku angielskim.
1problemem
Nasze prywatne wiadomości są szyfrowane NIP-44, który ma dwie oddzielne połowy. Połowa, która skrzypi tekst prosty — ChaCha20 z tagem HMAC-SHA256, kluczem przez HKDF (RFC 5869) — nie jest znacząco zagrożony przez komputer kwantowy; algorytm Grovera kosztuje przyspieszenie korzenia kwadratowego w stosunku do klucza symetrycznego, a 256 bitów absorbuje to. zgadzasz się na kluczu jest krzywa eliptyczna Diffie-Hellman ponad Płytka256k1Odzyskiwanie jednego klucza prywatnego od jego publicznego odpowiednika wstecznie ujawnia każdą wspólną tajemnicę, którą kiedykolwiek wyprodukował klucz.
Zagrożenie, które to stwarza, nie jest opóźnione, dopóki taka maszyna nie istnieje. Przeciwnik z magazynem może dziś nagrywać tekst szyfrowy i odszyfrować go, gdy zdolność przyjdzie. Wszystko, co wysłane teraz, co nadal ma znaczenie, jest już zagrożone.
1.1 Odpowiedzi na pytania w tym artykule
Wystarczy zastanowić się nad tym, co się dzieje, a co za tym idzie, czytamy w artykule, w którym wyjaśniono, co się dzieje, a co się dzieje, czytamy w artykule, w którym wyjaśniono, co się dzieje, a co się dzieje, a co się dzieje, a co się dzieje, a co się dzieje, a co się dzieje, a co się dzieje, co się dzieje.FIPS 203W związku z tym pojawia się problem z dystrybucją:
Aby przesłać wiadomość Alice dzisiaj, potrzebujesz jednej rzeczy: jej npub. Dodaj wymianę post-kwantową i potrzebujesz drugiej – jej klucz publiczny ML-KEM.
Możesz napisać go na papierze, przeczytać go głośno lub skanować z ekranu, a to wszystko, czego potrzebujesz do szyfrowania. ML-KEM-768 klucz publiczny to 1,184 bajty. Nie można go czytać głośno, nie pasuje do nazwy użytkownika i nie należy do kodu QR oprócz tożsamości, która ma tylko 32 bajty.
Cięższą częścią jest to, że drugi klucz przynosi trzy odrębne problemy, a reszta tego artykułu jest w dużej mierze odpowiedzią na nie:
- Można go zastąpić. Klucz, którego nikt nie może odczytać na pierwszy rzut oka, to dokładnie to, co atakujący wymienia na własną rękę.
- Musi to być zgodne na wszystkich urządzeniach użytkownika. Tego samego konta na telefonie i laptopa musi przedstawić ten sam klucz, lub wiadomości zapieczętowane do jednego nie może być otwarty na drugim.
- Można go stracić. Klucz publiczny jest ponownie opublikowany z tajemnicy, więc to, co rzeczywiście musi przetrwać, to ta tajemnica - i przez budowę nic innego go nie odbudowuje. sekcja 10.1 wyraźnie stwierdza, ile to kosztuje, ponieważ ten nie jest rozwiązany tak bardzo, jak za to zapłacono.
2Ograniczenia projektowe
Cztery ograniczenia ukształtowały odpowiedź i wykluczają większość oczywistych wzorów przed napisaniem kodu.
- Jak najmniej tajemnic. Każdy dodatkowy sekret to inny sposób, aby stracić swoją historię, a ktoś, kto wie, jak tworzyć kopie zapasowe nsec, nie będzie wiedział, jak tworzyć kopie zapasowe niczego innego. sekcja 3.1 pokazuje, że ten nie może być spełniony bezpośrednio – klucz post-kwantowy pochodzący z nsec nie zapewnia żadnej ochrony post-kwantowej w ogóle – więc projekt spędza dokładnie jedną tajemnicę i nie więcej: pojedynczy kawałek materiału kluczowego, generowany raz na tożsamość, przedstawiony w tej samej formie jak nsec i w tym samym miejscu, więc każdy, kto wie, jak zachować jeden, wie, jak zachować drugi. sekcja 10.1 jest uczciwa co do tego, ile to jeszcze kosztuje.
- Nie ma władzy. Nie ma serwera, któremu można zaufać, aby powiedzieć, który klucz należy do kogo.
- Wiele urządzeń, jedna tożsamość Bez względu na to, jaki kluczowy materiał istnieje, musi skończyć się identyczny na wszystkich z nich, a ścieżki, które go tam niosą, nie muszą być czytelne dla przeciwnika, przed którym funkcja broni.
- Bez negocjacji Każda wymiana w pasmach “które szyfry obsługujesz?” jest powierzchnią, którą atakujący może wyciąć, aby zmusić słabszą opcję.
3Niezależna tajemnica korzeni
Decyzja o obciążeniu polega na tym, że klucz dekapsulacyjny ML-KEM jest zasiewany z kluczowego materiału, którego żadna wartość publiczna nie ujawnia.
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)
Korzeń jest prezentowany użytkownikowi w taki sposób, w jaki jest nsec: Bełchatów 32 z ludzko-czytelnym prefiksem
nympqTak czyta się jak nympq1…, wyświetlany obok nsec na ekranie tożsamości za tą samą interakcją ujawniania, skopiowany z tą samą kontrolką, nigdy nie zalogowany i nigdy nie wysłany nigdzie w jasnym.
Sól jest oddzielona od domeny celowo, więc żadna inna tajemnica nigdy nie może wyprowadzić tej samej pary kluczy. epoch Przeciwnicy napędów obrotowych (sekcja 9).
3.1 Dlaczego klucz nie może być wywodzony z klucza tożsamości
Oczywistym projektem jest zasiewanie pary klawiszy z tajemnicy, którą użytkownik już ma:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
Jest to atrakcyjne z czterech powodów, wszystkie z nich są prawdziwe: nic nowego do tworzenia kopii zapasowych, ponieważ nsec jest już kopią zapasową; każde urządzenie, które zgadza się na budowę, bez protokołu synchronizacji, aby pójść źle; jedno wymienne ogłoszenie na tożsamość jest oczywiście poprawne, ponieważ urządzenia nie mogą się nie zgodzić na klucz; i klucz istniejący zanim zostanie kiedykolwiek opublikowany, więc klient może zamknąć coś dla siebie na początku.
Wszystkie cztery korzyści są bezwartościowe, z jednego powodu. algorytm Shora działa przeciwko opublikowanemu npubowi przynosi nsec. Derywacja nasion jest algorytmem publicznym w stosunku do nsec. Tak więc przeciwnik, który łama klasyczną połowę, rekonstruuje połowę post-kwantową, uruchamiając ten sam HKDF, który uruchamia każdy inny.
Klucz dekapsulacyjny ML-KEM musi pochodzić z entropii, która nie jest ani pochodna z nsec, ani nigdy nie jest przenoszona pod klasycznym tylko szyfrowaniem.
Samodzielnie wygenerowany sekret, który jest następnie synchronizowany między urządzeniami użytkownika w zwykłej wiadomości NIP-44, jest tym samym niepowodzeniem z dodatkowymi krokami: przeciwnik rejestruje tę wiadomość dzisiaj i odzyskuje jej klasyczny klucz później, a korzeń wypada.
3.2 Dostarczanie korzeni do innych urządzeń użytkownika
Ograniczenie 3 sekcji 2 – jedna tożsamość, kilka urządzeń – nie może być tutaj spełnione arytmetycznie, ponieważ cała kwestia polega na tym, że klucz nie jest funkcją czegokolwiek, co urządzenia już dzielą. nympq1… Kodowanie samodzielnie
Korzeń jest wyświetlany jako nympq1… po stronie nsec, a drugie urządzenie akceptuje go wklejonego do tego samego panelu. To jest cały mechanizm.
Zasada w sekcji 3.1 mówi, że korzeń nigdy nie może podróżować pod klasycznym tylko szyfrowaniem, a każdy mechanizm, który uczyniłby to automatycznym – synchronizując go za pośrednictwem przekaźnika, pakując go do klucza tożsamości – narusza dokładnie to.
Format pozostawia przestrzeń dla ścieżki owiniętej: rekord może zawierać listę owinięć, każda z nich to AEAD blob pod kluczem, który użytkownik może odtworzyć na innym urządzeniu - na przykład passkey PRF output. nympq1… Rozdział 10.1 określa, ile to kosztuje.
Sam rekord żyje w swojej kategorii ustawień, nymchat-pq-rootNawet nie przynosząc żadnych opakowań, wykonuje niezbędną pracę: jego obecność polega na tym, że drugie urządzenie dowiaduje się, że ta tożsamość ma już korzeń, co powstrzymuje ją od wywoływania rywala (sekcja 3.3).
o nymchat-pq-root Kategorie muszą nie Ten wiersz nosi jedyną kopię korzenia, więc uszczelnienie go pod kluczem pochodzącym od korzenia jest zamkiem, którego klucz znajduje się wewnątrz pudełka: żadne urządzenie nie mogło go otworzyć, włącznie z tym, który go napisał.
Każda inna kategoria ustawień może i powinna używać klucza pochodzącego od korzenia. Jest to jedyny wyjątek i jest to wyjątek dotyczący okrągłości, a nie siły.
3.3 Pokolenie i adopcja
Po uruchomieniu, posiadając trwałą tożsamość, klient działa w następującej kolejności:
- Szukaj istniejącego
nymchat-pq-rooti rekordów. - Znaleziono rekord, a to urządzenie może go odblokować - przyjąć ją i ogłosić tę tożsamość jako zdolną post-kwantową.
- Znaleziono rekord, a to urządzenie nie może go odblokować — nie generuj nowego korzenia i w ogóle nie publikuj żadnych ogłoszeń.
nympq1…kod z urządzenia, które go już ma. - Bez rekordu — wygenerować korzeń, opublikować rekord, ogłosić i pokazać
nympq1…Użytkownik otrzymuje jeden kod, aby móc go zapisać.
Krok 3 jest krokiem, który łatwo się pomylić, a to jest powód, dla którego porządek jest zapisywany, a nie pozostawiony do każdej implementacji. Dwa urządzenia, z których każde decyduje się wygenerować korzeń, wytwarzają dwa niezależne korzenie pod jedną tożsamością, a to jest niepowodzenie tego porządkowania istnieje, aby zapobiec.
4Ogłoszenie o zdolności
Publiczna połowa pochodnej pary kluczy jest publikowana jako adresowana
Mikołaj-01
wydarzenie — typ 30078, tagged 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": [ ... ]
}
}
Adresowalne oznacza, że relay zachowuje jedno zdarzenie na (kind, pubkey, d-tag), więc republish zastępuje poprzednie ogłoszenie na miejscu.
Podpis jest wiążący. Wydarzenie jest podpisywane przez klucz identyfikacyjny, więc twierdzenie “to klucz ML-KEM należy do tego npub” jest dokładnie tak silne, jak npub sam. Zastąpienie innego klucza enkapsulacyjnego wymaga sformułowania podpisu secp256k1.
Ogłoszenia wygasają Siedmiodniowy NIP-40 Termin wygaśnięcia, ponownie opublikowany co 24 godziny, przechowuje w rejestrze oświadczenie o kliencie, który nadal działa, a nie o kliencie, który kiedyś był.
Zapomniane ogłoszenie jest czytane dokładnie tak, jak to, które nigdy nie nosiło klucza: rówieśnicy wysyłają zwykły NIP-44, który może odczytać każde logowanie, a klient wznowi wymianę post-kwantową na następnym połączeniu, gdy ponownie opublikuje.
Bez jednego rekord przeżywa klucz, który nazywa: urządzenie, które jest usunięte, ponownie ustawione lub ma jego korzeń zastąpiony pozostawia stałą instrukcję, aby zakapsulować do klucza, którego nikt już nie trzyma, a wiadomości wysłane pod nim są utracone bez błędu po obu stronach.
Pole klucza nazywa swój format. Pole jest pk2, a cyfra jest częścią umowy zamiast dekoracji: nazywa format ładunku użytecznego, z którym można użyć klucza. Czytnik, który nie rozpoznaje pola, kończy “Nymchat klient, bez klucza post-kwantowego” i wysyła zwykły NIP-44, który każdy login może odczytać. To jest właściwy kierunek awarii i warto stwierdzić jako regułę, że numerowanie formatu istnieje do egzekwowania: nieuznane roszczenie o zdolność musi kosztować ochronę, nigdy dostawę. Klucz, którego nie może użyć rówieśnik, jest gorszy niż żaden klucz w ogóle, ponieważ wiadomość, którą wytwarza, jest stracona bez błędu po obu stronach.
4.1 Brak jest znaczący i trójwartościowy
Subtelny, ale ważny szczegół: ogłoszenie jest publikowane przez każdego klienta Nymchat, nie tylko tych zdolnych do post-kwantowego, a pole kluczowe jest opcjonalne.
| obserwowane | Oznacza | Wyślij zachowanie |
|---|---|---|
| Ogłoszenie z kluczem | Nymchat, post-kwantowy zdolny | Hybrydy |
| Ogłoszenie, w ogóle bez klucza | Nymchat, klasyczny tylko — post-quantum off, lub urządzenie jeszcze nie powiązane z korzeniem tożsamości | Klasyczny NIP-17 |
| Brak ogłoszeń | Nieznany klient. Może to być każdy użytkownik Nostr lub Bitchat | Klasyczny, plus wkładka kompatybilności |
Ogłoszenie bez klucza to podpisane oświadczenie, że nadawca uruchamia Nymchat, co pozwala ścieżce wysyłania pominąć spekulacyjny zapas protokołu krzyżowego, który w przeciwnym razie musiałby zawierać dla każdego, kogo nie może zidentyfikować.
4.2 Urządzenie, które nie może otworzyć korzenia, milczy
Ogłoszenie jest wymienne: jedno wydarzenie na tożsamość, ostatnie nagrywanie wygrywa.To sprawia, że projekt pojedynczego rekordu działa, a także co sprawia, że niepowiązane urządzenie jest niebezpieczne, jeśli publikuje.
Tak więc urządzenie, które zna korzeń istnieje, ale nie może go otworzyć, nie publikuje ogłoszenia w ogóle. Nie jest uszkodzone i nie jest zamknięte z aplikacji: nadal czyta każdą wiadomość, do której ma klucze i nadal wysyła klasycznie, zachęcając użytkownika do łączenia go.
5Odkrycie i decyzja o wysłaniu
Klienci uczą się kluczy rówieśników na dwa sposoby. Subskrypcja stała obejmuje osoby, z którymi użytkownik faktycznie odpowiada – otwarte konwersacje i członkowie grupy – więc ich ogłoszenia przychodzą jako zwykłe wydarzenia.
Użytkownik, który łączy nowe urządzenie lub przenosi się z logowania z rozszerzenia przeglądarki na klucz lokalny, staje się zdolny do post-kwantowej rozmowy w środku, a trwale pamięci podręcznej “no” utrzymałby je w klasycznym szyfrowaniu przez całe życie ogłoszenia.
5.1 Dlaczego nie ma ataku degradacji
Decyzja o skierowaniu ogranicza się do jednego pytania:
pq = (we hold a signed, unexpired ML-KEM key for this recipient)
Nie ma negocjacji zdolności, nie ma listy algorytmów obsługiwanych i nie ma pola, w którym atakujący mógłby oczyścić się z wymuszenia słabszej ścieżki. Jest Tryb niepowodzenia usuniętego lub powstrzymanego ogłoszenia polega na tym, że wiadomość jest klasyczna – status quo przed tą funkcją – a nie na tym, że wiadomość hybrydowa jest obniżana do czegoś, co można oszukać.
Konwersja również trzyma i liczy się więcej: klient wysyła hybrydę Tylko gdy trzyma klucz, a trzymając klucz jest dowodem, że odbiorca może odkapsuć. Nie ma stanu, w którym wiadomość jest wysyłana post-kwantowo do kogoś, kto nie może ją odczytać.
6Budownictwo hybrydowe
Niezmodyfikowany tekst szyfrowy NIP-44 jest warstwą wewnętrzną, a ML-KEM kluczy zewnętrzny AEAD wokół niego:
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)
Obie tajemnice muszą być jeszcze odzyskane, aby odczytać wiadomość: zewnętrzna warstwa wytwarza tylko tekst szyfrowy NIP-44, a otwarcie, które potrzebuje klasycznego ECDH. Przeciwnik kwantowy, który złamał secp256k1, otrzymuje wewnętrzny klucz i nadal staje w obliczu ML-KEM; przerwa ML-KEM rozciąga zewnętrzną warstwę i pozostawia NIP-44 na miejscu.
kem_ssNic w tej derywacji nie dotyka surowego wyjścia ECDH, co jest tym, co dzieje się w sekcji 6.1.kem_ct,recip_kem_pki oba klucze tożsamości są powiązane jako powiązane dane, więc warstwa zewnętrzna jest zobowiązana do dokładnego transkryptu, który go wyprodukował.
Klucz ML-KEM odbiorcy jest trwały, ale każda wiadomość nosi niezależny tekst szyfrowy, a zatem niezależny tekst szyfrowy.
kem_ssTo jest to, co sprawia, że pochodzenie nonce zamiast randomizacji brzmi:
ChaCha20-Poly1305 Zestaw
jest zerwany przez ponowne użycie pary (klucz, nonce), a tutaj sam klucz jest nowy dla każdej wiadomości, więc żadna para nie może się powtórzyć.
6.1 Dlaczego warstwy pozostają oddzielone
Alternatywą jest zmieszanie obu sekretów w jeden klucz konwersacyjny i przekazanie go do NIP-44:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
Konstrukcja ta brzmi jak kryptografia. ma jeden problem strukturalny: potrzebuje
ecdh_x, surowy współrzędny x wyjścia ECDH, jako kluczowy materiał — i rozszerzenie przeglądarki (NIP-07) lub zdalny podpis (NIP-46Wykonuje NIP-44 w imieniu dzwoniącego i zwraca tekst szyfrowania, który jest całym punktem trzymającym klucz gdzieś, gdzie aplikacja nie może dotrzeć.
Mieszanie sekretów wyklucza zatem każde logowanie, które przechowuje klucz tożsamości w sygnatariuszu, to znaczy najbardziej ostrożnych użytkowników, i żadna ilość pracy nad pochodną klucza nie może go zmienić.Layering usuwa zależność: NIP-44 pozostaje całością i jest produkowany przez to, co posiada klucz tożsamości, sygnatariusz wliczony, podczas gdy połowa KEM jest obliczana z kodu odzyskiwania, który klient posiada bezpośrednio.
Koszt to przepustowość, a nie jest to małe. tekst szyfrowy ML-KEM wynosi 1088 bajtów i przejeżdża na każdą wiadomość, baz64url-kodowaną do 1,451 znaków; zewnętrzny AEAD dodaje 16-byte tag Poly1305 i rozszerza użyteczność NIP-44 o jedną trzecią. wiadomość o 50 znakach rośnie z 176 bajtów do 1,712, a wiadomość o 2000 znakach z 2,820 do 5,238.
6.2 Samookreślające się payloads
o pq2. Prefiks sprawia, że rozmieszczenie jest stopniowe: jest samookreślające, więc klient wybiera ścieżkę odszyfrowania, sprawdzając ładunek użyteczności, a nie ufając tagowi lub pamiętając, co wspiera rówieśnik. Czytnik, który nie rozpoznaje prefiksu, nie otwiera tego ładunku użyteczności, a nie źle go odczytuje, a wiadomości zapieczętowane przed oboma stronami mogłyby pozostać czytelne jako zwykły NIP-44 bez migracji.
Dekapsulacja ML-KEM jest zaprojektowana tak, aby nigdy nie zawiodła: z uwagi na zniekształcony tekst szyfrujący, transformacja Fujisaki-Okamoto zwraca deterministyczną pseudonazową tajemnicę, a nie błąd. W związku z tym niewłaściwy klucz nie pojawia się w warstwie KEM w ogóle – pojawia się jako awarię HMAC w obrębie NIP-44, co jest tym samym, co w przypadku niewłaściwych klasycznych powierzchni klucza.
6.3 Obie warstwy opatrunku podarunkowego
A NIP-17 Wiadomość prywatna jest a NIP-59 Opakowanie podarunkowe: niepodpisane plotki, zamknięte pod kluczem tożsamości nadawcy (rodzaj 13), a następnie owinięte pod kluczem wyrzucanym generowanym na wiadomość (rodzaj 1059).
Logowanie sygnatariusza otrzymuje tylko zewnętrzną warstwę. Pieczęć jest wytwarzana przez sygnatariusza jako zwykły NIP-44 – aplikacja nigdy nie widzi klucza, który ją tworzy – więc nie może być hybrydyzowana na miejscu. To nic nie kosztuje wobec danego ataku: pieczęć jest dostępna tylko za pośrednictwem opatrunku, a pieczęć jest tym, co magazynuje nagrywarka. Przeciwnik posiadający zarejestrowany ruch musi złamać ML-KEM, zanim pieczęć będzie nawet widoczna do ataku.
7Wiadomości grupowe i częściowe pokrycie
Wiadomość grupy nie jest jednym tekstem szyfrującym. Jest to ten sam tekst zwykły wydany każdemu członku, każda kopia zakapsulowana do własnego klucza ML-KEM tego członka. Członek, który opublikował klucz, otrzymuje hybrydowy opatrunek; członek, który nie ma klasycznego opatrunku.
Stwarza to problem księgowy, że naiwna implementacja popełnia błąd. Jeśli osiem z dziesięciu członków otrzymuje kopię hybrydową, wiadomość jest nie przeciwnik potrzebuje jednej klasycznej kopii prostego tekstu, która jest identyczna we wszystkich dziesięciu, więc wiadomość jest chroniona tylko wtedy, gdy każdy Jest to kopia.
Dlatego Nymchat śledzi zasięg na wiadomość podczas fan-out - liczba jest znana tylko podczas budowy opakowań - a znacznik informuje o “kwantowej odporności na 8 z 10 członków” zamiast twierdzić, że wiadomość jest chroniona. Otrzymane Wiadomość grupowa (tylko nadawca liczy fan-out), interfejs informuje o częściowej, a nie pełnej ochronie.
7.1 O czym informuje tarcza
Tarcza mówi prawdę o Wiadomość, nie o oprogramowaniu, które go wysłało:
- Pełna ochrona: każda kopia tego prostego tekstu wyszła hybrydowo.
- Częściowe: niektóre kopie wiadomości grupowej wyszły klasycznie, a następnie zredukowane zamiast pełne, ponieważ jedna klasyczna kopia prostego tekstu identyczna we wszystkich jest potrzebą przeciwnika.
- Klasyczny jest wyrażony bezpośrednio, a nie wyświetlany jako żaden znak, ponieważ brakujący wskaźnik jest niejednoznaczny między “niechroniony”, “złamany”, a “to budowanie brakuje funkcji”.
Wyrok jest rejestrowany, gdy wiadomość jest zapieczętowana, a nie odliczana od tego, co reklamuje później rówieśnik.Cyphertext, który już istnieje, nie może stać się lepiej chroniony, niż to było, a interfejs, który odtworzył stare wiadomości na mocy nowej ogłoszenia, twierdziłby, że coś jest fałszywe o bajtach na przekaźniku.
Reguły grupy powyżej stack na górze tego zamiast go zastąpić: wiadomość grupy jest całkowicie chronione tylko wtedy, gdy kopia każdego członka był, a otrzymane wiadomości grupy bez liczby zasięgu wyświetla częściowe.
8Kopie skierowane do siebie
Kilka rzeczy, które klient przechowuje, są zaszyfrowane do własnej tożsamości użytkownika: ustawienia synchronizowane, lista konwersacji, klucze grupowe i archiwum wiadomości. Te przynoszą więcej informacji o użytkowniku niż większość pojedynczych wiadomości, więc pozostawienie ich klasycznym uczyniłoby je najsłabszym przechowywanym artefaktem, niezależnie od tego, jak starannie same wiadomości zostały uszczelnione. nymchat-pq-root nie może być zamknięty pod kluczem, który tylko on może wytworzyć.
Blob ustawień lub wiersz archiwów siedzi w jednym miejscu przez lata, co jest dokładnie kształtem rzeczy, którą zbiera przeciwnik zbioru-teraz-decyfrowany-później - znacznie więcej niż jakakolwiek pojedyncza wiadomość, która jest przynajmniej efemeryczna w umyśle użytkownika.
Jedno ograniczenie reguluje tutaj format, a nie klucz. Kopia z własnym adresem musi być czytelna przez każdy urządzenie na koncie, więc każde urządzenie reklamuje to, co może otworzyć w tablicy, którą nosi jego ogłoszenie, a konto pisze tylko to, co wszyscy mogą przeczytać.
Urządzenie, które posiada tożsamość, ale nie korzeń, nie może otworzyć niczego zapieczętowanego do klucza pochodzącego od korzenia, w tym własnych ustawień.To jest zamierzona konsekwencja, a nie nadzór, dlatego w sekcji 3.3 znajduje się takie urządzenie do łączenia zamiast nawiązania nowego korzenia: drugi korzeń nie uczyniłby blobu czytelnym, tylko podzieliłby kluczowy materiał tożsamości na dwie części.
Urządzenie napędzane rozszerzeniem przeglądarki lub zdalnym sygnatariuszem (NIP-46) nie posiada nsec, ale posiada kod odzyskiwania, a pod warstwową konstrukcją sekcji 6.1 jest to wszystko, czego potrzebuje pośrodek kwantowy: sygnatariusz wytwarza warstwę NIP-44 tak, jak zawsze ma, a klient kluczy warstwę zewnętrzną.
9rotacji
o epoch Licznik w pochodzeniu jest tym, co sprawia, że rotacja jest możliwa bez nowego materiału klucza. Zwiększanie go daje świeżą parę kluczy z tego samego korzenia i ponownie opublikowanego ogłoszenia; rówieśnicy pobierają nowy klucz z wymiennego rekordu.
9.1 Stare epoki są zachowywane, a nic nie jest ponownie szyfrowane
Klient buduje kandydatów do odszyfrowania z bieżącej epoki w dół do epoki − 3, więc wiadomość zapieczętowana na krótko przed rotacją nadal otwiera się przeciwko parze kluczy, która była aktualna, gdy została wysłana.
To okno sprawia, że rotacja jest w ogóle bezpieczna: bez niej każda rotacja zepsułaby wszystko, co było w lotu. Wszystko, co jest już zapieczętowane, pozostaje czytelne przez całe życie tożsamości, ponieważ wiadomość, której użytkownik nie może już otworzyć, jest dla nich ściśle gorsza niż wiadomość, której ochrony nie można poprawić wstecz (sekcja 10.5).
10Czego nie chroni
Artykuł, który wymienia tylko to, co osiąga projekt, nie opisuje systemu, a przesadzenie właściwości zabezpieczeń w interfejsie jest gorsze niż pominięcie go.
Korzeń jest drugą tajemnicą, a stracić go nie da się odzyskać.
To jest rzeczywista cena projektu. Ograniczenie w sekcji 2, że użytkownik powinien mieć dokładnie jedną rzecz do zachowania, nie może być spełnione: nsec sam nie rekonstruuje klucza post-kwantowego, ponieważ cała sprawa polega na tym, że żadna wartość publiczna i żadna inna tajemnica go nie ujawnia.
Przy ręcznym przesyłaniu jedynej ścieżki jest to ostrzejsze niż może być najpierw odczytane. nympq1… kod w dowolnym miejscu ma dokładnie jedną kopię, na jednym urządzeniu, a utrata tego urządzenia traci każdą wiadomość post-kwantową, ustawienia blob i wiersz archiwum zamknięty na nim.
nsec nie pomaga; to jest właściwość, na której opiera się cały projekt.
Atakujący atakuje najtańszą dostępną ścieżkę, więc schemat jest wart tego, co jego najsłabsza ścieżka odzyskiwania - pamiętna fraza, na przykład, umieściłaby całą rzecz na dowolnej wartości frazy, a zawinięty wiersz jest dokładnie artefaktem, który przeciwnik zbiera - teraz odszyfrowany - później zbiera i mielenia w trybie offline w wolnym czasie.
10.2 Uwierzytelnianie, jako odrębne od poufności
Każdy podpis w Nostr jest Schnorr nad secp256k1, a to nie ulega zmianie. Przeciwnik z komputerem kwantowym mógłby sfałszować podpisy i udawać użytkownika w czasie rzeczywistym. Co hybrydowy wymiana kluczy przegrywa jest zbiór-now-decrypt-później: atakujący rejestrujący ruch dzisiaj nie może go odczytać później. To nie czyni wiadomości niewybaczalnym przeciwko przeciwnikowi, który już ma maszynę. Ta różnica jest przenoszona do aplikacji celowo - wskaźnik padlock informuje o uwierzytelnieniu, tarcza informuje o poufności, a są to odrębne glyfy, ponieważ wiadomość może mieć jedno bez drugiego.
Związek między kluczem npub a kluczem ML-KEM jest podpisem secp256k1, więc przeciwnik, który może je sfałszować, może zastąpić swój własny klucz.
10.3 Metadane
Opakowanie prezentów ukrywa nadawcę, odbiorcę poza jednym p tag, rodzaj i znacznik czasu wewnętrznej wiadomości. Nie ukrywa, że zdarzenie istnieje, jego wielkość lub kiedy relay go otrzymał.
10.4 Mesh w trybie offline
Transport siatki Bluetooth Nymchat jest oddzielnym protokołem z własnym trzymaniem rąk i nie jest objęty tą pracą.
10.5 Wiadomości już wysłane
Cyfertekst zapisywany podczas gdy obie strony były nadal klasyczne pozostaje klasyczne na stałe. To już istnieje i nie może być ponownie uszczelnione. Ochrona zaczyna się w wiadomości, gdzie obie strony trzymały klucze post-kwantowe, nie w momencie, gdy funkcja została włączona.
11Rozważane alternatywy
| Podejście | Dlaczego nie |
|---|---|
| Wyciąganie klucza post-kwantowego z klucza tożsamości | Odrzucone. pochodzenie jest algorytmem publicznym nad nsec, a przeciwnik kwantowy odzyskuje nsec z opublikowanego npub, więc łamiąc klasyczną połowę rąk nad połową post-kwantową z nim. |
| Wyślij korzeń do innych urządzeń użytkownika za pośrednictwem NIP-44 | Odrzucony z tego samego powodu w różnych ubraniach.Korzeń przesyłany pod klasycznym szyfrowaniem jest odzyskiwalny przez każdego, kto nagrał tę wiadomość i złamał jej klucz później, który jest przeciwnikiem, którego korzeń istnieje, aby go zatrzymać. |
| Oddzielnie wygenerowana para klawiszy ML-KEM na każdym urządzeniu | Odrzucone. Urządzenia będą posiadać różne klucze dekapsulacji, a jedno wymienne ogłoszenie na tożsamość nie może ich wszystkich przenosić. Peers będą szyfrować do dowolnego klucza, który został opublikowany ostatnio, a każde inne urządzenie nie będzie w stanie odczytać wyniku. |
| Wklej korzeń pod PIN | Czterocyfrowy PIN wynosi około 13 bitów w stosunku do ataku offline, który trzyma zawinięty wiersz. Oferowanie go obok dwóch 256-bitowych ścieżek fałszywie przedstawiłoby wartość najsłabszego zawinięcia. |
| Rozszerzenie npub, aby przenosić oba klucze | 1,184 bajtów nie jest identyfikatorem udostępnianym, a to przerwałoby analizę każdego istniejącego klienta Nostr adresu, który jest zdefiniowany jako 32 bajty. |
| Usługa kluczowego dyrektora | Ponownie wprowadza autorytet, którego istnieje sieć, aby uniknąć.Kto odpowiada na wyszukiwanie, decyduje, kto może przeczytać wiadomość. |
| Załącz klucz do każdej wiadomości | Nic nie rozwiązuje: nadawca potrzebuje odbiorcy klucz przed pierwszą wiadomością, co jest dokładnie przypadkiem bez uprzedniej wiadomości, aby ją przenosić. |
| Umiejętności negocjacyjne in-band | Tworzy powierzchnię obniżoną. atakujący, który może zdjąć flagę zdolności, zmusza klasyczną ścieżkę. |
| Tylko post-kwantowe, bez klasycznej nogi | Odrzuca dziesięciolecia analizy secp256k1 w zamian za znacznie młodszy prymityw. Zarówno i fałszu. |
12Parytet wdrażania
Nymchat dostarcza dwie niezależne wdrożenia tej konstrukcji – jedną w JavaScript dla aplikacji internetowej, jedną w Dart dla aplikacji mobilnych, w tym port ML-KEM-768.
Wdrożenie Dart ML-KEM jest walidowane wobec oficjalnego
NIST ACVP
Testy odpowiedzi znanych dla ML-KEM-768 (ML-KEM-*-FIPS203) — 25 kluczowych generacji, 25 przypadków enkapsulacji i 10 przypadków dekapsulacji, działających jako ich własny pakiet. Są to wektory opublikowane przez NIST w celu zweryfikowania wdrożenia, więc ich przekazanie jest dowodem na to, że port jest poprawny, a nie tylko dowodem na to, że obaj klienci zgadzają się ze sobą. Ponadto, wspólna fikcja wektorów testowych — odprowadzanie nasion, enkapsulacja, zarówno formaty obciążenia użyteczności, jak i kompletne opatrunki podarunkowe — jest generowana z odniesienia JavaScript i sprawdzana przez oba pakiety testowe. Sekret korzeniowy rozszerza tę fikcję zamiast ją zastępować: korzeń do nasion, korzeń do pary kluczy, publiczny odc
nympq1… Rozbieżność w obu wdrożeniach powoduje niepowodzenie budowy zamiast wytwarzania wiadomości, której drugi klient nie może otworzyć.
To jest to, co mówi urządzenie “to jest korzeń, który trzymam” od “to jest inny jeden”, a klient, który nie mógł odtworzyć odcisk palca innego klienta, przeczytałby doskonale dobry rekord jako żaden zapis w ogóle - a następnie, po sekcji 3.3, kopał drugi korzeń i podzielił tożsamość.
Nymchat jest Otwarte źródło pod AGPL-3.0. Jądro kryptograficzne opisane tutaj jest
js/nym-crypto.js I js/modules/pq.js w witrynie internetowej klienta oraz
lib/core/crypto/ z lib/features/identity/pq_registry.dart W przypadku klientów mobilnych.
Aby uzyskać krótkie, nietechniczne wyjaśnienie, zobacz Strona bazy wiedzy na temat kwantowo-odpornego szyfrowania.