Nymchat whitepaper teknikal
Perjanjian Kunci Post-Quantum di Nymchat
Mengedarkan kunci awam ML-KEM-768 di Nostr tanpa direktori atau rekod, dan menabur mereka daripada rahsia yang tiada nilai awam mendedahkan.
Menambah pertukaran kunci pasca-quantum kepada seorang utusan kebanyakannya bukan masalah kriptografi. primiti telah disetorkan dan perpustakaan ada. bahagian yang sukar adalah bahawa setiap peserta kini memerlukan Kedua Maklumat ini menerangkan bagaimana Nymchat menjawab bahawa - di mana kunci kedua berasal, bagaimana ia menjangkau orang-orang yang membutuhkannya, dan apa antara muka dibenarkan untuk mengklaim tentang hasil - dan, dalam seksyen terakhir, apa yang hasil itu tidak melindungi.
Halaman ini diterjemahkan mesin untuk kemudahan. Versi asal bahasa Inggeris ialah versi yang digunakan.
1Masalahnya
Mesej peribadi kami disulitkan dengan NIP-44, yang mempunyai dua separuh yang boleh dipisahkan. separuh yang menggelengkan teks biasa — ChaCha20 dengan tag HMAC-SHA256, yang dikunci melalui HKDF (Perkhidmatan RFC 5869) — tidak terancam secara bermakna oleh komputer kuantum; algoritma Grover kos kelajuan akar persegi terhadap kunci simetrik, dan 256 bit menyerap itu. bersetuju pada kunci ialah kurva elipsik Diffie-Hellman Rujukan256K1Mengembalikan satu kunci peribadi daripada rakan kongsi awam secara retroaktif mendedahkan setiap rahsia yang dikongsi bahawa kunci pernah dihasilkan.
Ancaman ini tidak ditangguhkan sehingga mesin sedemikian wujud. Seorang musuh dengan storan boleh merekodkan teks enkripsi hari ini dan mendekripsi setiap kali keupayaan tiba. Apa-apa yang dihantar sekarang yang masih penting kemudian telah dikompromikan. Ini adalah serangan spesifik pertukaran kunci pasca-quantum yang kalah, dan itulah sebabnya kerja tidak boleh menunggu untuk mesin itu dibina.
1.1 Soalan yang dibincangkan dalam artikel ini
Perbezaan antara pengambilan sampel dan pengambilan sampel ialah dengan menggunakan kaedah-kaedah pengambilan sampel dan kaedah-kaedah pengambilan sampel (Sijil 203Ini segera menimbulkan masalah pengedaran:
Untuk mesej Alice hari ini, anda perlukan satu perkara: npub beliau. tambahkan pertukaran selepas kuantum dan anda perlukan yang kedua - kunci awam ML-KEM beliau. di mana kunci itu hidup, dan bagaimana anda mendapatkannya sebelum anda boleh menghantar apa-apa kepada beliau?
Anda boleh menulisnya di atas kertas, membacanya dengan keras, atau memindai dari skrin, dan ia semua orang perlu mengenkripsi kepada anda. Kunci awam ML-KEM-768 ialah 1,184 byte. Ia tidak boleh dibaca dengan keras, ia tidak akan cocok dalam nama pengguna, dan ia tidak termasuk dalam kod QR selain daripada identiti yang hanya 32 byte.
Bahagian yang lebih sukar adalah bahawa kunci kedua membawa tiga masalah yang berbeza, dan sisa kertas ini sebahagian besarnya merupakan jawapan kepada mereka:
- Ia boleh digantikan. Kunci yang tidak boleh dibaca dalam sekejap mata adalah jenis perkara yang seorang penyerang bertukar untuk diri mereka sendiri. Seksyen 4 mengikatnya kepada identiti dengan tanda tangan, yang menetapkan ini secara langsung.
- Ia mesti bersetuju di seluruh peranti pengguna. Akaun yang sama pada telefon dan laptop mesti menunjukkan kunci yang sama, atau mesej yang disegel kepada satu tidak boleh dibuka pada yang lain.
- Ia boleh hilang. Kunci awam diterbitkan semula daripada rahsia, jadi apa yang sebenarnya mesti bertahan ialah rahsia itu - dan dengan pembinaan tidak ada yang lain membina semula.
2Pembatasan Reka Bentuk
Empat sekatan membentuk jawapan, dan mereka mengecualikan kebanyakan reka bentuk yang jelas sebelum mana-mana kod ditulis.
- Sedikit rahsia yang boleh. Setiap rahsia tambahan adalah cara lain untuk kehilangan sejarah anda, dan seseorang yang tahu untuk menyimpan cadangan nsec tidak akan tahu untuk menyimpan apa-apa yang lain. Bahagian 3.1 menunjukkan bahawa satu ini tidak boleh dipenuhi secara langsung - kunci pasca kuantum yang dihasilkan daripada nsec tidak menyediakan perlindungan pasca kuantum sama sekali - jadi reka bentuk menghabiskan satu rahsia dan tidak lebih: satu keping bahan kunci, yang dihasilkan sekali setiap identiti, disajikan dalam bentuk yang sama dengan nsec dan di tempat yang sama, supaya sesiapa yang tahu bagaimana untuk menyimpan satu tahu bagaimana untuk menyimpan yang lain. Bahagian 10.1 adalah jujur tentang apa yang masih kos.
- Tiada kuasa Tiada pelayan yang boleh dipercayai untuk memberitahu kunci mana yang dimiliki oleh siapa.
- Pelbagai alat, satu identiti Apa-apa bahan utama yang wujud mesti berakhir sama pada semua daripada mereka, dan laluan yang membawa ia ke sana tidak boleh dibaca oleh lawan yang ciri-ciri ini membela terhadap.
- Tiada negosiasi Apa-apa pertukaran dalam band “yang cip yang anda menyokong?” ialah permukaan yang boleh dipotong oleh penyerang untuk memaksa pilihan yang lebih lemah.
3rahsia akar bebas
Keputusan yang membawa beban adalah bahawa kunci dekapsulasi ML-KEM ditaburkan daripada bahan utama yang tiada nilai awam mendedahkan.
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)
Akar disampaikan kepada pengguna dengan cara nsec ialah: Melayu32 dengan prefiks yang boleh dibaca oleh manusia
nympqOleh itu, ia dibaca sebagai nympq1…, yang dipaparkan di sebelah nsec dalam skrin identiti di sebalik interaksi mengungkapkan yang sama, disalin dengan kawalan yang sama, tidak pernah log masuk dan tidak pernah dihantar di mana-mana di dalam jelas.Ia bukan kata laluan dan ia bukan login.Ia adalah bahan utama yang pengguna boleh simpan, sama seperti nsec.
Garam ini dipisahkan oleh domain secara sengaja, jadi tidak ada rahsia lain yang boleh menghasilkan pasangan kunci yang sama. epoch penggerak rotor (Bahagian 9).
3.1 Mengapa kunci tidak boleh dihasilkan daripada kunci identiti
Reka bentuk yang jelas ialah untuk menabur keypair daripada rahsia yang pengguna sudah mempunyai:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
Ia menarik untuk empat sebab, semua mereka sebenar: tiada apa-apa yang baru untuk disimpan, kerana nsec sudah menyimpan; setiap peranti yang bersetuju oleh pembinaan, tanpa protokol sinkronisasi untuk pergi salah; satu pengumuman yang boleh diganti per identiti yang jelas betul, kerana peranti tidak boleh bersetuju tentang kunci; dan kunci yang sedia ada sebelum ia diterbitkan, supaya klien boleh menutup sesuatu kepada dirinya sendiri pada kali pertama.
Semua empat faedah tidak berguna, untuk satu sebab. algoritma Shor berjalan melawan npub yang diterbitkan menghasilkan nsec. Derivasi benih adalah algoritma awam di atas nsec. Jadi lawan yang memecahkan separuh klasik membina semula separuh pasca-quantum dengan menjalankan HKDF yang sama yang semua orang lain berjalan.
Kunci dekapsulasi ML-KEM mesti berasal daripada entropy yang tidak boleh dihasilkan daripada nsec dan tidak pernah dihantar di bawah enkripsi klasik sahaja.
A rahsia yang dihasilkan secara bebas yang kemudian disegerakkan antara peranti pengguna dalam mesej NIP-44 biasa adalah kegagalan yang sama dengan langkah-langkah tambahan: lawan mencatat mesej itu hari ini dan memulihkan kunci klasiknya kemudian, dan akar jatuh keluar.
3.2 Mendapatkan akar kepada peranti pengguna yang lain
Penghalang 3 Seksyen 2 - satu identiti, beberapa peranti - tidak boleh dipenuhi oleh aritmatika di sini, kerana keseluruhan perkara adalah bahawa kunci bukan fungsi apa-apa yang peranti sudah berkongsi. nympq1… kod sendiri
Akar ini dipaparkan sebagai nympq1… di sebelah nsec, dan peranti kedua menerima ia dilampirkan ke dalam panel yang sama.Ini adalah keseluruhan mekanisme.Peranti yang belum diberikan kod tidak boleh mengambil bahagian, yang Seksyen 4.2 menerangkan.
Peraturan dalam Seksyen 3.1 mengatakan akar mungkin tidak pernah bergerak di bawah enkripsi klasik sahaja, dan mana-mana mekanisme yang akan membuat ini automatik - menyegerakkan melalui relay, membungkusnya ke kunci identiti - melanggar persis itu.
Format ini meninggalkan ruang untuk laluan yang dibungkus: rekod boleh membawa senarai pembungkusan, setiap satu AEAD blob di bawah kunci yang pengguna boleh mereproduksi pada peranti lain - output PRF passkey, contohnya. nympq1… Seksyen 10.1 menyatakan berapa kos yang dikenakan.
Rekod itu sendiri hidup dalam kategori tetapan sendiri, nymchat-pq-rootWalaupun tidak mempunyai kemaluan, ia melakukan kerja yang diperlukan: kehadirannya adalah bagaimana peranti kedua belajar bahawa identiti ini sudah mempunyai akar, yang merupakan apa yang menghentikan ia daripada mengikat satu pesaing (Bahagian 3.3).
yang nymchat-pq-root Kategori mesti bukan baris itu membawa satu-satunya salinan akar, jadi menyegelnya di bawah kunci yang berasal daripada akar adalah kunci yang kuncinya berada di dalam kotak: tidak ada peranti yang boleh membukanya, termasuk yang menulisnya. ia disegel secara klasik - NIP-44 untuk diri sendiri - atau tidak sama sekali.
Setiap kategori tetapan lain boleh dan harus menggunakan kunci berasaskan akar.Ini adalah pengecualian tunggal, dan ia adalah pengecualian mengenai sirkulariti bukannya tentang kekuatan.
3.3 Generasi dan pengasuhan
Pada boot, memegang identiti tahan lama, klien berfungsi dalam urutan ini:
- Mencari yang sedia ada
nymchat-pq-rootRekod yang - Rekod ditemukan, dan peranti ini boleh membongkarnya - mengadopsi dan mengumumkan identiti ini sebagai mampu post-quantum.
- Rekod telah dijumpai, dan peranti ini tidak boleh membuka - jangan mencipta akar baru, dan tidak menerbitkan apa-apa pengumuman sama sekali.Minta pengguna untuk menghubungkan peranti ini dengan memasukkan
nympq1…kod daripada peranti yang sudah mempunyai. - Tiada Rekod - mencipta akar, menerbitkan rekod, mengumumkan, dan menunjukkan
nympq1…kod kepada pengguna sekali supaya mereka boleh menyimpannya.
Langkah 3 adalah langkah yang mudah tersilap, dan itulah sebabnya urutan dituliskan dan bukannya ditinggalkan kepada setiap pelaksanaan. dua peranti yang masing-masing memutuskan untuk menghasilkan akar menghasilkan dua akar bebas di bawah satu identiti, dan itulah kegagalan urutan ini wujud untuk mengelakkan.
4Pengumuman Keupayaan
Separuh awam pasangan kunci yang dihasilkan diterbitkan sebagai alamat
Melayu-01
peristiwa — jenis 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": [ ... ]
}
}
Addressable bermakna relay menyimpan satu peristiwa per (kind, pubkey, d-tag), jadi sebuah republik menggantikan pengumuman terdahulu di tempat.
Tanda tangan ialah wajib. Peristiwa ini ditandatangani oleh kunci identiti, jadi klaim “kunci ML-KEM ini milik npub ini” adalah sama kuatnya dengan npub itu sendiri.Menggantikan kunci encapsulation yang berbeza memerlukan penandatanganan secp256k1. Seorang penyerang yang boleh melakukan itu tidak perlu mengganggu KEM.
Pengumuman telah tamat. Tujuh hari NIP-40 Tarikh tamat tempoh, diterbitkan semula setiap 24 jam, menyimpan rekod pernyataan mengenai klien yang masih berjalan dan bukannya yang dulu.
Pengumuman yang terlepas dibaca persis seperti yang tidak pernah membawa kunci: rakan sebaya menghantar NIP biasa-44, yang setiap log masuk boleh dibaca, dan klien meneruskan pertukaran pasca kuantum pada sambungan seterusnya, apabila ia diterbitkan semula. jadi diam selama lebih daripada seminggu kos perlindungan untuk mesej yang dihantar semasa jurang - mereka secara klasik dienkripsi bukannya tahan kuantum - dan kos apa-apa lagi. penghantaran tidak terjejas, apa-apa yang telah diterima menjadi tidak dapat dibaca, dan tiada tindakan diperlukan apabila dikembalikan.
Tanpa satu, rekod melebihi kunci yang dinamakan: peranti yang dipadamkan, dipindahkan semula, atau mempunyai akarnya diganti meninggalkan arahan berdiri untuk mengencapsulate ke kunci yang tiada siapa lagi memegang, dan mesej yang dihantar di bawahnya hilang tanpa kesilapan di kedua-dua belah pihak.
Medan kunci menamakan formatnya. Bidang ini ialah pk2, dan digit adalah sebahagian daripada kontrak bukannya hiasan: ia menamakan format muatan yang boleh digunakan dengan kunci. Pembaca yang tidak mengenali medan menamatkan “Nymchat klien, tiada kunci pasca-quantum” dan menghantar NIP-44 biasa, yang setiap log masuk boleh dibaca.Ini adalah arah kegagalan yang betul, dan ia bernilai menyatakan sebagai peraturan nombor format wujud untuk menguatkuasakan: klaim keupayaan yang tidak dikenali mesti kos perlindungan, tidak pernah penghantaran.
4.1 Ketidakhadiran adalah bermakna, dan tiga-nilai
Satu butiran halus tetapi penting: pengumuman itu diterbitkan oleh setiap pelanggan Nymchat, bukan sahaja mereka yang mampu selepas kuantum, dan medan kunci adalah opsional.
| Mengamati | Bermakna | Hantar tingkah laku |
|---|---|---|
| Pengumuman dengan Kunci | Nymchat, post-quantum boleh | hibrid |
| Pengumuman, tiada kunci sama sekali | Nymchat, klasik sahaja — post-quantum off, atau peranti yang belum dikaitkan dengan akar identiti | Kegunaan NIP-17 |
| Tiada pengumuman | Pelanggan yang tidak diketahui. boleh menjadi mana-mana pengguna Nostr atau Bitchat | Klasik, ditambah kompatibiliti wrap |
Pengumuman tanpa kunci ialah pernyataan yang ditandatangani bahawa penghantar menjalankan Nymchat, yang membolehkan laluan penghantar melampaui kemasukan cross-protocol spekulatif yang sebaliknya perlu dimasukkan kepada sesiapa sahaja yang tidak dapat dikenali.
4.2 Peranti yang tidak boleh membuka akar tetap diam
Pengumuman itu boleh diganti: satu peristiwa per identiti, penulisan terakhir menang.Ini yang membuat reka bentuk rekod tunggal berfungsi, dan ia juga apa yang membuat peranti yang tidak dikaitkan berbahaya jika ia menerbitkan.
Jadi peranti yang tahu akar wujud tetapi tidak boleh membukanya tidak menerbitkan sebarang pengumuman sama sekali. ia tidak rosak dan ia tidak dikunci daripada aplikasi: ia masih membaca setiap mesej yang mempunyai kunci dan masih menghantar secara klasik, sambil mendesak pengguna untuk menghubungkannya.
5Pencarian dan keputusan menghantar
Pelanggan mempelajari kunci rakan sebaya dalam dua cara. langganan tetap meliputi orang yang pengguna benar-benar bertukar-tukar dengan - perbualan terbuka dan ahli kumpulan - jadi pengumuman mereka tiba sebagai peristiwa biasa. Bagi rakan sebaya bertemu untuk kali pertama, pertanyaan satu kali berjalan pada masa hantar, terhad kepada 2.5 saat; jika ia tidak menyelesaikan, mesej itu menjadi klasik, yang merupakan tingkah laku yang wujud sebelum post-quantum ditambahkan bukannya mod kegagalan baru.
Pengguna yang menghubungkan peranti baru, atau yang bergerak dari log masuk ekstensi pelayar ke kunci tempatan, menjadi post-quantum mampu pertengahan perbualan, dan secara kekal cache “no” akan menyimpan mereka pada enkripsi klasik untuk kehidupan pengumuman.
5.1 Mengapa tidak ada serangan degradasi
Keputusan routing dikurangkan kepada satu soalan sahaja:
pq = (we hold a signed, unexpired ML-KEM key for this recipient)
Tiada negosiasi keupayaan, tiada senarai algoritma yang disokong, dan tiada medan yang boleh dibersihkan oleh penyerang untuk memaksa laluan yang lebih lemah. ialah Mod kegagalan pengumuman yang dihilangkan atau ditahan adalah bahawa mesej itu menjadi klasik - status quo sebelum ciri ini - bukannya bahawa mesej hibrid diturunkan kepada sesuatu yang boleh ditipu.
Konversi juga memegang dan lebih penting: pelanggan menghantar hibrid sahaja apabila ia memegang kunci, dan memegang kunci adalah bukti penerima boleh decapsulate.Tidak ada keadaan di mana mesej dihantar selepas kuantum kepada seseorang yang tidak boleh membacanya.
6Pembinaan hibrid
Nymchat tidak menggantikan NIP-44. ia membungkusnya. teks cip NIP-44 yang tidak diubahsuai adalah lapisan dalaman, dan ML-KEM mengunci AEAD luaran di sekelilingnya:
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)
Kedua-dua rahsia masih perlu dipulihkan untuk membaca mesej: lapisan luar hanya menghasilkan teks cipher NIP-44, dan pembukaan yang memerlukan ECDH klasik. seorang musuh kuantum yang memecahkan secp256k1 mendapat kunci dalaman dan masih menghadapi ML-KEM; pecahan ML-KEM memotong lapisan luar dan meninggalkan NIP-44 berdiri.
kem_ssTiada apa-apa dalam derivasi ini menyentuh output ECDH mentah, yang merupakan apa Seksyen 6.1 bertukar.kem_ct,recip_kem_pkdan kedua-dua kunci identiti dikaitkan sebagai data yang dikaitkan, jadi lapisan luar diikat kepada transkrip yang tepat yang menghasilkannya.
Kunci ML-KEM penerima adalah jangka panjang, tetapi setiap mesej membawa teks enkripsi yang berasingan dan oleh itu
kem_ssItulah yang membuatkan pengeluaran nonce daripada menyesuaikan ia terdengar:
Reka Bentuk ChaCha20-Poly1305
adalah dipecahkan oleh penggunaan semula pasangan (keyword, nonce), dan di sini kunci itu sendiri adalah baru untuk setiap mesej, jadi tidak ada pasangan yang boleh diulang.
6.1 Mengapa lapisan-lapisan tetap terpisah
Alternatifnya ialah untuk mencampur kedua-dua rahsia dalam satu kunci perbualan dan hantar itu kepada NIP-44:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
Konstruksi itu bunyi seperti kriptografi.Ia mempunyai satu masalah struktural: ia memerlukan
ecdh_xPerbezaan antara bahan-bahan kimia dan bahan-bahan kimia (NIP-07) atau penandatangan jauh (NIP-46Ia menjalankan NIP-44 bagi pihak pemanggil dan mengembalikan teks enkripsi, yang merupakan keseluruhan titik memegang kunci di mana aplikasi tidak boleh mencapai.
Menggabungkan rahsia oleh itu mengecualikan setiap log masuk yang menyimpan kunci identiti dalam penandatangan, iaitu pengguna yang paling berhati-hati, dan tiada jumlah kerja pada derivasi kunci yang boleh mengubahnya. Layering menghilangkan ketergantungan: NIP-44 kekal keseluruhan dan dihasilkan oleh apa-apa yang memegang kunci identiti, penandatangan termasuk, manakala separuh KEM dikira daripada kod pemulihan yang disimpan oleh klien secara langsung.
Kosnya ialah lebar pita, dan ia tidak kecil. teks enkripsi ML-KEM ialah 1,088 byte dan naik pada setiap mesej, base64url-kode kepada 1,451 watak; AEAD luaran menambah tag 16 byte Poly1305 dan memperluaskan beban faedah NIP-44 yang dibungkus oleh satu pertiga. Mesej 50 watak tumbuh daripada 176 byte kepada 1,712, dan satu 2000 watak dari 2,820 kepada 5,238. Lantai adalah kira-kira 1.5 KB per mesej tidak kira berapa pendek mesej itu, yang merupakan harga pengkapselan segar setiap kali bukannya menggunakan semula rahsia yang dikongsi.
6.2 Payloads yang menggambarkan diri
yang pq2. prefiks membuat penyebaran berterusan: ia autodeskriptif, jadi klien memilih laluan dekripsi dengan memeriksa beban berguna bukannya dengan mempercayai tag atau mengingati apa yang disokong oleh rakan sebaya. pembaca yang tidak mengenali prefiks gagal untuk membuka beban berguna itu bukannya membacanya dengan salah, dan mesej yang disegel sebelum kedua-dua pihak boleh membuat post-quantum boleh dibaca seperti NIP-44 biasa tanpa migrasi.
ML-KEM decapsulation direka untuk tidak pernah gagal: dengan teks cipher yang rosak, transform Fujisaki-Okamoto mengembalikan rahsia pseudo-kesan daripada kesilapan. Oleh itu, kunci yang salah tidak muncul di lapisan KEM sama sekali - ia muncul sebagai kegagalan HMAC di dalam NIP-44, yang merupakan cara yang sama untuk permukaan kunci klasik yang salah. Panggilan merawat kedua-dua sama, jadi kegagalan tidak membawa isyarat yang membezakan. Ini juga yang membuat senarai calon Seksyen 9.1 berfungsi: klien mencuba setiap kunci berturut-turut dan membolehkan NIP-44 mengatakan mana yang betul.
6.3 Kedua-dua lapisan pembungkusan hadiah
A NIP-17 Mesej peribadi ialah a NIP-59 pembungkusan hadiah: rumor yang tidak ditandatangani, disegel di bawah kunci identiti penghantar (jenis 13), kemudian dibungkus di bawah kunci membuang yang dihasilkan setiap mesej (jenis 1059). Pada login yang memegang kunci identiti secara langsung, Nymchat menghibridkan kedua-dua lapisan, masing-masing dengan encapsulation sendiri.
Log masuk penandatangan hanya mendapat lapisan luaran sahaja. Jambatan dihasilkan oleh penandatangan sebagai NIP-44 biasa — aplikasi tidak pernah melihat kunci yang membuatnya — jadi ia tidak boleh dihibridkan di tempat. Ini tidak kos apa-apa terhadap serangan yang berkenaan: jambatan hanya boleh dicapai melalui kemaluan, dan jambatan adalah apa yang penyimpan rekod. Seorang lawan yang memegang trafik rekod mesti memecahkan ML-KEM sebelum jambatan juga boleh dilihat untuk menyerang.
7Mesej Kumpulan dan Penutup Bahagian
Satu mesej kumpulan bukan satu teks cipher. Ia adalah teks biasa yang sama yang dikeluarkan kepada setiap ahli, setiap salinan dikapsul ke kunci ML-KEM ahli itu sendiri. Seorang ahli yang telah menerbitkan kunci mendapat bungkusan hibrida; yang tidak mendapat bungkusan klasik.
Ini mewujudkan masalah perakaunan bahawa penerapan naif mendapat kesilapan.Jika lapan daripada sepuluh ahli menerima salinan hibrida, mesej bukan Satu lawan memerlukan satu salinan klasik teks biasa yang identik dalam semua sepuluh, jadi mesej ini dilindungi hanya jika setiap Copy ialah
Oleh itu, Nymchat menjejaki penyampaian per mesej semasa fan-out - bilangan hanya dikenali semasa pembungkusan sedang dibina - dan badge melaporkan “ kuantum tahan kepada 8 daripada 10 ahli” alih-alih mengklaim mesej dilindungi. menerima mesej kumpulan (hanya penghantar mengira penggemar keluar), antara muka melaporkan sebahagian daripada perlindungan penuh. mengklaim perlindungan penuh pada kekuatan salinan sendiri sahaja akan menjadi kelebihan mengenai mesej secara keseluruhan.
7.1 Apa yang dilaporkan perisai
Perisai menyatakan kebenaran mengenai Mesej, bukan tentang perisian yang menghantarnya:
- Perlindungan penuh: setiap salinan teks biasa ini keluar hibrid.
- Sebahagian: sesetengah salinan mesej kumpulan keluar secara klasik. ditarik berkurangan bukannya lengkap, kerana satu salinan klasik teks biasa yang identik dalam semua daripada mereka adalah keperluan lawan.
- Klasik dinyatakan secara langsung daripada dipaparkan sebagai tiada badge, kerana indikator yang tidak ada adalah ambigu antara “tidak dilindungi”, “ pecah”, dan “build ini tidak mempunyai ciri”.
Keputusan ini direkam apabila mesej itu disegel dan bukannya dikira semula daripada apa yang diiklankan rakan sebaya kemudian. ciphertext yang sudah wujud tidak boleh menjadi lebih dilindungi daripada yang dulu, dan antara muka yang memutar semula mesej lama pada kekuatan pengumuman baru akan mengklaim sesuatu yang salah mengenai bajet pada relay.
Peraturan kumpulan di atas tumpukan di atas ini bukannya menggantikannya: mesej Kumpulan sepenuhnya dilindungi hanya apabila salinan setiap ahli telah, dan mesej Kumpulan yang diterima tanpa jumlah cakupan menunjukkan sebahagian.
8Salinan yang ditujukan kepada diri sendiri
Beberapa perkara yang disimpan oleh klien disulitkan kepada identiti pengguna sendiri: tetapan disegerakkan, senarai perbualan, kunci kumpulan, dan arsip mesej. Ini membawa lebih banyak tentang pengguna daripada kebanyakan mesej tunggal, jadi meninggalkan mereka klasik akan menjadikan mereka artefak tersimpan yang paling lemah tidak kira bagaimana hati-hati mesej itu sendiri telah disegel. nymchat-pq-root kategori itu sendiri, yang tidak boleh disegel di bawah kunci yang hanya ia boleh menghasilkan.
Blob tetapan atau baris arsip duduk di satu tempat selama bertahun-tahun, yang adalah tepat bentuk perkara yang dikumpulkan oleh lawan yang telah dikumpulkan - jauh lebih daripada mana-mana mesej tunggal, yang sekurang-kurangnya ephemeral dalam minda pengguna sendiri.
Satu sekatan mengawal format di sini dan bukannya kunci. setiap peranti pada akaun, jadi setiap peranti mengiklankan apa yang boleh dibuka dalam roster pengiklanannya membawa, dan akaun hanya menulis apa yang semua mereka boleh baca. Menulis apa-apa yang lain akan mengunci peranti daripada tetapannya sendiri - kegagalan yang sama yang diam-diam Seksyen 3.2 mengelakkan dengan cara lain, datang dari arah yang berbeza.
Peranti yang memegang identiti tetapi bukan akar tidak boleh membuka apa-apa yang disegel kepada kunci yang dihasilkan daripada akar, termasuk tetapan sendiri.Ini merupakan akibat yang disengaja, bukan pengawasan, dan itulah sebabnya Seksyen 3.3 mempunyai petunjuk peranti sedemikian untuk mengaitkan bukannya mengikat akar segar: akar kedua tidak akan membuat blob boleh dibaca, ia hanya akan memecah bahan kunci identiti menjadi dua.Sampai pengguna mengaitkannya, peranti terus berfungsi - ia membaca apa yang ia mempunyai kunci untuk dan menghantar secara klasik.
Peranti yang menjalankan ekstensi pelayar atau penandatangan jauh (NIP-46) tidak mempunyai nsec untuk dihasilkan daripada, tetapi ia mempunyai kod pemulihan, dan di bawah pembinaan berlapis Seksyen 6.1 yang merupakan semua separuh selepas kuantum yang diperlukan: penandatangan menghasilkan lapisan NIP-44 seperti yang selalu ada, dan klien mengunci lapisan luar itu sendiri.
9Rotasi
yang epoch Pengiraan dalam derivasi adalah apa yang menjadikan rotasi mungkin tanpa bahan kunci baru. Meningkatkannya menghasilkan pasangan kunci baru dari akar yang sama dan pengumuman yang diterbitkan semula; rakan sebaya mengambil kunci baru dari rekod yang boleh diganti.
9.1 Zaman lama disimpan, dan tiada apa-apa yang disulit semula
Tiada apa-apa yang ditulis semula apabila kunci berputar. klien membina calon dekripsi dari era semasa ke epoch − 3, jadi mesej yang disegel seketika sebelum berputar masih dibuka terhadap pasangan kunci yang semasa apabila ia dihantar.
Jendela itu adalah apa yang menjadikan rotasi selamat untuk dilakukan sama sekali: tanpa itu, setiap rotasi akan merosakkan apa-apa yang sedang dalam penerbangan. apa-apa yang telah disegel kekal boleh dibaca untuk kehidupan identiti, kerana mesej yang pengguna tidak boleh lagi membuka adalah lebih buruk bagi mereka daripada yang perlindungan tidak boleh ditingkatkan secara retroaktif (Bahagian 10.5).
10Apa yang tidak boleh dilindungi
Dokumen yang hanya senaraikan apa yang dicapai oleh reka bentuk tidak menggambarkan sistem, dan melebih-lebihkan sifat keselamatan dalam antarmuka adalah lebih teruk daripada melepaskannya.
10.1 Akar adalah rahsia kedua, dan kehilangan ia tidak boleh dipulihkan
Ini adalah harga sebenar reka bentuk. penghalang dalam Seksyen 2 bahawa pengguna mesti mempunyai satu perkara yang tepat untuk disimpan tidak boleh dipenuhi: nsec sahaja tidak membina semula kunci pasca-quantum, kerana perkara keseluruhan adalah bahawa tiada nilai awam dan tiada rahsia lain mengeksposnya.Jika tiada peranti yang memegang akar dan tiada penutup Seksyen 3.2 boleh dibuka, bahan yang disegel kepada kunci yang dihasilkan daripada akar tidak boleh dipulihkan.Tidak ada escrow dan tidak ada kuasa yang sengaja boleh memegang satu.
Dengan pemindahan manual satu-satunya laluan, ini lebih tajam daripada yang boleh dibaca pertama. nympq1… kod di mana-mana sahaja mempunyai satu salinan tepatnya, pada satu peranti, dan kehilangan peranti itu kehilangan setiap mesej pasca-quantum, tetapan blob dan baris arsip yang disegel ke atasnya.
nsec tidak membantu; itulah harta yang seluruh reka bentuk bergantung pada.
Seorang penyerang menyerang laluan termurah yang tersedia, jadi skim bernilai apa laluan pemulihan terlemahnya bernilai - kata laluan yang boleh diingat, contohnya, akan meletakkan keseluruhan perkara pada apa yang kata laluan bernilai, dan baris yang dikemas adalah tepat artefak yang dikumpulkan dan dipotong secara offline pada masa lapang.
10.2 Pengesahan, berbeza daripada kerahsiaan
Setiap tanda tangan dalam Nostr adalah Schnorr di atas secp256k1, dan itu tidak berubah di sini. Seorang lawan dengan komputer kuantum boleh menipu tanda tangan dan berpura-pura pengguna dalam masa nyata. Apa pertukaran kunci hibrid mengalahkan adalah panen-sekarang-decrypt-kemudian: seorang penyerang yang mencatat lalu lintas hari ini tidak boleh membacanya nanti. Ia tidak membuat mesej tidak dapat diampuni terhadap lawan yang sudah mempunyai mesin. Perbezaan ini dibawa ke dalam aplikasi dengan sengaja - indikator padlock melaporkan pengesahan, perisai melaporkan kerahsiaan, dan mereka adalah glyphs berasingan kerana mesej boleh mempunyai satu tanpa yang lain.
Ia juga membatasi apa yang pengumuman dalam Seksyen 4 boleh menjanjikan. pengikat antara npub dan kunci ML-KEM adalah tanda tangan secp256k1, jadi lawan yang boleh memalsukan mereka boleh menggantikan kunci mereka sendiri. kerahsiaan terhadap lawan masa depan tidak sama dengan keaslian terhadap satu.
4.3 Metadata
Pembungkusan hadiah menyembunyikan penghantar, penerima melampaui satu p tag, jenis, dan timestamp mesej dalaman. Ia tidak menyembunyikan bahawa peristiwa ada, saiznya, atau apabila relay menerima ia. analisis trafik tidak ditangani oleh mana-mana bahagian reka bentuk ini.
4.3 Mesh dalam talian
Pengangkutan mesh Bluetooth Nymchat adalah protokol berasingan dengan tangan sendiri, dan ia tidak diliputi oleh kerja ini.
10.5 Mesej yang telah dihantar
Ciphertext yang direkam semasa kedua-dua pihak masih klasik kekal klasik secara kekal. Ia sudah wujud dan tidak boleh ditutup semula. Perlindungan bermula pada mesej di mana kedua-dua pihak memegang kunci post-quantum, bukan pada masa ciri itu dihidupkan.
11Alternatif yang dipertimbangkan
| Pendekatan | kenapa tak |
|---|---|
| Menghasilkan kunci post-quantum daripada kunci identiti | Derivasi adalah algoritma awam di atas nsec, dan lawan kuantum memulihkan nsec dari npub yang diterbitkan, jadi memecahkan separuh klasik tangan di atas separuh pasca kuantum dengannya. |
| Menghantar akar ke peranti lain pengguna melalui NIP-44 | A akar yang dihantar di bawah enkripsi klasik sahaja boleh dipulihkan oleh sesiapa sahaja yang mencatat mesej itu dan memecahkan kuncinya kemudian, yang merupakan lawan akar yang wujud untuk menghentikan. |
| Pasangan kunci ML-KEM yang dihasilkan secara berasingan pada setiap peranti | Ditolak. peranti akan memegang kunci decapsulation yang berbeza, dan satu pengumuman yang boleh diganti per identiti tidak boleh membawa mereka semua. rakan sebaya akan mengenkripsi ke mana-mana kunci yang diterbitkan terakhir, dan setiap peranti lain tidak akan dapat membaca hasil. |
| Letakkan akar di bawah PIN | Ditolak. PIN empat digit ialah kira-kira 13 bit terhadap penyerang dalam talian yang memegang baris yang dibungkus. menawarkan ia di samping dua laluan 256-bit akan menyesatkan apa yang dibungkus yang paling lemah bernilai. |
| Memperluaskan npub untuk memindahkan kedua-dua kunci | 1,184 bytes bukan pengiktirafan yang boleh dikongsi, dan ia akan memecahkan setiap klien Nostr yang sedia ada yang menganalisa alamat yang ditakrifkan sebagai 32 bytes. |
| Perkhidmatan Direktori Kunci | Mengembalikan kuasa rangkaian yang wujud untuk mengelakkan.Siapa sahaja yang menjawab pencarian menentukan siapa yang boleh membaca mesej. |
| Menyambung kunci kepada setiap mesej | Tidak menyelesaikan apa-apa: penghantar memerlukan penerima kunci sebelum mesej pertama, yang tepatnya adalah kes tanpa mesej terdahulu untuk membawa ia. |
| Kapasiti Perundingan In-Band | Menciptakan permukaan degradasi. penyerang yang boleh memadamkan bendera keupayaan memaksa laluan klasik. |
| Post-quantum sahaja, tiada kaki klasik | Membuang beberapa dekad analisis secp256k1 sebagai pertukaran untuk primitif yang lebih muda. kedua-duanya Fail yang |
12Implementasi pariti
Nymchat membekalkan dua pelaksanaan berasingan pembinaan ini - satu dalam JavaScript untuk aplikasi web, satu dalam Dart untuk aplikasi mudah alih, termasuk port ML-KEM-768 dari awal.
Implementasi Dart ML-KEM disahkan terhadap rasmi
Rujukan ACVP
Perbezaan antara kaedah-kaedah pengambilan sampel dan kaedah-kaedah pengambilan sampel (ML-KEM-*-FIPS203) — 25 kunci-generasi, 25 encapsulation dan 10 kes decapsulation, berjalan sebagai suite mereka sendiri. Ini adalah vektor NIST menerbitkan untuk mengesahkan pelaksanaan, jadi melepasi mereka adalah bukti port adalah betul, bukan sekadar bukti bahawa kedua-dua klien bersetuju satu sama lain. Di atas itu, satu fixture bersama vektor ujian — derivation benih, encapsulation, kedua-dua format payload, dan lengkap hadiah wraps — dihasilkan daripada rujukan JavaScript dan disemak oleh kedua-dua suite ujian. rahsia akar meluaskan fixture itu bukannya menggantikannya: akar kepada benih, akar kepada keypair, sidik jari awam akar, dan kunci yang dihasilkan, nonce dan data yang berkaitan daripada lapisan luar adalah vektor mereka sendiri, jadi kedua-dua klien tidak boleh bersetuju tentang apa yang
nympq1… Perbezaan dalam kedua-dua pelaksanaan gagal membangun bukannya menghasilkan mesej yang pelanggan lain tidak boleh membuka.
Ia adalah apa yang memberitahu peranti “ini adalah akar yang saya simpan” dari “ini adalah satu yang berbeza”, dan klien yang tidak boleh menterjemahkan sidik jari klien lain akan membaca rekod yang sangat baik sebagai tiada rekod sama sekali - dan kemudian, mengikuti Seksyen 3.3, mint akar kedua dan membahagikan identiti.Ia adalah vektor untuk alasan itu.
Nymchat ialah Sumber Terbuka di bawah AGPL-3.0. Inti kriptografi yang diterangkan di sini ialah
js/nym-crypto.js dan js/modules/pq.js di laman web pelanggan, dan
lib/core/crypto/ dengan lib/features/identity/pq_registry.dart kepada pelanggan mobile.
Untuk penjelasan yang lebih singkat dan tidak teknikal, lihat Laman pangkalan pengetahuan mengenai enkripsi kuantum-resistant.