نامنویسی انجمن درست شده و اکنون دوباره کار میکند! 🥳 کاربرانی که پیشتر نامنویسی کرده بودند نیز دسترسی‌اشان باز شده است 🌺

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5

پروژهء سیستم رجیستر و لاگین بازمتن
#1

این پروژهء سیستم رجیستر و لاگین بنده است.
تنها ضعفی که داره بنظرم اینه که شیء گرایی رو رعایت نکردم و از الگوهای طراحی مثل MVC هم استفاده نکردم؛ ولی از بقیهء نظرهای الگوریتم و امکانات و امنیت و انعطاف میتونم بگم در سطح کاملا برجسته ای است. از نظر الگوریتم و امنیت بنده خودم رو برجسته میدونم. در زمینهء امنیت و رمزنگاری مطالعات و تحقیقات و سواد خوبی دارم. بنابراین این پروژه رو سعی کردم هر چه حرفه ای و کامل و دقیق در این زمینه ها طراحی کنم.
ضمنا این برنامه برای مقیاس کوچک و شاید تا متوسط درنظر گرفته شده. لزوما برای مقیاس بزرگ (تعداد کاربران زیاد یا ترافیک زیاد) مناسب نیست. مثلا من حداکثر تعداد اکانتهای کاربری که توی ذهنم بعنوان فرض مقیاس داشتم، 100 هزارتا بوده.

من خودم تاحالا برنامهء بازمتن از این نوع در این سطح کمال و کیفیت ندیدم. اگر شما سراغ دارید معرفی کنید تا بررسی و مقایسه کنم چون برام قابل توجه است.
چه بسا این پروژه از جهاتی حتی در سطح جهانی هم برجسته یا حتی اول باشه!
جدی و بدون اغراق میگم. چون خودم در جریان برنامه نویسها و برنامه های موجود هستم.

الان پروژه رو به تازگی دو زبانه کردم (فارسی رو هم بهش اضافه کردم) که همین امروز در فرومهای برنامه نویسی منتشرش کردم.

راستی در این فروم تالار مربوط به برنامه نویسی که ندارید! از اعضاء هم کسی فعالیت برنامه نویسی نداره؟

اطلاعات بیشتر و دقیقتر درمورد این پروژه رو میتونید در این تاپیک بخونید: یک پروژهء سیستم رجیستر و لاگین بازمتن

برای نصبش ابتدا باید یک دیتابیس خالی بنام reg8log رو بصورت دستی ایجاد کنید؛ بعدش بقیهء مراحل نصب جدولها و غیره رو خود برنامه انجام میده (البته با طی مراحل ویزارد توسط شما).
البته یوزنیم و پسورد اتصال به MySQL هم اگر نیاز بود باید در فایل کانفیگ برنامه (config_dbms.php) وارد کنید.


فایل‌های پیوست
.zip reg8log.zip اندازه 309.73 KB  تعداد دانلود: 36
پاسخ
#2

چرا برنامه‌ریز کم ندارم, خود من هم هستم.

