مولد امن اعداد شبهتصادفی در رمزنگاری
تولیدکننده عدد شبه تصادفی رمزنگاری (CSPRNG) یا تولیدکننده عدد شبه تصادفی رمزنگاری (CPRNG) یک تولیدکننده عدد شبه تصادفی (PRNG) با ویژگیهایی است که آن را برای استفاده در رمزنگاری مناسب میکند. همچنین به صورت عمومی به عنوان یک تولیدکننده عدد تصادفی رمزنگاری (CRNG) آزادانه شناخته میشود (به تولید اعداد تصادفی واقعی در مقابل اعداد شبه تصادفی مراجعه کنید).
بیشترینکاربردهای رمزنگاری که نیاز به اعداد تصادفی دارند، درموارد زیر دیده میشود:
- تولید کلید
- رمزنگاری نانس
- نمک در طرحهای امضایی خاص، از جمله ECDSA , RSASSA-PSS
میزان «کیفیت» تصادفی بودن، در کاربردها مختلف متفاوت است. در برخی از پروتوکلها در تولید یک رمزنانسی فقط یکتا بودن مقدار تصادفی تولید شده کافی است اما در سمت دیگر، تولید یک کلید اصلی با میزان کیفتی بالاتری در بحث تصادفی بودن میطلبد و همچنین باید آنتروپی مولد نیز بیشتر باشد. همچنین در کاربرد پد یکبار مصرف، نظریه ی اطلاعات تنها در صورتی کلید از یک منبع تصادفی با یک آنتروپی بالا آمده باشد، رازداری را تضمین میکند؛ بنابراین هر مولد تولید اعداد تصادفی نمیتواند نیاز آنرا برای آن کافی باشد و مفید واقع شود.
به صورت ایدهآل، اعداد تصادفی مورد نیاز در رمزنگاری باید از منابع با کیفیت بالا مانند مولد سختافزاری اعداد تصادفی یا سیستمهای پیشبینیناپذیر تأمین گردند. اما همواره میزانی همبستگی میان دادههای تصادفی که برخی فرایندهای ظاهراً تصادفی وجود دارد. بنابر تئوری اطلاعات، میزان تصادفی بودن و آنتروپی دادههای که میتواند توسط یک سیستم تولید شود، همواره برابر آنتروپی خود آن سیستم است اما گاهی در مثالهای عملی، تعداد اعداد تصادفی مورد نیاز بیشتر از میزان آنتروپی موجود است. دراین موارد CSPRNG میتواند جایگزین شود که توانایی آنتروپی را در اختیار بیتهای بیشتری قراردهد.
الزامات (ویژگیهای موردنیاز)
ویژگیهای مورد نیاز برای یک مولد معمولی اعداد شبهتصادفی، توسط مولد امن اعداد شبهتصادفی نیز تأمین میشوند. اما عکس این مطلب درست نیست. ویژگیهای خاص مولد امن شبهتصادفی، دو دسته هستند. اولاً این مولدها باید از آزمونهای آماری بگذرند و ویژگیهای آماری مورد نیاز برای اعداد تصادفی تولیدشده را برآورده سازند. ثانیاً این مولدها باید در برابر حملههای احتمالی به اندازه کافی مقاوم باشند؛ حتی اگر قسمتی از حالت اولیه یا جاری آنها به دست مهاجمی بیفتد که قصد حمله دارد.
- هر مولد امن اعداد تصادفی باید از آزمون آزمون بیت بعدی بگذرد. این آزمون رشتهای از بیتهای تصادفی را به عنوان ورودی میگیرد. برای موفقیت در آزمون، هیچ الگوریتم با مرتبه زمانی چندجملهای نباید وجود داشته باشد که با احتمال بیش از یک دوم، بیت بعدی بلافاصله پس از رشته را پیشبینی کند.
- در هر مولد امن اعداد شبهتصادفی، چنانچه تمام یا قسمتی از یک حالت مولد فاش شود یا به درستی حدس زده شود، بازسازی اعدادِ قبلی نباید امکانپذیر باشد. علاوه بر این، چنانچه از یک رشته یا مقدار اولیه در مولد امن اعداد تصادفی استفاده میشود، دسترسی به این رشته یا مقدار اولیه نباید به پیشبینی حالات بعدی مولد منتهی شود.
- مثال: اگر CSPRNG مورد نظر از یک نقطهٔ نامشخص از دنبالهٔ بیتهای مربوط به شروع به تولید کند، ممکن است آزمایش بیت بعدی را برآورده کند و از این لحاظ از نظر آماری تصادفی باشد، زیرا به نظر میرسد π دارای دنباله تصادفی از بیتها است. . (برای مثال اگر π عدد نرمال باشد این تضمین میشود) با این حال، این الگوریتم از نظر رمزنگاری ایمن نیست. مهاجمی که تعیین کند کدام بیت pi (یعنی حالت فعلی الگوریتم) در حال استفاده است قادر خواهد بود تمامی بیتهای قبلی را نیز محاسبه کند.
اکثر مولدهای اعداد شبهتصادفی قابل استفاده به عنوان مولد امن نیستند. چرا که اولاً با اینکه ممکن است در مقابل آزمونهای آماری کاملاً امن به نظر برسند، اما در حقیقت در برابر مهندسی معکوس آسیبپذیر هستند و میتوان آزمونهای آماری خاصی یافت که اعداد تولیدشده توسط این مولدها را از اعداد واقعاً تصادفی متمایز میسازند. ثانیاً در اکثر مولدهای اعداد شبهتصادفی، هنگامی که حالت جاری مولد فاش میشود، همه بیتهای قبلی قابل بازسازی خواهند بود و حمله کننده از این طریق خواهد توانست به همه پیامهای قبلی و بعدی دسترسی پیدا کند.
CSPRNGs برای مقاوت در برابر این رمزنگاری طراحی شدهاست.
تعاریف
در تنظیمات مجانبی، خانواده ای از توابع قابل محاسبه چند جمله ای قطعی
برای برخی از مقادیرناچیز
یک توصیف معادل وجود دارد: برای هر تابع خانوادهٔ
یک مولد اعداد تصادفی امن رو به جلو با طول بلوک
هر PRNG
استخراج آنتروپی
سانتا و وزیرانی ثابت کردند جریانهای بیتی با تصادف ضعیف میتوانند باهم ترکیب شوند و جریان بیتی شبه تصادفی با کیفتی بالاتری را بسازند. حتی پیش از این، جان فون نویمان ثابت کرده بود که یک الگوریتم ساده میتواند مقدار قابل توجهی از جانبداری را از هر جریان بیتی حذف کند این الگوریتم باید قبل از هرگونه تغییر در طرح Santha–Vazirani بر روی هر جریان بیتی اعمال شود.
طرحها
در بحث زیر، طرحهای CSPRNG به سه طبقه تقسیم میشوند:
- دسته اول مولدهایی هستند که بر پایه اصول رمزنگاری همچون الگوریتمهای رمزگذاری یا تابع درهم سازی طراحی میشوند.
- دسته دوم مولدها با استفاده از نظریه اعداد ساخته میشوند. در این مولدها فرض سخت بودن حل برخی از مسائل در نظریه اعداد مورد استفاده قرار میگیرد.
- دسته سوم هم شامل مولدهایی میشود که برای هدفی خاص طراحی میشوند.
در این دسته از مولدها معمولاً خروجی بهطور قطعی بر حسب حالت اولیه معین نمیشود. ویژگی اخیر این امکان را فراهم میآورد تا حتی در صورت انتشار حالت اولیه، مولد در مقابل حملات احتمالی امن باشد.
طراحی بر اساس اصول رمزنگاری
- هر رمز بلوکی میتواند به عنوان مولد امن اعداد شبهتصادفی مورد استفاده قرار گیرد. برای این منظور کافی است تا رمز دنبالهای را در مد شمارشی مورد استفاده قرار دهیم. به بدان معنا خواهد بود که با استفاده از رمز دنبالهای به ترتیب اعداد صفر، یک، دو و … را رمزگذاری کنیم. مقدار اولیه برای شروع این پروسه میتواند عددی غیر از صفر هم باشد. به وضوح با استفاده از یک رمز دنبالهای nبیتی دوره تناوب مولد برابر ۲ خواهد بود. همچنین در این مورد باید مقادیر اولیه را نیز مخفی نگاه داشت.
- هر تابع درهم سازی امن را میتوان به مولد امن اعداد شبهتصادفی تبدیل کرد. کافی است ورودی مانند حالت بالا را به چنین تابعی وارد سازیم. در این حالت، باید مقدار اولیه مورد استفاده هم عددی تصادفی باشد. به هر صورت، در عمل برای تولید اعداد شبهتصادفی از این شیوه چندان استفاده نمیشود.
- هر رمز دنبالهای نیز میتواند به عنوان مولد امن اعداد شبهتصادفی به کار گرفته شود. در رمزهای دنبالهای، معمولاً دنبالهای تصادفی با متن اصلی ترکیب میشود (معمولاً XOR میشود) تا متن رمز شده به دست آید. اما چنانچه ورودی شمارشی که در موارد قبلی استفاده نمودیم را با دنباله شبهتصادفی ترکیب کنیم، دنباله شبهتصادفی جدیدی به دست میآید. این دنباله رمز شده نیز تنها زمانی امن خواهد بود که دنباله تصادفی اول امن باشد. در این مورد نیز باید حالت اولیه مخفی نگاه داشته شود.
طراحی بر پایه نظریه اعداد
- الگوریتم Blum Blum Shub براساسسختی تجزیهٔ اعدا، اثبات شدهاست که ایمن است. چون تنها راه شناخته شده برای حل آن مشکل، عامل سازی ماژول هاست، بهطور کلی در نظر گرفته میشود که مشکل فاکتورسازی عدد صحیح اثبات امنیت الگوریتم Blum Blum Shub را موجب میشود. با این حال الگوریتم بسیار ناکارآمد است و بنابراین غیرعملی است مگر اینکه به امنیت زیادی موردنیاز باشد.
- الگوریتم Blum-Micali دارای اثبات امنیتی بی قید و شرط بر اساس مشکل مشکل لگاریتم گسستهاست ، اما همچنین بسیار ناکارآمد است.
- دانیل براون از Certicom یک سند امنیتی ۲۰۰۶ برای Dual_EC_DRBG نوشتهاست، که بر اساس فرض سختی فرضیه تصمیم Diffie-Hellman، مشکل x-logarithm و مشکل نقطه کوتاه میباشد. اثبات سال ۲۰۰۶ صریحاً فراتر از حد استاندارد Dual_EC_DRBG فرض میکند، و این که P و Q در استاندارد Dual_EC_DRBG (که در سال ۲۰۱۳ توسط NSA مشخص شد که احتمالاً دارای درپشتی است) با مقادیر بدون درپشتی جایگزین میشوند.
طرحهای ویژه
تعدادی از مولدهای امن تولید اعداد شبهتصادفی با طراحی خاص در ذیل عنوان شدهاند.
- الگوریتم Yarrow که سعی در ارزیابی کیفیت آنتروپیک ورودیهایش را دارد. بومادران در macOS (همچنین به عنوان / dev / تصادفی) استفاده میشود.
- الگوریتم ChaCha20 جایگزین RC4 در OpenBSD (نسخه ۵٫۴)، NetBSD (نسخه ۷٫۰)، و FreeBSD (نسخه ۱۲٫۰) شد.
- ChaCha20 همچنین در نسخه ۴٫۸ جایگزین SHA-1 در لینوکس شد.
- الگوریتم Fortuna، که ازYarrow نشات گرفتهاست، سعی در ارزیابی کیفیت آنتروپیک ورودیهایش را ندارد. Fortuna در FreeBSD استفاده میشود.
- عملکرد CryptGenRandom در رابط برنامهنویسی برنامه رمزنگاری مایکروسافت ارائه شدهاست
- ISAAC مبتنی بر نوع رمزنگاری RC4
- الگوریتم تکاملی مبتنی بر مجموعه آزمون آماری NIST.
- arc4random
- AES - CTR DRBG اغلب در سیستمهایی که از رمزگذاری AES استفاده میکنند به عنوان یک تولیدکننده عدد تصادفی استفاده میشود.
- استاندارد ANSI X9.17 (مدیریت کلیدی مؤسسه مالی (wholesale))، که به عنوان استاندارد FIPS نیز پذیرفته شدهاست. یک ورودی TDEA (کلید زنی گزینه ۲) میگیرد به همراه بسته نرمافزاری کلید k و (مقدار اولیه) ۶۴ بیتی دانه تصادفی است. هر بار که تعداد تصادفی مورد نیاز است:
- تاریخ / زمان فعلی D را به حداکثر وضوح ممکن میرساند.
- مقدار موقت t = TDEAk(D) را محاسبه میکند.
- مقدار تصادفی x = TDEAk(s ⊕ t)را محاسبه میکند. به طوری که ⊕ بیانگر یای انحصاری بیتی است.
- دانه s = TDEAk(x ⊕ t) را بروزرسانی میکند.
- بدیهی است برای اینکه روش به راحتی به هر رمزنگاری بلوکی تعمیم داده شود، AES پیشنهاد شدهاست
استانداردها
برخی مولدهای تولید امن اعداد شبه تصادفی رمزشده، استاندارد شدهاند مانند:
- FIPS 186-4
- NIST SP 800-90A:
- این استاندارد دارای چهار مولد اعداد شبه تصادفی است. دو مورد از آنها غیرقابل بحث و اثبات است: CSPRNGهایی به نامهای Hash_DRBG و HMAC_DRBG.
- سومین مولد اعداد شبه تصادفی در این استاندارد CTR_DRBG است که مبتی بر رمزنگاری بلوکی است که که در حالت پیشخوان اجرا می شود. طرح این روش غیرقابل بحث است اما ثابت شدهاست که در برابر حملات تمایز دهنده ضعیف تر از سطح امنیتی رمزنگاری بلوک زیرین است که تعداد بیتهای خروجی PRNG بیشتراز دو برابر تعداد بیتهای بلاک زیرین رمزنگاری است.
- وقتی حداکثر تعداد بیتهای خروجی این PRNG برابر دو به توان اندازهٔ بلاک است، خروجی از نظر ریاضی سطح امنیت مورد انتطار اندازهٔ کلید را فراهم میکند اما خروجی آن ثابت شدهاست که از بیتهای خروجی یک مولد اعداد تصادفی واقعی غیرقابل تمایز نیست. هنگامی که حداکثر تعداد بیتهای خروجی از این PRNG کمتر از آن باشد، سطح امنیت فراهم میشود و خروجی از خروجی یک مولد اعداد تصادفی غیرقابل تمایز است.
در ویرایش بعدی ذکر شدهاست که قدرتی که برای CTR_DRGB ادعا شده بود، به محدود کردن تعداد کل اعداد درخواست شده و تعداد بیتهای درخواست شده در هر درخواست، وابسته است.
- چهارمین و آخرین PRNG در این استاندارد Dual_EC_DRBG نام دارد که نشان داده شدهاست که از منظر رمزنگاری کاملاً ایمن نیست و اعتقاد بر این است که دارای یک پشتی NSA از کلپوگرافی است.
- NIST SP 800-90A Rev.1: این در واقع NIST SP 800-90A است که Dual_EC_DRBG برداشته شده و جایگزین استاندارد برداشت شدهاست.
- ANSI X9.17-1985 پیوست ج
- ANSI X9.31-1998 پیوست A.2.4
- ANSI X9.62-1998 ضمیمه A.4، منسوخ شده توسط ANSI X9.62-2005 و (Annex D(HMAC_DRBG
مرجع خوب توسط NIST فراهم شدهاست.
استانداردهایی برای تست آماری طراحیهای CSPRNG های جدید موجود است:
- یک تست آماری مفید برای مولدهای تصادفی و شبه تصادفی، انتشار ویژه NIST 800-22 است.
درپشتی Kleptographic NSA درمولد اعداد شبه تصادفی Dual_EC_DRBG
گاردین و نیویورک تایمز که آژانس امنیت ملی (NSA) یک درپشتی را دریک مولد اعداد شبه تصادفی NIST SP 800-90A قرار دادهاست که به NSA اجازه میدهد تا به آسانی متونی که با کمک Dual_EC_DRBG رمزگذاری شدهاند را رمزگشایی کند. درهر دو مقاله گزارش شدهاست که ان اس ای به عنوان کارشناسان مستقل امنیتی، در حال معرفی نقاط ضعف استاندارد CSPRNG 800-90 است. این موارد برای اولین بار توسط یکی از اسناد عالی مخفی که توسط ادوارد اسنودن به گاردین فاش شدهاست، تأیید شد. ان اس ای بهطور مخفیانه کار کرد تا نسخهٔ شخصیسازی شده اش از پیش نویس استاندارد امنیتی NIST را بدست آورد که در سال ۲۰۰۶ برای استفادهٔ جهانی به تصویب رسید. در این اسناد منتشر شده آمدهاست که «در نهایت NSA تنها ویرایشگر شد.». باوجود مورد پنهان شناخته شده کلیپتوگرافیک و نواقص قابل توجه Dual_EC_DRBG، بعضی از شرکتها مانند RSA به استفاده از Dual_EC_DRBG تا سال ۲۰۱۳ که ضعف آن تاییدشد، ادامه دادند. RSA برای این کار ۱۰ میلیون دلار از آزانس امنیت ملی دریافت کرد.
نقصهای امنیتی
حمله DUHK
در ۲۳ اکتبر ۲۰۱۷، Shaanan Cohney , Matthew Green و Nadia Heninger، رمزنگارانی در دانشگاه پنسیلوانیا و دانشگاه جان هاپکینز جزئیات حمله DUHK (از کلیدهای رمزگذاری شده استفاده نکنید) را روی WPA2 منتشر کردند که در آن سختافزارهایی که در آنها کلید تصادف الگوریتم ANSI X9.31 به صورت مستقیم در کد قرار داده شدهاند درتناقض با استفاده از مولد اعداد تصادفی ANSI X9.31، عمل میکنند. "در این حمله مهاجم میتواند دادههای رمزگذاری شده، با روش سعی و خطاهای فراوان (brute-force) به کار گیرد تا بقیه پارامترهای رمزنگاری را کشف کند و درنتیجه به کلید رمزنگاری اصلی که برای رمزنگاری جلسات وب یا اتصالات شبکه خصوصی مجازی (VPN)استفاده میشود، دست یابد. "
منابع
- ↑ Huang, Andrew (2003). Hacking the Xbox: An Introduction to Reverse Engineering. No Starch Press Series. No Starch Press. p. 111. ISBN 978-1-59327-029-2. Retrieved 2013-10-24.
[...] the keystream generator [...] can be thought of as a cryptographic pseudo-random number generator (CPRNG).
- ↑ Dufour, Cédric. "How to ensure entropy and proper random numbers generation in virtual machines". Exoscale.
- ↑ "/dev/random Is More Like /dev/urandom With Linux 5.6 - Phoronix". www.phoronix.com.
- ↑ Goldreich, Oded (2001), Foundations of cryptography I: Basic Tools, Cambridge: Cambridge University Press, ISBN 978-0-511-54689-1, def 3.3.1.
- ↑ Goldreich, Oded (2001), Foundations of cryptography I: Basic Tools, Cambridge: Cambridge University Press, ISBN 978-0-511-54689-1, Theorem 3.3.7.
- ↑ Dodis, Yevgeniy, Lecture 5 Notes of Introduction to Cryptography (PDF), archived from the original (PDF) on 5 March 2016, retrieved 3 January 2016, def 4.
- ↑ John von Neumann (1963-03-01). "Various techniques for use in connection with random digits". The Collected Works of John von Neumann. Pergamon Press. pp. 768–770. ISBN 0-08-009566-6.
- ↑ "CVS log of arc4random.c". CVS. October 1, 2013.
- ↑ "CVS log of arc4random.c". CVS. November 16, 2014.
- ↑ "FreeBSD 12.0-RELEASE Release Notes: Runtime Libraries and API". FreeBSD.org. 5 March 2019. Retrieved 24 August 2019.
- ↑ "Github commit of random.c". Github. July 2, 2016.
- ↑ "A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications" (PDF). Special Publication. NIST. April 2010.
- ↑ Poorghanad, A.; Sadr, A.; Kashanipour, A. (May 2008). "Generating High Quality Pseudo Random Number Using Evolutionary Methods" (PDF). IEEE Congress on Computational Intelligence and Security. 9: 331–335.
- ↑ Kleidermacher, David; Kleidermacher, Mike (2012). Embedded Systems Security: Practical Methods for Safe and Secure Software and Systems Development. Elsevier. p. 256.
- ↑ Cox, George; Dike, Charles; Johnston, DJ (2011). "Intel's Digital Random Number Generator (DRNG)" (PDF).
- ↑ Menezes, Alfred; van Oorschot, Paul; Vanstone, Scott (1996). "Chapter 5: Pseudorandom Bits and Sequences" (PDF). Handbook of Applied Cryptography. CRC Press.
- ↑ Young, Adam; Yung, Moti (2004-02-01). Malicious Cryptography: Exposing Cryptovirology. sect 3.5.1: John Wiley & Sons. ISBN 978-0-7645-4975-5.
- ↑ Kan, Wilson (September 4, 2007). "Analysis of Underlying Assumptions in NIST DRBGs" (PDF). Retrieved November 19, 2016.
- ↑ Ye, Katherine Qinru (April 2016). "The Notorious PRG: Formal verification of the HMAC-DRBG pseudorandom number generator" (PDF). Retrieved November 19, 2016.
- ↑ Campagna, Matthew J. (November 1, 2006). "Security Bounds for the NIST Codebook-based Deterministic Random Bit Generator" (PDF). Retrieved November 19, 2016.
- ↑ Perlroth, Nicole (September 10, 2013). "Government Announces Steps to Restore Confidence on Encryption Standards". The New York Times. Retrieved November 19, 2016.
- ↑ James Borger; Glenn Greenwald (6 September 2013). "Revealed: how US and UK spy agencies defeat internet privacy and security". The Guardian. The Guardian. Retrieved 7 September 2013.
- ↑ Nicole Perlroth (5 September 2013). "N.S.A. Able to Foil Basic Safeguards of Privacy on Web". The New York Times. Retrieved 7 September 2013.
- ↑ Matthew Green. "RSA warns developers not to use RSA products".
- ↑ Joseph Menn (20 December 2013). "Exclusive: Secret contract tied NSA and security industry pioneer". Reuters. Archived from the original on 24 September 2015. Retrieved 22 May 2020.
- ↑ Shaanan Cohney; Matthew D. Green; Nadia Heninger. "Practical state recovery attacks against legacy RNG implementations" (PDF). duhkattack.com.
- ↑ "DUHK Crypto Attack Recovers Encryption Keys, Exposes VPN Connections". slashdot.org. Retrieved 25 October 2017.
پیوند به بیرون
- RFC 4086 ، الزامات تصادفی برای امنیت
- جاوا «استخر آنتروپی» برای اعداد تصادفی غیرقابل پیشبینی از نظر رمزنگاری. بایگانیشده در ۲ دسامبر ۲۰۰۸ توسط Wayback Machine
- کلاس استاندارد جاوا که یک مولد عدد شبه تصادفی از نظر رمزنگاری قوی را ارائه میدهد (PRNG).
- بدون استفاده از CryptoAPI ، تعداد تصادفی را به صورت رمزنگاری ایمن کنید
- امنیت گمانه زنی از ANSI-NIST بیضوی منحنی RNG، دانیل RL براون، IACR ePrint 2006/117.
- تجزیه و تحلیل امنیتی ژنراتور شماره تصادفی منحنی بیضوی NIST SP 800-90، دانیل آر ال براون و کریستیان ژوستین، IACR ePrint 2007/048. برای حضور در CRYPTO 2007.
- کریپتانالیز ژنراتور Pseudorandom منحنی Dual Elliptic Curve , Berry Schoenmakers and Andrey Sidorenko, IACR ePrint 2006/190.
- ژنراتورهای مؤثر سودمند مبتنی بر فرض DDH، رضا رضاییان فرشاهی و بری ششنماکرز و آندری سیدورنکو، IACR ePrint 2006/321.
- تجزیه و تحلیل ژنراتور شماره تصادفی لینوکس، Zvi Gutterman و Benny Pinkas و Tzachy Reinman.
- مستندات و برنامهنویسی تست آماری NIST.