نظریه اسیلاتور حلقه

  • 2022-11-23

یک نوسان ساز حلقه از تعداد عجیب دروازه های اینورتر تشکیل می شود. یک مقدار 1 در ورودی به دروازه اول چندین بار معکوس می شود و در نتیجه مقدار 0 به دروازه اول تغذیه می شود. به نوبه خود این 0 چندین بار معکوس می شود تا 1. و غیره دیگر تولید شود. به شکل شماتیک ، یک اسیلاتور حلقه 3 مرحله ای به این شکل است:

ring_oscillator_basic.png

از آنجا که مدارهای الکترونیکی دستگاه های فوری نیستند ، می تواند مدتی طول بکشد تا مقادیر از زنجیره اینورتر پخش شوند. هرچه زنجیره (5 مرحله ، 7 مرحله ، 9 مرحله یا بیشتر) طولانی تر باشد ، تأخیر در انتشار. نکته مهم این است که تأخیر ثابت نیست: تفاوت در مؤلفه ها ، دمای محیط و سایر فاکتورها برای معرفی کمی از لرزش تصادفی در شکل موج خروجی ترکیب می شوند.

برای اهداف ما ، لرزش همان چیزی است که ما بعد از آن هستیم. اختلاف زمان از یک لبه در حال افزایش به قسمت بعدی بیت های تصادفی را به ما می دهد.

خروجی مثلثی شکل از اینورتر نهایی با ریزپردازنده ها خیلی دوستانه نیست. بنابراین معمول است که با استفاده از D Flip-Flop و یک سیگنال ساعت دوره ای ، جیگر را انتخاب کنید:

ring_oscillator_sampled.png

طرح های عملی در داخل CPU اغلب از نوسانگرهای حلقه ای چندگانه استفاده می کنند:

ring_oscillator_multi.png

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

اسیلاتور حلقه ما

برای ساده نگه داشتن چیزها ، ما قصد داریم از یک نوسان ساز حلقه 5 مرحله ای با یک ساعت نمونه برداری که توسط یک تایمر 555 تهیه شده است استفاده کنیم:

ring_oscillator.png

این اجزای عمداً انتخاب شدند که معمولاً در دسترس باشند. تنها مورد خاص 555 است. من توصیه می کنم از نوع CMOS LM7555 (یا چیزی معادل آن) استفاده کنید زیرا می تواند در فرکانس های بالاتر از یک نوع باغ 555 کار کند. مقاومت 56 اهم در خروجی U2 مانع از زنگ زدن در خط ساعت می شود:ما می خواهیم سر و صدا از U1 به وجود بیاید نه U2.

خروجی فرکانس از U1 به خصوصیات تراشه 4069 شما بستگی دارد. تراشه سطل چانه زنی ارزان در واقع بهتر از یک تراشه با کیفیت بالا است. برخی از برگه های اینورتر که من خوانده ام با افتخار تبلیغات کاهش یافته را تبلیغ می کنم اما لرزش همان چیزی است که ما بعد از آن در اینجا هستیم. 4069 من در حدود 1. 7 مگاهرتز با یک اسیلاتور حلقه 5 مرحله ای تولید می کرد. تراشه های دیگری که من امتحان کردم با یک اسیلاتور حلقه 3 مرحله ای توانستند از 12 مگاهرتز تجاوز کنند. از آنجا که Arduino به اندازه کافی سریع برای نمونه برداری از سیگنال های فرکانس بالا نیست ، پایین تر برای نیازهای ما بهتر است.

برای کاهش بیشتر فرکانس به چیزی که Arduino می تواند اندازه گیری کند ، تایمر 555 باید بین 100 کیلوهرتز و 200kHz تنظیم شود (خوب است که کمی بیش از 200kHz باشد). با مقدار R1 در حدود 2. 2k شروع کنید و آن را به سمت بالا یا پایین تنظیم کنید تا فرکانس در محدوده هدف بدست آید. همچنین فرکانس خروجی را از U3A اندازه گیری کرده و سعی کنید بین 20KHz و 50KHz را هدف قرار دهید. Arduino به راحتی می تواند نمونه ای از این کار را بدون فشار بیش از حد بر CPU نمونه برداری کند. سیگنال باید در این مرحله بسیار لرزان باشد.

