امنیت سیستم های رمزنگاری وابسته به برخی داده های سِرّی است که تنها برای افراد خاصی شناخته شده است و برای سایرین، ناشناخته و غیرقابل پیش بینی می باشد.. برای دستیابی به این خاصیت غیرقابل پیش بینی بودن، انواع مختلفی از تصادفی سازی به کار گرفته می شود. پروتکل های رمزنگاری مدرن اغلب به تولید مکرر مقادیر تصادفی نیاز دارند. حملات رمزنگاری که باعث ایجاد ضعف یا برهم زدن این فرایند شوند، به عنوان **حملات مولد عدد تصادفی** شناخته می شوند. 

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

نسل انسانی مقادیر تصادفی
------------------------

معمولاً انسانها در تولید مقادیر تصادفی ضعیف عمل می کنند. حرفه ی جادوگران و قماربازهای حرفه ای نیز به قابل پیش بینی بودن رفتار انسان وابسته هستند. در جنگ جهانی دوم به کارمندان رمزنگاری آلمانی دستور داده شد تا سه حرف را به طور تصادفی به عنوان تنظیم اولیه روتور برای هر دستگاه Enigma انتخاب کنند. در عوض برخی از آنها مقادیر قابل پیش بینی را انتخاب کردند و کمک بزرگی به متفقین در شکستن این سیستم های رمزگذاری شده کردند. مثال دیگر، ، روش های اغلب قابل پیش بینی است که کاربران کامپیوتر برای انتخاب رمزهای عبور استفاده می کنند. (به شکستن رمز عبور مراجعه کنید). 

با این وجود ، در مورد خاص بازی های استراتژیک مختلط ، استفاده از آنتروپی گیم پلی انسانی برای تولید تصادفی توسط ران هالپرین و مونی نور مورد بررسی قرار گرفت.

حملات
-----

### مولد های نرم‌افزاری عدد تصادفی

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

حمله مستقیم کریپتانالیستی (آنالیز رمز)
این حمله هنگامی رخ می دهد که مهاجم بخشی از جریان بیت های رندم را بدست آورده و بتواند آن را در جهت تشخیص خروجی RNG از یک جریان واقعاً تصادفی، به کار گیرد.
حملات مبتنی بر ورودی
برای حمله باید ورودی را به rng تغیر داد. برای مثال، با "فلاش کردن" آنتروپی موجود از سیستم و قرار دادن آن در یک وضعیت شناخته شده میتوان این نوع حمله را شکل داد.
حملات گسترش مصالحه ای دولت
در بعضی مواقع که وضعیت مخفی داخلی rng شناخته شده است، از این روش برای خروجی های پیش رو یا بازیابی خروجی های پیشین استفاده میشود. این اتفاق زمانی رخ میدهد که ژنراتور تازه راه اندازی شده باشد و آنتروپی ناچیزی داشته باشد. (به خصوص اگر کامپیوتر تازه بوت شده باشد و دنباله استانداردی از عملیات را دنبال کند) بنابراین مهاجم میتواند حدس اولیه را در آن وضعیت بدست آورد.
### مولد های سخت افزاری عدد تصادفی

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

### براندازی RNG

اعداد تصادفی واژگون را می توان با استفاده از یک مولد عدد شبه تصادفی رمزنگاری شده با ارزش دانه شناخته شده برای مهاجم ایجاد کرد اما ب طوری که در نرم‌افزار پنهان شده باشد. 24 - 40 بیتی از بذر برای جلوگیری از تکرار، می تواند واقعاً تصادفی باشد، اما نه به اندازه ای که برای جلوگیری از بهبودی مهاجم کافی باشد. 

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