تالار برای برنامه‌ریزی ولی کمی بیش از اندازه میزند, تالار رایانه‌یِ اینجا هم چندان پستی نمیخورد, چه رسد برنامه‌ریزی! (:

چیزیکه من نگرفتم کارکرد برنامه بود, یک ماژول generic برای نامنویسی و لاگ‌این داریم که میشود هنگام برنامه‌ریزی در ساختار سایت به کار گرفت؟

.Unexpected places give you unexpected returns
پاسخ
#3

خب من هنوز به اون مرحله یا نیاز و انگیزه و اولویت نرسیدم که بخوام سعی کنم اینو به شکل یک ماجولی چیزی که براحتی برای بقیهء بقیهء برنامه نویسان قابل Embed کردن و استفاده در پروژه های خودشون باشه دربیارم.
اون خودش کار میبره و پیچیده است یا حداقل من هنوز تجربه ای در این زمینه ندارم و بنابراین تصور پیشاپیش از روش و میزان سختی و کارش ندارم.

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

حقیقتش من این برنامه رو در اصل با اهداف شخصی نوشتم، مثل تمرین و محک زدن و تثبیت دانش و مهارت و توانایی خودم و حتی اثبات توانایی و سوادم به دیگران و منتقدین (آخه با دیگران زیاد سرشاخ میشدم سر بحثهای برنامه نویسی و بهم زیاد ایراد میگرفتن که کار عملی نداری و اعتبار و سواد کافی نداری).
البته چون به چنین سیستمی در بیشتر پروژه ها و سایتها نیازه، من این رو برای استفادهء عملی در آینده که نیاز خودم شد هم نوشتم. چون واقعا کار میبره یک چنین سیستمی اگر بخواد کامل و حرفه ای باشه، و نمیشه اون موقع اون همه وقت سرش گذاشت.

قصدم این نبود که برای استفادهء دیگران حاضر و آماده باشه. وقت و اولویت و انگیزش رو هنوز هم ندارم.
برای دیگران الان مثل یک دمو هست، با اینکه کامل و واقعیه!
با این حال آمار دانلودش در فروم برنامه نویس، از نسخه های ابتدایی تا حالا پیوسته در یک حد قابل توجه بوده که این نشون میده برای دیگران اهمیت/جذابیت و احتمالا کاربردی داشته. دانلود میکنن حتما یه کاری میکنن دیگه! شایدم فقط کیف میکنن E415

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

اگر بخوام تمام تمهیدات و برجستگی ها و ظرفت هایی رو که توش بکار رفته بگم خیلی میشه و وقت و جاش نیست. فقط اینو بگم که حتی از برنامه های معروف و پرکاربرد با سالها سابقه هم میتونه سرتر باشه. مثلا از ویبالتین. هرچند CMS ها و فرومها که اصولا سیستم رجیستر و لاگین آنچنان مجهز و حرفه ای و دقیقی هم ندارن. شاید چون این فقط یک بخشی از اوناست. درحالیکه رجیستر و لاگین خودش اگر بخواد کامل و قوی کار بشه یک کار گسترده و پیچیده و واقعا تخصصیه. منم خواستم یک سیستم کامل و قوی در این زمینه رو ارائه بدم که فکر میکنم تاحالا وجود نداشته!
طوری درنظر گرفتم که برای محیطها و برنامه های حساس تر از سطوح عادی هم قابل قبول باشه. یعنی High security باشه.

خب حالا دیگه زیاد از خودم تعریف نکنم.
بهرحال کار سختی بود و حتی اینم نمیتونم بگم آخر کامل و بی نقصه؛ باگ هم که ممکنه بهرحال هر برنامه ای داشته باشه. خطای انسانی رو همه و در هر برنامه ای هرچقدر هم که دقت بکنن میشه پیدا کرد.
ولی من سعی کردم حداکثر وقت و انرژی و حوصله رو بهش اختصاص بدم و کم نذارم. تاجاییکه بنظرم معقول بود روش کار کردم و همت و حوصله به خرج دادم.
اگر یک کسی تخصص و علاقه داشته باشه میشه روی این پروژه و اجزای درونی اون کلی بحث باهاش کرد. واقعا خیلی گسترده است. نمیدونم خبر دارید یا نه. یک دنیاست. تمومی نداره. حتی منم هنوز در زمینهء امنیت بعد از سالها و انبوهی مطالعه و تحقیق دارم گهگاه چیزهای جدیدی یاد میگیرم و تجربه های که میبینم قبلا کمبود داشتم و مواردی که سورپرایز میشم.
پاسخ
#4

لامصب این علم و فناوری و اونم علم پرشتاب و پرحجم و پرتغییر رایانه و برنامه نویسی، تمومی نداره. اونقدر گسترده و پیچیدس که کمتر کسی در همهء زمینه ها سواد بالا و مکفی داره. میتونم بگم افراد واقعا معدودی.

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

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

من تازه رسیدم به اینجا که یک سیستم رجیستر و لاگین درست کردم که از همه سره و اصلا نمونه نداره، ولی هنوز همین رو هم وقت نکردم و تجربش رو ندارم که به سطح و استاندارد ارائه و شکل تجاری برسونم.

بهرحال این کار از نظر علمی و کاملی در کل واقعا حریف نداره که حتی به گردش برسه!

راستی شما در چه زمینه برنامه نویسی تخصص داری و چه سطحی دانش و توانایی و تجربه داری؟ و چه نمونه کارهایی اگر داری؟

البته من گفتم که چون خوره بودم و نمیتونستم از چیزی بگذرم و میخواستم بتونم همه کار بکنم، دنبال چند حیطه و زبان رفتم. بخاطر همین خیلی وقت و انرژی صرف شد و وقت برای کار عملی یا تجاری گسترده و واقعی خیلی کم داشتم. دنبال برنامه نویسی دسکتاپ رفتم، وب رفتم، حتی سیستمی، زبانهای مختلف متعدد، PHP, Python, Qt, C, C++, Action script (Flash), Assembly و شاید مواردی که یادم رفته. بعلاوهء کلی مخلفات دیگه در زمینهء الگوریتم و امنیت و رمزنگاری که خودش اصلا یک زیرشاخهء فوق تخصصیه! یعنی اونقدری گسترده و پیچیده و حجیم هست که خودش یک تخصص جدا بحساب میاد و چند سال یادگیریش وقت میبره به تنهایی.
کلی هم رفرنس و منوال رو کامل خوندم. از رفرنس آپاچی و MySQL بگیر تا منوال های کاربری و مدیریت GNU/Linux. یک سال تمام فقط با لینوکس کار کردم و دائم داشتم منوال و مقاله هاش رو میخوندم و تست میکردم تا بهش کاملا آگاه و مسلط بشم.

خلاصه من یه خورهء واقعی هستم.
خودم رو وقف اینا کردم.
کار دیگه هم بلد نیستم!
اصلا چیز زیاد دیگری نیست که بنظرم معنا و ارزش و کاربرد زیادی داشته باشه.
البته از هنرهای رزمی و کنگفو هم خیلی خوشم میاد و به همین مقدار یا شاید حتی بیشتر بنظرم اهمیت داره، ولی دیگه وقت و انرژیم نرسید که دنبال اونم برم بصورت حرفه ای.

راستی آدرس وبلاگم رو هم که شاید بدونید: علم خوره
پاسخ
#5

folaani نوشته: خب حالا دیگه زیاد از خودم تعریف نکنم.
بهرحال کار سختی بود و حتی اینم نمیتونم بگم آخر کامل و بی نقصه؛ باگ هم که ممکنه بهرحال هر برنامه ای داشته باشه. خطای انسانی رو همه و در هر برنامه ای هرچقدر هم که دقت بکنن میشه پیدا کرد.

من یک نگاه سرسری برای باگ‌ها انداختم, تا اینجا به نگر فرزام[sup][aname="rpa5e62f21127424ffe8e3a9aa248c76d8c"][[/aname][anchor="pa5e62f21127424ffe8e3a9aa248c76d8c"]1][/anchor][/sup] میاید (تنها یک گیر کوچک اینجا شاید داشته باشی):
کد پی‌اچ‌پی:
function quote_smart($value$identifier=false)
{

if(!
is_numeric($value)) {
//if(get_magic_quotes_gpc()) $value = stripslashes($value);
if(!$identifier) return "'" .mysql_real_escape_string($value) . "'";
else if(
strpos($value'`')===false) return '`' .$value '`';
else {
$this->error("Value contains invalid character (backtick - '`') for identifiers");
return 
false;
}


اینجا با اینکه بسیار خوب کارو انجام دادی و query پایانی هم quote میشود, همچنان ولی جا برای injection هست, اگر که mysql روی سرور یکی از encoding‌هایِ زیر را ببیوسد[sup][aname="rpa98985c732aab42b0aa6865b294eadb76"][[/aname][anchor="pa98985c732aab42b0aa6865b294eadb76"]2][/anchor][/sup]: GBK or BIG-5

php - SQL injection that gets around mysql_real_escape_string() - Stack Overflow

در این ریخت ما هنوز میتوانیم یک ' در query رد کنیم و login را بپیچانیم (:


رویهمرفته کد براستی پیشه‌ای نوشته شده و نکته‌هایِ امنیتی کمابیش همگی به کار رفته‌اند, از globals گرفته تا access و .., همانجور هم که گفتی بیشمار
ساماندهی (configs) آنجاست و به درد یک پروژه‌یِ بزرگ میخورد.

با همه‌یِ اینها من فرزامگرایی[sup][aname="rpa7cd75407684d4e59a36ecb432a42072f"][[/aname][anchor="pa7cd75407684d4e59a36ecb432a42072f"]3][/anchor][/sup] بیش از اندازه‌ای در کدت میبینم که به نگرم برای همان خودنمایی بوده باشد ((:

نکته‌یِ crypt_random ٸه دستکاری شده چیه؟ درگاشت[sup][aname="rpafdaf238307cb4654840f51c7777d74fa"][[/aname][anchor="pafdaf238307cb4654840f51c7777d74fa"]4][/anchor][/sup] را از کجا گرفته‌ای؟

چیزیکه من یافتم:
کد پی‌اچ‌پی:
@$request_entropy=sha1(microtime().$pepper.$_SERVER['REMOTE_ADDR'].$_SERVER['REMOTE_PORT'].$_SERVER['HTTP_USER_AGENT'].serialize($_POST).serialize($_GET).serialize($_COOKIE)); 

اگر تنها این باشد میشود گفت خوبه, ولی همچنان درگاشت نابِ ناب نیست و هنوز اسپاش[sup][aname="rpa0e0633ee819f4dcbbc877db88c1a7af9"][[/aname][anchor="pa0e0633ee819f4dcbbc877db88c1a7af9"]5][/anchor][/sup] به اندازه‌یِ بسنده random نیست.
من پیشتر یک خوارزم[sup][aname="rpaf2b71bf3590941c7a7ec1fadcb91804b"][[/aname][anchor="paf2b71bf3590941c7a7ec1fadcb91804b"]6][/anchor][/sup] رازنگاری نوشته بودم برای rsa که درگاشت را از cpu میگرفت, نمیدانم روی php چه اندازه دسترسی به hardware داریم, ولی
این ورتنده‌ها[sup][aname="rpa32962091fab140c4b79084bf9da3b3c8"][[/aname][anchor="pa32962091fab140c4b79084bf9da3b3c8"]7][/anchor][/sup] (time, remote_addr, serialaized post, etc) همگی هنوز پیشبینی‌پذیر میباشند و به اندازه‌ای که باید و شاید درگاشت[sup][aname="rpa7cc8d963f4504427a657ea90896033c8"][[/aname][anchor="pafdaf238307cb4654840f51c7777d74fa"]4][/anchor][/sup] را بزرگ نمیکنند (:



----
[aname="pa5e62f21127424ffe8e3a9aa248c76d8c"]1[/aname]. [anchor=rpa5e62f21127424ffe8e3a9aa248c76d8c]^[/anchor] Farzâm || فرزام: بی عیب و نقص; کامل Ϣiki-En Perfect
[aname="pa98985c732aab42b0aa6865b294eadb76"]2[/aname]. [anchor=rpa98985c732aab42b0aa6865b294eadb76]^[/anchor] Bayusidan || بیوسیدن: چشمداشتن, انتظار بردن To expect
[aname="pa7cd75407684d4e59a36ecb432a42072f"]3[/aname]. [anchor=rpa7cd75407684d4e59a36ecb432a42072f]^[/anchor] Farzâmgerâyi (farzâm+gerâ+yi) || فرزامگرایی: گرایش به فرزامی; کمال‌گرایی Ϣiki-En, Dehxodâ Perfectionism
[aname="pafdaf238307cb4654840f51c7777d74fa"]4[/aname]. ^ [anchor=rpafdaf238307cb4654840f51c7777d74fa]آ[/anchor] [anchor=rpa7cc8d963f4504427a657ea90896033c8]ب[/anchor] Dargâšt || درگاشت: آنتروپی Ϣiki-En, Ϣiki-Pâ Entropy
[aname="pa0e0633ee819f4dcbbc877db88c1a7af9"]5[/aname]. [anchor=rpa0e0633ee819f4dcbbc877db88c1a7af9]^[/anchor] Espâš || اسپاش: فضا Ϣiki-En, www.loghatnaameh.org Space
[aname="paf2b71bf3590941c7a7ec1fadcb91804b"]6[/aname]. [anchor=rpaf2b71bf3590941c7a7ec1fadcb91804b]^[/anchor] Xvârzmidan || خوارزمیدن: الگوریتم کردن To algorithmize
[aname="pa32962091fab140c4b79084bf9da3b3c8"]7[/aname]. [anchor=rpa32962091fab140c4b79084bf9da3b3c8]^[/anchor] Vartande || ورتنده: متغیر Ϣiki-En Variable

.Unexpected places give you unexpected returns
پاسخ
#6

Mehrbod نوشته: اگر که mysql روی سرور یکی از encoding‌هایِ زیر را ببیوسد[SUP][2][/SUP]: GBK or BIG-5
اتفاقا این مورد که گفتی رو قبلا هم بارها اشاره بهش دیده بودم و جدی نگرفته بودم (البته جدی نگرفتن از روی بینش و حدس حرفه ای بود که تاحدی درست هم بود)، ولی چند وقت پیش دوباره بهش برخورد کردم و یک تحقیق مفصل و جدی تری روش انجام دادم که اینجا هم منعکسش کردم:
کد:
http://forum.iranphp.org/Thread-mysql-set-charset-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AD%D8%AA%D9%85%D8%A7-%D8%A7%D9%86%D8%AC%D8%A7%D9%85-%D8%A8%D8%B4%D9%87%D8%9F
کد و توضیحات داخل فایل code_db_object.php رو هم نگاهی بنداز.
این مشکل البته تاحد زیادی پیچیده و مبهم هست، ولی من مکانیزم اون رو فهمیدم و تاجاییکه فهمیدم باگ خود MySQL هم درش دخیل بوده و در نسخه های جدیدتر این مسئله برطرف شده، اما همچنان من از تابع mysql_set_charset استفاده کردم تا نقصی در کارم نباشه. گذشته از اینکه این کاراکترست ها در زبان انگلیسی و فارسی که پروژهء من داره استفاده ندارن؛ ولی بهرحال از نظر اصولی بهتره این رو بحساب نیاریم و برنامه بی نقص و دقیق باشه از این نظر هم.

نقل قول:با همه‌یِ اینها من فرزامگرایی[SUP][3][/SUP] بیش از اندازه‌ای در کدت میبینم که به نگرم برای همان خودنمایی بوده باشد ((:
در حرفت دلیل و سندی نمیبینم.
بنظر من اینطورها هم نیست.
شما هم اگر قدر من در زمینهء امنیت و رمزنگاری مطالعه و تحقیق کرده بودی احتمالا همینطور عمل میکردی.
اصلا من اگر میخواستم مثل دیگران بنویسم نه ارضا میشدم نه استفاده ای از سواد و تواناییم میکردم و نه فکر میکردم کار حرفه ایه.
شما چه تخصصی در این زمینه داری و بر چه اساسی اینطور میگی؟
ببخشید البته قصد کل کل و توهین ندارما.
نقل قول:نکته‌یِ crypt_random ٸه دستکاری شده چیه؟ درگاشت[SUP][4][/SUP] را از کجا گرفته‌ای؟
...
ولی همچنان درگاشت نابِ ناب نیست و هنوز اسپاش[SUP][5][/SUP] به اندازه‌یِ بسنده random نیست.
من پیشتر یک خوارزم[SUP][6][/SUP] رازنگاری نوشته بودم برای rsa که درگاشت را از cpu میگرفت, نمیدانم روی php چه اندازه دسترسی به hardware داریم, ولی
این ورتنده‌ها[SUP][7][/SUP] (time, remote_addr, serialaized post, etc) همگی هنوز پیشبینی‌پذیر میباشند و به اندازه‌ای که باید و شاید درگاشت[SUP][4][/SUP] را بزرگ نمیکنند (:
خب موضوع اینه که این سیستم جمع آوری و استفاده از آنتروپی تولید شده توسط کلاینت فقط یک آنتروپی افزوده و محکم کاریه و اساس سیستم نیست. دیگه من خیلی سیستم رو محکم کاری و شاید حتی Overkill کردم؛ چون در اصل از توابع دیگری در درون تابع رندوم استفاده شده که خودشون توابع/منابع رندوم از نوع امنیتی/رمزنگاری بحساب میان (openssl_random_pseudo_bytes، /dev/urandom، mcrypt_create_iv) و امروزه بعیده حداقل یکی از اینها روی سیستمی در دسترس تابع نباشه. آنتروپی این منابع خودش کافیه و برنامه های رمزنگاری دارن از اینا استفاده میکنن، ولی خب در امنیت در هیچ کجا اطمینان 100% هم نیست و اینها هم میتونن مواردی از کم کفایتی و حمله و شرایط نامساعد دچار بشن (حداقل از نظر تئوریک).
این آنتروپی که من اضافه کردم در بدترین حالت میتونه نزدیک به صفر باشه، و هیچوقت آنتروپی سیستم کمتر از آنتروپی اون توابع امنیتی نمیشه. آنتروپی ای که من گذاشتم (البته به کمک اون دوست خارجی - ایدش از ایشون بوده)، باعث افزایش اطمینان در ترکیب با اون توابع میشه، و اگر در موارد نادری هیچکدام از اون توابع امنیتی در دسترس نبودن، باز یک منبع آنتروپی بسیار با ارزشی رو تامین میکنه که همون هم برای کاربردهای عادی شاید خیلی بیش از حد مورد نیاز هم باشه.

البته اینم بگم که یک دلیل افزوده شدن این سیستم آنتروپی، ضعف اولیهء تابع رندوم ایشون بود که بنده دیدم و با خودش هم مطرح کردم و بحث افزودن منابع آنتروپی از اون موقع افتاد وسط و شاید دست آخر دیگه اصلا نیازی نبود، چون چند تابع دیگر برای گرفتن آنتروپی از منابع رسمی سیستم رو به تابع ایشون اضافه کردم که دیگه 99% روی سیستمها حداقل یکی از اینا پیدا میشه.
تابع اصلاح شدهء بنده الان از تابع اون موقع ایشون خیلی بهتر هم هست. ولی نمیدونم این تغییرات مفید رو ایشون در تابع خودش هم اعمال کرد یا نه.
البته اون openssl_random_pseudo_bytes رو تاجاییکه یادمه به نسخهء بعدی تابع در SVN اضافه کرد. منتها اضافه کردن mcrypt_create_iv هم مهم بود، چون از openssl_random_pseudo_bytes همونطور که در کد و کامنت هاش میبینید در روی ویندوز بخاطر کندی غیرعادیش استفاده نمیشه، و روی ویندوز /dev/urandom رو هم که نداریم!
پاسخ
#7

Mehrbod نوشته: من پیشتر یک خوارزم[SUP][6][/SUP] رازنگاری نوشته بودم برای rsa که درگاشت را از cpu میگرفت
متوجه نشدم که خود الگوریتم RSA رو نوشتی یا از RSA در برنامت استفاده کردی؟
چون پیاده سازی الگوریتم RSA خیلی جزییات ظریف و امنیتی داره. من توی یه کتاب رمزنگاری خوندم. فقط به همون فرمول ریاضیش خلاصه نمیشه! باید همهء جوانب و ریزه کاریهای دیگرش رو هم بدونی و پیاده کنی تا کاملا امن و حرفه ای باشه.

ضمنا برای بدست آوردن آنتروپی هم قاعدتا باید از توابع خود سیستم عامل/کتابخانه های برنامه نویسی که توابع رندوم از نوع مخصوص کاربردهای Cryptography هستن استفاده کنی. چرا راه دیگه رفتی؟

مثلا اینجا رو نگاهی بکن: علم خوره
تاجاییکه میدونم این تابع CryptGenRandom هم در API سی/سی++ ویندوز در دسترس هست و هم در دات نت.
اون تابع mcrypt_create_iv هم که در تابع رندوم پروژهء من بکار رفته، روی ویندوز در پشت صحنه از همین تابع CryptGenRandom استفاده میکنه. بخاطر همین آنتروپی کافی و بقیهء خصوصیات لازم برای کاربردهای امنیتی/رمزنگاری رو داره.

حالا جالب اینه که لیست منابعی که /dev/urandom در لینوکس، آنتروپی خودش رو از اونا میگیره خیلی محدودتره ظاهرا. تاجاییکه من دیدم حتی یکی یا دوتا منبع بطور استاندارد و پیشفرض! مثلا آنتروپی دسترسی به دیسک.
ولی با اینحال ظاهرا همین هم کفایت میکنه! (وگرنه این همه متخصص رمزنگاری و لینوکس بازمتن و به این مهمی همینطور باقی نمیموندن که) چه میدونم والا. شاید ویندوز Overkill کرده!!
پاسخ
#8

folaani نوشته: متوجه نشدم که خود الگوریتم RSA رو نوشتی یا از RSA در برنامت استفاده کردی؟
چون پیاده سازی الگوریتم RSA خیلی جزییات ظریف و امنیتی داره. من توی یه کتاب رمزنگاری خوندم. فقط به همون فرمول ریاضیش خلاصه نمیشه! باید همهء جوانب و ریزه کاریهای دیگرش رو هم بدونی و پیاده کنی تا کاملا امن و حرفه ای باشه.

ضمنا برای بدست آوردن آنتروپی هم قاعدتا باید از توابع خود سیستم عامل/کتابخانه های برنامه نویسی که توابع رندوم از نوع مخصوص کاربردهای Cryptography هستن استفاده کنی. چرا راه دیگه رفتی؟

نه جوان بودم و بیکار,همان 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] اش ولی راهِ باید سختی رفته میشد تا براستی رندم باشد.



folaani نوشته: مثلا اینجا رو نگاهی بکن: علم خوره
تاجاییکه میدونم این تابع CryptGenRandom هم در API سی/سی++ ویندوز در دسترس هست و هم در دات نت.
اون تابع mcrypt_create_iv هم که در تابع رندوم پروژهء من بکار رفته، روی ویندوز در پشت صحنه از همین تابع CryptGenRandom استفاده میکنه. بخاطر همین آنتروپی کافی و بقیهء خصوصیات لازم برای کاربردهای امنیتی/رمزنگاری رو داره.

حالا جالب اینه که لیست منابعی که /dev/urandom در لینوکس، آنتروپی خودش رو از اونا میگیره خیلی محدودتره ظاهرا. تاجاییکه من دیدم حتی یکی یا دوتا منبع بطور استاندارد و پیشفرض! مثلا آنتروپی دسترسی به دیسک.

ولی با اینحال ظاهرا همین هم کفایت میکنه! (وگرنه این همه متخصص رمزنگاری و لینوکس بازمتن و به این مهمی همینطور باقی نمیموندن که) چه میدونم والا. شاید ویندوز Overkill کرده!!

/dev/urandom هم برای رازنگاری[sup][aname="rpaa2d854c23c9f4ce2abd8586fcf4951d9"][[/aname][anchor="paa2d854c23c9f4ce2abd8586fcf4951d9"]4][/anchor][/sup] کاربرد ندارد: /dev/random - WiKi

باید از /dev/random گرفت که از همان نوفه‌یِ[sup][aname="rpa4712361332044c4dab81870e328450b5"][[/aname][anchor="pa4712361332044c4dab81870e328450b5"]5][/anchor][/sup] hardware بهره میگیرد, بجز hardware براستی راهی نیست که بتوانیم از خود خوارزمِ[sup][aname="rpac85ae76108d54e5f8f0846d48b9eda94"][[/aname][anchor="pa74334cdacd83494b8336420f8208e4df"]1][/anchor][/sup] تنها
مر[sup][aname="rpa53935f9d29a844d5b1a01ac890ae9be7"][[/aname][anchor="pac85ae76108d54e5f8f0846d48b9eda94"]6][/anchor][/sup] رندم بفرآوریم[sup][aname="rpaf133ada129fe40d2b18cfb6df7292df0"][[/aname][anchor="pa53935f9d29a844d5b1a01ac890ae9be7"]7][/anchor][/sup], hardware هم به گونه‌ای نیرینگ میماند, چون تنها کار را وابسته کرده‌ایم به پدیده‌هایِ کوانتومی مادی[sup][aname="rpae399fc0f18924d42b4a0a8852828e76c"][[/aname][anchor="paf133ada129fe40d2b18cfb6df7292df0"]8][/anchor][/sup] که برایمان rng درآورند.








----
[aname="pa74334cdacd83494b8336420f8208e4df"]1[/aname]. ^ [anchor=rpa74334cdacd83494b8336420f8208e4df]آ[/anchor] [anchor=rpac85ae76108d54e5f8f0846d48b9eda94]ب[/anchor] Xwârazmidan || خوارزمیدن: الگورتیم کردن To algorithmize
[aname="pabbaff45b17004b9f99eb5ee7e5099e42"]2[/aname]. [anchor=rpabbaff45b17004b9f99eb5ee7e5099e42]^[/anchor] Mazdâhikin || مزداهیکین: ریاضیاتی Mathematical
[aname="paa429cb4adc0c4b16a140060ca4bbad61"]3[/aname]. [anchor=rpaa429cb4adc0c4b16a140060ca4bbad61]^[/anchor] Dargâšt || درگاشت: آنتروپی Ϣiki-En, Ϣiki-Pâ Entropy
[aname="paa2d854c23c9f4ce2abd8586fcf4951d9"]4[/aname]. [anchor=rpaa2d854c23c9f4ce2abd8586fcf4951d9]^[/anchor] Râznegâri (râz+negâr+i) || رازنگاری: رمزنگاری Ϣiki-En Cryptography
[aname="pa4712361332044c4dab81870e328450b5"]5[/aname]. [anchor=rpa4712361332044c4dab81870e328450b5]^[/anchor] Nufe || نوفه: اختلال ⚕Heydari☉, Ϣiki-En Noise
[aname="pac85ae76108d54e5f8f0846d48b9eda94"]6[/aname]. [anchor=rpa53935f9d29a844d5b1a01ac890ae9be7]^[/anchor] Mar || مر: شماره; عدد MacKenzie, Ϣiki-En, Ϣiki-Pâ Number
[aname="pa53935f9d29a844d5b1a01ac890ae9be7"]7[/aname]. [anchor=rpaf133ada129fe40d2b18cfb6df7292df0]^[/anchor] Farâvardan (far+âvardan) || فراوردن: حاصل کردن Ϣiki-En To produce
[aname="paf133ada129fe40d2b18cfb6df7292df0"]8[/aname]. [anchor=rpae399fc0f18924d42b4a0a8852828e76c]^[/anchor] Mâdi || مادی: Material

.Unexpected places give you unexpected returns
پاسخ
#9

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 اولیه گرفته باشی.
پاسخ
#10

نقل قول:مر[SUP][6][/SUP] رندم بفرآوریم[SUP][7][/SUP], hardware هم به گونه‌ای نیرینگ میماند, چون تنها کار را وابسته کرده‌ایم به پدیده‌هایِ کوانتومی مادی[SUP][8][/SUP] که برایمان rng درآورند.
تاجاییکه بنده قبلا مطالعه کردم، آنچنان نیرنگی هم درکار نیست.
البته تولیدکننده های آنتروپی دو نوع دارند تاجاییکه یادم است.
یک نوع بر اساس پدیده هایی هستند که از نظر تئوریک غیرقابل پیشبینی نیستند. مثلا آنتروپی حاصل از IO گرچه برای افراد در شرایط عادی قابل پیشبینی نیست، ولی از نظر تئوریک اگر تمام پارامترها یا پارامترهای کافی در دسترس/کنترل باشند، قابل پیشبینی/خدشه است. و کلا هم چون امنیت ذاتی ندارد، تئوری هیچ تضمینی در این مورد نمیدهد. استحکام ریاضی/فیزیکی ندارد، ولی بهرصورت قابل استفاده است تاجاییکه تجربه نشان میدهد؛ و در خیلی موارد بخاطر در دسترس نبودن و صرف نکردن گزینه های دیگر، استفاده میشوند.

یک نوع دیگر تولیدکننده های آنتروپی هم هستند که از پدیده های فیزیکی که علم حداقل تاکنون به این نتیجه رسیده که غیرقابل پیشبینی هستند، برای تولید آنتروپی استفاده میکنند. مثلا از پدیدهء فروپاشی رادیواکتیو ذرات ناپایدار، تاجاییکه میدانم.
این نوع تولیدکننده های آنتروپی، از نظر تئوریک استحکام دارند و الان هم تولیدکننده های سخت افزاری از این نوع داریم که مثلا بصورت سخت افزارهای جانبی در دسترس هستند. بعضی سیستمها اصلا از این نوع ماجول های سخت افزاری را در خود دارند. هرچند بازهم از نظر فنی اینکه واقعا سیستم بی نقص پیاده سازی شده باشد و اینکه اگر مشکلی در کارکرد و امنیت آن بوجود آمد مشخص شود، کار واقعا چالش برانگیز و حاوی درصدی از عدم اطمینان است بهرحال؛ حتی میتوان به تولیدکنندهء آن قطعات هم شک منطقی داشت در علم امنیت و رمزنگاری!!
ضمنا این استحکام تئوریک هم 100% نیست؛ چون مثلا شاید چند سال دیگر علم کوانتم هم تغییر کرد یا اشتباهاتی در آن مشخص شد و فهمیدند که مثلا فلان پدیده که قبلا فکر میکردند کاملا غیرقابل پیشبینی است، آنطور نبوده.

استفاده از یک پدیده هایی مثل اغتشاش جوی هم دقیقا بیاد ندارم در کدام گروه بود.

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

کلا تولید آنتروپی برای مصارف امنیتی کار دشوار و ظریفی است.
این را بنده تایید میکنم.
در تمام منابعی که خواندم به آن اشاره شده است.
ولی الان فکر میکنم امکانات خوبی موجود باشد. بنده دربارهء انواع ماجولهای تولید آنتروپی خوانده ام. انواع رادیواکتیو، نوری (عبور یا انعکاس فوتون ها از آینهء نیم بازتابنده)، و غیره.
پاسخ


موضوعات مشابه ...
موضوع / نویسنده پاسخ بازدید آخرین ارسال

پرش به انجمن:


کاربران در حال بازدید این موضوع: 4 مهمان