بنده در اینجا یک بحثی با شخصی (ادمین اون فروم) داشتم:
https://goo.gl/4kfTcm
اما متاسفانه ایشون حرفهای غیرمنطقی زدن و بنده رو هم اخراج کردن.
البته قبول دارم بهشون پرخاش و توهین کردم و از این بابت عذرخواهی میکنم، ولی باعث عصبانیت بنده بی منطقی خودشون بوده که اینجا به وضوح نشون میدم و ثابت میکنم!
ایشون یک کلاس و کد PHP برای رمزنگاری گذاشتن که بنده بخاطر مطالعات و تخصصی که دارم سریعا فهمیدم اشکالات و اشتباه و ضعف های قابل توجهی داره که براشون توضیح هم دادم، و دونه دونهء چیزهایی رو که ادعا کردم میشه از منابع تخصصی ثابت کرد، مثلا میتونیم در crypto.stackexchange.com سوال کنیم، البته اگر همونجا یا توی گوگل هم سرچ کنیم بنظرم منابع و مطالب کافی از قبل موجوده، هرچند متاسفانه هر روز بیشتر از پیش متوجه میشم که سطح علم و سواد هیچکس در این مملکت اونقدری نیست که بتونه از این همه منابع و مطالب گسترده استفادهء زیادی بکنه، چون از فهم کامل و دقیق خیلی موارد ناتوان هستن.

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

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

حالا در ادامه بحث جالبتر از این هم شد. ایشون منبع کدهایی رو که درج کرده بودن ارائه دادن: http://stackoverflow.com/questions/3...ncrypt-decrypt
ولی در همین منبع به وضوح اشاره کرده که این کدها ناقص و غیراصولی و ناامن هستن، بالاش این تیتر رو بصورت برجسته درج کرده:
Warning: insecure code follows
ترجمه: «هشدار: کدهای زیر ناامن هستند.»
حالا نمیدونم ایشون این متن رو موقعی که اون کدها رو برداشتن دیدن یا نه؛ شاید این متن رو بعد اونجا اضافه شده (ظاهرا متن بعدا ویرایش و تکمیل شده) و موقعی که ایشون کدها رو برداشته این هشدارها اونجا نبودن.

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

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

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

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