یک مدار سخت افزاری برای تولید بیت های واژگون شده می تواند در یک مدار یکپارچه چند میلی متر مربعی ساخته شود. پیشرفته ترین تولیدکننده عدد تصادفی سخت افزاری را می توان با قرار دادن چنین تراشه ای بالای مکانی که منبع تصادفی در آن دیجیتالی شده است، مثلاً در یک تراشه درایور خروجی یا حتی در کابل اتصال RNG به رایانه، واژگون ساخت. تراشه واژگون کننده می تواند شامل یه کلاک برای محدود کردن شروع عملیات به مدتی پس از راه اندازی یونیت، یا میتواند شامل یک گیرنده رادیویی برای کنترل خاموش/روشن باشد. این تراشه می تواند توسط سازنده در کارخانه یا بعداً توسط هر کس که دسترسی فیزیکی دارد، نصب شود. تراشه های CPU با ژنراتورهای شماره تصادفی سخت افزاری داخلی ساخته شده را می توان با تراشه های سازگار با RNG واژگون ساز در جایگزین کرد.

پدافندها
--------

* از تولید کننده های سخت افزاری مختلط (مانند xor ) عدد تصادفی با خروجی با کیفیتی از جریان رمزگذاری استفاده کنید. کلید رمزنگاری جریان یا دانه باید به قدری قابل تغیر باشد که بتوان از یک منبع قابل اطمینان مشتق و حسابرسی شود. به عنوان مثال تولید کننده عدد تصادفی Fortuna نمونه ایست که از این مکانیزم استفاده می کند.
* گذرواژه‌ها و عبارات عبور را با استفاده از یک منبع تصادفی حقیقی ایجاد کنید. برخی سیستم ها به جای اینکه اجازه دهند کاربران خوشان رمز عبور دلخواهی را پیشنهاد دهند، به طور اتومات رمزهای عبور تصادفی برای کاربرانشان انتخاب میکنند.
* از سیستم های رمزگذاری ای استفاده کنید که نحوه تولید اعداد تصادفی را مستند میکنند و روشی را برای بازرسی و ممیزی روند تولید ارائه می دهند.
* سیستم های امنیتی را ترجیحاً به روشهایی خریداری کنید که کاربرد مورد نظر آن را آشکار نکند، از این منظر، کارتهای صوتی و وب کم ها می توانند منبع تصادفی بهتری نسبت به سخت افزارهای ساخته شده بدین منظور باشند.
* پس از خرید، کنترل فیزیکی کامل روی سخت افزار را حفظ کنید.

طراحی یک ژنراتور تصادفی ایمن، به اندازه سایر عناصر یک سیستم رمزنگاری هنگام طراحی، نیاز به مراقبت و توجه دارد.

نمونه های برجسته
----------------

### دانه قابل پیش بینی Netscape

در نسخه های اولیه پروتکل رمزگذاری Secure Socket Layer Netscape (SSL) از مقادیر شبه تصادفی مشتق شده از یک prng کاشته شده با 3 متغیر استفاده میشد: زمان روز، شناسه پروسه، شناسه پروسه اصلی (مادر). این مقادیر معمولاً تا حدی قابل پیش بینی هستند و بنابراین نسبت به تصادفی ها، آنتروپی کمتری دارند. به این ترتیب، نسخه SSL ناامن شناخته شد. این مشکل در سال 1994 توسط فیلیپ هالام بیکر ، محقق تیم وب CERN به Netscape گزارش شد، اما تا قبل از انتشار (ریلیز) مشکل برطرف نشد. مشکل موجود در کد در حال اجرا در سال 1995 توسط یان گلدبرگ و دیوید واگنر، که مجبور شدند کد را مهندسی معکوس کنند زیرا Netscape از افشای جزییات مربوط به تولید عدد تصادفی اش، خودداری کرد (امنیت از طریق گمنامی).این RNG در نسخه های بعدی (ورژن 2 و بالاتر) توسط استحکام بیشتر یعنی آنتروپی تصادفی تر و بالاتر از دید مهاجم، اصلاح شد. 

### تولید کننده عدد تصادفی مایکروسافت ویندوز 2000 / XP

مایکروسافت از یک الگوریتم منتشر نشده برای تولید مقادیر تصادفی برای سیستم عامل ویندوز خود استفاده می کند. این مقادیر تصادفی از طریق ابزار CryptGenRandom در دسترس کاربران قرار می گیرد. در نوامبر 2007، لئو Dorrendorf و همکارانش از دانشگاه عبری اورشلیم و دانشگاه حیفا مقاله ای را تحت عنوان Cryptanalysis of the Random Number Generator of the Windows Operating System منتشر کردند.  این مقاله ضعف هایی جدی در رویکرد مایکروسافت در آن زمان را ارائه داد. نتیجه گیری این مقاله بر مبنای جداسازی کد در ویندوز 2000 بود، اما به گفته کایکروسافت، در ویندوز XP نیز کاربرد دارد.  مایکروسافت اظهار داشت که مشکلات مشروح در مقاله، در ورژن های بعدی ویندوز که از یک نوع متفاوت از پیاده سازی RNG استفاده میکند، در نظر گرفته شده است. 

