03-22-2013, 06:54 PM
Mehrbod نوشته: نه جوان بودم و بیکار,همان rsa را از بیخ روی c از نو نوشتم (:تاجاییکه یادمه در کتابی تخصصی یه چیزایی درمورد مسائل جانبی ای خوندم که جدای از فرمول کلی اصلیش بودن.
خوارزمِ[SUP][aname="rpa74334cdacd83494b8336420f8208e4df"][[/aname][anchor="pa74334cdacd83494b8336420f8208e4df"]1][/anchor][/SUP] rsa که چیزی ندارد از دید مزداهیکین[SUP][aname="rpabbaff45b17004b9f99eb5ee7e5099e42"][[/aname][anchor="pabbaff45b17004b9f99eb5ee7e5099e42"]2][/anchor][/SUP] و برنامهریزی, برای درگاشت[SUP][aname="rpaa429cb4adc0c4b16a140060ca4bbad61"][[/aname][anchor="paa429cb4adc0c4b16a140060ca4bbad61"]3][/anchor][/SUP] اش ولی راهِ باید سختی رفته میشد تا براستی رندم باشد.
مثلا ظاهرا از انتخاب بعضی کلیدهای خاص باید اجتناب کرد به دلایلی. یعنی شما اگر رندوم هم کلیدها رو تولید میکنی، ممکنه توش از اون کلیدهای خاص دربیاد که باید چک کنی، یا شایدم باید الگوریتم رندوم رو طوری آگاهانه طراحی کنی که اون کلیدهای خاص که اجزای اونا نسبت به هم رابطه ای دارن که باعث ضعف خاصی میشه رو تولید نکنه.
بعد یه چیزهایی راجع به Padding و این حرفها هم داشت مثل اینکه.
معمولا الگوریتم های رمزنگاری که بصورت حرفه ای بخوان پیاده بشن باید یکسری مسائل جانبی رو هم درنظر بگیرن. لزوما هم فقط این نیست که فکر کنی رمز کنی و کسی نتونه رمزگشایی کنه کافیه؛ مثلا یه خصوصیات دیگری هم باید بهش بدی که فرضا کسی نتونه بین دو یا چند متن رمزی، با تحلیلها و روشهای خاصی روابط خاصی رو استخراج کنه (حتی اگر کلیدها و متن اولیه یکسان بوده باشن).
نقل قول: /dev/urandom هم برای رازنگاری[SUP][4][/SUP] کاربرد ندارد: /dev/random - WiKiمن قبلا روی همهء اینا تحقیقات مفصل داشتم.
باید از /dev/random گرفت که از همان نوفهیِ[SUP][5][/SUP] hardware بهره میگیرد, بجز hardware براستی راهی نیست که بتوانیم از خود خوارزمِ[SUP][1][/SUP] تنها
مر[SUP][6][/SUP] رندم بفرآوریم[SUP][7][/SUP], hardware هم به گونهای نیرینگ میماند, چون تنها کار را وابسته کردهایم به پدیدههایِ کوانتومی مادی[SUP][8][/SUP] که برایمان rng درآورند.
خیر اینطور نیست که کاربرد رمزنگاری نداشته باشه.
urandom یک CSPRNG است که با آنتروپی اولیه از همون random بقولی seed میشه. تا وقتی این seed اولیه خدشه دار نشده، همونقدر امنیت داره و خروجی رندومی که تولید میکنه قابل پیشبینی/محاسبه نیست. ضمنا این seed هم همینطور نمیمونه و وقتی random آنتروپی جدید کافی جمع آوری کرد و در دسترس گذاشت، urandom مجددا خودش رو با آنتروپی جدید seed میکنه. البته الگوریتم دقیقش یادم نیست؛ شاید فورا هم seed مجدد نکنه، ولی بهرحال اونقدری مهم نیست.
random رو دیگه افراد خیلی وسواسی یا در کاربردهای نیازمند امنیت حداکثر حداکثر (مثلا درحد رمزنگاری اسناد امنیت ملی برای مدت 100 سال) استفاده میکنن.
random منتظر میمونه تا آنتروپی لازم از منابع سخت افزاری ای یا هر منبع دیگری که داره بقدر کافی جمع بشه، بعد به شما خروجی میده؛ تا قبل از جمع شدن آنتروپی لازم هم برنامه بلاک میشه و منتظر میمونه، که این در خیلی از برنامه ها قابل قبول نیست. امکان اینکه random موقع استفادهء برنامهء شما، بخاطر منتظر جمع شدن آنتروپی جدید بودن بلاک بشه زیاده، بخصوص اگر مصرف دیتای رندوم برنامهء شما زیاد باشه و زود به زود بخواد از random آنتروپی بگیره (و یا برنامه های متعددی روی سیستم از random استفاده بکنن).
u در urandom مخفف همون unblocking است. یعنی بلاک نمیکنه برنامه رو و بطور نامحدود میتونه دیتای رندوم تولید کنه. منتها امنیت این دیتای رندوم هم بسیار بالاست. درحد seed اولیه تقریبا. مثلا seed اولیه اگر 256 بیت آنتروپی واقعی داشته بوده باشه، هیچکس نمیتونه دیتاهای رندوم شما رو پیشبینی کنه، ولو چند مگابایت هم دیتای رندوم بر اساس همون seed اولیه گرفته باشی.