تولیدکننده شماره تصادفی سخت‌افزار

[چپ|بندانگشتی| این کارت [شتاب‌دهنده سخت‌افزاری|کامپیوتر شتاب‌دهنده SSL با استفاده از یک ژنراتور شماره تصادفی سخت‌افزاری برای تولید کلیدهای رمزنگاری برای رمزگذاری داده‌های ارسال شده از طریق شبکه‌های رایانه ای.]]
در محاسبات، **تولیدکننده عدد تصادفی سخت‌افزاری سخت‌افزاری** (**HRNG**) یا **تولیدکننده شماره تصادفی واقعی** (**TRNG**) وسیله ای است که به جای استفاده از الگوریتم، اعداد تصادفی را از یک فرایند فیزیکی تولید می کند. چنین دستگاه‌هایی غالباً براساس پدیده‌های میکروسکوپی ساخته شده‌اند که سیگنال‌های «نویز» از نظر آماری کم سطح، مانند نویز حرارتی، اثر فوتوالکتریک، شامل یک شکاف پرتو و سایر پدیده‌های کوانتومی را ایجاد می‌کنند. این فرایندهای تصادفی، از نظر تئوری، کاملاً غیرقابل پیش‌بینی هستند و ادعاهای نظریه غیرقابل پیش‌بینی بودن در معرض آزمایش آزمایشی قرار دارند. این برخلاف پارادایم نسل شبه تصادفی است که معمولاً در برنامه‌های رایانه ای اجرا می‌شود.

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

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

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

اگرچه تاسها بیشتر در قماربازی مورد استفاده قرار می‌گیرند، و به عنوان عناصر «تصادفی» در بازی‌ها (به عنوان مثال بازی‌های نقش آفرینی)، دانشمند ویکتوریا فرانسیس گالتون روشی را برای استفاده از تاس‌ها برای تولید صریح اعداد تصادفی برای اهداف علمی در سال ۱۸۹۰ توصیف کرد.

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

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

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

### رمزنگاری
استفاده عمده برای سخت‌افزار مولد عدد تصادفی در زمینه است رمزگذاری داده‌ها، به عنوان مثال برای ایجاد تصادفی کلیدهای رمزنگاری و '''نانس''' نیاز به رمزگذاری و امضا داده‌است. آنها یک جایگزین مطمئن تر برای ژنراتورهای شماره شبه تصادفی (PRNG) هستند، برنامه‌های نرم‌افزاری که معمولاً در رایانه‌ها برای تولید شماره‌های «تصادفی» مورد استفاده قرار می‌گیرند. PRNGها از الگوریتم قطعی برای تولید توالی‌های عددی استفاده می‌کنند. اگرچه این توالی‌های شبه تصادفی تست‌های الگوی آماری را برای تصادفی می‌گذرانند، اما با دانستن الگوریتم و شرایط استفاده شده برای اولیه سازی آن به نام «دانه»، می‌توان خروجی را پیش‌بینی کرد. از آنجا که توالی اعداد تولید شده توسط یک PRNG در اصل قابل پیش‌بینی است، داده‌های رمزگذاری شده با اعداد شبه تصادفی به‌طور بالقوه در برابر رمزنگاری آسیب‌پذیر هستند. ژنراتورهای شماره تصادفی سخت‌افزاری تعداد دنباله‌هایی از اعداد را تولید می‌کنند که تصور می‌شود قابل پیش‌بینی نیستند، و بنابراین بیشترین امنیت را در هنگام استفاده برای رمزگذاری داده‌ها فراهم می‌کنند.

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

در ۲۹ آوریل ۱۹۴۷، شرکت '''رند کورپوریشن''' شروع به تولید ارقام تصادفی با «چرخ رولت الکترونیکی» کرد، متشکل از یک منبع پالس فرکانس تصادفی در حدود ۱۰۰۰۰۰ پالس در ثانیه یک بار در ثانیه با یک پالس فرکانس ثابت و در یک پیشخوان باینری ۵ بیتی تغذیه می‌شود. . هواپیمای داگلاس ساخته شده از تجهیزات، اجرای پیشنهاد سیسیل عجله است (RAND P-113) برای یک منبع سر و صدا (به احتمال زیاد رفتار شناخته شده از گاز مینیاتوری 6D4 **[[تایترون]]** لوله، زمانی که در یک میدان مغناطیسی قرار می‌گیرد). از ۳۲ مقدار پیشخوان احتمالی بر روی ۱۰ رقم اعشار نقشه‌برداری شد و ۱۲ مقادیر پیشخوان دیگر دور انداخته شدند.