### حیاط خلوت احتمالی در DRBG

مؤسسه ملی استاندارد و فناوری ایالات متحده مجموعه ای از "ژنراتورهای بیت تصادفی قطعی" را منتشر کرد که از آن به عنوان انتشارات ویژه NIST 800-90 یاد می شود.  یکی از ژنراتورها، Dual\_EC\_DRBG، مورد حمایت و علاقه آژانس امنیت ملی بود.  Dual\_EC\_DRBG از فناوری منحنی بیضوی استفاده کرده و مجموعه ای از ثابت های توصیه شده را شامل می شود. در آگوست 2007، دن شومو و نیلز فرگوسن از کمپانی مایکروسافت نشان دادند که ثابت ها می توانند به گونه ای ساخته شوند که قادر به ایجاد یک backdoor kleptographic در الگوریتم باشند.  در سپتامبر 2013 *روزنامه نیویورک تایمز* نوشت: "NSA یک حیات خلوت مخفی را در استاندارد 2006 اتخاذ شده توسط NIST با نام استاندارد "Dual EC DRBG" ایجاد کرده است.  بدین ترتیب این حقیقت که آژانس امنیت ملی آمریکا، حمله ای بدافزاری علیه مردم انجام داده، فاش شد. در دسامبر 2013، رویترز گزارش داد که اسناد منتشر شده توسط ادوارد اسنودن نشان می دهد که NSA ده میلیون دلار به RSA Security پرداخت کرده است تا Dual\_EC\_DRBG را پیش فرض نرم‌افزار رمزگذاری خود قرار دهد و نگرانی های بیشتری را درباره اینکه این الگوریتم ممکن است دارای پشتی برای NSA باشد ، پرداخت کرده است.  با توجه به این نگرانی ها، در سال 2014، NIST ژنراتور Dual EC DRBG را از پیش نویس راهنمای ژنراتورهای عدد تصادفی خارج کرد و توصیه نمود:" کاربران فعلی Dual EC DRBG در اسرع وقت به یکی از سه الگوریتم مصوب برجای مانده منتقل شوند". 

### رمزنگاری MIFARE

Crypto-1 یک سیستم رمزنگاری است که توسط NXP جهت استفاده در تراشه های MIFARE ساخته شده است. این سیستم اختصاصی است و در اصل الگوریتم مربوطه منتشر نشده است. محققان دانشگاه ویرجینیا و باشگاه کامپیوتری Chaos با استفاده از یک ژنراتور عدد تصادفی اولیه ضعیف، به crypto-1 حمله کردند. 

### دبیان OpenSSL

در ماه مه 2008، یک محقق امنیتی به نام لوسیانو بلو، کشف کرد که تغیراتی که در سال 2006 بر روی  ژنراتور عدد تصادفی ورژن OpenSSL توزیع شده با Debian GNU / Linux و سایر توزیع های مبتنی بر دبیان ،مانند اوبونتو، رخ داد، به طور چشمگیری آنتروپی مقادیر تولید شده را کاهش داد و کلید های امنیتی متنوعی را در برابر حملات آسیب پذیر ساخت.   این ضعف امنیتی ناشی از تغیراتی است که توسط یک توسعه دهنده ی دبیان در کد opensl ایجاده شده است. این امر باعث احیاء و بازتولید حجم زیادی از کلید ها در سرتاسر جهان شد و با وجود توجه زیادی که به این موضوع معطوف شد، این امر قابل تصور است که بسیاری از این کلید های قدیمی هنوز در دست استفاده هستند. کلیدهای تولید شده با GnuPG یا GNUTLS تحت تاثیر قرار نمی‌گیرند؛ زیرا این این برنامه ها از روش های مختلفی برای تولید اعداد تصادفی استفاده میکنند. کلیدهای تولید شده توسد توزیع های غیر دبیان نیز تاثیرپذیر نمی‌باشند. آسیب پذیری تولید کلیدهای ضعیف بلافاصله پس از گزارش برطرف شد اما کلیه خدماتی که از کلیدهایی استفاده میکنند که توسط کد قدیمی تولید شده اند، همچنان آسیب پذیر هستند. امروزه شماری از پکیج های نرم‌افزاری حاوی چک هایی در برابر بلک لیست کلیدهای ضعیف هستند تا از مورد استفاده قرار گرفتن هر یک از این کلیدهای ضعیف باقی مانده جلوگیری کنند اما محققان همچنان به دنبال یافتن پیاده سازی هایی برای کلید های ضعیف هستند.