این طرح البته با استفاده از چند نوسان ساز حلقه ای و یک دروازه XOR قابل بهبود است ، اما من می خواستم برای طراحی اساسی تعداد مؤلفه ها را کم نگه دارم.

فهرست قطعات

  • 1 x 4069 CMOS hex Inverter
  • 1 x 4013 Dual D flip-flop
  • تایمر 1 x LM7555 CMOS
  • 1 x 10UF خازن الکترولیتی (25 ولت یا بهتر)
  • 1 x 100nf خازن سرامیکی
  • 1 x 10NF خازن سرامیکی
  • 1 x 1NF خازن سرامیکی
  • مقاومت 1 x 56 اهم
  • مقاومت 1 x 1. 2k اهم
  • مقاومت 1 x 2. 2k اهم (یا مقداری دیگر برای R1)

اتصال به آردوینو

کلاس Ringoscillatornoisesource از ویژگی ضبط ورودی میکروکنترلر AVR برای اندازه گیری زمان بین لبه های افزایش یافته استفاده می کند. ضبط ورودی فقط روی پین های خاص امکان پذیر است و خروجی مدار فوق باید به پین صحیح وصل شود:

گونهپین آردوینو / پین AVRتایمر
arduino unoD8 / PB0تایمر 1
آردوینو لئوناردوD4 / PD4تایمر 1
Arduino Mega یا Mega 2560D49 / PL0تایمر 4

اگر هیئت مدیره شما با یکی از موارد فوق سازگار نیست ، برای استفاده از یک ترکیب پین/تایمر متفاوت ، منبع کلاس RingoscillatornoiseSource باید اصلاح شود. همچنین ، هنگامی که تایمر توسط این کلاس استفاده می شود ، نمی توان از آن برای سایر کارهای کاربردی استفاده کرد.

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

این لرزه از تفاوت زمان به روشی بسیار ساده استخراج می شود: کمترین تفاوت تفاوت در لرزه است و همه بیت های دیگر دور ریخته می شوند. روال سرویس قطع 16 بیت از لرزش را بر روی پالس های ورودی پی در پی جمع می کند و سپس آنها را به کد سطح بالاتر در کلاس Ringoscillatornoisesource منتقل می کند.

در کد سطح بالاتر ، بیت های ورودی ابتدا با استفاده از روش von neumann برای دور انداختن قسمت هایی از سیگنال که خیلی زیاد لرزند ، از بین می روند:

  • دو قطعه ورودی را جمع کنید.
  • اگر آنها یکسان هستند ، هر دو را دور بریزید.
  • اگر آنها متفاوت هستند ، یکی را به عنوان بیت خروجی انتخاب کرده و دیگری را دور بیندازید.

بیت های debiased در یک بافر 256 بیتی جمع می شوند. پس از پر شدن بافر ، آن را به rng. stir () منتقل می کند تا سفید شود و در استخر شماره تصادفی جهانی گنجانیده شود.

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

تحقیقات من نشان داد که در 20kHz برای تولید 256 بیت داده تصادفی خوب پس از دفع و سفید کردن فون نویمان حدود یک ثانیه طول می کشد. دو تا سه ثانیه پس از راه اندازی باید آنتروپی کافی در استخر شماره تصادفی وجود داشته باشد تا کلیدهای رمزگذاری و سایر مواد مخفی را با خیال راحت تولید کند. از عملکرد RNG. Available () می توان برای تعیین اینکه چه زمانی آنتروپی کافی در استخر برای نیازهای برنامه وجود دارد ، استفاده شود.

برچسب ها

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.