نتایج طولانی مدت از ماشین RAND، فیلتر و آزمایش شده، به یک جدول تبدیل شده‌است که در سال ۱۹۵۵ در کتاب *A Million Digit Digits با 100000 Deviates Normal منتشر شد*. جدول RAND موفقیت قابل توجهی در تحویل اعداد تصادفی بود زیرا چنین جدول بزرگ و با دقت آماده شده قبلاً در دسترس نبود. این یک منبع مفید برای شبیه‌سازی، مدل‌سازی، و برای به دست آوردن ثابت‌های دلخواه در الگوریتم‌های رمزنگاری بوده‌است تا نشان دهد ثابت‌ها به طرز مخرب انتخاب نشده بودند. رمزگذارهای بلوکی Khufu و Khafre از جمله برنامه‌هایی هستند که از جدول RAND استفاده می‌کنند. *مشاهده کنید:* شماره آستینهای من زیاد نیست.

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

از آنجا که نتیجه حوادث کوانتومی مکانیکی حتی در اصل قابل پیش‌بینی نیست، آنها "  " برای تولید عدد تصادفی هستند. برخی از پدیده‌های کوانتومی مورد استفاده برای تولید عدد تصادفی عبارتند از:
* سر و صدای شات، منبع نویز مکانیکی کوانتومی در مدارهای الکترونیکی. یک مثال ساده لامپ است که بر روی یک الکترودودی می‌درخشد. با توجه به اصل عدم قطعیت، فوتون‌های وارد شده باعث ایجاد نویز در مدار می‌شوند. جمع‌آوری نویز برای استفاده برخی از مشکلات را ایجاد می‌کند، اما این یک منبع صوتی تصادفی مخصوصاً ساده است. با این حال، انرژی سر و صدا شات همیشه به خوبی در سراسر پهنای باند مورد علاقه توزیع نمی‌شود. دیودهای گازی و لوله‌های الکترونی تایترون در یک میدان مغناطیسی متقابل می‌توانند انرژی سر و صدای قابل توجهی تولید کنند (۱۰ ولت یا بیشتر در بارهای امپدانس بالا) اما توزیع انرژی بسیار اوج دارند و برای دستیابی به صافی در طیف گسترده‌ای نیاز به فیلتر دقیق دارند.
* یک منبع تابش پوسیدگی هسته ای، توسط یک پیشخوان Geiger متصل به یک کامپیوتر شناسایی شده‌است.
* فوتون‌هایی که از طریق یک آینه نیمه شفاف مسافرت می‌کنند. وقایع متقابل منحصر به فرد (بازتاب / انتقال) به ترتیب با مقادیر بیت «۰» یا «۱» مرتبط هستند.
* تقویت سیگنال تولید شده بر اساس ترانزیستور مغرضانه. فرستنده با الکترون اشباع شده و گهگاهی از طریق شکاف باند تونل می‌شود و از طریق پایه خارج می‌شود. سپس این سیگنال از طریق چند ترانزیستور دیگر تقویت می‌شود و نتیجه در ماشه اشمیت قرار می‌گیرد.
* تبدیل پارامتری خود به خودی منجر به انتخاب حالت فاز باینری در یک نوسانگر پارامتری نوری انحطاط.
* نوسانات انرژی خلاء از طریق تشخیص همودین اندازه‌گیری می‌شود.

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

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

این رویکرد آخر باید با دقت اجرا شود و در صورت نبود ممکن است مورد حمله قرار گیرد. به عنوان مثال، امنیت روبرو ژنراتور در هسته ۲٫۶٫۱۰ هسته لینوکس می‌تواند با ۲ پیچیدگی زمانی 64 یا 2 96 شکسته شود.

#### رانش ساعت
یکی دیگر از پدیده‌های بدنی متغیر که اندازه‌گیری آن آسان است، رانش ساعت است. روش‌های مختلفی برای اندازه‌گیری و استفاده از رانش ساعت به عنوان منبع تصادفی وجود دارد.

