بیشتر مردم واژه nonce را در یک پروفایل VPN می‌بینند و گمان می‌کنند راز مشترک دیگری است که باید میان همتاها کپی شود. این‌طور نیست. nonce مقداری است که هرگز نباید زیر همان کلید تکرار شود، و در بیشتر رمزنگاری‌های مبتنی بر nonce به‌صورت آشکار منتقل می‌شود. این سردرگمی بی‌ضرر می‌ماند تا وقتی کسی آن را دستی ویرایش کند، و خرابی واقعی از همان‌جا آغاز می‌شود.

nonce در واقع از کجا می‌آید

رمزنگاری احراز هویت‌شده برای هر پیام رمز شده زیر یک کلید به nonce متفاوتی نیاز دارد. پروتکل‌ها این نیاز را به روش‌های گوناگون برآورده می‌کنند: شمارنده‌ای که یکنواخت افزایش می‌یابد، نمکی که با شناسه بسته ترکیب می‌شود، یا مقدار تصادفی به‌قدر کافی طولانی. IKEv2 در تبادل اولیه nonceها را مبادله می‌کند، و آن‌ها ورودی‌های عمومی برای استخراج کلید هستند نه راز.

یکتایی می‌تواند ساختاری یا احتمالی باشد. شمارنده تا زمانی که سرریز نکند نمی‌تواند تکرار شود، و به همین دلیل پروتکل نقطه تجدید کلید را بسیار پیش‌تر تعریف می‌کند. مقدار تصادفی به بیت‌های کافی تکیه می‌کند تا برخورد در محدوده پیام‌ها نامحتمل باشد، که استدلالی متفاوت با حالت شکست متفاوت است. مستندات پروتکل مشخص می‌کند کدام روش اعمال می‌شود، و هر دو تنها تا زمانی ایمن‌اند که حد اعلام‌شده رعایت شود.

DesignWhere uniqueness comes fromExhaustion is handled by
AES-GCM recordsAn IV, typically a counterRekey before the counter wraps
ChaCha20-Poly1305A 96-bit nonce from a counter or generatorA message limit per key
WireGuardA per-key 64-bit counterRekey at a message cap
OpenVPN AEADPacket identifier plus implicit key materialRekey on the packet-id limit
IKEv2Fresh nonces per exchangeA new security association

استفاده مجدد واقعاً چه هزینه‌ای دارد

استفاده مجدد از nonce زیر یک کلید مسئله کوچک کارایی نیست. با GCM، دو پیامی که یک IV را به اشتراک می‌گذارند به ناظر اجازه می‌دهند کلید احراز هویت را بازیابی کند و یا انحصاری دو متن ساده را محاسبه کند. ساختارهای مبتنی بر جریان نیز به همین شکل از جریان کلید استفاده مجدد می‌کنند، که متن رمز را به جای یک راز به یک معما تبدیل می‌کند.

به همین دلیل پیاده‌سازی‌ها پیش از سرریز شدن شمارنده کلید را تجدید می‌کنند، و به همین دلیل وقتی وضعیتشان نامطمئن است به جای ادامه دادن متوقف می‌شوند. راه‌اندازی مجددی که شمارنده را بازنشانی می‌کند در حالی که همتا هنوز کلید قدیمی را دارد، یا ماشین مجازی‌ای که از یک عکس فوری گرفته‌شده در میانه نشست بازیابی می‌شود، دقیقاً همان وضعیتی است که حدها برای جلوگیری از آن وجود دارند. هیچ مهاجمی لازم نیست؛ عملیات عادی کافی است.

چرا ویرایش دستی راه‌حل اشتباه است

شمارنده‌ها، نمک‌ها و شناسه‌های بسته ماشین‌های حالت مشترک میان دو سر هستند. تغییر یک طرف، طرف دیگر را از همگام‌سازی خارج می‌کند، و تونل به شکلی شکست می‌خورد که شبیه مشکل مسیریابی به نظر می‌رسد. اهرم پشتیبانی‌شده یک تبادل کلید تازه است که وضعیت هر دو سر را همزمان بازنشانی می‌کند.

گذرواژه‌ها و nonceها نیز نقش‌های متفاوتی دارند. گذرواژه ورودی محرمانه برای استخراج کلید است؛ nonce ورودی عمومی برای هر پیام است. فیلدی در پروفایل با برچسب nonce که راز طولانی می‌خواهد معمولاً یک کلید ایستا یا راز از پیش مشترک زیر نامی دیگر است، پس مستندات آن فیلد را بخوانید نه اینکه فرض کنید.

وقتی یک هشدار درباره مدیریت nonce باشد، اصلاح، نسخه اصلاح‌شده نگه‌دارنده است، نه رمزنگاری دیگر یا کلید کوتاه‌تر. تغییر رمزنگاری برای پرهیز از واژه nonce مشکل را جابه‌جا می‌کند نه حل.

خواندن هشدار بدون حدس زدن

یک خط گزارش درباره شمارنده‌ها یا nonceها معمولاً وضعیت ازدست‌رفته را توصیف می‌کند نه حمله. بررسی کنید آیا یک همتا راه‌اندازی مجدد شده، آیا ماشین مجازی کلون‌شده همان هویت را بازاستفاده کرده، و آیا دو سر درباره تنظیمات تجدید کلید توافق دارند. سپس نشست تازه‌ای برقرار کنید و ببینید آیا پیام بازمی‌گردد.

تشخیص را از شکست‌های نامرتبط جدا نگه دارید. صفحه‌ای که بارگذاری نمی‌شود، یا پرسش اعتباری که در حلقه می‌ماند، مدرکی بر استفاده مجدد از nonce نیست، و برخورد با آن به‌عنوان چنین چیزی شما را به لایه رمزنگاری می‌فرستد در حالی که مشکل بالاتر از آن است.

برای استفاده معمول، قاعده ایمن کوتاه است: بگذارید پیاده‌سازی nonce را مدیریت کند، هر دو سر را روی نسخه‌های پشتیبانی‌شده نگه دارید، و هر بازنشانی وضعیت را دلیلی برای تجدید کلید بدانید نه ویرایش یک مقدار. اگر فیلدی در پروفایل در مستندات فروشنده نیست، برایش مقداری از خود نسازید. اصلاح تونل با دانستن این آغاز می‌شود که به کدام لایه نگاه می‌کنید.

مقالات مرتبط