### پلی استیشن 3

در دسامبر سال 2010، گروهی که خود را fail0verflow میخواندند اعلام کردند از بازیابی الگوریتم امضای دیجیتال منحنی بیضوی (ECDSA) کلید خصوصی قابل استخراج است. این حمله به این دلیل امکان پذیر شد که سونی نتوانست به ازای هر امضا، یک عدد تصادفی جدید تولید کند.

### فاکتورسازی کلید عمومی RSA

در سال 2012، آنالیز مقایسه میلیون ها کلید عمومی RSA جمع آوری شده از اینترنت توسط Lenstra، Hughes، Augier، Bos، Kleinjung و Wachter اعلام شد. آنها تنها با استفاده از الگوریتم اقلیدس قادر به کشف عامل 0.2٪ از کلیدها بودند.  آنها از یک ضعف منحصر به فرد برای سیستمهای رمزنگاری مبتنی بر فاکتورسازی عدد صحیح بهره برداری کردند. اگر *n* = *pq* یک کلید عمومی و *n*′ = *p*′*q*′ یک کلید عمومی دیگر باشد، و اگر به طور اتفاقی *p* = *p*′ باشد، آنگاه محاسبه عبارت gcd(*n*,*n*′) = *p* هر دو کلید را به خطر می اندازد. نادیا هنینجر، عضوی از یک گروه که آزمایش مشابهی را انجام داده اند، گفته است که کلیدهای بد غالباً در برنامه های نهفته رخ داده اند و توضیح می دهد که یک مشکل مشترک اصلی که هر دو گروه به آن برخورده اند و قادر به حل آن نبوده اند، ناشی از شرایطی است مولد عدد شبه تصادفی در کاشتن بذر در ابتدای کار و کاشت مجدد آن بین نسل اول و دوم ضعیف عمل کرده است. 

### تلاقی بدون جاوا

در آگوست 2013، مشخص شد که اشکالات موجود در کلاس SecureRandom Java می توانند در مقادیر *k* nonce مورد استفاده ECDSA در پیاده سازیبیت کوین در اندروید، تصادم ایجاد کند. هنگامی که این اتفاق رخ داد و کلید خصوصی قابل بازیابی است، باعث شد Bitcoin ها از کیف پول مربوطه قابل سرقت شوند.

جستارهای وابسته
---------------

* تولید کننده شماره Pseudorandom
* مولد عدد شبه تصادفی از نظر رمزنگاری ایمن
* نسل کلیدی
* OTP
* نمک
* Nonce

منابع
-----