تراشه Intel 82802 Firmware Hub (FWH) شامل یک سخت‌افزار RNG با استفاده از دو اسیلاتور آزاد در حال اجرا، یکی سریع و دیگری کند است. از یک منبع نویز حرارتی (نویز غیر متداول از دو دیود) برای تعدیل فرکانس نوسان ساز آهسته استفاده می‌شود که سپس اندازه‌گیری نوسان ساز سریع را انجام می‌دهد. سپس با استفاده از مرحله تزئین نوع von Neumann (بازده زیر) این بازده مورد بازپرداخت قرار می‌گیرد. میزان خروجی این دستگاه کمی کمتر از ۱۰۰۰۰۰ بیت در ثانیه است. این تراشه یک جزء اختیاری از خانواده تراشه ۸۴۰ بود که از یک اتوبوس قبلی اینتل پشتیبانی می‌کردند. در رایانه‌های شخصی مدرن گنجانده نشده‌است.

تمام ریزپردازنده‌های VIA C3 از سال ۲۰۰۳ دارای یک RNG سخت‌افزاری در تراشه پردازنده هستند. بجای استفاده از نویز حرارتی، بیت‌های خام با استفاده از چهار اسیلاتور آزاد کننده طراحی می‌شوند که برای کار با سرعت‌های مختلف طراحی شده‌اند. خروجی دو از XORed برای کنترل تعصب بر روی یک نوسان ساز سوم، که خروجی آن خروجی نوسان ساز چهارم را برای تولید بیت خام قفل می‌کند. تغییرات جزئی در دما، خصوصیات سیلیکون و شرایط الکتریکی محلی باعث ادامه تغییرات سرعت نوسانگر می‌شود و در نتیجه آنتروپی بیت‌های خام تولید می‌شود. برای اطمینان بیشتر از تصادفی بودن، در واقع دو RNG از این نوع وجود دارد که هر یک در محیط‌های مختلف قرار گرفته و روی سیلیکون چرخانده می‌شوند. خروجی نهایی ترکیبی از این دو ژنراتور است. میزان خروجی خام ده‌ها صدها مگابیت در ثانیه است و میزان سفید شدن آن نیز چند مگابیت در ثانیه است. نرم‌افزار کاربر می‌تواند با استفاده از دستورالعمل‌های جدید زبان غیر ممتاز ماشین، به بیت تصادفی ایجاد شده دسترسی پیدا کند.

اجرای نرم‌افزار ایده مرتبط با سخت‌افزار معمولی در CryptoLib , یک کتابخانه معمول رمزنگاری گنجانده شده‌است. الگوریتم *truerand* نامیده می‌شود. بیشتر رایانه‌های مدرن دارای دو نوسان ساز کریستالی هستند، یکی برای ساعت واقعی و دیگری ساعت اصلی پردازنده. truerand از این واقعیت سوءاستفاده می‌کند. از یک سرویس سیستم عامل استفاده می‌کند که زنگ خطر را خاموش می‌کند و ساعت زمان واقعی را خاموش می‌کند. یکی از زیرروال‌ها زنگ هشدار را برای خاموش شدن در یک ساعت (معمولاً ۱/۶۰ ثانیه) تنظیم می‌کند. دیگری وارد حلقه مدتی می‌شود که منتظر زنگ خطر است. از آنجا که زنگ هشدار همیشه دقیقاً با یک فشار شروع نمی‌شود، کمترین میزان قابل توجهی از تعداد تکرارهای حلقه، بین تنظیم زنگ و ماشه آن، به‌طور تصادفی متفاوت خواهد بود، احتمالاً برای برخی موارد استفاده کافی است. Truerand به سخت‌افزار اضافی احتیاج ندارد، اما در یک سیستم چند کاره باید دقت زیادی شود تا از مداخله غیر تصادفی در سایر فرایندها جلوگیری شود (به عنوان مثال، در حالت تعلیق فرایند حلقه شمارش به عنوان برنامه‌ریز سیستم عامل شروع و متوقف می‌شود)

کدگذاری RDRAND مقادیر تولیدکننده شماره تصادفی سخت‌افزار پردازنده را برمی‌گرداند. این محصول از سال ۲۰۱۵ در پردازنده‌های Intel Ivy Bridge و AMD64 وجود دارد.

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

