Nymchat whitepaper فنی
توافق پس از کوانتوم کلید در Nymchat
توزیع کلیدهای عمومی ML-KEM-768 بر روی Nostr بدون یک لیسانس یا لیسانس، و به آنها از یک راز که هیچ ارزش عمومی نشان نمی دهد.
اضافه کردن یک تبادل کلید پس از کوانتوم به یک پیامبر اغلب یک مشکل رمزنگاری نیست. اولویت ها استاندارد شده اند و کتابخانه ها وجود دارند. قسمت سخت این است که هر شرکت کننده در حال حاضر نیاز به یک دومین این مقاله توضیح می دهد که چگونه Nymchat به آن پاسخ می دهد - از کجا کلید دوم آمده است، چگونه آن را به افرادی که نیاز به آن دارند، و چه رابط اجازه می دهد در مورد نتیجه ادعا کند - و در بخش آخر، چه چیزی که نتیجه آن را محافظت نمی کند.
این صفحه برای سهولت به صورت ماشینی ترجمه شده است. نسخه اصلی انگلیسی نسخه ای است که اعمال می شود.
1مشکل
پیام های خصوصی ما با رمزگذاری شده اند NIP-44نیمه ای که متن ساده را با یک تگ HMAC-SHA256 پیچیده می کند، ChaCha20 است. HKDF (RFC 5869) - به طور قابل توجهی توسط یک کامپیوتر کوانتومی تهدید نمی شود؛ الگوریتم Grover هزینه یک سرعت ریشه مربع در مقابل یک کلید symmetric است، و 256 بیتی آن را جذب می کند. موافق کلید بر روی کرم اللیپیک Diffie-Hellman سی پی256K1بازگرداندن یک کلید خصوصی از همکار عمومی خود به صورت ردیابی هر راز مشترک که کلید هرگز تولید کرده است را نشان می دهد.
تهدیدی که این کار ایجاد می کند تا زمانی که چنین ماشین وجود ندارد، متوقف نمی شود. یک دشمن با ذخیره سازی امروز می تواند متن رمزنگاری را ثبت کند و آن را هنگامی که توانایی به دست می آید، بازگرداند. هر چیزی که اکنون ارسال می شود که هنوز مهم است، در حال حاضر تحت تاثیر قرار گرفته است. این حمله خاصی است که یک تبادل کلید پس از کوانتوم شکست می دهد، و همین دلیل است که کار نمی تواند منتظر ساخت ماشین باشد.
1.1 سوالی که این مقاله می گوید
با استفاده از این نرم افزار، می توانید با استفاده از این نرم افزار، یک نرم افزاری جدید را در اختیار شما قرار دهید که به شما کمک خواهد کرد تا بتوانید از هر دو نرم افزار استفاده کنید. (فیسبوک 203به همین دلیل یک مشکل توزیع را مطرح می کند:
برای ارسال پیام به آلیس امروز، شما نیاز به یک چیز دارید: npub او. اضافه کردن یک تبادل پس از کوانتوم و شما نیاز به یک دوم - کلید عمومی ML-KEM او. کجا آن کلید زنده است، و چگونه شما آن را قبل از شما می توانید به او هر چیزی ارسال?
شما می توانید آن را بر روی کاغذ بنویسید، آن را بلند خوانید، یا آن را از یک صفحه نمایش اسکن، و این همه چیز است که هر کس نیاز به رمزگذاری برای شما. یک ML-KEM-768 کلید عمومی 1,184 بیتی است. آن را نمی تواند به طور بلند خوانده شود، آن را در یک نام کاربر قرار نمی دهد، و آن را در یک کد QR غیر از یک هویت است که تنها 32 بیتی.
قسمت سخت تر این است که یک کلید دوم به سه مشکل متفاوت منجر می شود، و بقیه این مقاله به طور عمده یک پاسخ به آنها است:
- می تواند جایگزین شود. یک کلید که هیچ کس نمی تواند در یک نگاه بخواند دقیقا همان نوع چیز است که یک حمله کننده برای خودشان تبادل می کند. بخش 4 آن را با هویت با امضا، که این یک را کاملا حل می کند.
- این باید در تمام دستگاه های یک کاربر توافق شود. همان حساب در یک تلفن و یک لپ تاپ باید همان کلید را نشان دهد، یا پیام هایی که به یکی بسته شده اند نمی توانند در دیگری باز شوند.
- می تواند از دست یابد. کلید عمومی از یک راز بازگردانده می شود، بنابراین آنچه واقعا باید زنده بماند این راز است - و با ساختار هیچ چیز دیگر آن را بازسازی نمی کند.
2طراحی محدودیت ها
چهار محدودیت پاسخ را شکل دادند و بیشتر طرح های آشکار را قبل از نوشتن هر کد خارج می کنند.
- تا حد امکان چند راز کاربران ما در حال حاضر دقیقا یک راز دارند، nsec. هر راز اضافی یک راه دیگر برای از دست دادن تاریخ شما است، و کسی که می داند که یک nsec را پشتیبان کند، نمی داند که چیزی دیگر را پشتیبان کند. بخش 3.1 نشان می دهد که این یک را نمی توان به طور مستقیم دریافت کرد - یک کلید پس از کوانتوم از nsec ارائه می دهد هیچ محافظت پس از کوانتوم - بنابراین طراحی دقیقا یک راز و هیچ چیز دیگر را صرف می کند: یک قطعه ای از مواد کلیدی، یک بار برای هر هویت تولید شده، در همان شکل و در همان مکان ارائه می شود، بنابراین هر کس می داند چگونه یک را حفظ کند می داند چگونه دیگران را حفظ کند. بخش 10.1 صادقانه در مورد هزینه های آن است.
- هیچ قدرتی هیچ سروری وجود ندارد که می تواند به شما اعتماد کند که بگویید کدام کلید به چه کسی تعلق دارد و هر یک از این سرورها به نقطه ای تبدیل می شوند که در آن پیام ها می توانند هدایت شوند.
- بسیاری از دستگاه ها، یک هویت یک هویت Nostr به طور معمول از چندین مشتری در یک زمان استفاده می شود. هر گونه مواد کلیدی وجود دارد باید در همه آنها یکسان باشد، و راه هایی که آن را در آنجا حمل می کنند نباید توسط مخالفان که از آن دفاع می کنند قابل خواندن باشند.
- بدون مذاکره هر تبادل در باند از &ldquo؛ چه رمزگذاری ها را پشتیبانی می کنید؟&rdquo؛ یک سطح است که یک حمله کننده می تواند گزینه ضعیف تر را مجبور کند.
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 چرخش چرخش چرخش چرخش چرخش چرخش چرخش چرخش چرخش چرخش چرخش چرخش (Section 9).
3.1 چرا کلید را نمی توان از کلید هویت صادر کرد
طراحی آشکار این است که کلیدپایر را از راز که کاربران در حال حاضر دارند، بریزید:
seed = HKDF(salt = "…", IKM = nsec) // do not do this
این به چهار دلیل جذاب است که همه آنها واقعی هستند: هیچ چیز جدیدی برای پشتیبان کردن نیست، زیرا nsec در حال حاضر پشتیبان شده است؛ هر دستگاه که با ساخت و ساز موافقت می کند، بدون هیچ پروتکل همگام سازی اشتباه می کند؛ یک اعلامی قابل جایگزین برای هر هویت به نظر می رسد درست است، زیرا دستگاه ها نمی توانند در مورد کلید موافقت نکنند؛ و کلید موجود قبل از آن که تا به حال منتشر شود، بنابراین یک مشتری می تواند چیزی را برای خود در ابتدا پنهان کند.
هر چهار مزایای بی ارزش هستند، به یک دلیل. آلبوم شور در مقابل یک npub منتشر شده، nsec را تولید می کند. derivation semen یک آلبوم عمومی در مقابل nsec است. بنابراین مخالفانی که نیمه کلاسیک را قطع می کنند، نیمه پس از کوانتوم را با اجرا کردن همان HKDF که همه ی دیگران اجرا می کنند، بازسازی می کنند. در مقابل کشتن-در حال حاضر-تلاشی-در نهایت - یک تهدید وجود دارد که این ویژگی را متوقف کند - یک کلید مبتنی بر این روش هیچ چیز را اضافه نمی کند.
کلید decapsulation ML-KEM باید از آنتوپیا برسد که نه از nsec صادر می شود و نه هرگز تحت رمزگذاری کلاسیک تنها منتقل می شود.
یک راز مستقل تولید شده که سپس بین دستگاه های کاربر در داخل یک پیام NIP-44 معمولی همگام می شود، همان شکست با مراحل اضافی است: مخالفان امروز این پیام را ثبت می کنند و کلید کلاسیک خود را بعدا بازمی گردانند و ریشه خارج می شود.
۲.۲ راه اندازی دستگاه های دیگر کاربران
محدودیت 3 بخش 2 - یک هویت، چندین دستگاه - در اینجا نمی تواند با شمارش راضی شود، زیرا همه چیز این است که کلید یک عملکرد از چیزی نیست که دستگاه ها در حال حاضر به اشتراک می گذارند. nympq1… کد خودشان
ریشه را به عنوان nympq1… در کنار nsec، و یک دستگاه دوم می پذیرد آن را در همان پینل پوشیده است. این تمام مکانیسم است.
دستورالعمل در بخش 3.1 می گوید که ریشه ممکن است هرگز تحت رمزگذاری کلاسیک تنها سفر کند، و هر مکانیسم که این کار را به صورت اتوماتیک انجام دهد - همگام کردن آن از طریق یک رله، بسته شدن آن به کلید هویت - دقیقا آن را نقض می کند.
این فرمت جایگاه برای یک مسیر بسته بندی می کند: یک رکورد می تواند یک لیست از بسته بندی ها را حمل کند، هر یک از آنها یک AEAD blob زیر یک کلید است که کاربر می تواند بر روی یک دستگاه دیگر تکرار کند - به عنوان مثال یک فرمت PRF passkey. nympq1… کد تنها راه عبور است. بخش 10.1 بیان می کند چه هزینه ای است.
رکورد خود را در بخش تنظیمات خود زندگی می کند، nymchat-pq-rootحتی با حمل هیچ بسته بندی، کار لازم را انجام می دهد: حضور آن این است که چگونه یک دستگاه دوم یاد می گیرد که این هویت در حال حاضر یک ریشه دارد، که این چیزی است که آن را متوقف می کند که یک رقابتی را به دست می آورد (قسمت 3.3).
این nymchat-pq-root دسته بندی must نه این خط تنها یک نسخه از ریشه را حمل می کند، بنابراین بسته بندی آن در زیر یک کلید مبتنی بر ریشه یک قفل است که کلید آن در داخل جعبه است: هیچ دستگاهی نمی تواند آن را باز کند، از جمله کسی که آن را نوشت. آن را به طور کلاسیک بسته شده است - NIP-44 به خود - یا نه.
هر دسته دیگر تنظیمات می تواند و باید از کلید ریشه گرفته استفاده کند.این استثنا واحد است، و استثنا در مورد چرخه ای است نه در مورد قدرت.
3.3 نسل و پذیرش
در راه اندازی، با داشتن یک هویت پایدار، یک مشتری در این ترتیب کار می کند:
- به دنبال یک موجود
nymchat-pq-rootرکورد - رکورد یافت شده و این دستگاه می تواند آن را باز کند - آن را پذیرفته و این هویت را به عنوان توانایی پس از کوانتوم اعلام کنید.
- رکورد یافت شده و این دستگاه نمی تواند آن را باز کند - یک ریشه جدید ایجاد نکنید و هیچ آگهی را منتشر نکنید.
nympq1…کد از یک دستگاه که قبلا آن را دارد. - بدون رکورد - ایجاد یک ریشه، ثبت را منتشر کنید، اعلام کنید و نمایش دهید
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) را نگه می دارد، بنابراین یک جمهوری جایگزین اعلام قبلی می شود.
امضا به معنای تعهدی است. این رویداد توسط کلید هویت امضا می شود، بنابراین ادعای این کلید ML-KEM به این npub&rdquo تعلق دارد، دقیقاً همانند npub خود قوی است. جایگزین کردن یک کلید encapsulation مختلف نیاز به ساخت یک امضا secp256k1 دارد. یک حمله کننده که می تواند این کار را انجام دهد، نیازی به مشکلی با KEM ندارد.
اعلانات پایان می یابد. هفتمین روز NIP-40 پس از پایان دوره، که هر 24 ساعت دوباره منتشر می شود، یک بیان در مورد یک مشتری که هنوز در حال اجرا است، به جای یک مشتری که قبلا بود، ثبت می شود.
یک اعلامیه گم شده دقیقا مانند یک اعلامیه است که هیچ وقت یک کلید را حمل نکرده است: همکاران NIP-44 معمولی را ارسال می کنند که هر ثبت نام می تواند آن را بخواند، و مشتری تبادل پس از کوانتوم را در اتصال بعدی خود ادامه می دهد، هنگامی که دوباره منتشر می شود.
بدون آن، یک رکورد از کلید آن نامیده می شود: یک دستگاه که حذف می شود، بازسازی می شود، یا ریشه آن را جایگزین می کند، یک دستور ایستاده ای را به یک کلید که هیچ کس دیگر نگهداری نمی کند، و پیام های ارسال شده تحت آن بدون خطا در هر دو طرف از دست می گیرند.
میدان کلیدی نام فرم آن را می نامد. این زمینه pk2یک خواننده که میدان را نمی شناسد، مشتری Nymchat را پایان می دهد، هیچ کلید پس کوانتومی ندارد و NIP-44 معمولی را می فرستد که هر Login می تواند بخواند.این هدایت اشتباه درست است، و ارزش آن است که به عنوان یک قانون ذکر شود که شماره سازی شکل وجود دارد: یک ادعای توانایی ناشناس باید هزینه حفاظت، هرگز تحویل دهد. یک کلید که یک همکار نمی تواند از هیچ کلید استفاده کند، بدتر از هیچ کلید است، زیرا پیام که تولید می کند با هیچ اشتباه در هر دو طرف از دست رفته است.
4.1 غیبت معنایی است و سه مورد ارزیابی می شود
جزئیات عمیق اما مهم: اعلامیه توسط هر مشتری Nymchat منتشر می شود، نه فقط کسانی که پس از کوانتوم توانایی دارند، و زمینه کلیدی اختیاری است.
| مشاهده | به معنی | ارسال رفتار |
|---|---|---|
| آگهی با کلید | Nymchat، پس از کوانتوم توانایی | هیبرید |
| آگهی بدون کلید | Nymchat، کلاسیک فقط - پس از کوانتوم، یا یک دستگاه که هنوز به ریشه هویت مرتبط نشده است | کلاسیک NIP-17 |
| بدون اعلامیه | مشتری ناشناخته می تواند هر کاربر Nostr یا Bitchat باشد | کلاسیک، علاوه بر یک بسته سازگاری |
یک آگهی بدون کلید یک اعلامیه امضا شده است که فرستنده Nymchat را اجرا می کند، که اجازه می دهد مسیر ارسال را از طریق یک بسته ی پروتکل های گوناگونی که در غیر این صورت باید برای هر کس که نمی تواند شناسایی شود، اضافه کند.
4.2 دستگاهی که نمی تواند ریشه را باز کند سکوت می کند
این اعلامیه قابل جایگزین است: یک رویداد برای هر هویت، آخرین نوشتن برنده است.این چیزی است که طراحی یک ریکارډ را انجام می دهد، و این نیز چیزی است که یک دستگاه غیر مرتبط را خطرناک می کند اگر آن را منتشر کند.
بنابراین یک دستگاه که یک ریشه را می داند وجود دارد اما نمی تواند آن را باز کند، هیچ آگهی را منتشر نمی کند. آن را قطع نمی کند و از برنامه خارج نمی شود: هنوز هر پیام را که کلید های آن را دارد می خواند و هنوز به طور کلاسیک می فرستد، در حالی که کاربران را به آن لینک می دهد. سکوت رفتار درست برای یک دستگاه است که نمی تواند برای هویت صحبت کند.
5کشف و ارسال تصمیم
مشتریان کلید های همکاران را به دو روش یاد می گیرند. یک امضای ایستاده از افرادی که کاربر در واقع با آنها ارتباط دارد - مکالمه های باز و اعضای گروه - پوشش می دهد، بنابراین اعلان هایشان به عنوان رویدادهای معمول می آیند. برای یک همکار برای اولین بار ملاقات می شود، یک سوال یک بار در زمان ارسال اجرا می شود، محدود به 2.5 ثانیه؛ اگر آن را حل نمی کند، پیام کلاسیک می شود، که رفتار است که قبل از اضافه شدن پس از کوانتوم به جای یک حالت شکست جدید وجود دارد.
یک کاربر که یک دستگاه جدید را متصل می کند، یا که از ثبت نام از یک توزیع مرورگر به کلید محلی منتقل می شود، می تواند پس از کوانتوم در وسط مکالمه باشد، و یک "برای همیشه" به صورت دائم "نه" آن ها را در رمزگذاری کلاسیک برای طول عمر تبلیغات نگه می دارد.
5.1 چرا هیچ حمله پایین تر وجود ندارد
تصمیم راه اندازی به یک سؤال محدود می شود:
pq = (we hold a signed, unexpired ML-KEM key for this recipient)
هیچ مذاکره توانایی، هیچ لیست از الگوریتم های پشتیبانی شده وجود ندارد و هیچ زمینه ای که یک حمله کننده می تواند یک مسیر ضعیف تر را مجبور کند. است حالت شکست یک اعلامیه از دست رفته یا بازداشت شده این است که پیام کلاسیک می شود - وضعیت موجود قبل از این ویژگی - به جای اینکه یک پیام هیبرید به چیزی که ممکن است از دست یابد.
برعکس نیز دارد و مهم تر است: یک مشتری هیدرولیک را ارسال می کند تنها هنگامی که کلید را نگه می دارد، و نگه داشتن کلید اثبات می کند که دریافت کننده می تواند آن را از بین ببندد.
6ساختار هیبریدی
Nymchat جایگزین NIP-44 نیست و آن را بسته می کند. متن رمزگذاری NIP-44 نامگذاری نشده لایه داخلی است و ML-KEM یک AEAD خارجی را در اطراف آن کلید می دهد:
inner = nip44_encrypt(plaintext, conversation_key(sender, recipient))
info = "nymchat-pq2" || sender_secp_pk || recip_secp_pk || kem_ct || recip_kem_pk
prk = HKDF-Extract(salt = "nymchat-pq2-v1", IKM = kem_ss)
key = HKDF-Expand(prk, info || "key", 32)
nonce = HKDF-Expand(prk, info || "nonce", 12)
outer = ChaCha20-Poly1305(key, nonce, plaintext = inner, aad = info)
payload = "pq2." || base64url(kem_ct) || "." || base64url(outer)
هر دو راز هنوز باید برای خواندن پیام بازگردانده شود: لایه بیرونی تنها یک متن رمزنگاری NIP-44 را تولید می کند، و باز کردن آن به ECDH کلاسیک نیاز دارد. یک دشمن کوانتومی که secp256k1 را قطع می کند، کلید داخلی را دریافت می کند و هنوز با ML-KEM روبرو می شود؛ یک قطع ML-KEM لایه خارجی را قطع می کند و NIP-44 را ایستاده می کند.
kem_ssهیچ چیز در این متغیر محصول ECDH خام را لمس نمی کند، که چیزی است که بخش 6.1 به آن تبدیل می شود.kem_ct,recip_kem_pkو هر دو کلید هویت به عنوان داده های مرتبط متصل می شوند، بنابراین لایه خارجی به تاسیس دقیق که آن را تولید کرده است متعهد می شود.
کلید ML-KEM دریافت کننده طولانی عمر دارد، اما هر پیام دارای یک متن رمزنگاری مستقل و بنابراین یک رمزنگاری مستقل است.
kem_ssاین چیزی است که باعث می شود deriving the nonce rather than randomizing it sound:
چاکا20-پولی1305
از طریق استفاده مجددا از یک جفت کلید و در اینجا کلید خود را برای هر پیام جدید است، بنابراین هیچ جفت می تواند تکرار شود.
6.1 چرا لایه ها جدا می شوند
جایگزین این است که هر دو راز را به یک کلید مکالمه ای ترکیب کنید و آن را به NIP-44 ارسال کنید:
ck = HKDF-Extract(salt = "…",
IKM = ecdh_x || kem_ss || …) // do not do this
این ساختار شبیه رمزگذاری است.این یک مشکل ساختاری دارد: نیاز به
ecdh_xبه عنوان یکی از مهم ترین ویژگی های این نرم افزار، به عنوان یک نرم افزاری نرم افزاری (NIP-07) یا یک امضای دور (NIP-46) هرگز این ارزش را باز نمی دهد.این NIP-44 را به نفع دعوت کننده انجام می دهد و یک متن رمزنگاری را باز می گرداند، که تمام نقطه نگه داشتن کلید در جایی است که برنامه نمی تواند به آن برسد.
مخلوط کردن رازها به همین دلیل تمام ثبت نام هایی را که کلید هویت را در یک امضاء کننده حفظ می کند، یعنی کاربران با دقت ترین استفاده را خارج می کند، و هیچ مقدار کار بر روی تولید کلید نمی تواند آن را تغییر دهد. لایه گیری بستگی را حذف می کند: NIP-44 کل باقی می ماند و توسط هر چیزی که کلید هویت را در اختیار دارد، امضاء کننده شامل می شود، تولید می شود، در حالی که نیمی از KEM از کد بازسازی که مشتری به طور مستقیم در اختیار دارد محاسبه می شود.
هزینه پهنای باند، و آن کوچک نیست. متن رمزنگاری ML-KEM 1.088 بیتی است و بر روی هر پیام، base64url-کود شده به 1.451 شخصیت رانده می شود؛ AEAD خارجی یک برچسب Poly1305 16 بیتی اضافه می کند و بارگذاری NIP-44 را با یک سوم گسترش می دهد. یک پیام 50 بیتی از 176 بیتی به 1.712 و یک 2000 بیتی از 2.820 به 5.238 رشد می کند.
6.2 مشخصات خودرویی
این pq2. پیشگوئی توسعه را افزایش می دهد: خود توصیف می کند، بنابراین یک مشتری راه حل را با بررسی وزن مفید به جای اعتماد به یک برچسب و یا به یادآوری آنچه یک همکار پشتیبانی می کند انتخاب می کند. یک خواننده که پیشگوئی را شناسایی نمی کند، آن را باز نمی کند به جای آن را اشتباه بخواند، و پیام هایی که قبل از هر دو طرف بسته می شوند می توانند پس از کوانتوم مانند NIP-44 معمولی بدون مهاجرت قابل خواندن باشند.
ML-KEM decapsulation طراحی شده است تا هرگز ناکام نشود: با توجه به یک رمزنگاری اشتباه، تبدیل Fujisaki-Okamoto یک راز پنهان تصادفی به جای یک خطا را باز می گرداند. بنابراین یک کلید اشتباه در لایه KEM به هیچ وجه سطوح نمی شود - آن را به عنوان یک شکست HMAC در داخل NIP-44، که همان گونه است که یک سطوح کلیدی کلاسیک اشتباه است. تماس ها هر دو را به طور یکسان درمان می کنند، بنابراین شکست هیچ سیگنال منحصر به فرد را حمل نمی کند. همچنین این چیزی است که لیست کاندیدای قسمت 9.1 را کارآمد می کند: یک مشتری هر کلید را به طور متناوب امتحان می کند و NIP-44 می گوید کدام یک درست است.
6.3 هر دو لایه بسته هدیه
A NIP-17 پیام خصوصی A NIP-59 بسته هدیه: یک سخنگوی بدون امضا، زیر کلید هویت فرستنده (جسم 13) بسته شده، سپس زیر یک کلید هدایت شده که در هر پیام (جسم 1059) تولید می شود بسته می شود.
یک ثبت نام امضاء کننده تنها لایه بیرونی را دریافت می کند. پنهان کننده توسط امضاء کننده به عنوان NIP-44 معمول تولید می شود - برنامه هیچ گاه کلید را نمی بیند که آن را ایجاد می کند - بنابراین نمی تواند در محل hibridize شود. این هیچ هزینه ای در برابر حمله در مورد ندارد: پنهان کننده تنها از طریق پوشه قابل دسترسی است، و پنهان کننده آن چیزی است که یک ثبت کننده ذخیره می کند. یک مخالفان نگه داشتن ترافیک ثبت شده باید ML-KEM را قطع کند قبل از اینکه یک پنهان کننده حتی قابل مشاهده برای حمله باشد.
7پیام های گروهی و پوشش جزئی
یک پیام گروه یک متن رمزگشایی نیست. این همان متن ساده است که به هر عضو ارسال می شود، هر کپی به کلید ML-KEM خود آن عضو بسته شده است. یک عضو که کلید را منتشر کرده است یک بسته هیبریدی دریافت می کند؛ یکی که بسته کلاسیک را ندارد.
این باعث می شود یک مشکل حسابداری ایجاد شود که یک اجرای ناخودآگاه اشتباه می کند.اگر هشت نفر از ده عضو یک نسخه هیبریدی دریافت کنند، پیام نه یک مخالف نیاز به یک نسخه کلاسیک از یک متن ساده است که در تمام ده یکسان است، بنابراین پیام تنها محافظت می شود اگر هر کپی شده است.
Nymchat به همین دلیل پوشش هر پیام را در طول fan-out دنبال می کند - تعداد فقط در حالی که بسته بندی ها ساخته می شوند شناخته می شود - و باند گزارش می دهد که 8 از 10 عضو مقاومت دارد، به جای ادعا کردن که پیام محافظت شده است. دریافت پیام گروهی ( تنها فرستنده از طرفداران محسوب می شود) ، رابط گزارش بخشی به جای حفاظت کامل است.
7.1 چه اطلاعاتی از سایبری
سایه، حقیقت را در مورد پیامو نه در مورد نرم افزار که آن را ارسال:
- محافظت کامل: هر نسخه از این متن ساده هائیدری شد.
- جزئی: برخی نسخه های یک پیام گروه به صورت کلاسیک منتشر شده اند و به جای کامل کاهش یافته اند، زیرا یک نسخه کلاسیک از یک متن ساده در همه آنها یک نیاز مخالف است.
- کلاسیک به طور مستقیم بیان می شود به جای به عنوان هیچ نشانه نشان داده شود، زیرا یک شاخص ناپدید بین &ldquo؛ غیر محافظت شده&rdquo؛، &ldquo؛ قطع شده&rdquo؛ و &ldquo؛ این ساختار از ویژگی&rdquo؛ غافل است.
قضاوت هنگامی که پیام بسته می شود به جای اینکه از آنچه یک همکار بعداً تبلیغ می کند بازگردانده شود، ثبت می شود.کتاب رمزگذاری که در حال حاضر وجود دارد نمی تواند بهتر از آن محافظت شود، و یک رابطی که پیام های قدیمی را به قدرت یک اعلامیه جدید بازگرداند، چیزی در مورد بیتی ها در یک رله را تکذیب می کند.
قوانین گروه در بالا بر روی این استراتژی است، نه جایگزین آن: یک پیام گروه به طور کامل تنها زمانی محافظت می شود که هر عضو یک کپی داشته باشد، و یک پیام گروه دریافت بدون تعداد پوشش به طور جزئی نشان می دهد.
8کپی هایی که به خودتان هدایت شده اند
چندین چیز که یک مشتری ذخیره می کند به هویت خود کاربر رمزگذاری می شود: تنظیمات همگام شده، لیست مکالمه، کلیدهای گروه، و آرشیو پیام. این ها بیشتر از بسیاری از پیام های منحصر به فرد در مورد یک کاربر حمل می کنند، بنابراین ترک آنها کلاسیک، آن ها را ضعیف ترین آرشیو ذخیره می کند، بدون توجه به اینکه پیام ها خود را با چه دقت بسته شده اند. nymchat-pq-root دسته بندی خود، که نمی تواند تحت کلید که تنها می تواند تولید شود بسته شود.
این ارقام در جایی هستند که طراحی بیشترین اهمیت را دارد.برنامه تنظیمات یا خط ارقام در یک مکان برای سال ها قرار دارد، که دقیقا همان شکل از چیزی است که یک دشمن بعداً جمع آوری می کند - بسیار بیشتر از هر پیام منحصر به فردی، که حداقل در ذهن خود کاربر است.
یک محدودیت در اینجا به جای کلید، فرمت را اداره می کند. یک کپی با آدرس خود باید قابل خواندن باشد هر دستگاه در حساب، بنابراین هر دستگاه تبلیغ می کند آنچه را می تواند در لیست تبلیغات خود را باز کند، و حساب فقط آنچه را که همه آنها می توانند بخوانند می نویسد. نوشتن هر چیزی دیگر می تواند یک دستگاه را از تنظیمات خود مخفی کند - همان شکست سکوت بخش 3.2 با راه های دیگر جلوگیری می کند، از یک سمت متفاوت می آید.
یک دستگاه که هویت را در اختیار دارد اما نه ریشه نمی تواند چیزی را که به کلید ریشه گرفته شده بسته شده است، از جمله تنظیمات خود را باز کند.این یک نتیجه عمدی است، نه یک نظارت، و به همین دلیل است که بخش 3.3 دارای چنین یک دستگاه راهنمایی برای لینک کردن به جای شبیه سازی یک ریشه تازه است: یک ریشه دوم نمی تواند بلو را خوانده شود، آن را فقط می تواند مواد کلیدی هویت را به دو قسمت تقسیم کند.تا زمانی که کاربر آن را لینک کند، دستگاه ادامه می دهد کار می کند - آن را می خواند آنچه برای آن کلیدها دارد و به طور کلاسیک ارسال می کند.
یک دستگاه که یک افزونه مرورگر یا یک امضا کننده از راه دور (NIP-46) را اجرا می کند، هیچ nsec را در اختیار ندارد، اما کد بازسازی را در اختیار دارد، و تحت ساختار طبقه بندی شده بخش 6.1 که تمام نیازهای نیمه پس از کوانتوم است: امضا کننده لایه NIP-44 را همانطور که همیشه دارد تولید می کند، و مشتری لایه بیرونی خود را کلید می دهد.
9روایات
این epoch حسابدار در ارجاع چیزی است که rotation را بدون مواد کلیدی جدید امکان می دهد. افزایش آن باعث می شود یک جفت کلید تازه از همان ریشه و یک اعلامیه مجددا منتشر شود؛ همکاران کلید جدید را از رکورد قابل جایگزین دریافت می کنند. rotation بنابراین از کاربر نمی خواهد چیزی را برای دومین بار بنویسد: ریشه یک بار برای هر هویت تولید می شود و عصر تغییر می کند.
9.1 دوره های قدیمی نگهداری می شوند و هیچ چیز دوباره رمزگذاری نمی شود
هیچ چیز هنگامی که یک کلید چرخیده می شود، بازگردانده می شود. یک مشتری کاندیدای رمزگذاری را از عصر فعلی تا عصر 3 ایجاد می کند، بنابراین یک پیام که کمی قبل از چرخیدن بسته شده است، هنوز در مقابل جفت کلید باز می شود که در زمان ارسال آن فعلی بود.
این پنجره چیزی است که چرخش را کاملا امن می سازد: بدون آن، هر چرخش هر چیزی را که در پرواز بود از بین می برد. هر چیزی که در حال حاضر بسته شده، برای زندگی هویت قابل خواندن است، زیرا یک پیام که کاربر دیگر نمی تواند باز کند، برای آنها سخت تر از آن است که حفاظت از آن نمی تواند به صورت ردیابی بهبود یابد (قسمت 10.5).
10چه چیزی محافظت نمی کند
یک مقاله که تنها آنچه را که یک طراحی به دست می آورد، لیست می کند، یک سیستم را توصیف نمی کند، و بیش از حد ارزیابی یک ویژگی امنیتی در یک رابط بدتر از حذف آن است.
10.1 ریشه یک راز دوم است و از دست دادن آن غیر قابل بازسازی است.
این قیمت واقعی طراحی است. محدودیت در بخش 2 که یک کاربر باید دقیقا یک چیز را نگه داشته باشد، نمی تواند برآورده شود: nsec تنها کلید پس از کوانتوم را بازسازی نمی کند، زیرا همه چیز این است که هیچ ارزش عمومی و هیچ راز دیگری آن را نشان نمی دهد. اگر هیچ دستگاهی ریشه را نگه نمی دارد و هیچ یک از بسته بندی های بخش 3.2 نمی تواند باز شود، مواد بسته شده به کلید ریشه ای قابل بازسازی نیست.
با انتقال دستاورد تنها راه، این تر از آن است که ممکن است اول خوانده شود. nympq1… کد هر جا دقیقا یک نسخه از آن دارد، در یک دستگاه، و از دست دادن آن دستگاه از دست می دهد هر پیام پس از کوانتوم، تنظیمات Blob و خط آرشیو بسته به آن.
nsec این کار به هیچ وجه کمک نمی کند؛ این اموالی است که تمام طراحی بر آن است.
یک حمله کننده به ارزان ترین مسیر در دسترس حمله می کند، بنابراین یک طرح ارزش آن است که ارزان ترین مسیر بازسازی آن ارزش دارد - به عنوان مثال، یک کلمه یادآور، همه چیز را در هر چیزی که کلمه عبور ارزش دارد قرار می دهد، و کلمه پوشیده دقیقاً ارگانیک است که یک دشمن بعداً جمع آوری می کند و در زمان آزادانه از آن خارج می شود.
10.2 تصدیق، به عنوان متفاوت از حریم خصوصی
هر امضا در Nostr Schnorr در secp256k1 است و این در اینجا تغییر نمی کند. یک دشمن با یک کامپیوتر کوانتوم می تواند امضاها را جعلی کند و یک کاربر را در زمان واقعی نشان دهد. آنچه که یک تبادل کلید هیبرید شکست می دهد، کشتن-در حال حاضر-دکسپت-در نهایت است: یک حمله کننده که امروز ترافیک را ثبت می کند نمی تواند آن را بعدا بخواند. این پیام را علیه یک دشمن که قبلا دستگاه را دارد ناپذیر نمی سازد. این تفاوتی به طور عمدی به برنامه ها منتقل می شود - شاخص پلک گزارش تصدیق، شاخص گزارش حریم خصوصی، و آنها گلیف های جداگانه هستند زیرا یک پیام می تواند بدون یکدیگر داشته باشد.
این همچنین محدودیت هایی را که اعلامیه در بخش 4 می تواند وعده دهد.بیماری بین یک npub و یک کلید ML-KEM یک امضای secp256k1 است، بنابراین یک دشمن که می تواند آن ها را جعلی کند می تواند یک کلید خود را جایگزین کند.بیماری در برابر یک دشمن آینده برابر با اعتبار در برابر یکی نیست.
10.3 متاداژ
هدیه ای که فرستنده را پنهان می کند، دریافت کننده را فراتر از یک p برچسب، نوع و زمان پیام داخلی. آن را پنهان نمی کند که یک رویداد وجود دارد، اندازه آن، و یا زمانی که یک پیامبر آن را دریافت کرده است. تجزیه و تحلیل ترافیک توسط هیچ بخشی از این طراحی مورد بررسی قرار نمی گیرد.
10.4 شبکه های غیر فعال
انتقال بلوتوث نیش Nymchat یک پروتکل جداگانه با دست خود را، و آن را از طریق این کار پوشش نمی دهد.
10.5 پیام های ارسال شده
Ciphertext ثبت شده در حالی که هر دو طرف هنوز کلاسیک کلاسیک دائم باقی می ماند. آن را در حال حاضر وجود دارد و نمی تواند بازگردانده شود. محافظت از پیام شروع می شود که در آن هر دو طرف کلید های پس از کوانتوم نگه داشت، نه در زمانی که ویژگی فعال شد.
11جایگزین های در نظر گرفته شده
| رویکرد | چرا نه |
|---|---|
| دانلود کلید پس کوانتوم از کلید هویت | رد شده است.در نتیجه یک الگوریتم عمومی در مورد nsec است، و یک دشمن کوانتومی از nsec را از NPUB منتشر می کند، بنابراین نصف کلاسیک را در برابر نیمه پس از کوانتوم با آن قطع می کند.این هر مشکل توزیع را در این مقاله حل کرد و از هیچ کس دفاع کرد. |
| ارسال ریشه به سایر دستگاه های کاربر از طریق NIP-44 | ریشه ای که تحت رمزگذاری کلاسیک ارسال می شود، توسط هر کس که این پیام را ثبت کرده و کلید آن را بعداً از بین می برد، که دشمنی است که ریشه وجود دارد تا آن را متوقف کند، بازگرداند. |
| یک جفت کلید ML-KEM به طور جداگانه در هر دستگاه تولید می شود | دستگاه ها کلید های مختلفی را در دست می گیرند، و یک آگهی قابل جایگزین برای هر هویت نمی تواند همه آنها را حمل کند. همکاران به هر کلید که آخرین بار منتشر شد، رمزگذاری می کنند، و هر دستگاه دیگر نمی تواند نتیجه را بخواند. |
| ریشه را زیر یک PIN بسته کنید | یک PIN چهار رقمی حدود 13 بیتی نسبت به یک حمله کننده خارج از اینترنت است که خط بسته را نگه دارد. ارائه آن در کنار دو مسیر 256 بیتی نشان می دهد که ضعیف ترین بسته ارزش دارد. |
| NPUB را برای حمل هر دو کلید گسترش دهید | 1.184 بیتی یک شناسه ی به اشتراک گذاشته نمی شود و هر یک از مشتریان موجود ما را از یک آدرس که به عنوان 32 بیتی تعریف شده است، حذف می کند. |
| یک سرویس کلیدی مدیریت | بازگرداندن قدرت که شبکه وجود دارد تا از آن اجتناب کند. هر کس پاسخ به جستجو را تصمیم می گیرد که چه کسی می تواند پیام را بخواند. |
| کلید را به هر پیام اضافه کنید | هیچ چیز را حل نمی کند: فرستنده نیاز به دریافت کننده کلید قبل از پیام اول، که دقیقا در مورد بدون پیام قبلی برای حمل آن است. |
| توانایی مذاکره بین باند | یک حمله کننده که می تواند یک پرچم توانایی را از بین ببرد، مسیر کلاسیک را مجبور می کند. |
| Post-quantum فقط، هیچ قدم کلاسیک | از دهه های تجزیه و تحلیل secp256k1 در عوض برای یک ابتدایی بسیار جوان تر خارج می شود. هر دو فایده |
12اجرای Parity
Nymchat دو پیاده سازی مستقل از این ساختار را ارائه می دهد - یکی در JavaScript برای برنامه های وب، یکی در Dart برای برنامه های تلفن همراه، از جمله یک پورت ML-KEM-768 از ابتدا.
اجرای Dart ML-KEM نسبت به رسمی تایید می شود
NIST ACVP
روش های ارزیابی و ارزیابی روش های ارزیابی و ارزیابی روش های ارزیابی (ML-KEM-*-FIPS203) - 25 Key-generation، 25 encapsulation و 10 decapsulation cases، که به عنوان یک مجموعه خود را اجرا می کنند. این است که وکتورهای NIST منتشر می کنند تا یک اجرای را تایید کنند، بنابراین انتقال آنها شواهد است که پورت درست است، نه فقط شواهد این است که دو مشتری با یکدیگر موافقند. علاوه بر این، یک سازگاری مشترک از وکتور های تست - derivation زراعت، encapsulation، هر دو فرمت payload، و complet gift wraps - از اشاره JavaScript تولید شده و توسط هر دو مجموعه آزمایش بررسی می شود. راز ریشه این سازگاری را گسترش می دهد به جای جای جایگزین آن: ریشه به زراعت، ریشه به keypair، انگشت عمومی ریشه، و کلید derived، nonce و داده های مرتبط با لایه خارج از خود هستند، بنابراین دو مشتری نمی توانند
nympq1… یک اختلاف در هر یک از پیاده سازی ها، ساخت را شکست می دهد به جای ایجاد یک پیام که مشتری دیگر نمی تواند آن را باز کند.
این چیزی است که به یک دستگاه می گوید این ریشه ای است که من از &ldquo؛ این یکی متفاوت است، و یک مشتری که نمی توانست انگشت دیگری از یک مشتری دیگر را تکرار کند، یک ریکارډ کاملا خوب را به عنوان هیچ ریکارډی بخواند - و سپس، پس از بخش 3.3، یک ریشه دوم را تمیز می کند و هویت را تقسیم می کند.
Nymchat است منبع باز تحت AGPL-3.0. هسته رمزنگاری که در اینجا توصیف شده است
js/nym-crypto.js و js/modules/pq.js در وب سایت مشتری و
lib/core/crypto/ با lib/features/identity/pq_registry.dart در مشتریان موبایل
برای توضیح کوتاه تر، غیر فنی، ببینید صفحه پایگاه دانش در رمزنگاری ضد کوانتوم.