1. ↑  Michael Jenkins; Lydia Zieglar (September 28, 2018). "Commercial National Security Algorithm (CNSA) Suite Profile of Certificate Management over CMS". *IETF draft draft-jenkins-cnsa-cmc-profile-00*. U.S. National Security Agency. The use of inadequate pseudo-random number generators (PRNGs) can result in little or no security. The generation of quality random numbers is difficult.
2. ↑  Halprin, Ran; Naor, Moni. "Games for Extracting Randomness" (PDF).
3. ↑  
Kelsey, J.; B. Schneier; D. Wagner; C. Hall (1998). "Cryptanalytic Attacks on Pseudorandom Number Generators". *Fast Software Encryption, Fifth International Workshop Proceedings*. Springer-Verlag. pp. 168–188. Retrieved 15 August 2013.
4. ↑  
Goldberg, Ian; Wagner, David (January 1996). "Randomness and Netscape Browser". *Dr. Dobb's Journal*.
5. ↑  Dorrendorf, Leo; Gutterman, Zvi; Pinkas, Benny (1 October 2009). "Cryptanalysis of the random number generator of the Windows operating system" (PDF). *ACM Transactions on Information and System Security*. **13** (1): 1–32. doi:10.1145/1609956.1609966. Archived from the original (PDF) on 6 September 2012. Retrieved 17 May 2020.
6. ↑  
Keizer, Gregg (November 21, 2007). "Microsoft confirms that XP contains random number generator bug". *Computerworld*.
7. ↑  
Barker, Elaine; Kelsey, John (January 2012). "Recommendation for Random Number Generation Using Deterministic Random Bit Generators" (PDF). *NIST*.
8. ↑  Schneier, Bruce (November 15, 2007). "Did NSA Put a Secret Backdoor in New Encryption Standard?". *Wired*. Archived from the original on 19 September 2012. Retrieved 17 May 2020.`{{cite journal}}`: نگهداری یادکرد:ربات:وضعیت نامعلوم پیوند اصلی (link)
9. ↑  
Shumow, Dan; Ferguson, Niels (21 August 2007). "On the Possibility of a Back Door in the NIST SP800-90 Dual Ec Prng" (PDF). *cr.yp.to/*.
10. ↑  Perlroth, Nicole (10 September 2013). "Government Announces Steps to Restore Confidence on Encryption Standards". *The New York Times*.
11. ↑  Menn, Joseph (December 20, 2013). "Exclusive: Secret contract tied NSA and security industry pioneer". San Francisco. Reuters. Archived from the original on 24 September 2015. Retrieved December 20, 2013.
12. ↑  "NIST Removes Cryptography Algorithm from Random Number Generator Recommendations". *National Institute of Standards and Technology*. 21 April 2014.
13. ↑  
Nohl, Karsten; David Evans; Starbug Starbug; Henryk Plötz (2008-07-31). "Reverse-engineering a cryptographic RFID tag". *SS'08 Proceedings of the 17th conference on Security symposium*. SS'08. USENIX. pp. 185–193.
14. ↑  
"DSA-1571-1 openssl -- predictable random number generator". *Debian Security Advisory*. 13 May 2008.
15. ↑  
"CVE-2008-0166". *CVE*. January 9, 2008. OpenSSL 0.9.8c-1 up to versions before 0.9.8g-9 on Debian-based operating systems uses a random number generator that generates predictable numbers, which makes it easier for remote attackers to conduct brute force guessing attacks against cryptographic keys.
16. ↑  
Schneider, Bruce (May 19, 2008). "Random Number Bug in Debian Linux".
17. ↑  "Compromised SSH keys used to access Spotify, UK Govt GitHub repos".
18. ↑  
Bendel, Mike (2010-12-29). "Hackers Describe PS3 Security As Epic Fail, Gain Unrestricted Access". Exophase.com. Retrieved 2011-01-05. `{{cite news}}`: External link in ``|publisher=`` (help)
19. ↑  
Markoff, John (February 14, 2012). "Flaw Found in an Online Encryption Method". *The New York Times*.
20. ↑  
Lenstra, Arjen; Hughes, James P.; Augier, Maxime; Bos, Joppe Willem; Kleinjung, Thorsten; Wachter, Christophe (2012). "Ron was wrong, Whit is right" (PDF). Santa Barbara: IACR: 17. `{{cite journal}}`: Cite journal requires `|journal=` (help)
21. ↑  Chirgwin, Richard (12 August 2013). "Android bug batters Bitcoin wallets". *The Register*.

مطالعه بیشتر
------------

* Gutterman, Zvi; Benny Pinkas; Tzachy Reinman (2006). "Analysis of the Linux Random Number Generator" (PDF). *2006 IEEE Symposium on Security and Privacy (S&P'06)*. p. 385. doi:10.1109/SP.2006.5. ISBN 978-0-7695-2574-7.
* Eastlake, D.; J. Schiller; S. Crocker (June 2005). "Randomness Requirements for Security". *RFC*. IETF.