### سفید کردن نرم‌افزار
رویکرد دوم برای کنار آمدن جانبداری، کاهش آن پس از تولید (در نرم‌افزار یا سخت‌افزار) است. حتی اگر مراحل کاهش تعصب سخت‌افزار فوق نیز برداشته شده‌است، باید فرض شود که جریان بیت حاوی تعصب و همبستگی است. روش‌های مختلفی برای کاهش تعصب و همبستگی وجود دارد، که اغلب به آن الگوریتم‌های «سفید کردن» گفته می‌شود، با قیاس با مشکل مرتبط با تولید نویز سفید از یک سیگنال در ارتباط. روش دیگری وجود دارد، تست پویا-استاتیک، که باعث می‌شود یک بررسی تصادفی استاتیک در هر بلوک شماره تصادفی به صورت پویا انجام شود. این کار را می‌توان در مدت زمان کوتاه، ۱ گیگابیت بر ثانیه یا بیشتر انجام داد. در این روش، اگر یک بلوک به عنوان یک مشکوک تعیین شود، این بلوک نادیده گرفته می‌شود و لغو می‌شود. این روش در پیش نویس ANSI (X9F1) درخواست شده‌است.

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

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

یک روش مرتبط که باعث کاهش تعصب در یک جریان بیت تقریباً تصادفی می‌شود، دو یا چند جریان غیرقابل ربط در نزدیکی جریان بیت تصادفی و منحصر به فرد بودن آنهاست. بگذارید احتمال کمی جریان تولید ۰ باشد ۱/۲ باشد + *ه*، جایی که − ۱/۲ ≤ *ه* ≤ ۱/۲ سپس *e* تعصب جریان bitstream است. اگر دو جریان بیت نامربوط با بایاس *e* منحصر به فرد یا یکپارچه باشند، سوگیری نتیجه 2 *e* 2 خواهد بود. این ممکن است با جریانهای بیت بیشتری تکرار شود (همچنین به لیم Piling-up مراجعه کنید).

برخی از طرح‌ها توابع هش رمزنگاری مانند MD5، SHA-1، یا RIPEMD-160 یا حتی یک عملکرد CRC را برای همه یا بخشی از جریان بیت اعمال می‌کنند، و سپس از خروجی به عنوان جریان بیتی تصادفی استفاده می‌کنند. این جذاب است، تا حدودی زیرا در مقایسه با بعضی از روش‌های دیگر نسبتاً سریع است، اما به ویژگی‌های خروجی هش که ممکن است مبنای نظری کمی داشته باشد، به میزان قابل توجهی بستگی دارد.

بسیاری از پدیده‌های جسمی می‌توانند برای تولید بیت‌هایی که بسیار مغرضانه هستند، مورد استفاده قرار گیرند اما هر بیت از بقیه مستقل است. پیشخوان Geiger (با زمان نمونه طولانی‌تر از زمان بازیابی لوله) یا یک آشکارساز فوتون آینه نیمه شفاف، هر دو جریان بیتی را تولید می‌کنند که بیشتر "۰" (خاموش یا انتقال) با گاه به گاه "۱" (کلیک یا بازتاب) هستند. اگر هر بیت از بقیه مستقل باشد، استراتژی فون نویمان یک بیت خروجی تصادفی و بی‌طرف برای هر یک از بیت‌های نادر "۱" در چنین جریان بیت بسیار مغرضانه تولید می‌کند. تکنیک‌های سفید کننده مانند استراتژی چند سطح پیشرفته (AMLS) می‌توانند بیت‌های بیشتری را تولید کنند - بیت‌های خروجی که به همان اندازه تصادفی و بی‌طرف هستند - از چنین جریان بیت بسیار مغرضانه.

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

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

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

