PDA

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



folaani
03-21-2013, 08:49 PM
این پروژهء سیستم رجیستر و لاگین بنده است.
تنها ضعفی که داره بنظرم اینه که شیء گرایی رو رعایت نکردم و از الگوهای طراحی مثل MVC هم استفاده نکردم؛ ولی از بقیهء نظرهای الگوریتم و امکانات و امنیت و انعطاف میتونم بگم در سطح کاملا برجسته ای است. از نظر الگوریتم و امنیت بنده خودم رو برجسته میدونم. در زمینهء امنیت و رمزنگاری مطالعات و تحقیقات و سواد خوبی دارم. بنابراین این پروژه رو سعی کردم هر چه حرفه ای و کامل و دقیق در این زمینه ها طراحی کنم.
ضمنا این برنامه برای مقیاس کوچک و شاید تا متوسط درنظر گرفته شده. لزوما برای مقیاس بزرگ (تعداد کاربران زیاد یا ترافیک زیاد) مناسب نیست. مثلا من حداکثر تعداد اکانتهای کاربری که توی ذهنم بعنوان فرض مقیاس داشتم، 100 هزارتا بوده.

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

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

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

اطلاعات بیشتر و دقیقتر درمورد این پروژه رو میتونید در این تاپیک بخونید: یک پروژهء سیستم رجیستر و لاگین بازمتن (http://barnamenevis.org/showthread.php?335895)

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

Mehrbod
03-21-2013, 09:02 PM
چرا برنامه‌ریز کم ندارم, خود من هم هستم.

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

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

folaani
03-21-2013, 09:44 PM
خب من هنوز به اون مرحله یا نیاز و انگیزه و اولویت نرسیدم که بخوام سعی کنم اینو به شکل یک ماجولی چیزی که براحتی برای بقیهء بقیهء برنامه نویسان قابل Embed کردن و استفاده در پروژه های خودشون باشه دربیارم.
اون خودش کار میبره و پیچیده است یا حداقل من هنوز تجربه ای در این زمینه ندارم و بنابراین تصور پیشاپیش از روش و میزان سختی و کارش ندارم.

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

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

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

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

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

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

folaani
03-21-2013, 10:09 PM
لامصب این علم و فناوری و اونم علم پرشتاب و پرحجم و پرتغییر رایانه و برنامه نویسی، تمومی نداره. اونقدر گسترده و پیچیدس که کمتر کسی در همهء زمینه ها سواد بالا و مکفی داره. میتونم بگم افراد واقعا معدودی.

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

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

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

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

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

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

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

راستی آدرس وبلاگم رو هم که شاید بدونید: علم خوره (http://hamidreza-mz.tk/)

Mehrbod
03-21-2013, 10:11 PM
خب حالا دیگه زیاد از خودم تعریف نکنم.
بهرحال کار سختی بود و حتی اینم نمیتونم بگم آخر کامل و بی نقصه؛ باگ هم که ممکنه بهرحال هر برنامه ای داشته باشه. خطای انسانی رو همه و در هر برنامه ای هرچقدر هم که دقت بکنن میشه پیدا کرد.

من یک نگاه سرسری برای باگ‌ها انداختم, تا اینجا به نگر فرزام[1] میاید (تنها یک گیر کوچک اینجا شاید داشته باشی):


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‌هایِ زیر را ببیوسد[2]: GBK or BIG-5

php - SQL injection that gets around mysql_real_escape_string() - Stack Overflow (http://stackoverflow.com/a/12118602)

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


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

با همه‌یِ اینها من فرزامگرایی[3] بیش از اندازه‌ای در کدت میبینم که به نگرم برای همان خودنمایی بوده باشد ((:

نکته‌یِ crypt_random ٸه دستکاری شده چیه؟ درگاشت[4] را از کجا گرفته‌ای؟

چیزیکه من یافتم:


@$request_entropy=sha1(microtime().$pepper.$_SERVE R['REMOTE_ADDR'].$_SERVER['REMOTE_PORT'].$_SERVER['HTTP_USER_AGENT'].serialize($_POST).serialize($_GET).serialize($_CO OKIE));


اگر تنها این باشد میشود گفت خوبه, ولی همچنان درگاشت نابِ ناب نیست و هنوز اسپاش[5] به اندازه‌یِ بسنده random نیست.
من پیشتر یک خوارزم[6] رازنگاری نوشته بودم برای rsa که درگاشت را از cpu میگرفت, نمیدانم روی php چه اندازه دسترسی به hardware داریم, ولی
این ورتنده‌ها[7] (time, remote_addr, serialaized post, etc) همگی هنوز پیشبینی‌پذیر میباشند و به اندازه‌ای که باید و شاید درگاشت[4] را بزرگ نمیکنند (:



----
1. ^ Farzâm || فرزام: بی عیب و نقص; کامل Ϣiki-En (http://en.wikipedia.org/wiki/Perfect) Perfect
2. ^ Bayusidan || بیوسیدن: چشمداشتن, انتظار بردن To expect
3. ^ Farzâmgerâyi (farzâm+gerâ+yi) || فرزامگرایی: گرایش به فرزامی; کمال‌گرایی Ϣiki-En (http://en.wikipedia.org/wiki/Perfectionism), Dehxodâ (http://www.loghatnaameh.org/dehkhodaworddetail-9a01e9d83f5247af8d959a054bdde747-fa.html) Perfectionism
4. ^ آ ب Dargâšt || درگاشت: آنتروپی Ϣiki-En (http://en.wikipedia.org/wiki/Entropy), Ϣiki-Pâ (http://fa.wikipedia.org/wiki/%D8%A2%D9%86%D8%AA%D8%B1%D9%88%D9%BE%DB%8C) Entropy
5. ^ Espâš || اسپاش: فضا Ϣiki-En (http://en.wikipedia.org/wiki/Space), www.loghatnaameh.org (http://www.loghatnaameh.org/dehkhodaworddetail-ca4e85084a9e43c5890c2ed96333b89c-fa.html) Space
6. ^ Xvârzmidan || خوارزمیدن: الگوریتم کردن To algorithmize
7. ^ Vartande || ورتنده: متغیر Ϣiki-En (http://en.wikipedia.org/wiki/Variable) Variable

folaani
03-21-2013, 10:32 PM
اگر که mysql روی سرور یکی از encoding‌هایِ زیر را ببیوسد[2] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pa98985c732aab42b0aa6865b294eadb76): 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 استفاده کردم تا نقصی در کارم نباشه. گذشته از اینکه این کاراکترست ها در زبان انگلیسی و فارسی که پروژهء من داره استفاده ندارن؛ ولی بهرحال از نظر اصولی بهتره این رو بحساب نیاریم و برنامه بی نقص و دقیق باشه از این نظر هم.


با همه‌یِ اینها من فرزامگرایی[3] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pa7cd75407684d4e59a36ecb432a42072f) بیش از اندازه‌ای در کدت میبینم که به نگرم برای همان خودنمایی بوده باشد ((:
در حرفت دلیل و سندی نمیبینم.
بنظر من اینطورها هم نیست.
شما هم اگر قدر من در زمینهء امنیت و رمزنگاری مطالعه و تحقیق کرده بودی احتمالا همینطور عمل میکردی.
اصلا من اگر میخواستم مثل دیگران بنویسم نه ارضا میشدم نه استفاده ای از سواد و تواناییم میکردم و نه فکر میکردم کار حرفه ایه.
شما چه تخصصی در این زمینه داری و بر چه اساسی اینطور میگی؟
ببخشید البته قصد کل کل و توهین ندارما.


نکته‌یِ crypt_random ٸه دستکاری شده چیه؟ درگاشت[4] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pafdaf238307cb4654840f51c7777d74fa) را از کجا گرفته‌ای؟
...
ولی همچنان درگاشت نابِ ناب نیست و هنوز اسپاش[5] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pa0e0633ee819f4dcbbc877db88c1a7af9) به اندازه‌یِ بسنده random نیست.
من پیشتر یک خوارزم[6] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#paf2b71bf3590941c7a7ec1fadcb91804b) رازنگاری نوشته بودم برای rsa که درگاشت را از cpu میگرفت, نمیدانم روی php چه اندازه دسترسی به hardware داریم, ولی
این ورتنده‌ها[7] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pa32962091fab140c4b79084bf9da3b3c8) (time, remote_addr, serialaized post, etc) همگی هنوز پیشبینی‌پذیر میباشند و به اندازه‌ای که باید و شاید درگاشت[4] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pafdaf238307cb4654840f51c7777d74fa) را بزرگ نمیکنند (:
خب موضوع اینه که این سیستم جمع آوری و استفاده از آنتروپی تولید شده توسط کلاینت فقط یک آنتروپی افزوده و محکم کاریه و اساس سیستم نیست. دیگه من خیلی سیستم رو محکم کاری و شاید حتی 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 رو هم که نداریم!

folaani
03-21-2013, 11:18 PM
من پیشتر یک خوارزم[6] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#paf2b71bf3590941c7a7ec1fadcb91804b) رازنگاری نوشته بودم برای rsa که درگاشت را از cpu میگرفت

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

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

مثلا اینجا رو نگاهی بکن: علم خوره (http://www.hamidreza-mz.tk/?p=607)
تاجاییکه میدونم این تابع CryptGenRandom هم در API سی/سی++ ویندوز در دسترس هست و هم در دات نت.
اون تابع mcrypt_create_iv هم که در تابع رندوم پروژهء من بکار رفته، روی ویندوز در پشت صحنه از همین تابع CryptGenRandom استفاده میکنه. بخاطر همین آنتروپی کافی و بقیهء خصوصیات لازم برای کاربردهای امنیتی/رمزنگاری رو داره.

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

Mehrbod
03-22-2013, 10:33 AM
متوجه نشدم که خود الگوریتم RSA رو نوشتی یا از RSA در برنامت استفاده کردی؟
چون پیاده سازی الگوریتم RSA خیلی جزییات ظریف و امنیتی داره. من توی یه کتاب رمزنگاری خوندم. فقط به همون فرمول ریاضیش خلاصه نمیشه! باید همهء جوانب و ریزه کاریهای دیگرش رو هم بدونی و پیاده کنی تا کاملا امن و حرفه ای باشه.

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


نه جوان بودم و بیکار,همان rsa را از بیخ روی c از نو نوشتم (:

خوارزمِ[1] rsa که چیزی ندارد از دید مزداهیکین[2] و برنامه‌ریزی, برای درگاشت[3] اش ولی راهِ باید سختی رفته میشد تا براستی رندم باشد.





مثلا اینجا رو نگاهی بکن: علم خوره (http://www.hamidreza-mz.tk/?p=607)
تاجاییکه میدونم این تابع CryptGenRandom هم در API سی/سی++ ویندوز در دسترس هست و هم در دات نت.
اون تابع mcrypt_create_iv هم که در تابع رندوم پروژهء من بکار رفته، روی ویندوز در پشت صحنه از همین تابع CryptGenRandom استفاده میکنه. بخاطر همین آنتروپی کافی و بقیهء خصوصیات لازم برای کاربردهای امنیتی/رمزنگاری رو داره.

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

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

/dev/urandom هم برای رازنگاری[4] کاربرد ندارد: /dev/random - WiKi (http://en.wikipedia.org/wiki//dev/random)

باید از /dev/random گرفت که از همان نوفه‌یِ[5] hardware بهره میگیرد, بجز hardware براستی راهی نیست که بتوانیم از خود خوارزمِ[1] تنها
مر[6] رندم بفرآوریم[7], hardware هم به گونه‌ای نیرینگ میماند, چون تنها کار را وابسته کرده‌ایم به پدیده‌هایِ کوانتومی مادی[8] که برایمان rng درآورند.








----
1. ^ آ ب Xwârazmidan || خوارزمیدن: الگورتیم کردن To algorithmize
2. ^ Mazdâhikin || مزداهیکین: ریاضیاتی Mathematical
3. ^ Dargâšt || درگاشت: آنتروپی Ϣiki-En (http://en.wikipedia.org/wiki/Entropy), Ϣiki-Pâ (http://fa.wikipedia.org/wiki/%D8%A2%D9%86%D8%AA%D8%B1%D9%88%D9%BE%DB%8C) Entropy
4. ^ Râznegâri (râz+negâr+i) || رازنگاری: رمزنگاری Ϣiki-En (http://en.wikipedia.org/wiki/Cryptography) Cryptography
5. ^ Nufe || نوفه: اختلال ⚕Heydari☉ (http://aramis.obspm.fr/~heydari/dictionary/index.php?formSearchTextfield=noise&formSubmit=Search&showAll=1), Ϣiki-En (http://en.wikipedia.org/wiki/Noise) Noise
6. ^ Mar || مر: شماره; عدد MacKenzie, Ϣiki-En (http://en.wikipedia.org/wiki/Number), Ϣiki-Pâ (http://fa.wikipedia.org/wiki/%D9%85%D8%B1) Number
7. ^ Farâvardan (far+âvardan) || فراوردن: حاصل کردن Ϣiki-En (http://en.wikipedia.org/wiki/Produce) To produce
8. ^ Mâdi || مادی: Material

folaani
03-22-2013, 06:54 PM
نه جوان بودم و بیکار,همان rsa را از بیخ روی c از نو نوشتم (:

خوارزمِ[1] rsa که چیزی ندارد از دید مزداهیکین[2] و برنامه‌ریزی, برای درگاشت[3] اش ولی راهِ باید سختی رفته میشد تا براستی رندم باشد.


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

بعد یه چیزهایی راجع به Padding و این حرفها هم داشت مثل اینکه.

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


/dev/urandom هم برای رازنگاری[4] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#paa2d854c23c9f4ce2abd8586fcf4951d9) کاربرد ندارد: /dev/random - WiKi (http://en.wikipedia.org/wiki//dev/random)

باید از /dev/random گرفت که از همان نوفه‌یِ[5] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pa4712361332044c4dab81870e328450b5) hardware بهره میگیرد, بجز hardware براستی راهی نیست که بتوانیم از خود خوارزمِ[1] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pa74334cdacd83494b8336420f8208e4df) تنها
مر[6] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pac85ae76108d54e5f8f0846d48b9eda94) رندم بفرآوریم[7] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pa53935f9d29a844d5b1a01ac890ae9be7), hardware هم به گونه‌ای نیرینگ میماند, چون تنها کار را وابسته کرده‌ایم به پدیده‌هایِ کوانتومی مادی[8] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#paf133ada129fe40d2b18cfb6df7292df0) که برایمان rng درآورند.
من قبلا روی همهء اینا تحقیقات مفصل داشتم.
خیر اینطور نیست که کاربرد رمزنگاری نداشته باشه.
urandom یک CSPRNG است که با آنتروپی اولیه از همون random بقولی seed میشه. تا وقتی این seed اولیه خدشه دار نشده، همونقدر امنیت داره و خروجی رندومی که تولید میکنه قابل پیشبینی/محاسبه نیست. ضمنا این seed هم همینطور نمیمونه و وقتی random آنتروپی جدید کافی جمع آوری کرد و در دسترس گذاشت، urandom مجددا خودش رو با آنتروپی جدید seed میکنه. البته الگوریتم دقیقش یادم نیست؛ شاید فورا هم seed مجدد نکنه، ولی بهرحال اونقدری مهم نیست.
random رو دیگه افراد خیلی وسواسی یا در کاربردهای نیازمند امنیت حداکثر حداکثر (مثلا درحد رمزنگاری اسناد امنیت ملی برای مدت 100 سال) استفاده میکنن.
random منتظر میمونه تا آنتروپی لازم از منابع سخت افزاری ای یا هر منبع دیگری که داره بقدر کافی جمع بشه، بعد به شما خروجی میده؛ تا قبل از جمع شدن آنتروپی لازم هم برنامه بلاک میشه و منتظر میمونه، که این در خیلی از برنامه ها قابل قبول نیست. امکان اینکه random موقع استفادهء برنامهء شما، بخاطر منتظر جمع شدن آنتروپی جدید بودن بلاک بشه زیاده، بخصوص اگر مصرف دیتای رندوم برنامهء شما زیاد باشه و زود به زود بخواد از random آنتروپی بگیره (و یا برنامه های متعددی روی سیستم از random استفاده بکنن).

u در urandom مخفف همون unblocking است. یعنی بلاک نمیکنه برنامه رو و بطور نامحدود میتونه دیتای رندوم تولید کنه. منتها امنیت این دیتای رندوم هم بسیار بالاست. درحد seed اولیه تقریبا. مثلا seed اولیه اگر 256 بیت آنتروپی واقعی داشته بوده باشه، هیچکس نمیتونه دیتاهای رندوم شما رو پیشبینی کنه، ولو چند مگابایت هم دیتای رندوم بر اساس همون seed اولیه گرفته باشی.

folaani
03-22-2013, 07:27 PM
مر[6] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pac85ae76108d54e5f8f0846d48b9eda94) رندم بفرآوریم[7] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#pa53935f9d29a844d5b1a01ac890ae9be7), hardware هم به گونه‌ای نیرینگ میماند, چون تنها کار را وابسته کرده‌ایم به پدیده‌هایِ کوانتومی مادی[8] (http://www.daftarche.com/%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87%D8%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%8C-%D8%AA%D9%84%D9%81%D9%86%E2%80%8C%D9%87%D8%A7%DB%8 C-%D9%87%D9%85%D8%B1%D8%A7%D9%87-18/%D9%BE%D8%B1%D9%88%DA%98%D9%87%D8%A1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D8%AC%DB%8C%D8%B3%D8%AA%D8%B1-%D9%88-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7%D8%B2%D9%85%D8%AA%D9%86-1023/#paf133ada129fe40d2b18cfb6df7292df0) که برایمان rng درآورند.

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

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

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

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

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

sonixax
03-22-2013, 09:59 PM
من كدتون رو ندیدم چون روی پی سی نت ندارم فعلن ، فقط خواستم بدونم برای رمز نگاری كلمه عبور فقط به یك md5 خالی بسنده كرده اید یا salt هم بهش اضافه كردید ؟

folaani
03-22-2013, 10:45 PM
من كدتون رو ندیدم چون روی پی سی نت ندارم فعلن ، فقط خواستم بدونم برای رمز نگاری كلمه عبور فقط به یك md5 خالی بسنده كرده اید یا salt هم بهش اضافه كردید ؟
نه اتفاقا سیستم هش کلمهء عبور این برنامه هم یه داستانی داشت اندازهء تحقیقاتی که روی تابع رندومش کردم.
حتی میتونم بگم شما اگر اخیرا داستانهایی درمورد اهمیت و روشهای پیشرفتهء هش میشنوید در جامعهء برنامه نویسان داخلی، احتمالا بنیانگذار و مبلغ اولش بنده بودم!!
مثلا اون زمانی که بنده متد Key stretching رو کشف و مطرح کردم، ظاهرا کسی از بروبچ خودمون حتی از وجود چنین چیزی خبر نداشت. حداقل بصورت عمومی چیزی دیده نمیشد و اهمیتش مطرح نشده بود.
حتی درمورد یه مسائلی مثل اهمیت سالت رندوم مختلف به ازای هر پسورد هم اطلاعات تخصصی وجود نداشت و مثلا در فروم آشیانه فتوا داده بودن که در عمل بیخوده!! احتمالا بخاطر اینکه فکر میکردن روشهای هک و حمله فقط هموناست که دوتا هکر خیابانی مثل خودشون بلدن و انجام میدن!

بنده در تابع هش برنامم از SHA256 استفاده کردم؛ چون MD5 مدتهاست سوراخ شده؛ همچنین SHA1 هم دیگه منسوخه برای این کاربرد.
البته استفاده از اینا برای کاربرد هش اگر با بقیهء متدها ترکیب بشن اونقدرها هم ضعیف نیست، ولی بهرصورت اکیداً بهتره اجتناب بشه.

کلا 4 مسئلهء اساسی در هش پسورد هست که من با انبوهی تحقیقات به این خلاصه رسیدم:

- سالت ثابت (که معمولا در جایی غیر از دیتابیس ذخیره میشه)
این سالت یک رشتهء رندوم است که برای کل پسوردها یکسانه و استفاده میشه.

- سالت رندوم به ازای هر پسورد
این سالت در دیتابیس همراه هش پسورد ذخیره میشه.

- متد Key stretching
این متد یعنی تکرار عملیات هش پسورد همراه با سالت و اینها، به تعداد بالا (حداقل چند هزار بار).

- آخریش هم استفاده از الگوریتم های مخصوص هش مثل bcrypt و scrypt
این الگوریتم ها مخصوص هش طراحی شدن و مثلا Key stretching رو سرخود دارن. طوری طراحی شدن که حمله های کرک رو تاحداکثر ممکن سخت کنن.
scrypt جدیدتر و قویتره، ولی زیاد استفاده نمیشه؛ حتی bcrypt هم خیلی زیاد جا نیافتاده (ولی ظاهرا آمار قابل توجه داره).
scrypt حمله های سخت افزاری جدید رو هم بحساب آورده و هزینهء اونا رو به شدت زیاد کرده.

حالا من اومدم و الگوریتم هش خودم رو که این سه متد اول درش رعایت شده باشه خودم با SHA256 طراحی کردم، ولی اصولی تر و قوی ترش اینه که از bcrypt یا scrypt استفاده بشه. البته توجه کنید که مثلا سالت ثابت رو خودتون باید به ورودی bcrypt اضافه کنید.

من بخاطر اینکه دیدم ظاهرا الگوریتم bcrypt از نظر ساپورت در بعضی نسخه های مورد استفاده PHP ممکنه مشکل داشته باشه، ترجیح دادم ریسک نکنم. همون الگوریتم منم فکر میکنم برای بیشتر کاربردها کافی باشه! الان حتی برنامه های معروف و با سابقهء زیادی هستن که از الگوریتم های ضعیف تر از این استفاده میکنن. ضمنا کرکرها فکر نمیکنم هنوز به خودشون جرات و زحمت داده باشن که دنبال کرک روشهای پیچیده و جدیدتر برن؛ بخصوص که هنوز اهداف قدیمی و به مراتب راحتتری دارن.

راستی در تولید سالتها باید دقت بشه که:

1- از توابع رندوم امنیتی استفاده بشه.
2- تعداد حالتهای سالت بقدر کافی زیاد باشه (من ترجیح دادم ریسک نکنم و از 2 به توان 128 حالت که استاندارد رمزنگاریه استفاده کردم).

sonixax
05-09-2013, 02:53 PM
بنده در تابع هش برنامم از SHA256 استفاده کردم؛ چون MD5 مدتهاست سوراخ شده؛ همچنین SHA1 هم دیگه منسوخه برای این کاربرد.

نه Md5 سوراخ نیست !
یک ضرب المثل قدیمی بین برنامه نویسان c++ هست که میگه : "هرگز نمیتونی از یک همبرگر گاو زنده درست کنی" .
تنها راه برگردان هش چه Md5 چه غیره استفاده از بروتفورس در کنار یک بانک اطلاعاتی هستش . بعضی ها مثل اینها یک دیتابیس خیلی بزرگ از هر هشی رو دارند : CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc. (http://crackstation.net/)
تهیه کردن این دیتابیس ها هم کار چندان سختی نیست - با کمی جستجو پیدا میکنید .

بروتفورس هم به این شکل کار میکنه که هکر بعد از به دست آوردن هش کلمه عبور شما رشته های مختلف رو روش آزمایش میکنه تا به رشته ای برسه که همون مقدار هش رو بر میگردونه . برخی مقادیر متفاوت که نتیجه یکسان بر میگردونند (http://www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html).
اینجاست که سالت (نمک) به کار میاد . یعنی به فرض هم که هکر بتونه هش رو پیدا کنه و رشته ای پیدا کنه که همون مقدار هش رو برگردونه وقتی اون مقدار به سالت اضافه میشه نتیجه برابر نخواهد بود .
البته وقتی طرف تونسته به بانک اطلاعتی شما نفوذ کنه پس میتونه مقدار سالت شما رو هم استخراج کنه . برای همین من هیچ وقت سالت رو روی دیتابیس ذخیره نمیکنم یا از سالت ثابت استفاده نمیکنم . یعنی همیشه سالت باید رندوم باشه .

چند راه خیلی خوب برای محافظت از سالت وجود داره :

1 - سالتها رو در پوشه ای یک لول پشت شاخه روت به صورت فایلهای مجزا قرار بدید . (همون طور که میدونید فقط اسکریپت به پوشه های پشت روت دسترسی داره و اگر برنامه شما طوری هست که اجازه دسترسی به پشت روت رو میده با پیچیده ترین روشها هم نمیتونید از شر هکر ها در امان باشید چون احتمالن میتونند روی سرور شما اسکریپت خودشون رو اجرا کنند یا از طریق اکسپلویتها هر فایلی که میخواند رو از روی سرور شما دانلود کنند ، البته تنظیم مجوزهای دسترسی (Permission ها) هم خیلی مهمه) .

2 - در برخی جاها که حفاظت از اطلاعات خیلی مهمه یک سرور دیگه با IP جداگانه درنظر گرفته میشه و سالتها روی اون ذخیره میشند . دسترسی تمام IP ها به جز IP سروری که اسکریپت روش اجرا میشه به سرور ریموت بسته میشه . طبیعی هست که این روش هزینه اش هم بیشتره . حتا ممکنه که بخشی از سالت روی یک ریموت سرور و بخش دیگرش روی یک ریموت سرور دیگه باشه یا اصلن بیش از یک سالت روی بیش از یک ریموت سرور باشه .

3 - من دیده ام که برخی از برنامه نویسان حتا خود هش رو هم روی یک سرور دیگه نگهداری میکنند .
4- تا جای ممکن بهتره که دسترسی فیزیکی به هیچ کدام از سرورها وجود نداشته باشه و حتا بهتره سرورها در یک پایگاه واحد نباشند - که البته این دیگه از نکات برنامه نویسی نیست :e056:

دست آخر بهتره از یکی روشهای یک یا 2 در اسکریپتتون بهره ببرید چون هر هشی با صرف زمان کافی و سخت افزار مناسب قابل هک شدن هست .
حتا روشهای 1 و 2 هم تضمین 100% ای برای حفاظت نمیدند و باید همواره روشها رو عوض کرد و پیچیده ترشون کرد - این یک جنگه و کسی که از یک روش مشخص و همیشگی استفاده میکنه شکست میخوره .

folaani
12-29-2013, 06:14 AM
نسخهء 2 آماده شد.

در این نسخه:

- چندتا باگ رفع شد.
بعضی باگها یه مقدار امنیتی هم بودن (نه در حد وخیم).

- اضافه شدن کپچا به فرم لاگین بصورت دینامیک.
بعد از اینکه یک نام کاربری رو در فرم لاگین وارد میکنید، بوسیلهء ایجکس از سمت سرور چک میشه که آیا برای لاگین به اون اکانت نیاز به کپچا هست یا نه، اگر بود اونوقت کپچا همون موقع بصورت دینامیک به فرم اضافه میشه و دیگه این داستان پیش نمیاد که کاربر یکبار فرم رو سابمیت کنه و فرم مجددا از سمت سرور با پیام خطایی که میگه نیاز به کپچا هم هست برگرده.

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

- امکان بخاطرسپاری لاگین (گزینهء remember me) در این نسخه بصورت فوق العاده قابل کانفیگ و منعطفی در اومده. الان میتونیم تعیین کنیم که کاربران بتونن چند و چگونه گزینه های بخاطرسپاری در فرم لاگین داشته باشن. مثلا میتونیم بخاطرسپاری برای 5 دقیقه، یک ساعت، یک هفته، یک ماه، یک سال و غیره رو بصورت یک منو بجای چک باکس remember me که در نسخه های قبلی وجود داشت داشته باشیم.
این منو میتونه یک یا هر تعدادی گزینه داشته باشه.
ضمنا گزینه های بخاطرسپاری کاربران عادی و ادمین از هم کاملا جداست و میتونن هرکدام آپشن های کاملا متفاوتی داشته باشن. به این میگن آخر انعطاف و قابلیت پیکربندی!
این زمانهای بخاطرسپاری در سمت سرور هم چک میشن و بنابراین قابل دور زدن توسط کاربران در سمت کلاینت نیستن. بطور مثال شما میتونید کاربران رو مجبور کنید که بخاطرسپاری لاگین اونها بیش از 8 ساعت نباشه.
برای اطلاع بیشتر، متغییرهای کانفیگ autologin_ages و admin_autologin_ages در فایل config_identify.php رو نگاه کنید.

- امکان دیگر اضافه شده اینه که اگر یادتون باشه موقعی که ثبت نام صورت میگرفت، کاربر بصورت خودکار تا زمان باز بودن مرورگر لاگین میشد. البته این لاگین خودکار بعد از ثبت نام رو میشه با false کردن متغییر login_upon_register در فایل config_register.php غیرفعال کرد.
الان یک متغییر دیگر هم به این جریان اضافه کردم بنام login_upon_register_age که میتونید باهاش طول عمر این لاگین خودکار رو تعیین کنید. مثلا تعیین کنید که کاربر فقط برای یک ساعت لاگین بمونه، یا هر زمان دیگری که میخواید، مثلا تا همون باز بودن مرورگر.

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

- طول عمر لاگین های خودکار که تا باز بودن مرورگر برقرار هستن الان بوسیلهء متغییر max_session_autologin_age در فایل config_identify.php قابل محدود کردن است. بنده مقدار پیشفرض رو روی 12 ساعت تنظیم کردم.
این گزینه هم از نظر امنیتی اهمیت داشت، چون کوکی هایی که طول عمرشون به اندازهء باز بودن مرورگر تعیین میشه عملا محدودیت زمانی ندارن و این به دلایلی که در گزینهء قبلی توضیح دادم میتونه خطرناک باشه.
الان میتونید برای عمر اینطور لاگین ها یک حداکثر تعیین کنید. اگر مرورگر کاربر زودتر از این زمان بسته شد، کوکی پاک شده و لاگین خودکار از بین میره، و اگر مرورگر همینطور باز بمونه بازهم طول عمر لاگین خودکار نمیتونه از زمان تعیین شده بیشتر بشه، چون در سمت سرور چک میشه.

خب این از ویژگیهای این نسخه!
فقط این هست که این نسخه رو خیلی تست نکردم چون نه دیگه وقت داشتم نه حس و حال و اولویتش رو.
use at your own risk :e105:
ولی خب نه اینکه هیچ تستی نکرده باشم؛ تاجایی که بنظرم صرف میکرد (واسه خودم) تست و باگیابی و باگزدایی کردم.
اگر باگی چیزی دیدید گزارش کنید خب!

kourosh_iran
07-20-2015, 07:00 AM
چند راه خیلی خوب برای محافظت از سالت وجود داره :

1 - سالتها رو در پوشه ای یک لول پشت شاخه روت به صورت فایلهای مجزا قرار بدید . (همون طور که میدونید فقط اسکریپت به پوشه های پشت روت دسترسی داره و اگر برنامه شما طوری هست که اجازه دسترسی به پشت روت رو میده با پیچیده ترین روشها هم نمیتونید از شر هکر ها در امان باشید چون احتمالن میتونند روی سرور شما اسکریپت خودشون رو اجرا کنند یا از طریق اکسپلویتها هر فایلی که میخواند رو از روی سرور شما دانلود کنند ، البته تنظیم مجوزهای دسترسی (Permission ها) هم خیلی مهمه) .

2 - در برخی جاها که حفاظت از اطلاعات خیلی مهمه یک سرور دیگه با IP جداگانه درنظر گرفته میشه و سالتها روی اون ذخیره میشند . دسترسی تمام IP ها به جز IP سروری که اسکریپت روش اجرا میشه به سرور ریموت بسته میشه . طبیعی هست که این روش هزینه اش هم بیشتره . حتا ممکنه که بخشی از سالت روی یک ریموت سرور و بخش دیگرش روی یک ریموت سرور دیگه باشه یا اصلن بیش از یک سالت روی بیش از یک ریموت سرور باشه .


هه هه :e057:
دوست عزیز نیازی نیست این همه سالت رو جای دیگه ذخیره کنید.
این فرمول رو ببین:

hash(pepper+salt+password)
pepper همون سالت ثابت است که در هش تمام پسوردها دخالت میکنه. همونطور که میبینی هر پسورد سالت رندوم خودش رو هم داره.
کافیه فقط یک رشته، یعنی سالت ثابت (pepper)، در جای امنی غیر از دیتابیس ذخیره بشه. در این صورت هکر نمیتونه هیچ کاری با هش ها بکنه، اقدام به Brute-force بکنه، مگر اینکه سالت ثابت رو داشته باشه. دیگه چه نیازی هست که مثلا صدهزار اکانت داریم صدهزارتا سالت هم روی سرور دیگری ذخیره کنیم؟ اگر هکر به سرور دیگر نتونه دسترسی داشته باشه نتونه سالت ثابت رو بدست بیاره نمیتونه هیچ غلطی بکنه، و اگر بتونه و دسترسی بدست بیاره که دیگه فرقی نمیکنه شما اونجا چی رو ذخیره کرده باشی تمام سالتها باشن یا فقط یک سالت ثابت.


3 - من دیده ام که برخی از برنامه نویسان حتا خود هش رو هم روی یک سرور دیگه نگهداری میکنند.
4- تا جای ممکن بهتره که دسترسی فیزیکی به هیچ کدام از سرورها وجود نداشته باشه و حتا بهتره سرورها در یک پایگاه واحد نباشند - که البته این دیگه از نکات برنامه نویسی نیست :e056:

دست آخر بهتره از یکی روشهای یک یا 2 در اسکریپتتون بهره ببرید چون هر هشی با صرف زمان کافی و سخت افزار مناسب قابل هک شدن هست .
حتا روشهای 1 و 2 هم تضمین 100% ای برای حفاظت نمیدند و باید همواره روشها رو عوض کرد و پیچیده ترشون کرد - این یک جنگه و کسی که از یک روش مشخص و همیشگی استفاده میکنه شکست میخوره .

معمولا این روشها در عمل صرف نمیکنه و معقول نیست. گذشته از اینکه اصولا اینکه فرض کنید با اضافه کردن یک سرور دیگر و نیاز به تبادل اطلاعات بین این دو سرور، امنیت لزوما خیلی بالا میره، لزوما فرض درستی نیست. چطوری محاسبه چطوری اثباتش میکنید؟ هر سرور خودش یک نقطهء شکست اضافه میکنه چون میتونه نقاط ضعف و حفره های امنیتی و امکان دسترسی افراد دیگری رو داشته باشه. ارتباط بین دو سرور و تبادل شدن اطلاعات حساس از کانال ارتباطی هم خودش نقطهء شکست دیگری رو ایجاد میکنه و امکان دسترسی غیرمجاز این وسط، که البته میشه با استفاده از رمزنگاری اطلاعات رد و بدل شده تاحد زیادی این ضعف رو برطرف کرد، ولی بهرحال بحث ضعف بیشتر در برابر حمله های DOS هم هست، چون صرف بستن راه ارتباط برنامه و نرسیدن یا خراب کردن اطلاعاتی که نیاز داره میتونه باعث اختلال در سرویس دهی و در نتیجه DOS بشه.
از طرف دیگر بهرحال وابسته شدن کارکرد برنامه به چند سرور و ارتباط بین اونها و ارتباطات شبکه ای یا اینترنتی، از نظر سرعت و پرفورمنس و نیز پایداری و Reliability، خوب نیست، چون اگر قبلا 2% احتمال خرابی چیزی و از کار افتادن سرور و سایت بوده حالا احتمال خرابی بخشهای مربوط به سرور دیگر و تمام کانال های ارتباطی و سیستمهای درگیر هم بهش اضافه میشه و این درصد بالاتر میره (جمع احتمال خرابی تمام سرورها و اتصالات شبکه و سیستمهای درگیر).
و این همه هزینه بخاطر چی؟ بخاطر اینکه امنیت هش ها رو یک مقدار بالا ببریم که چندان هم زیاد نیست و نمیشه دقیق محاسبه و ثابت کرد و مطمئن بود.
در برنامه ها معمولا اونقدری نقاط ضعف و مجهولات وجود دارن که این همه هزینه و محکم کاری در فقط یک بخش، معقول نیست. حداقل نه در برنامه های معمولی در مقیاس معمولی.
منکه میگم حتی سالت ثابت رو هم روی همون سرور ذخیره کنید، ولی خب جدای از هش ها در دیتابیس باشه و ترجیحا در مکانی که تاحدی حفاظت شده باشه. من در برنامهء خودم سالت ثابت رو صرفا در فایلهای کد خود برنامه قرار دادم، ولی متخصصان توصیه میکنن که جای حفاظت شده تری باشه یک سیستم و کنترل دسترسی درست حسابی تری داشته باشه، ولی خب چنین چیزی ساده نیست و بنظر من برای برنامه های معمولی همون حد معقوله و کفایت میکنه چون بیشترش دیگه دردسر و هزینه های جانبی زیاد داره صرف نمیکنه.

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

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

ولی خب یه عده امثال شما هستن دیگه اینقدر ادعاشون میشه اینقدر سطحی هستن اینقدر غرور دارن که اینطور عمل نمیکنن و خودسر و خودمحور هستن.


من دیده ام که برخی از برنامه نویسان حتا خود هش رو هم روی یک سرور دیگه نگهداری میکنند.
بیشتر برنامه نویسان تخصص درست و حسابی در امنیت و رمزنگاری ندارن دوست عزیز! نمیدونن اصولش چیه تئوری و علمش چیه حتی از تجربیات در این زمینه هم اطلاع کافی ندارن. کارهایی میکنن بیهوده یا کارهایی که نسبت به هزینشون اصلا صرف نمیکنن، و حتی گاهی بجای اینکه امنیت بر اساس تصور اونا بالاتر بره پایین تر هم میاد!

sonixax
07-21-2015, 01:35 AM
از کم آوردنت! گریه زاریت! بچه بازیت و اینکه میبینیم به این حال و روز انداختمت لذت میبرم :e00e:
در ضمن هک کردن MD5 بنا بر فتوای آخوند چینی فراموش نشود :e412:

kourosh_iran
07-21-2015, 05:27 AM
از کم آوردنت! گریه زاریت! بچه بازیت و اینکه میبینیم به این حال و روز انداختمت لذت میبرم :e00e:
در ضمن هک کردن MD5 بنا بر فتوای آخوند چینی فراموش نشود :e412:
جالبه چون حرفی رو زدی که دقیقا برعکس من باید بهت بزنم.
چون واضحه این وسط کسی که به یاوه گویی و ابتذال محض آشکار رسیده کیه!
من تاحالا مجبور نشدم حتی یک جمله یاوه و چرند و حرف غیرمنطقی بزنم. این شما بودی که زیر دفاع از غرور مسخرهء خودت زاییدی. ناخوشایندترین و بدترین شکل مثل خر توی گل موندن هم همینه خب جانم :e405:

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

ولی تو مثل اینکه پوستت حسابی کلفت مونده تاحالا :e40d:
هه هه!
حالا فکر میکنی مثلا به چی رسیدی؟!

kourosh_iran
07-21-2015, 07:21 AM
تازه این بحثها منو قوی تر کرد افکارم منسجم تر شد دانسته هام دقیقتر و گسترده تر مستندتر شد.
باور میکنی این چند روز تعطیلی حتی یکسری مقالهء ویکیپدیا خوندم از اونایی که قبلا هرچی میخوندم چیز زیادی دستگیرم نمیشد، اما دیدم دارم یه چیزایی میفهمم انگار خیلی روشنترم. بخشی از این مقالات در زمینهء ریاضی و فیزیک کوانتم بود بخشی هم در زمینهء دانش تئوریک علوم رایانه که بحثهای جالب و مهمی داره که قبلا ازشون تقریبا هیچی سردر نمی آوردم؛ بهرحال همشون بهم یجورایی ربط داشتن (بخصوص ریاضی به علم کامپیوتر).
نمیدونم چرا، ولی انگار قدرت ذهنم هرچند وقت یکبار بیشتر میشه دانش و بینش و ظرفیتم هوشم زیادتر میشه. حتی ریاضیات که ازش مقداری ترس داشتم، خوشم میاد دارم باهاش مانوس میشم خیلی بهتر از قبل از نظر درک بنیادی میفهمم!

فکر کردم شاید این قضیه اخیر یه ربطی به این بحث طولانی سخت با فردی مثل تو داشته باشه :e105:

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

بقول طرف میگه آنچه مرا نکشد مرا قویتر خواهد ساخت!

sonixax
07-23-2015, 01:12 AM
باز هم که شروع کردی زیاده نویسی! زیر شعله رو میخوای کم کنم کمتر جوش بزنی ؟
کسی که میره تاپیک زیر خاکی میاره بالا اون هم خطاب به کس دیگه ای که در بحثهای دیگه باهاش شرکت داره مشخصن درجه حرارتش از 100 هم زده بالاتر:)))
پس یک لیوان آب تگری بنوشید جانم!

kourosh_iran
07-23-2015, 08:10 AM
باز هم که شروع کردی زیاده نویسی! زیر شعله رو میخوای کم کنم کمتر جوش بزنی ؟
کسی که میره تاپیک زیر خاکی میاره بالا اون هم خطاب به کس دیگه ای که در بحثهای دیگه باهاش شرکت داره مشخصن درجه حرارتش از 100 هم زده بالاتر:)))
پس یک لیوان آب تگری بنوشید جانم!
برای من این حرفا اهمیتی نداره. زیرخاکی غیرزیرخاکی! اینا همش کس شعره و درمورد آدمهایی مثل من هم صدق نمیکنه. من از الگو و کلیشه ها و القاهای دیگران پیروی نمیکنم. این بخاطر قدرت روان و شخصیت مستقلی هست که دارم و زیرکی و باریک بینی و دانش و بینش و قدرت ذهنی بالای من!
این تاپیک رو هم خودت توی بحث اونور لینکش رو دادی من نگاهی کردم یادم افتاد اینجا هم چرند گفتی گفتم خوب سوژه ای برای اینکه بی سوادیت رو به رخت بکشم و به دیگران هم نشون بدم که تو چقدر کم سوادتر کم صلاحیت تر از منی. سواد و صلاحیت من در این موضوعات (امنیت و رمزنگاری) از تو بالاتره.
تو با همون آواتارت تناسب داری که باید بری دلقکی چیزی بشی، مثل همین بحثها که توش نشون دادی چقدر دلقکی! در عمل پخی نیستی! میفهمی؟ قصد من نشون دادن این به خودت و دیگران بود.
از دید من اینا همش یک نبرده. من حتی وقتی چیزی رو مطالعه میکنم در حال تلاش برای درک و یادگیری هستم، این برام یک نبرد محسوب میشه. شاید تقریبا همه چیز به چشم من نبرده. سراسر زندگی یک نبرد همه جانبه است. این کاراترین دیدگاه واقعی ترین دیدگاهی است که بهش رسیدم!
و این تاپیک هم زیرخاکی هم که باشه بهرحال سنگر فراموش شدهء دشمن بحساب میاد که اگر نقطهء ضعفش همونجا باشه اتفاقا شما باید پیدا کنی از همونجا بهش ضربه بزنی. قدیمی و جدید نداره. این تنها دیدگاه منه! هرجای دیگه هم شواهد و اسنادی از بی سوادیت پیدا کنم از ور ور مفت کردنت پیدا کنم، رو میکنم! خیلی ساده. به دلیلی روشن و منطقی. چون این یک نبرده که باید به دشمن از هرجا میتونی به هر شکلی ضربه بزنی. همزمان در چند جبهه هم میتونه باشه.
تو منو خیلی دست کم گرفتی.
البته در جریان این بحثها باید متوجه شده باشی، حداقل تاحدی، هرچقدر هم که خنگ و نادان و مغرور بوده باشی، که با آدم معمولی و درپیتی طرف نیستی!

kourosh_iran
07-23-2015, 08:18 AM
البته فکر نکن که حالا تو و این بحث واسه من خیلی مهم هستید.
کاری که من با این بحثها میکنم در اصل برای اهداف شخصی خودمه، میدونم که بهرحال قوی تر میشم، از نظر روانی از نظر هوش و دانش و غیره، و چیزها برای خودم بهتر روشن میشه و مطمئن تر میشم، و محیط و آدمهای اطرافم رو بهتر میشناسم و خودم رو روشن تر و مطمئن تر میتونم با اونا قیاس کنم بفهمم که واقعا من کجا هستم چطور هستم و اونا کجا هستن چطور هستن.
اطلاعات و بینش و احاطه به محیط و جایگاه خود در محیط، مسلما یک چیز مهم و مفید بلکه حیاتیه در زندگی و در هر نبردی.
برای من تمام اینا یک بازی فکری و نبرد مجازی بزرگه. که البته تمرین و قیاسی از نبردهای واقعیه.
و تو برای من الان یک حریف تمرینی بیشتر نیستی. بخصوص که بقدر کافی پیروزی من ثابت شده (حداقل برای خودم که روشنه! حالا تو میخوای قبول نکن دیگران هم نفهمن به درک) و بقدر کافی برتری خودم رو بر تو دیدم و تاجایی که جا داشت کوبیدمت. استحکامات تو الان کاملا دفاعیه دیگه قدرت حمله جرات حمله نداری و از اولش هم قدرت رو نداشتی ولی توهم بیشتری داشتی. این کاهش روحیه و پذیرش شکست رو گرچه صریحا اعتراف نکنی، ولی من در عکس العمل ها و گفتارت شواهدش رو میبینم و میخونم!

sonixax
07-23-2015, 11:44 PM
حرفها و خودستایی هات خسته کننده شده!
باشه بابا تو خفن!