با این وجود، با مراقبت کافی، می‌توان سیستمی را طراحی کرد که اعداد تصادفی رمزنگاری شده را از منابع تصادفی موجود در یک کامپیوتر مدرن تولید کند. طرح اصلی حفظ «استخر آنتروپی» از بیت‌های تصادفی است که تصور می‌شود برای یک مهاجم ناشناخته است. تصادفی جدید در هر زمان موجود اضافه می‌شود (برای مثال، هنگامی که کاربر به یک کلید برخورد می‌کند) و تخمین تعداد بیت‌های موجود در استخر که نمی‌تواند برای یک مهاجم شناخته شود، نگه داشته می‌شود. برخی از راهبردهای مورد استفاده عبارتند از:
* در صورت درخواست بیت‌های تصادفی، تعداد زیادی از بیت‌های حاصل از استخر آنتروپی (با استفاده از یک عملکرد هش رمزنگاری) را تخمین بزنید و تخمین تعداد بیت‌های تصادفی باقیمانده در استخر را کاهش دهید. اگر تعداد بیت‌های ناشناخته کافی نیست، صبر کنید تا در دسترس باشد. این طراحی سطح بالا دستگاه " / dev / تصادفی " در لینوکس است که توسط تئودور تسو نوشته شده و در بسیاری از سیستم عاملهای مشابه یونیکس استفاده شده‌است. اعداد تصادفی با کیفیت بالا را تا زمانی که تخمین‌های تصادفی ورودی به اندازه کافی محتاط باشند فراهم می‌کند. دستگاه لینوکس "/ dev / urandom" یک اصلاح ساده است که به برآورد تصادفی ورودی توجه نمی‌کند، و به همین دلیل احتمالاً آنپروپی زیاد در نتیجه کمتری دارد.
* رمزگذاری جریان را با یک کلید و بردار Initialization (IV) به دست آمده از استخر آنتروپی حفظ کنید. هنگامی که بیت کافی آنتروپی جمع‌آوری شد، مقادیر تصادفی جدید را با کلید و IV جایگزین کرده و آنتروپی تخمین زده شده در استخر را کاهش دهید. این رویکردی است که توسط کتابخانه بومادران انجام شده‌است. این مقاومت در برابر برخی از حملات را فراهم می‌کند و آنتروپی را به دست می‌آورد که به سختی به دست می‌آید.

## چالش‌ها و مسائل
نادرست ساختن سخت‌افزار یا دستگاه‌های نرم‌افزاری که سعی در تولید اعداد تصادفی دارند بسیار آسان است. همچنین، اکثر آنها «بی صدا» می‌شکنند و معمولاً هنگام تخریب تعداد آنها به‌طور تصادفی کاهش می‌یابد. یک مثال فیزیکی ممکن است کاهش سریع رادیواکتیویته آشکارسازهای دود باشد که قبلاً ذکر شد. حالت‌های خرابی در چنین دستگاه‌هایی بسیار زیاد هستند و تشخیص آنها پیچیده، کند و سخت است.

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

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

ژنراتور عدد تصادفی مورد استفاده برای اهداف رمزنگاری در نسخه ۱٫۱ از مرورگر Netscape آسیب‌پذیر بود و در نسخه ۲٫۰ رفع شد.

### برآورد آنتروپی
تکنیک‌های ریاضی برای تخمین آنتروپی دنباله ای از نمادها وجود دارد. هیچ‌کدام آنقدر مطمئن نیستند که بتوان به تخمین‌های آنها کاملاً اعتماد کرد. همیشه فرضیاتی وجود دارد که تأیید آنها بسیار دشوار است. به عنوان مثال، اینها برای تعیین اینکه آیا آنتروپی کافی در یک استخر بذر وجود دارد، مفید هستند، اما به‌طور کلی آنها نمی‌توانند یک منبع تصادفی واقعی و یک مولد شبه تصادفی را تشخیص دهند.

### آزمون عملکرد
برای عملکرد مناسب، باید ژنراتورهای شماره تصادفی سخت‌افزار مورد نظارت قرار گیرند. RFC 4086، میخانه FIPS 140-2 و انتشارات ویژه NIST 800-90b شامل تست‌هایی هستند که می‌توانند برای این کار استفاده شوند. همچنین اسناد مربوط به کتابخانه نویسی نرم‌افزار رمزنگاری cryptlib را ببینید.

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

## جستارهای وابسته
* AN / CYZ-9
* آزمایش‌های تست بل
* / dev / تصادفی
* ارنی
* لیست تولیدکنندگان شماره تصادفی
* دستگاه قرعه کشی
* استخراج تصادفی
* RDRAND

## منابع

## پیوند به بیرون
* .
* .
* .
* .
* ProtegoST SG100، ProtegoST، "ژنراتور شماره تصادفی سخت افزار" بر اساس منبع عدد تصادفی فیزیک کوانتومی از یک دیود زنر ".
رده:تولید اعداد تصادفی
رده:دستگاه‌های جانبی رایانه
رده:رمزنگاری