# زبان های اسکریپتی > Python >  پروژه نظارت و کنترل از راه دور

## SZsXsZS

در محل کارم یکسری Thin client داریم که از یک سرور مرکزی استفاده میکنن. یوقتا نیاز هست آدم کارهایی انجام بده، بخاطر همین فکر کردم یه برنامه ای بنویسم که بدون اینکه نیاز به حضور فیزیکی سر هر سیستم باشه بتونیم روشون نظارت و کنترل راحتی داشته باشیم. پس این برنامه رو نوشتم که البته در ابتدا فقط قابلیت استفاده local رو داشت، یعنی میتونستی از روی سرور کلاینت ها رو مدیریت کنی، ولی بعدا گفتم پروژهء جالبیه و کاربردی هم هست، بخاطر همین امکان دسترسی از راه دور (اینترنت) رو هم بهش اضافه کردم.
این برنامه عملا تست شده و بخوبی کار میکنه.
ضمنا چون بنده تخصص خوبی در رمزنگاری و امنیت دارم، این برنامه از روشهای رمزنگاری حرفه ای بقدر کافی استفاده میکنه و بنابراین امنیت خیلی خوبی داره. تمام ارتباطات دو طرف با سرور واسط که نقش Relay رو ایفا میکنه با AES-128-CBC+HMAC-SHA256 رمز میشن. علاوه بر این، ارتباط بین دو طرف بصورت End to end با کلید جداگانه ای رمز میشه و بنابراین حتی اگر سرور واسط امن نباشه و هکر بهش نفوذ کنه یا هاستینگ قابل اعتماد نباشه بازم امنیت برنامه مخدوش نمیشه. البته مسلما کسی که به سرور واسط دسترسی پیدا کنه میتونه با خرابکاری باعث از کار افتادن این برنامه بشه، ولی نمیتونه هیچ اطلاعات رد و بدل شده ای رو بخونه و هیچ فرمانی به کلاینت ها بده.
ضمنا این برنامه در برابر Replay attack هم امن شده (با استفاده از counter و تشکیلات دیگری).
خلاصه از لحاظ امنیت خیال آدم میتونه خیلی راحت باشه.
باوجودی که برنامه های شناخته شده ای مثل Team Viewer هم در بعضی کاربردها میتونن بجای این برنامه استفاده بشن اما این برنامه هم مزایای خاص خودش رو داره مثل اینکه میتونه بصورت پنهان نصب و استفاده بشه، در بدترین شرایط اتصال اینترنت که کیفیت و سرعت خیلی کم باشه که با Team Viewer در چنین شرایطی نمیشه کار کرد کار میکنه (چون فقط کافیه هر چند ثانیه بتونه مقدار کمی دیتا رو با استفاده از HTTP منتقل و دریافت کنه و نیازی به یک اتصال پرسرعت و با کیفیت نداره)، سبک و سریع هست، میشه درصورت نیاز امکانات سفارشی خاصی رو بهش اضافه کرد، و یکسری مزایای جنبی دیگه. ضمنا هرچندتا Thin client که به سیستم سرور مرکزی وصل شده باشن میشه با همین یک برنامه و یک نصب نظارت و کنترل کرد.

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

بهرحال این یک کار خاص و غیرکلیشه ای و غیر روتین هست که مشابه به اون شکل نداره بنظرم. ولی بخاطر همین قیمتش هم مشخص نیست. بهرصورت بنظرم نوشتن اینطور برنامه کار هرکسی نیست و درش از دانش های خاص متنوعی بهره برده شده. بنظر شما اینطور کارها رو چطوری باید قیمت گذاری کرد مثلا این برنامه الان اگر کسی بخواد بخره یا سفارش بده چقدر قیمت داره؟  :متفکر: 

proj.PNG
این برنامه با پایتون نوشته شده، و بخش کوچک روی هاست واسط هم با PHP.

----------


## golbafan

چون زحمت کشیدی 5000 تومان خوبه
وگر نه برنامه های بهتر و رایگان و اپن سورس زیادی هست در این مقوله

این رو گوگل کن
remote client control open source

----------


## SZsXsZS

> چون زحمت کشیدی 5000 تومان خوبه
> وگر نه برنامه های بهتر و رایگان و اپن سورس زیادی هست در این مقوله
> 
> این رو گوگل کن
> remote client control open source


دلقک مثل تو زیاد هست  :لبخند: 
در بحث هم که اشتباه میکنی بعد میگی میخواستم تو رو محک بزنم  :قهقهه: 
کلا آدمی هست دروغگویی و حقه بازی واست عادیه.
سواد آنچنانی هم نداری و باد توخالی هستی!

----------


## negative60

> پس این برنامه رو نوشتم که البته در ابتدا فقط قابلیت استفاده local رو داشت، یعنی میتونستی از روی سرور کلاینت ها رو مدیریت کنی، ولی بعدا گفتم پروژهء جالبیه و کاربردی هم هست، بخاطر همین امکان دسترسی از راه دور (اینترنت) رو هم بهش اضافه کردم.


توی سوکت پرگرمینگ هیچ فرقی‌ نمی‌کنه برنامه روی لوکال باشه رو شبکه محلی یا اینترنت پس در واقع هیچ کاری به جز اینکه آیپی لوکال رو لیستین نکنی‌ و بجاش یه ۰ بذاری انجام نشده




> ضمنا چون بنده تخصص خوبی در رمزنگاری و امنیت دارم، این برنامه از روشهای رمزنگاری حرفه ای بقدر کافی استفاده میکنه و بنابراین امنیت خیلی خوبی داره. تمام ارتباطات دو طرف با سرور واسط که نقش Relay رو ایفا میکنه با AES-128-CBC+HMAC-SHA256 رمز میشن. علاوه بر این، ارتباط بین دو طرف بصورت End to end با کلید جداگانه ای رمز میشه و بنابراین حتی اگر سرور واسط امن نباشه و هکر بهش نفوذ کنه یا هاستینگ قابل اعتماد نباشه بازم امنیت برنامه مخدوش نمیشه. البته مسلما کسی که به سرور واسط دسترسی پیدا کنه میتونه با خرابکاری باعث از کار افتادن این برنامه بشه، ولی نمیتونه هیچ اطلاعات رد و بدل شده ای رو بخونه و هیچ فرمانی به کلاینت ها بده.
> ضمنا این برنامه در برابر Replay attack هم امن شده (با استفاده از counter و تشکیلات دیگری).
> خلاصه از لحاظ امنیت خیال آدم میتونه خیلی راحت باشه.


پروتکلهای SSL/TSL استاندارد برای امن کردن یک ارتباط تو شبکه غیر ایمن ساخت شده اند کسی‌ خودش پروتکل ابداع نمی‌کنه مگر اینکه واقعا دانش ودلیل خوبی‌ داشته باشه, دوم اینکه کسی‌ که هنوز چیزی ارائه نداده نمیتونه ادعا کنه که برنامه من کاملا امن هست! حداقل کاری که میتونی‌ کنی‌ اینه که یک گراف از روال ارتباط بین سرور و کلاینت بذاری




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


پس پروژه سری و فوق امنیتی بوده! کسی‌ که ادعا می‌کنه برنامه امن هست چرا باید یه برنامه ریموت لاگ, ریبوت..، که ساختنش چند روز زمان میبره رو مخفی‌ نگه داره؟

----------


## SZsXsZS

> توی سوکت پرگرمینگ هیچ فرقی‌ نمی‌کنه برنامه روی لوکال باشه رو شبکه محلی یا اینترنت پس در واقع هیچ کاری به جز اینکه آیپی لوکال رو لیستین نکنی‌ و بجاش یه ۰ بذاری انجام نشده


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




> پروتکلهای SSL/TSL استاندارد برای امن کردن یک ارتباط تو شبکه غیر ایمن ساخت شده اند کسی‌ خودش پروتکل ابداع نمی‌کنه مگر اینکه واقعا دانش ودلیل خوبی‌ داشته باشه, دوم اینکه کسی‌ که هنوز چیزی ارائه نداده نمیتونه ادعا کنه که برنامه من کاملا امن هست! حداقل کاری که میتونی‌ کنی‌ اینه که یک گراف از روال ارتباط بین سرور و کلاینت بذاری


خب SSL همینطور الکی و ساده هم نیست و روی هر هاستی نمیشه بسادگی راه انداخت. درحالیکه برنامهء من میتونه با هاستهای اشتراکی ارزان و بدون نیاز به هیچ کاری و تهیه و نصب و راه اندازی SSL و این حرفها کار کنه. اصولا نیازی به SSL نداره براش هیچ فرقی نمیکنه چون امنیت کامل داره خودش و از روش رمزنگاری مستقلی استفاده میکنه. همین SSL که میگید خودش اینقدر کامل نیست، مثلا در SSL شما به یک CA اعتماد میکنید (مراجعی که گواهینامهء دیجیتال رو ازشون تهیه میکنید)، البته از self signed certificate هم میشه استفاده کرد، که این مراجع خودشون یک نقطهء مبهم و ضعف احتمالی هستن، دوما SSL امنیت داده ها رو فقط در مسیر تامین میکنه و روی خود سرور امنیتی رو تامین نمیکنه، ولی برنامهء من چون از رمزنگاری P2P استفاده میکنه و سرور فقط نقش واسطه رو داره، و پروتکلش طوری طراحی شده که به سرور هیچگونه اعتمادی نشده، حتی اگر سمت سرور بصورت کامل دست نفوذگر بیفته عملا نمیتونه هیچ کاری بکنه (البته طبیعتا میتونه برنامه رو از کار بندازه، ولی نمیتونه هیچ اطلاعاتی رو بخونه یا جعل کنه و عملی رو در سمت کلاینت ها موجب بشه).




> پس پروژه سری و فوق امنیتی بوده! کسی‌ که ادعا می‌کنه برنامه امن هست چرا باید یه برنامه ریموت لاگ, ریبوت..، که ساختنش چند روز زمان میبره رو مخفی‌ نگه داره؟


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

----------


## negative60

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


اگر به درستی ارتباط رو هندل کنید هیچ نیازی به استفاده از سیستم انتقال فایل ویندوز نیست, حتما می‌دونید که تمام ارتباطات بین شبکه ایی و داخل شبکه روی پرتوکل IP هست و انتقال فایل در شبکه از طریق TCP انجام می‌شه پس شما فقط برای اینکه خودتون رو درگیر سوکت نویسی نکنید از سیستم انتقال فایل شبکه استفاده کردید پرفرمنس و پایداری ۱۰۰% به نویسنده برنامه بستگی داره و سرعت انتقال فایل هم به عوامل مختلفی‌ بستگی داره که یک قسمتش بر میگرده به روشی‌ که نویسنده برای انتقال فایل انتخاب کرده که اگر از روشهای چند ارتباطی‌ استفاده کنه می‌تونه از تمام پهنای باند شبکه برای انتقال فایلهای حجیم استفاده کنه که سرعت انتقال فایل برنامه می‌تونه سرعت بیشتری نسبت به انتقال فایل ویندوز داشته باشه





> خب SSL همینطور الکی و ساده هم نیست و روی هر هاستی نمیشه بسادگی راه انداخت. درحالیکه برنامهء من میتونه با هاستهای اشتراکی ارزان و بدون نیاز به هیچ کاری و تهیه و نصب و راه اندازی SSL و این حرفها کار کنه. اصولا نیازی به SSL نداره براش هیچ فرقی نمیکنه چون امنیت کامل داره خودش و از روش رمزنگاری مستقلی استفاده میکنه. همین SSL که میگید خودش اینقدر کامل نیست، مثلا در SSL شما به یک CA اعتماد میکنید (مراجعی که گواهینامهء دیجیتال رو ازشون تهیه میکنید)، البته از self signed certificate هم میشه استفاده کرد، که این مراجع خودشون یک نقطهء مبهم و ضعف احتمالی هستن، دوما SSL امنیت داده ها رو فقط در مسیر تامین میکنه و روی خود سرور امنیتی رو تامین نمیکنه، ولی برنامهء من چون از رمزنگاری P2P استفاده میکنه و سرور فقط نقش واسطه رو داره، و پروتکلش طوری طراحی شده که به سرور هیچگونه اعتمادی نشده، حتی اگر سمت سرور بصورت کامل دست نفوذگر بیفته عملا نمیتونه هیچ کاری بکنه (البته طبیعتا میتونه برنامه رو از کار بندازه، ولی نمیتونه هیچ اطلاعاتی رو بخونه یا جعل کنه و عملی رو در سمت کلاینت ها موجب بشه).


سایت‌هایی‌ هستند که گواهینامه معتبر رایگان ارائه میدن پس به جز داشتن یک دامین و هاست هزینه ایی نمیتونه داشته باشه, همونطور که عرض کردم تا زمانی‌ که مستندات یا گراف از نحوه امن کردن ارتباط ارائه ندادید نمیتونید ادعا کنید ارتباط برنامتون امن هست 





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


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

----------


## SZsXsZS

> همونطور که عرض کردم اگر از امن بودن برنامه اطمینان داشتید هیچ دلیلی‌ بر مخفی‌ بودنش وجود نداشته نه اینکه چرا رایگان در اختیار دیگران قرار ندادید! هدف این دست از سایت‌ها و فرومها این هست که در مورد مسائل فنی‌ صحبت بشه نه قضاوت کردن دیگران البته گاهی ممکن هست در مورد مسائل حاشیه ایی هم صحبت بشه ولی‌ این درست نیست


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

حالا شما که میگید برنامهء مهمی نیست و نمونش ریخته دیگه چرا اینقدر وسوسه میکنید که منتشرش کنم؟  :متفکر: 
شما برید از همونا که ریخته خب استفاده کنید. برنامه منم اصلا امن نیست به دردی نمیخوره  :لبخند:

----------


## golbafan

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


مشکل جنابعالی اینه که خیلی خیالت راحته و با معلومات اندکی که در زمینه ارتباطات شبکه داری فکر میکنی کارت امنیت داره. این روش point to point که شما تو برنامت بکار میبری بدترین نقطه ضعفیه که داره. اگر قراره هر دو کامپیوتر مال خودت باشه که هیچی ولی اگر قرا باشه یکی بیاد به این برنامه اعتماد کنه و اون رو روی یک رایانه هدف بخواد کار بزاره باید یکی مثل خودت باشه... :قهقهه: 
بطور خلاصه بخوام بگم: خیلی راحت و بدون درد سر و فقط با نصب یک نرم افزار net limiter میشه ip و پورت مورد استفاده جنابعالی رو استخراج کرد و اونوقت سیستم خودت میشه هدف حملات!!!





> حالا شما که میگید برنامهء مهمی نیست و نمونش ریخته دیگه چرا اینقدر وسوسه میکنید که منتشرش کنم؟ 
> شما برید از همونا که ریخته خب استفاده کنید. برنامه منم اصلا امن نیست به دردی نمیخوره


نه اتفاقا الان nsa داره در به در دنبال یک همچین برنامه ای میگرده :قهقهه: 

چون با پایتون نوشتی مثال ها رو از پایتون برات میزارم وگرنه نمونه های C++‎خیلی بیشتر و بهتر هستند که خودت زحمت سرچش رو بکش

پروژه های معمولی:

http://homepage.hispeed.ch/py430/python/pyvncviewer.zip

http://homepage.hispeed.ch/py430/pyt...aver-0.3.2.zip

http://homepage.hispeed.ch/py430/python/SMB_reroute.py


پروژه های حرفه ای و کامل:

https://github.com/citronneur/rdpy

https://github.com/n1nj4sec/pupy

----------


## golbafan

> که اگر از روشهای چند ارتباطی‌ استفاده کنه می‌تونه از تمام پهنای باند شبکه برای انتقال فایلهای حجیم استفاده کنه که سرعت انتقال فایل برنامه می‌تونه سرعت بیشتری نسبت به انتقال فایل ویندوز داشته باشه


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

----------


## golbafan

> دلقک مثل تو زیاد هست 
> در بحث هم که اشتباه میکنی بعد میگی میخواستم تو رو محک بزنم 
> کلا آدمی هست دروغگویی و حقه بازی واست عادیه.
> سواد آنچنانی هم نداری و باد توخالی هستی!



قیمت خواستی قیمت دادم...
اونهم فقط بخاطر حمایت از تولید ملی. وگرنه نمونه های اپن سورس (لینک های GitHub) که مثال زدم مدل های بهتری برای استفاده و توسعه ارائه میکنن...

----------


## negative60

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


خوب مشخصه به جز replay attack از انواع حملات دیگه با خبر نیستید تو پروژه‌های واقعی‌ اینکه از نظر خودتون برنامتون امن باشه اهمیتی نداره چون هرکس با سطح دانشی که داره به یک موضوع نگاه می‌کنه
شما اگر سورس برنامه تون هم قرار بدید برای من کاملا بی‌ استفاده هست هم به خاطر زبان برنامه نویسی که به راحتی‌ دیکامپایل می‌شه، هم اینکه به جز باگ‌های احتمالی‌ طراحی و اجرایی از نظر من روشی‌ که انتخاب کردید صحیح نیست.


موفق باشید

----------


## SZsXsZS

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

----------


## Bad Programmer

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

----------


## Bad Programmer

> مشکل جنابعالی اینه که خیلی خیالت راحته و با معلومات اندکی که در زمینه ارتباطات شبکه داری فکر میکنی کارت امنیت داره. این روش point to point که شما تو برنامت بکار میبری بدترین نقطه ضعفیه که داره. اگر قراره هر دو کامپیوتر مال خودت باشه که هیچی ولی اگر قرا باشه یکی بیاد به این برنامه اعتماد کنه و اون رو روی یک رایانه هدف بخواد کار بزاره باید یکی مثل خودت باشه...
> بطور خلاصه بخوام بگم: خیلی راحت و بدون درد سر و فقط با نصب یک نرم افزار net limiter میشه ip و پورت مورد استفاده جنابعالی رو استخراج کرد و اونوقت سیستم خودت میشه هدف حملات!!!


با توجه به اینکه کلاینت و سرور آیپی استاتیک ندارن و حتی اگر ایپی استاتیک هم داشتند یا از همون آیپی داینامیک قرار باشه استفاده کنن با توجه به وجود NAT، ارتباط pear to pear به این سادگی اونم با استفاده از http نیست. مگر اینکه شرایط بسیار خاصی رو برای کلاینت و سرور درنظر بگیریم و یا در نظر بگیریم کاربری که قراره استفاده کنه از این نرم افزار اینجور چیزا حالیش باشه و بتونه کانفیگ کنه. به قیافه این نرم افزار هم نمیخوره که همچین چیزی رو پیاده کرده باشه  :لبخند گشاده!: 
وقتی قراره هر دو کلاینت و سرور فقط با سرور واسط ارتباط برقرار کنن هیچ کدوم لزومی نداره که ای پی اون یکی رو بدونه.
پس این ضعف امنیتی که گفتید روی این نرم افزار وجود نداره  :لبخند گشاده!:

----------


## SZsXsZS

> البته فکر میکنم اصلا تبادل کلید ندارید و کلید رو خود کاربر سمت سرور و کلاینت دستی وارد میکنه که در اینصورت یکم ناامید میشم از تخصصتون.


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

----------


## SZsXsZS

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

----------


## Bad Programmer

> گفتم که سیستمها دست خودمه چه نیازی هست به درگیر شدن با مشکلات و پیچیدگی ها تبادل کلید؟


وقتی ادعا میکنید که کار بسیار تخصصی ای انجام دادید که هر کسی علم و تخصصش رو نداره، وقتی ادعای امنیت بسیار بالا دارید و میگید: "ارتباط بین دو طرف بصورت End to end با کلید جداگانه ای رمز میشه" و اومدید همچین تاپیکی زدید که نظر ما رو بدونید آیا کسی حق نداره انتظار تبادل کلید داشته باشه و از شما در این مورد سوال کنه؟
چون تا اینجا که کار خاصی انجام نداده اید گفتم شاید تو تبادل کلید از تخصصتون استفاده کردید و در ادعاتون به اون اشاره دارید. ارسال HTTP Request به یک هاست و استفاده از AES ابدا کار شاخی نیست.




> راستی چی شده اخیرا با هرکس برخورد کردم از توزیع کلید صحبت کرده 
> فک کنم یه استادی چیزی درس راجع به توزیع کلید داده یا جایی مقالهء فارسی ای چیزی در این زمینه منتشر شده حالا همتون یاد گرفتید میگید توزیع کلید توزیع کلید 
> ببینم حالا شما چیزهای دیگر رو واقعا درست و حسابی بلدید که کارتون فقط مونده همین توزیع کلید؟





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


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

----------


## SZsXsZS

> اومدید همچین تاپیکی زدید که نظر ما رو بدونید آیا کسی حق نداره انتظار تبادل کلید داشته باشه و از شما در این مورد سوال کنه؟


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




> استفاده از AES ابدا کار شاخی نیست


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

----------


## rahmatipoor

> دلقک مثل تو زیاد هست 
> در بحث هم که اشتباه میکنی بعد میگی میخواستم تو رو محک بزنم 
> کلا آدمی هست دروغگویی و حقه بازی واست عادیه.
> سواد آنچنانی هم نداری و باد توخالی هستی!


شما هم آدمی هستی که بی ادبی کردن به دیگران واست عادیه

چند جای دیگه هم دیدم که میگم. 

مثلا این جملات :

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



فقط میتونم بگم که برات متاسف هستم

----------


## prans68

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

----------


## SZsXsZS

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


خخخ میبینم که بدجور بعضیا رو عصبانی کردم  :قهقهه: 
خب حقیقت رو رک میگم میکوبم توی صورت دیگران، بخاطر همین هم افرادی از دستم عصبانی میشن، یا منافعشون در خطر میفته بهرحال اعتبار و شغل و منبع درآمدشون هم شاید به خطر میفته!

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

----------


## golbafan

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

نرم افزارت رو معرفی کردی و خواستی بدونی قیمتش از نظر دیگران چنده...
انتظار نداشته باش همه بیان به به چه چه کنند...

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

----------


## golbafan

> با توجه به اینکه کلاینت و سرور آیپی استاتیک ندارن و حتی اگر ایپی استاتیک هم داشتند یا از همون آیپی داینامیک قرار باشه استفاده کنن با توجه به وجود NAT، ارتباط pear to pear به این سادگی اونم با استفاده از http نیست. مگر اینکه شرایط بسیار خاصی رو برای کلاینت و سرور درنظر بگیریم و یا در نظر بگیریم کاربری که قراره استفاده کنه از این نرم افزار اینجور چیزا حالیش باشه و بتونه کانفیگ کنه. به قیافه این نرم افزار هم نمیخوره که همچین چیزی رو پیاده کرده باشه 
> وقتی قراره هر دو کلاینت و سرور فقط با سرور واسط ارتباط برقرار کنن هیچ کدوم لزومی نداره که ای پی اون یکی رو بدونه.
> پس این ضعف امنیتی که گفتید روی این نرم افزار وجود نداره


سلام
صحبت نرم افزار نیست. مساله پورت ها و روت هایی هست که داره از این سیستم کلاینت دیتا میگیره یا میده و اصلا به نرم افزار مربوط نمیشه. مساله ارتباط point-to-point هست. شما میتونی با یک برنامه wireshark خیلی راحت این مساله رو تشخیص بدی و از همون مسیر که داره دیتا عبور میکنه ، داده های خودت رو در امتداد دیتاهای اصلی با روشهای injection ارسال کنی. البته این یک مبحث هک و نفوذ محسوب میشه و بازهم میگم اصلا مربوط به این نرم افزار نیست.
صرفا صحبت بر سر پیدا کردن روت هاست و یافتن سیستم مهاجم.
اشکال من به نرم افزار ایشون نبود بلکه به روش استفاده از شبکه مربوط میشه

در ضمن من به point-to-point اشاره کرده بودم و نه peer-to-peer و همونطور که میدونید اینها باهم فرق دارند

----------


## Bad Programmer

> سلام
> صحبت نرم افزار نیست. مساله پورت ها و روت هایی هست که داره از این سیستم کلاینت دیتا میگیره یا میده و اصلا به نرم افزار مربوط نمیشه. مساله ارتباط point-to-point هست. شما میتونی با یک برنامه wireshark خیلی راحت این مساله رو تشخیص بدی و از همون مسیر که داره دیتا عبور میکنه ، داده های خودت رو در امتداد دیتاهای اصلی با روشهای injection ارسال کنی. البته این یک مبحث هک و نفوذ محسوب میشه و بازهم میگم اصلا مربوط به این نرم افزار نیست.
> صرفا صحبت بر سر پیدا کردن روت هاست و یافتن سیستم مهاجم.
> اشکال من به نرم افزار ایشون نبود بلکه به روش استفاده از شبکه مربوط میشه
> 
> در ضمن من به point-to-point اشاره کرده بودم و نه peer-to-peer و همونطور که میدونید اینها باهم فرق دارند


فرضا شما سرور رو در اختیار دارید. شما نمیتونید به مسیری که اطلاعات از سرور واسط به کلاینت ارسال میشه رو بفهمید. چون شما صرفا فقط با سرور واسط ارتباط برقرار میکنید.
اگر هم فرض کنیم که شخص سومی در بین سرور و سرور واسط یا سرور واسط و کلاینت قرار داره و مسیر عبور داده رو داره باز نمیتونه کاری انجام بده.
چون تمامی داده هایی که بین سرور و کلاینت رد و بدل میشه به صورت end-to-end رمز میشه و اگر در این رمزنگاری data integrity حفظ بشه شخص سوم نمیتونه داده ای غیر از داده های متعبر رو بفرسته. داده های معتبر میتونه شامل تاریخ انقضا و اینجور چیزا هم باشه و یا یه سری موارد دیگه که شخص سوم نتونه یک داده معتبر مثلا دستور ریستارت کردن کلاینت رو هر وقت که خودش خواست بفرسته و...

در مورد point-to-point اگر بیشتر توضیح بدید ممنون میشم چون دقیق متوجه منظورتون نشدم.

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

----------


## negative60

کسی‌ که ادعا می‌کنه یک متخصص در حوزه امنیت هست ولی‌ حتی نمیدونه که بدون رمزنگاری نامتقارن نمی‌شه امنیت یک ارتباط با رمزنگاری متقارن رو برقرار کرد و به و به جای بحث فنی‌ دائماً در حال توهین کردن به دیگران و پست شمردنشن هست قطعا شخصیت سالمی نداره




> ملاک های تشخیصی DSM-IV-TR‌ در مورد اختلال شخصیت فرد خود شیفته
> خودبزرگ بینی (در خیال یا رفتار)، نیاز به مقبولیت،‌ و فقدان حس همدلی به صورت الگویی نافذ و فراگیر که از اوایل بزرگسالی شروع شده باشد و در زمینه‌های گوناگون به چشم آید،‌ که علامت‌اش وجود لااقل پنج تا از موارد زیر است:
> 
> 
> 1.*احساس خودبزرگ بینانه‌ای به صورت مهم پنداشتن خود داشته باشد (مثلا در موفقیت‌ها و استعدادهای خود اغراق کند یا بدون آنکه به موفقیت شایسته‌ای دست یافته باشد،‌ انتظار داشته باشد که او را آدم بزرگ و مهمی بدانند).*
> 2.*مشغولیت ذهنیش خیالاتی از قبیل موفقیت، قدرت،‌استادی و ذکاوت*، زیبایی یا محبوب و دوست داشتنی بودن در حد نامحدود باشد.
> 3.*معتقد باشد که «استثنایی» است و تنها سایر افراد (یا موسسات) استثنایی یا رده بالا می‌توانند او را درک کنند یا او باید تنها با این افراد رابطه داشته باشد.*
> 4.*احتیاج داشته باشد که به شکلی افراطی تحسین شود.*
> 5.احساس محق بودن (entitlement) بکند، *یعنی به شکل نامعقولی انتظار داشته باشد برخوردی رضایت بخش و اختصاصی با او صورت گیرد* یا افراد خود به خود تسلیم خواسته هایش شوند.
> ...

----------


## SZsXsZS

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


آقای فهمیده!
شما توی اون تاپیک رفتار و گفتار متناقض خودتو ببین اول.
اول کار که اومدی گفتی:



> عزیز دل سلام
> در جهانی که کدهای نامتقارن 2048 بیتی دارن شکسته میشن شما به کلید 128 بیتی متقارن دل خوش نکن!
> چطوری قراره این کلید رو توزیع کنی؟


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



> من نمیدونم چرا تو دنیای امنیت همه فکر میکنن با رمز کردن میتونن امنیت رو برقرار کنن.


درحالیکه من اصلا جایی چنین ادعایی نکردم! (و حتی بارها خلافش رو گفته ام) و این حرف ایشون دوباره بی ربط به موضوع تاپیک و معلوم نیست به چه قصدیه!
بعدش میگم سوال تخصصی بپرسم کی جواب میده میفرمایید که:



> شما جزیات مثلا تخصصیت رو بپرس ببین دهها نفر تو همین سایت (که در سطح متوسط هم هست) چقدر راحت پاسخ میدن


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

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

----------


## SZsXsZS

> بدون رمزنگاری نامتقارن نمی‌شه امنیت یک ارتباط با رمزنگاری متقارن رو برقرار کرد


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

اینم که شما میبینی مثلا در SSL/TLS از نامتقارن هم استفاده میشه بخاطر شرایط و نیازهای خاص خودشه و ربطی به سناریوی بنده پیدا نمیکنه!

----------


## negative60

> فرضا شما سرور رو در اختیار دارید. شما نمیتونید به مسیری که اطلاعات از سرور واسط به کلاینت ارسال میشه رو بفهمید. چون شما صرفا فقط با سرور واسط ارتباط برقرار میکنید.
> اگر هم فرض کنیم که شخص سومی در بین سرور و سرور واسط یا سرور واسط و کلاینت قرار داره و مسیر عبور داده رو داره باز نمیتونه کاری انجام بده.
> چون تمامی داده هایی که بین سرور و کلاینت رد و بدل میشه به صورت end-to-end رمز میشه و اگر در این رمزنگاری data integrity حفظ بشه شخص سوم نمیتونه داده ای غیر از داده های متعبر رو بفرسته. داده های معتبر میتونه شامل تاریخ انقضا و اینجور چیزا هم باشه و یا یه سری موارد دیگه که شخص سوم نتونه یک داده معتبر مثلا دستور ریستارت کردن کلاینت رو هر وقت که خودش خواست بفرسته و...
> 
> در مورد point-to-point اگر بیشتر توضیح بدید ممنون میشم چون دقیق متوجه منظورتون نشدم.
> 
> پ. ن.: در حال حاضر من تخصصم نه رمزنگاری هست و نه شبکه و امنیت. ادعایی هم در این زمینه ندارم. اگر هم در بحث شرکت میکنم به خاطر اینه که چیزی یاد بگیرم و دنبال کل کل نیستم.


تو رمزنگاری شبکه همیشه فرض رو باید بر این گذاشت که شبکه دست مهاجم هست چون به هر حال تمام دیتا تا به مقصد برسه از روترها و شرکت‌های خدمات اینترنتی و مخابرات و عبور می‌کنه تو محیط شبکه هم امکان تغییر مسیر توسط شخص سوم به وسیله حملات DNS hijacking و یا DNS Spoofing و... هست (MITM) بعد از تغییر مسیر اتصال می‌شه زمان تبادل کلید بین سرور و کلاینت شخص سوم کلید خودش رو برای کلاینت بفرسته و تمام دیتا به ظاهر امن EndToEnd توسط کلید شخص سوم انکریپت و دیکریپت می‌شه

----------


## Bad Programmer

> تو رمزنگاری شبکه همیشه فرض رو باید بر این گذاشت که شبکه دست مهاجم هست چون به هر حال تمام دیتا تا به مقصد برسه از روترها و شرکت‌های خدمات اینترنتی و مخابرات و عبور می‌کنه تو محیط شبکه هم امکان تغییر مسیر توسط شخص سوم به وسیله حملات DNS hijacking و یا DNS Spoofing و... هست (MITM) بعد از تغییر مسیر اتصال می‌شه زمان تبادل کلید بین سرور و کلاینت شخص سوم کلید خودش رو برای کلاینت بفرسته و تمام دیتا به ظاهر امن EndToEnd توسط کلید شخص سوم انکریپت و دیکریپت می‌شه


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

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

----------


## negative60

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


تو کجای این تاپیک گفتی‌ از کلید ثابت استفاده کردی؟



> SHA256 رمز میشن. علاوه بر این، ارتباط بین دو طرف بصورت End to end با کلید جداگانه ای رمز میشه و بنابراین حتی اگر سرور واسط امن نباشه و هکر بهش نفوذ کنه یا هاستینگ قابل اعتماد نباشه بازم امنیت برنامه مخدوش نمیشه.


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

----------


## negative60

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


دقیقا درست میفرمایید , تنها راه جلو گیری از این حمله (تا اونجای که من می‌دونم) اینه دو طرف قبلان بر سر کلید یا یک موضوع مشترک به توافق رسیده باشن به نظر من سخت‌ترین بخش برقراری امنیت یک اتصال همین قسمت هست




> در این نرم افزار (پست اول) اصلا تبادل کلیدی وجود نداره، شخص سوم نه فرصت تبادل کلید رو داره و نه اینکه از کلیدی که کلاینت و سرور از قبل روش توافق کردن خبر داره. پس عملا نمیتونه هیچ داده معتبری تولید کنه.



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

----------


## Bad Programmer

> دقیقا درست میفرمایید , تنها راه جلو گیری از این حمله (تا اونجای که من می‌دونم) اینه دو طرف قبلان بر سر کلید یا یک موضوع مشترل به توافق رسیده باشن به نظر من سخت‌ترین بخش برقراری امنیت یک کانکشن هم همین قسمت هست


همونطور که تو پست قبلی گفتم (قبل از پاسخ شما ویرایش کردم):



> میشه با تخصیص یوز نیم و پسورد به کلاینت و سرور همون اول کار هر دو کلاینت و سرور توسط سرور واسط تایید بشن.







> درسته، ولی‌ با داستان‌ها و تعریف و تمجید هایی که شده بود تصور من این بود تبادل کلید وجود داره و درخواست گراف از روند کار برنامه هم به همین دلیل کردبودم که پاسخی داده نشد, در واقع اصلا کاری انجام نشده فقط با کلید ثابت داده‌ها رمزنگاری میشن


در هر صورت من و شما که بقدر کافی اطلاع نداریم در این زمینه. شاید کار بسیار بزرگی انجام گرفته و ما سوادمون نمیکشه  :قهقهه: 



> شما فقط یه حرف کلی میزنید چون بقدر من اطلاع ندارید

----------


## SZsXsZS

> تو کجای این تاپیک گفتی‌ از کلید ثابت استفاده کردی؟


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




> هیچ برنامه یا پروتکلی رو نمیشناسم از کلید ثابت متقارن استفاده کرده باشه! در این صورت برنامه فقط می‌تونه یک کاربر داشته باشه
> همه میدونن که نباید از کلید ثابت برای مدت زمان طولانی‌ استفاده کرد اگر کلید به هر دلیلی‌ افشا بشه امنیت کّل داده هایی عبوری تاریخ حیات برنامه از بین میره!
> البته این روش برای این برنامه زیادم هم هست ولی‌ استفاده از کلید ثابت متقارن به هیچ وجه امن نیست


بله بله درست خودم هم میدونم.
بنده مثل بعضیا نیستم همینطور روی هوا بیام یه چیزایی بگم.
کاری که میکنم همیشه تحقیق و مشورت میکنم. البته از منابع و افراد درستش.
مثلا همین برنامه قبلش درموردش تحقیق و سوال کرده بودم: http://crypto.stackexchange.com/ques...vention-scheme
در این متن توضیح کامل دادم و آگاهی خودم نسبت به تمام این چیزهایی که میگید رو به وضوح اظهار کردم:
My app is not very serious/security critical. It is just a little private program (and somewhat experimental/educational and I don't want to go further from a point in its security because I don't have enough reason/priority/time for implementing more details). So please don't be stringent about non-critical details. for example I know that the shared/master key shouldn't be used directly and each time a new session key should be generated somehow, but nonetheless i am using the master key directly for every encryption forever. My intended security is the bare minimum that is absolutely necessary so that ordinary hackers cannot misuse it or read my private data in transit, assuming the client and server environments are out of their reach.در این متن گفتم که این برنامه یجورایی آزمایشی/آموزشی است و کار خیلی  جدی و کامل مثلا تجاری و اینها نیست، و وقت و اولویت ندارم بخوام تمام جزییات حرفه ای رو توش رعایت کنم. گفتم با فرض اینکه هکرها به سرور و کلاینت ها نمیتونن دسترسی داشته باشن، میخوام یک سیستم حداقلی رو پیاده کنم که با این پیشفرض ها امنیتش کامل باشه. یعنی موارد پایه ای و حیاتی درش رعایت بشن.

----------


## SZsXsZS

> در هر صورت من و شما که بقدر کافی اطلاع نداریم در این زمینه. شاید کار بسیار بزرگی انجام گرفته و ما سوادمون نمیکشه


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

----------


## SZsXsZS

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

----------


## golbafan

> فرضا شما سرور رو در اختیار دارید. شما  نمیتونید به مسیری که اطلاعات از سرور واسط به کلاینت ارسال میشه رو  بفهمید. چون شما صرفا فقط با سرور واسط ارتباط برقرار میکنید.
> اگر هم فرض کنیم که شخص سومی در بین سرور و سرور واسط یا سرور واسط و  کلاینت قرار داره و مسیر عبور داده رو داره باز نمیتونه کاری انجام بده.
> چون تمامی داده هایی که بین سرور و کلاینت رد و بدل میشه به صورت  end-to-end رمز میشه و اگر در این رمزنگاری data integrity حفظ بشه شخص سوم  نمیتونه داده ای غیر از داده های متعبر رو بفرسته. داده های معتبر میتونه  شامل تاریخ انقضا و اینجور چیزا هم باشه و یا یه سری موارد دیگه که شخص سوم  نتونه یک داده معتبر مثلا دستور ریستارت کردن کلاینت رو هر وقت که خودش  خواست بفرسته و...


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




> در مورد point-to-point اگر بیشتر توضیح بدید ممنون میشم چون دقیق متوجه منظورتون نشدم.


با توجه به این نوشته



> از امن بودنش که مطمئنم.
> البته مسلما به شرطی که دو سیستمی که با هم ارتباط برقرار میکنن امن باشن تحت کنترل خودمون باشه.


ارتباط point-to-point هست (PPP protocol)

https://en.wikipedia.org/wiki/Point-to-Point_Protocol




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


اختیار دارید دوست عزیز...
ما هم صرفا تجربیات ناقص خودمون رو در حوزه هک و نفوذ نوشتیم.

من  تصور میکنم شما از صحبت من برداشت کردید که قراره ما به اطلاعات رد و بدل  شده بین نرم افزار سرور و کلاینت دست پیدا کنیم و یا تغییرشون بدیم ولی این  منظور من نبود. صحبت من پیدا کردن کانال ارتباطی بین سرور و کلاینت بود که  بخاطر این نرم افزار کانال باز شده و امکان نفوذ رو فراهم میکنه

----------


## golbafan

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


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

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



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


بعد هم که اساتید و دانشگاهها رو بهت معرفی کردم، میگی این مدرک ها چرت و پرته و پشیزی ارزش نداره !



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



این هم ادعای جالب شما:



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


بعدشم که فایل ضمیمه رو دانلود میکنی میبینی همش کتابخانه های آماده هست!!! واقعاً خنده داره...


300px-Narcissus-Caravaggio_(1594-96)_edited.jpg

----------


## SZsXsZS

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


شما خودتون اومدید از اول حرف بی ربط زدید. منکه ازتون نظر و کمک نخواستم!
ضمنا دیدی که اصولا واسه اینطور کارها میرم سایت های معتبر خارجی.




> درضمن یک لطفی به خودت بکن جاهایی که فکر میکنی من از روی بی سوادی به چیزی ادعا کردم و یا خواستم تو رو محک بزنم رفرنس بده تا بقیه بخونن و بتونن قضاوت کنن.


رفرنس: https://barnamenevis.org/showthread.p...8%AF%D8%B1-PHP
بشینن پست ها رو بخون و میزان بی سوادی و چرندگویی جنابعالی رو ببین!




> نه اینکه بخشی از جملات من رو اون هم با اعمال تحریفات! نقل کنی و همه رو به اشتباه بندازی...


کدوم بخشها؟ شما کاملش رو بذار ببینیم خب!




> شما حتی نمیدونستی رشته رمز در دانشگاههای ایران وجود داره!


شاید در چند سال اخیر بوجود آمده باشه. بنده نمیدونم! بهرحال تا همین چند سال پیش که هیچ اثری ازشون در اینترنت نبود. وقتی استاد و رشته و دانشجوی درست و حسابی باشه، آیا باید بالاخره اثری ازشون توی اینترنت دیده بشه یا نه؟




> بعد هم که اساتید و دانشگاهها رو بهت معرفی کردم، میگی این مدرک ها چرت و پرته و پشیزی ارزش نداره !


خب دلیلش که گفتم. چون سیستم آموزشی اینجا اعتباری نداره و تقلب و ماست مالی زیاده.
اینم یکی از شواهدش: https://forum.hammihan.com/thread246709.html
و قسمتی از متنش که برات نقل کردم: «بله من الان کسی را می‌شناسم که مسوولیت دارد و در سوابقش تولید ٦٠٠ مقاله و کتاب آمده. در حالی که مثلا یکی از اساتید نخبه دانشگاه MIT از سال ١٩٩٠ تا الان ١٦٠ مقاله ISI داشته، این تعداد برای کسی که این همه سال سابقه علمی دارد معنا می‌دهد اما یک استاد ٤٠ ساله با ٦٠٠ مقاله و کتاب غیرمعقول است و فقط در ایران می‌توانید، ببینید.»
یعنی من و شما این مملکت و مردم رو نمیشناسیم نمیدونیم چه خبره؟
همه میدونن!




> بعدشم که فایل ضمیمه رو دانلود میکنی میبینی همش کتابخانه های آماده هست!!! واقعاً خنده داره...


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

از حرفهای مسخرهء دیگرت:



> اینهم اضافه کنم که این رشته در اصل از ریاضیات کاربردی مشتق میشه و نه علوم کامپیوتر...


و پاسخ بنده:



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


کلا همش پرت و پلا میگی واسه خودت!

----------


## SZsXsZS

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

نمونهء بی دقتی و پرت و پلا گویی شما:
مثلا من این سوال رو مطرح کردم:



> وقتی از رمزنگاری 128 بیتی متقارن استفاده کردم و امنیتش بنظرم کافی است، پس چرا از HMAC از نوع 256 بیتی استفاده کرده ام؟ آیا نمیشد HMAC هم 128 بیت باشه؟ نمیشد 160 بیت باشه؟


حالا جواب شما رو میذارم انصافا کسی ازش سردرمیاره یا نه:



> این سوالت هم فکر کنم هر تازه کاری بتونه راحت جواب بده و جوابش جلوگیری از حملات موسوم به padding oracle attack هست
> وقتی sha256 استفاده میکنی باید aes 128 باشه چون هش 256 به دو بخش 128 شکسته میشه تا بتونه کلید رو برای mac و aes فراهم کنه
> این کار برای تایید هویت در مقصد هست. (reg key)
> البته این مال موقعی است که شما از مد قدیمی cbc استفاده میکنی.


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

----------


## SZsXsZS

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



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


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

میفهمی؟ اصلا طرز حرف زدن از نظر منی که مطلع هستم ناشیانه است بچه گانه است! ظاهرا بچه بسیجیه شعار هم میده  :قهقهه: 

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



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


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

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

----------


## prans68

خودد ssL  رو هم میشه جعل کرد - شما اگر بخاین کلید رو از کانالی که داده رو ارسال میکنین،کلید رو ارسال بکنین هر کاریم بکنین کلید لو میره(اگر از اول نشست فرد میانی تو جریان کار باشه کلید رو میتونه ببینه ولی کانال مجزا باشه نمیتونه کلید رو بگیره مگه اینکه از اون یکی کانال هم خبر داشته باشه). برای این کار باید دو کانال مجزا باشه شایم بهتر باشه دو پروتکل با دو کانال و تکنولوژی ارتباطی مجزا.

----------


## golbafan

> والا ما که نفهمیدیم چی گفتی و چندتا چیز رو قاطی هم کردی، padding oracle attack چه ربطی به اشتقاق کلید داره، و این هردوتا هیچ ربطی به جواب سوال بنده هم نداشتن!
> تو اصلا نمیفهمی padding oracle attack واقعا چطور کار میکنه در چه مواردی مصداق پیدا میکنه!
> امیدوارم اینجا یه نفر آدم متخصص و باسواد پیدا بشه بفهمه پرت و پلاهای شما رو.


البته طرف حساب من شما نیستی... برای دوستان دیگه میگم

از ویکی پدیا:
In symmetric cryptography, the padding oracle attack can be applied to the CBC mode of operation, where the oracle (usually a server) leaks data about whether the padding of an encrypted message is correct or not. Such data can allow  attackers to decrypt (and sometimes encrypt) messages through the oracle  using the oracle's key, without knowing the encryption key.

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

----------


## golbafan

آن کس که نداند و نداند که نداند .... در جهل مرکب ابدالدهر بماند

یک چیزجالب در رابطه با شخصیت عجیب استارتر هست که ایشون میره سوالاتش رو در نهایت ادب و تواضع در crypto.stackexchange.com مطرح میکنه و وقتی یک سری افراد بهش جواب میدن و اشتباهاتش رو بیان میکنن میاد اینجا و با یک لحن بسیار بی ادبانه و بصورت پز دادن برای افراد این سایت مطرح میکنه !!!
http://crypto.stackexchange.com/users/15036/user40602

مثلا بهش میگم:



> پیشنهاد میکنم در کار بعدیت بجای استفاده از  sha256 از PBKDF2 استفاده کنی. احتمالا بدونی چرا اینو میگم...


کلی بی ادبانه جواب میده ولی میره اینجا مودبانه میپرسه
http://crypto.stackexchange.com/ques...key-stretching

یا مثلا از من در مورد اینکه چرا باید در کنار AES128 از SHA256 استفاده بشه سوال میپرسه (اونهم با لحن توهین آمیز)



> گفتم وقتی از رمزنگاری 128 بیتی متقارن استفاده  کردم و امنیتش بنظرم کافی است، پس چرا از HMAC از نوع 256 بیتی استفاده  کرده ام؟ آیا نمیشد HMAC هم 128 بیت باشه؟ نمیشد 160 بیت باشه؟
> الان این سوال رو شما یا کس دیگری جواب بده تا سوالات بعدی رو طرح کنم براتون


وقتی بهش جواب میدم و یک مقاله بهش پیشنهاد میکنم:



> وقتی sha256 استفاده میکنی باید aes 128 باشه چون  هش 256 به دو بخش 128 شکسته میشه تا بتونه کلید رو برای mac و aes فراهم  کنه
> این کار برای تایید هویت در مقصد هست. (reg key)
> البته این مال موقعی است که شما از مد قدیمی cbc استفاده میکنی.
> .
> .
> https://tools.ietf.org/html/draft-ie...iph-sha-256-01


بعد میبینم رفته اون سوال رو مودبانه از خارجیا میپرسه (با تواضع)
http://crypto.stackexchange.com/ques...hmac-truncated

----------


## Bad Programmer

> خودد ssL  رو هم میشه جعل کرد - شما اگر بخاین کلید رو از کانالی که داده رو ارسال میکنین،کلید رو ارسال بکنین هر کاریم بکنین کلید لو میره(اگر از اول نشست فرد میانی تو جریان کار باشه کلید رو میتونه ببینه ولی کانال مجزا باشه نمیتونه کلید رو بگیره مگه اینکه از اون یکی کانال هم خبر داشته باشه). برای این کار باید دو کانال مجزا باشه شایم بهتر باشه دو پروتکل با دو کانال و تکنولوژی ارتباطی مجزا.


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

----------


## golbafan

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


سلام
بهش میگن MITM attacks که میاد یک سری ssl جعل شده (forged ssl) رو توی کانال ارتباطی قرار میدن. اگر مسیر شبکه امنیت کافی نداشته باشه امکانش هست ولی البته سخته! این مساله مربوط میشه به زمانی که از SSL2 استفاده میشد و حتی زمانی که از MD5 در SSL استفاده میشد ولی امروزه دیگه از SHA در SSL استفاده میکنن
سابقاً نیز به همین روش جیمیل اسنیف میشد که البته گوگل متوجه شد و الگوریتم ها رو آپدیت کرد...
https://nakedsecurity.sophos.com/2013/12/09/serious-security-google-finds-fake-but-trusted-ssl-certificates-for-its-domains-made-in-france/

دریافت certification رایگان موقت
https://www.cloudflare.com/

برای پیاده کردنش هم این کمک میکنه
https://gist.github.com/bradmontgomery/6487319

توی این مقاله هم یک ادعاهایی شده که اگه درست باشه باید فاتحه امنیت رو خوند...
https://freedom-to-tinker.com/2008/1...-certificates/

اینم جالبته چند تا مثالم زده: برای مثال هم از سایتهای paypal و apple itunes اسم برده
https://news.netcraft.com/archives/2...-internet.html

----------


## Bad Programmer

> سلام
> بهش میگن MITM attacks که میاد یک سری ssl جعل شده (forged ssl) رو توی کانال ارتباطی قرار میدن. اگر مسیر شبکه امنیت کافی نداشته باشه امکانش هست ولی البته سخته! این مساله مربوط میشه به زمانی که از SSL2 استفاده میشد و حتی زمانی که از MD5 در SSL استفاده میشد ولی امروزه دیگه از SHA در SSL استفاده میکنن
> سابقاً نیز به همین روش جیمیل اسنیف میشد که البته گوگل متوجه شد و الگوریتم ها رو آپدیت کرد...
> https://nakedsecurity.sophos.com/2013/12/09/serious-security-google-finds-fake-but-trusted-ssl-certificates-for-its-domains-made-in-france/
> 
> دریافت certification رایگان موقت
> https://www.cloudflare.com/
> 
> برای پیاده کردنش هم این کمک میکنه
> ...


در ssl ضعیف ترین حلقه همون CA ها هستن (البته نظر تخصصی و معتبری نیست چون من متخصص نیستم  :لبخند گشاده!:  )
اینکه یک CA برای امضای گواهینامه هاش از md5 استفاده میکنه یا هنوز هم گواهی نامه هایی که از md5 استفاده کردن توسط مرورگر تایید میشن یه جورایی ربطی به ssl نداره.
یا اینکه شما اجازه بدی بیان رو سیستمت trusted root CA  نصب کنن شبیه اینه که بزاری رو سیستم مثلا کیلاگر نصب کنن. (البته مثالش خیلی بی ربط شد  :لبخند گشاده!:  ولی در کل منظورم رو که میفهمید)
در کل خود پروتوکل امنه ولی اینکه چجوری پیاده بشه و چجوری استفاده بشه ازش ممکنه باعث ضعف امنیتی بشه.

بازم میگم که نظرات و حرفای من در این مورد اصلا تخصصی نیست و ممکنه اشتباه کنم. من صرفا با یه سری مفاهیم اولیه آشنا هستم.

----------


## golbafan

> در ssl ضعیف ترین حلقه همون CA ها هستن (البته نظر تخصصی و معتبری نیست چون من متخصص نیستم  )
> اینکه یک CA برای امضای گواهینامه هاش از md5 استفاده میکنه یا هنوز هم گواهی نامه هایی که از md5 استفاده کردن توسط مرورگر تایید میشن یه جورایی ربطی به ssl نداره.
> یا اینکه شما اجازه بدی بیان رو سیستمت trusted root CA  نصب کنن شبیه اینه که بزاری رو سیستم مثلا کیلاگر نصب کنن. (البته مثالش خیلی بی ربط شد  ولی در کل منظورم رو که میفهمید)
> در کل خود پروتوکل امنه ولی اینکه چجوری پیاده بشه و چجوری استفاده بشه ازش ممکنه باعث ضعف امنیتی بشه.
> بازم میگم که نظرات و حرفای من در این مورد اصلا تخصصی نیست و ممکنه اشتباه کنم. من صرفا با یه سری مفاهیم اولیه آشنا هستم.


سلام
ما هم خیلی آشنا نیستیم جدی نگیر :چشمک: 
آره من هم با اینکه خود ssl امن هست کاملا موافقم. و اینکه صرفا روی شبکه های نا امن میشه از این نفوذها انجام داد.
بطور کلی باید گفت که همه این موارد در کنار هم باید باشن تا امنیت برقرار بشه. (پروتکل مناسب - بستر امن - الگوریتمهای بی نقص و ...)

----------


## Bad Programmer

> صرفا روی شبکه های نا امن میشه از این نفوذها انجام داد.


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

----------


## golbafan

> این جمله کلا ایراد داره.
> الگوریتم های رمزنگاری و پروتوکل های امنیتی طراحی میشن تا روی شبکه های ناامن امنیت رو برقرار کنن. اگه قرار باشه شبکه امن باشه که دیگه این کارا معنی نداره


روی شبکه امن که نمیشه از این حملات انجام داد. میشه؟  :لبخند گشاده!:

----------


## SZsXsZS

> البته طرف حساب من شما نیستی... برای دوستان دیگه میگم
> 
> از ویکی پدیا:
> In symmetric cryptography, the padding oracle attack can be applied to the CBC mode of operation, where the oracle (usually a server) leaks data about whether the padding of an encrypted message is correct or not. Such data can allow  attackers to decrypt (and sometimes encrypt) messages through the oracle  using the oracle's key, without knowing the encryption key.
> 
> بطور خلاصه یعنی در مد cbc و رمزنگاری متقارن مورد استفاده، هکر میتونه حتی بدون داشتن کلید کار رمز گشایی رو انجام بده


بله عزیزم ولی این فقط بخشی از قضیه است!

گفته: The attack relies on having a "padding oracle" who freely responds to queries about whether a message is correctly padded or not
یعنی این حمله روی padding oracle ای جواب میده که به کوئری ها درمورد اینکه آیا یک پیام padding درست داره یا نه جواب میده. یعنی حمله کننده میتونه پیامهایی رو که خودش ساخته/دستکاری کرده به سیستم بده و جواب سیستم بهش نشون میده که آیا padding اون پیامها از نظر سیستم درست بوده یا نه! ضمنا یادت باشه طبق متنی که خودت گذاشتی، این حمله مربوط به عملیات AES-CBC میشه و نه چیز دیگه.

و اما چه زمانی سیستم اصولا این padding رو میتونه چک کنه؟ قبل از شروع decryption؟ خیر! زمانی سیستم padding رو چک میکنه که عملیات decryption شروع شده باشه. از متن توضیحات جزیی ای که درمورد روش کار این حمله داده و مثالی که زده، این مسئله واضح و مبرهن است:
Then the server checks the padding of the last decrypted block (which is P2), and returns whether or not the padding is correct

ولی شما دقت نمیکنی وقتی ما از AES+HMAC استفاده کردیم، اول درستی HMAC چک میشه، و اگر HMAC درست نبود اصولا عملیات decryption دیگه انجام نمیشه؛ یعنی به اون مرحله نمیرسه! ما در عملیات چک کردن HMAC هیچ decryption ای نداریم. پس شما راهی نداری جز اینکه اول بتونی از چک HMAC عبور کنی (که این در عمل بدون داشتن کلید HMAC غیرممکنه). حملهء Padding oracle attack روی HMAC قابل اعمال نیست چون تمام این توضیحات که داده واضح روشن کرده که این حمله مربوط به AES-CBC (و البته padding بعضی رمزنگاری های دیگر) میشه.
پس متوجه میشیم احتمالا این حمله نسبت به سیستمهایی قابل اعمال بوده که مثل سیستم ما نیستن و شاید مثلا MAC نداشتن، یا بهرصورت یک ضعفی در طراحی اونا بوده که اجازهء این حمله رو به شکلی میداده.

شما فقط یک قسمت از متن رو خوندی بعد همینطور کورکورانه و سرخود بسط دادی کلیش کردی! درحالیکه هر حمله ای شرایط و نقاط ضعف خاص خودش رو طلب میکنه و لزوما روی هر سیستمی با هر جزییاتی قابل انجام نیست.
اصلا فکر کن اگر این حمله در تمام شرایط قابل اعمال بود که کلا کسی از AES-CBC دیگه استفاده نمیکرد! ولی میدونیم که این الگوریتم بصورت گسترده خیلی جاها همچنان استفاده میشه.

----------


## SZsXsZS

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


ببینید ایجاد کانال امن به معنی این هست که دو party که از طریق یک کانال ناامن با هم ارتباط برقرار میکنن میتونن بین خودشون یک کلید مشترک رو تولید کنن بدون اینکه دیگرانی که ممکنه به کانال ارتباطی بین اونها دسترسی داشته باشن (و حتی بتونن داده های رد و بدل شده رو دستکاری بکنن یا خودشون داده های جعلی بفرستن) به این کلید دست پیدا کنن.
اما این قضیه از حمله های MITM جلوگیری نمیکنه! چون درسته مثلا فرد X با فرد Y ارتباط برقرار میکنه و کلیدی رو با هم ایجاد میکنن، ولی خود فرد Y ممکنه واقعا فرد Y نباشه و فقط فردی باشه که وانمود میکنه Y است و در اصل Z باشه. یعنی ما در این روشهای رمزنگاری احراز هویت (authentication) نداریم! برای احراز هویت باید از روش دیگری استفاده بشه. یک روش استفاده از یک shared secret است که قبلا این دو party به شکلی (مثلا از طریق یک کانال جانبی امن) با هم سرش به توافق رسیدن و به اشتراک گذاشتن؛ بطور مثال یک پسورد. اما روشهای دیگر هم وجود داره و چیزی که مثلا برای وب سایت ها در اینترنت استفاده میشه و پروتکل SSL/TLS، استفاده از گواهینامه های دیجیتال است که این گواهینامه ها بر اعتماد به یکسری CA های شناخته شده معتبر (مراجع صدور گواهینامه ها) بنا شدن و ما یکسری CA certificate رو داریم که از قبل همراه سیستم عامل یا مرورگر هستن (البته کاربر خودش هم میتونه گواهینامه های جدیدی رو نصب کنه یا یکسری رو حذف کنه) و و بواسطهء اونهاست که امضاهای دیجیتالی که party ها در جریان پروتکل های ایجاد کلید مشترک ارائه میدن، شناسایی و معتبر شناخته میشن. پس در اینجا هم مشاهده میکنید که ما از قبل یک مبنا و شناسه ای جداگانه برای احراز هویت طرف مقابل داریم (که از طریق دیگری بهمون رسیده). در غیر این صورت راهی برای احراز هویت طرف مقابل نیست. ما میتونیم مطمئن باشیم که کلید مشترکی که بین ما و Y ایجاد شده رو هیچکس دیگری نمیتونه خونده باشه یا جعل و دستکاری کرده باشه، ولی نمیتونیم مطمئن باشیم که Y واقعا همونی باشه که ادعا میکنه و Z نباشه! شاید Z بین ما (X) و Y واقع شده و به ما وانمود میکنه که Y است و به Y هم وانمود میکنه که X است! اینطوری میتونه تمام ارتباطات بین ما و Y رو براحتی بخونه و حتی دستکاری و جعل کنه.

مثلا پروتکل Diffie–Hellman key exchange نقل از ویکیپدیا میگه:
Diffie–Hellman exchange by itself does not provide authentication of the communicating parties and is thus vulnerable to a man-in-the-middle attack.
ترجمه: «Diffie–Hellman key exchange خودش به تنهایی احراز هویت طرفهای ارتباط را فراهم نمیکند و بنابراین درمقابل حملهء MITM آسیب پذیر است».

----------


## SZsXsZS

> خودد ssL  رو هم میشه جعل کرد - شما اگر بخاین کلید رو از کانالی که داده رو ارسال میکنین،کلید رو ارسال بکنین هر کاریم بکنین کلید لو میره(اگر از اول نشست فرد میانی تو جریان کار باشه کلید رو میتونه ببینه ولی کانال مجزا باشه نمیتونه کلید رو بگیره مگه اینکه از اون یکی کانال هم خبر داشته باشه). برای این کار باید دو کانال مجزا باشه شایم بهتر باشه دو پروتکل با دو کانال و تکنولوژی ارتباطی مجزا.


در SSL/TLS حضور فرد میانی بواسطهء همون گواهینامه های دیجیتال هست که مشخص میشه!
گواهینامه های دیجیتال CA ها از قبل در سیستم عامل و مرورگر نصب هستن. بواسطهء این گواهینامه هاست که درستی گواهینامه ها و امضاهای دیجیتال که دیگران ارائه میدن مشخص میشه.
مثلا دقت کرده باشید در بعضی سایتها مرورگر هشدار میده که این گواهینامه self-signed است و بنابراین نمیشه از درستی هویتش مطمئن بود و آیا این ریسک رو قبول میکنید و این گواهینامه رو میپذیرید یا نه!
این بخاطر اینه که اون گواهینامه توسط یک CA certificate معتبر که از قبل در مرورگر نصب شده باشه امضاء نشده و بنابراین اعتبار مشخصاتش (اینکه آیا واقعا به دامین و اسم و مشخصات درج شده در اون تعلق داره یا نه) قابل اثبات نیست.

تعجب میکنم ظاهرا هیچکدام هنوز این مسائل اولیه رو نمیدونید!!

----------


## SZsXsZS

> آن کس که نداند و نداند که نداند .... در جهل مرکب ابدالدهر بماند


حکایت خودتونه  :لبخند: 




> یک چیزجالب در رابطه با شخصیت عجیب استارتر هست که ایشون میره سوالاتش رو در نهایت ادب و تواضع در crypto.stackexchange.com مطرح میکنه و وقتی یک سری افراد بهش جواب میدن و اشتباهاتش رو بیان میکنن میاد اینجا و با یک لحن بسیار بی ادبانه و بصورت پز دادن برای افراد این سایت مطرح میکنه !!!


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

----------


## Bad Programmer

> ببینید ایجاد کانال امن به معنی این هست که دو party که از طریق یک کانال ناامن با هم ارتباط برقرار میکنن میتونن بین خودشون یک کلید مشترک رو تولید کنن بدون اینکه دیگرانی که ممکنه به کانال ارتباطی بین اونها دسترسی داشته باشن (و حتی بتونن داده های رد و بدل شده رو دستکاری بکنن یا خودشون داده های جعلی بفرستن) به این کلید دست پیدا کنن.
> اما این قضیه از حمله های MITM جلوگیری نمیکنه! چون درسته مثلا فرد X با فرد Y ارتباط برقرار میکنه و کلیدی رو با هم ایجاد میکنن، ولی خود فرد Y ممکنه واقعا فرد Y نباشه و فقط فردی باشه که وانمود میکنه Y است و در اصل Z باشه. یعنی ما در این روشهای رمزنگاری احراز هویت (authentication) نداریم! برای احراز هویت باید از روش دیگری استفاده بشه. یک روش استفاده از یک shared secret است که قبلا این دو party به شکلی (مثلا از طریق یک کانال جانبی امن) با هم سرش به توافق رسیدن و به اشتراک گذاشتن؛ بطور مثال یک پسورد. اما روشهای دیگر هم وجود داره و چیزی که مثلا برای وب سایت ها در اینترنت استفاده میشه و پروتکل SSL/TLS، استفاده از گواهینامه های دیجیتال است که این گواهینامه ها بر اعتماد به یکسری CA های شناخته شده معتبر (مراجع صدور گواهینامه ها) بنا شدن و ما یکسری CA certificate رو داریم که از قبل همراه سیستم عامل یا مرورگر هستن (البته کاربر خودش هم میتونه گواهینامه های جدیدی رو نصب کنه یا یکسری رو حذف کنه) و و بواسطهء اونهاست که امضاهای دیجیتالی که party ها در جریان پروتکل های ایجاد کلید مشترک ارائه میدن، شناسایی و معتبر شناخته میشن. پس در اینجا هم مشاهده میکنید که ما از قبل یک مبنا و شناسه ای جداگانه برای احراز هویت طرف مقابل داریم (که از طریق دیگری بهمون رسیده). در غیر این صورت راهی برای احراز هویت طرف مقابل نیست. ما میتونیم مطمئن باشیم که کلید مشترکی که بین ما و Y ایجاد شده رو هیچکس دیگری نمیتونه خونده باشه یا جعل و دستکاری کرده باشه، ولی نمیتونیم مطمئن باشیم که Y واقعا همونی باشه که ادعا میکنه و Z نباشه! شاید Z بین ما (X) و Y واقع شده و به ما وانمود میکنه که Y است و به Y هم وانمود میکنه که X است! اینطوری میتونه تمام ارتباطات بین ما و Y رو براحتی بخونه و حتی دستکاری و جعل کنه.
> 
> مثلا پروتکل Diffie–Hellman key exchange نقل از ویکیپدیا میگه:
> Diffie–Hellman exchange by itself does not provide authentication of the communicating parties and is thus vulnerable to a man-in-the-middle attack.
> ترجمه: «Diffie–Hellman key exchange خودش به تنهایی احراز هویت طرفهای ارتباط را فراهم نمیکند و بنابراین درمقابل حملهء MITM آسیب پذیر است».


منظور ایشون این بود که نمیشه تبادل کلید امن انجام داد و دقیقا اشاره کرده بودن به لو رفتن کلید نه جعل هویت.
اگر پیام ایشون رو دقیق بخونید متوجه میشید.
در مورد توضیحاتی هم که دادید، چند پست قبل توضیح توضیح دادم:



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


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





> مثلا دقت کرده باشید در بعضی سایتها مرورگر هشدار میده که این گواهینامه self-signed است و بنابراین نمیشه از درستی هویتش مطمئن بود و آیا این ریسک رو قبول میکنید و این گواهینامه رو میپذیرید یا نه!
> این بخاطر اینه که اون گواهینامه توسط یک CA certificate معتبر که از قبل در مرورگر نصب شده باشه امضاء نشده و بنابراین اعتبار مشخصاتش (اینکه آیا واقعا به دامین و اسم و مشخصات درج شده در اون تعلق داره یا نه) قابل اثبات نیست.
> 
> تعجب میکنم ظاهرا هیچکدام هنوز این مسائل اولیه رو نمیدونید!!


منم تعجب میکنم که استفاده از گواهینامه self-signed رو دور زدن ssl به حساب میارید.

----------


## SZsXsZS

> منظور ایشون این بود که نمیشه تبادل کلید امن انجام داد و دقیقا اشاره کرده بودن به لو رفتن کلید نه جعل هویت.


خب اینم باز خودش باعث تعجبه!
کسی که بدونه پروتکل SSL/TLS چطور کار میکنه نباید چنین اشتباهی بکنه  :متفکر: 
فهم این مطلب زیاد هم چیز پیچیده ای نیست اصلا نیازی نیست وارد جزییات و مثلا ریاضیاتش بخوایم بشیم.

----------


## SZsXsZS

> منم تعجب میکنم که استفاده از گواهینامه self-signed رو دور زدن ssl به حساب میارید.


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

----------


## SZsXsZS

البته خود پروتکل SSL/TLS نقطهء ضعفش دقیقا در همین CA ها است. چون در امنیت معنا نداره شما به یک Third party اعتماد کنید. یعنی از این کار تا میشه اجتناب میکنن. ولی خب بهرحال ظاهرا راه دیگری نداشته روش بهتری کسی نتونسته ارائه کنه برای امنیت ارتباط کاربر با وبسایت ها در اینترنت جهانی.
ضمنا خطر هک و سوء استفاده از CA ها همیشه وجود داره که قبلا هم نمونه اش رخ داده. بطور مثال: https://en.wikipedia.org/wiki/DigiNo...t_certificates

----------


## golbafan

سلام به همه 
من اومدم...
خب بحث امروز چی هست؟؟؟ :لبخند گشاده!:

----------


## golbafan

> البته خود پروتکل SSL/TLS نقطهء ضعفش دقیقا در همین CA ها است. چون در امنیت معنا نداره شما به یک Third party اعتماد کنید. یعنی از این کار تا میشه اجتناب میکنن. ولی خب بهرحال ظاهرا راه دیگری نداشته روش بهتری کسی نتونسته ارائه کنه برای امنیت ارتباط کاربر با وبسایت ها در اینترنت جهانی.
> ضمنا خطر هک و سوء استفاده از CA ها همیشه وجود داره که قبلا هم نمونه اش رخ داده. بطور مثال: https://en.wikipedia.org/wiki/DigiNo...t_certificates


خب این همونیه که من در چند پست قبل اشاره کردم و روش کاربردی رو هم به همراه تعریف MITM براتون نقل کردم...
مساله همینه
امنیت باید همه جانبه باشه.
اشکالی هم که من از برنامه شما گرفتم مربوط به روش رمز نگاریتون نیست. بلکه مربوط به روش PPP در ارتباط رایانه هاست... حتی این مشکل در حالت P2P هم که معمولا در شبکه های داخلی شرکت ها و ادارات پیاده میشه موجوده
شما وقتی ارتباط این نرم افزارها رو برقرار میکنی بالاخره باید به فایر وال اجازه بدی که از این درگاهها اطلاعات رد و بدل بشه.

یک تست بهت میگم انجام بده...
نرم افزارت رو با حالت run as admin اجرا کن و ببین چه پیامی میده؟
اونوقت میبینی که فایر وال به خود نرم افزار این اجازه رو نمیده (چون امضا نداره) بلاکه داره درگاه رو برات باز میکنه و این خطرناکه :چشمک:

----------


## golbafan

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


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

----------


## negative60

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


با توجه به درخواست بی‌ پاسخ از روند امن سازی و با توجه به ادعا‌های موجود انتظار بالایی وجود داشت و تصور بر این گذاشته شد که از یک تکنیک قوی استفاده شده




> خودد ssL رو هم میشه جعل کرد - شما اگر بخاین کلید رو از کانالی که داده رو ارسال میکنین،کلید رو ارسال بکنین هر کاریم بکنین کلید لو میره(اگر از اول نشست فرد میانی تو جریان کار باشه کلید رو میتونه ببینه ولی کانال مجزا باشه نمیتونه کلید رو بگیره مگه اینکه از اون یکی کانال هم خبر داشته باشه). برای این کار باید دو کانال مجزا باشه شایم بهتر باشه دو پروتکل با دو کانال و تکنولوژی ارتباطی مجزا.





> صرفا روی شبکه های نا امن میشه از این نفوذها انجام داد


گفتنی‌ها رو bad programer عرض کرد البته من هم مثل ایشون خودم رو متخصص نمیدونم فقط در اندازه دانسته‌های خودم صحبت می‌کنم که ممکنه درست یا اشتباه باشه.
حمله مرد میانی بر روی SSL زمانی‌ می‌تونه اجرا بشه که قبلا برای آدرس هدف یک گواهینامه معتبر صادر شده باشه مثل حمله ایی که چند سال پیش با هک کردن کمودو یه گواهینامه برای آدرس login.yahoo.com صادر کرده بودن که مدتی‌ بعد لو رفت. اینجور اتفاق‌ها حوادث خاصی‌ هستند که فقط چند نمونه می‌شه پیدا کرد و عمر اینجور حمله‌ها هم خیلی‌ کوتاهه
اینکه امنیت SSL رو زیر سوال ببریم یعنی‌ امنیت کّل اینترنت رو بردیم زیر سوال و این ادعای خیلی‌ خیلی‌ بزرگیه!

----------


## SZsXsZS

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


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

اصلا ملت ما اینطوری هستن نمیدونم چرا همه اینقدر سرخود ادعاشون میشه از خودشون هم مطمئن هستن، بعد منی که مطالعه و تحقیق واقعی و اصولی کردم زحمت کشیدم یه چیزی رو ته و توش رو واقعا درآوردم فهمیدم، میام چیزی میگم توهین و تمسخر هم میکنن، چون خودشون نمیفهمن، مثلا میگن نه اینطور نیست یا من اغراق میکنم یا میخوام خودنمایی کنم!
یک نمونه از این موارد رو در این تاپیک مطرح کردم: https://barnamenevis.org/showthread.php?534917
یک قسمت از حرفایی که توش زدم:



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


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

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

----------


## SZsXsZS

> خب این همونیه که من در چند پست قبل اشاره کردم و روش کاربردی رو هم به همراه تعریف MITM براتون نقل کردم...
> مساله همینه
> امنیت باید همه جانبه باشه.
> اشکالی هم که من از برنامه شما گرفتم مربوط به روش رمز نگاریتون نیست. بلکه مربوط به روش PPP در ارتباط رایانه هاست... حتی این مشکل در حالت P2P هم که معمولا در شبکه های داخلی شرکت ها و ادارات پیاده میشه موجوده
> شما وقتی ارتباط این نرم افزارها رو برقرار میکنی بالاخره باید به فایر وال اجازه بدی که از این درگاهها اطلاعات رد و بدل بشه.
> 
> یک تست بهت میگم انجام بده...
> نرم افزارت رو با حالت run as admin اجرا کن و ببین چه پیامی میده؟
> اونوقت میبینی که فایر وال به خود نرم افزار این اجازه رو نمیده (چون امضا نداره) بلاکه داره درگاه رو برات باز میکنه و این خطرناکه


برنامه من اشکالش از نظر خودم کمبودهای مهمش ایناست:
- باید برای هر جلسه ارتباطی یک session key جدید ایجاد و استفاده بشه (الان همیشه از master key استفاده میشه).
- مسئلهء پیچیده تر forward secrecy که نداره. برای این منظور باید از الگوریتم ها/پروتکل های پیشرفته ای استفاده کرد که باعث میشن اگر کلید اصلی دست نفوذگر بیفته با این حال نتونه ارتباطات قبلی رو رمزگشایی کنه. البته این یک ویژگی پیشرفته است که فکر میکنم خیلی از نرم افزارهای دیگر هم ندارن، ولی بهرصورت چیز خوبیه دیگه!! من دنبالش نرفتم دقیق نمیدونم چطور باید پیاده اش کرد، اونم برنامهء من که ارتباطش از طریق HTTP است و حالت سوکت مستقیم و پایدار نداره شاید به همین خاطر از یکسری کتابخانه های مربوطه نشه درش استفاده کرد.
- امکانی برای تغییر کلید از راه دور (از طریق سمت مانیتورینگ) باید بهش اضافه کنم ویژگی مفیدیه (هم کلید کلاینت ها و هم کلید سرور واسط رو بشه توسط برنامهء کنترل تغییر داد).

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

----------


## golbafan

> برنامه من اشکالش از نظر خودم کمبودهای مهمش ایناست:
> - باید برای هر جلسه ارتباطی یک session key جدید ایجاد و استفاده بشه (الان همیشه از master key استفاده میشه).
> - مسئلهء پیچیده تر forward secrecy که نداره. برای این منظور باید از الگوریتم ها/پروتکل های پیشرفته ای استفاده کرد که باعث میشن اگر کلید اصلی دست نفوذگر بیفته با این حال نتونه ارتباطات قبلی رو رمزگشایی کنه. البته این یک ویژگی پیشرفته است که فکر میکنم خیلی از نرم افزارهای دیگر هم ندارن، ولی بهرصورت چیز خوبیه دیگه!! من دنبالش نرفتم دقیق نمیدونم چطور باید پیاده اش کرد، اونم برنامهء من که ارتباطش از طریق HTTP است و حالت سوکت مستقیم و پایدار نداره شاید به همین خاطر از یکسری کتابخانه های مربوطه نشه درش استفاده کرد.
> - امکانی برای تغییر کلید از راه دور (از طریق سمت مانیتورینگ) باید بهش اضافه کنم ویژگی مفیدیه (هم کلید کلاینت ها و هم کلید سرور واسط رو بشه توسط برنامهء کنترل تغییر داد).


فکر نمیکنم بشه forward secrecy رو براحتی روی http پیاده کنی. بنظرم باید  همون ssl/tls رو با یک روش رمزنگاری مثل ECDHE پیاده کنی. اگه یک چیز آماده  بخوای، کتابخانه openssl تمام موارد مورد نیاز شما رو داره.




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


 خود نرم افزار به تنهایی مشکلی نداره. مشکل موقعی پیش میاد که شما بخوای مثلا از طریق اینترنت این ارتباط ها رو انجام بدی (یک جا خوندم که از یک کانتر بصورت هش شده استفاده کردی تا یک سری ارتباطات رو سازماندهی کنی) خب اگر شبکه اینترنت باشه و نا امن باشه میشه خیلی راحت ارتباط رو جعل کرد و نفوذ رو انجام داد!!!
پس راه درست همون استفاده از ssl/tls هست با یک رمزنگاری نامتقارن مثل ECDHE که قابلیت forward secrecy رو بهت بده


اینم ببین: 
http://sublimerobots.com/2015/01/sim...xample-python/

اومده از روشهای Key Exchange استفاده کرده

----------


## SZsXsZS

> یک جا خوندم که از یک کانتر بصورت هش شده استفاده کردی تا یک سری ارتباطات رو سازماندهی کنی


یادم نمیاد جایی چنین چیزی گفته باشم  :متفکر: 



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


آقا جان یه چیزی میگی ها!
ارتباط رو بدون داشتن کلید رمزگذاری چطور میشه جعل کرد؟!!
منظورت اصلا مشخص نیست.
ما فرض میکنیم به کلاینت ها و سرور واسط نفوذ و دسترسی ای توسط یک هکر صورت نگرفته. در این صورت تنها راه نفوذگر اینه که دیتای رد و بدل شده رو بخونه یا دستکاری کنه. ولی این اطلاعات تماما رمز شده هستن. هیچکس بدون کلید نه میتونه اطلاعاتی رو بخونه و نه میتونه دستکاری کنه (اگر دستکاری کنه برنامه با چک کردن HMAC متوجه میشه و اون اطلاعات رو دور میندازه).

----------


## SZsXsZS

> با توجه به درخواست بی‌ پاسخ از روند امن سازی و با توجه به ادعا‌های موجود انتظار بالایی وجود داشت و تصور بر این گذاشته شد که از یک تکنیک قوی استفاده شده


منظور من از امنیت بالا، همون AES+HMAC بود. البته قبول دارم اغراق بوده، یعنی مقداری گمراه کننده. منظورم این نبود که برنامم از همه جهت کامل و خیلی پیشرفته است. منظورم همین رمزنگاری متقارن بود که اگر درست انجام بشه و اشتباهی توش نباشه کسی قادر نیست بشکنه. چون در عمل خیلی رمزنگاری هایی که دیگران استفاده میکنن در جزییاتشون ایرادها و اشتباهاتی دارن که باعث میشه امنیتشون به مراتب پایین تر بیاد. مثلا بعضیا MAC ندارن، بعضیا از مدهای ضعیف مثل ECB استفاده میکنن، بعضیا از الگوریتم های ضعیف یا حتی شکسته شده مثل DES استفاده میکنن، بعضیا از پسوردها یا کلیدهای ضعیف استفاده میکنن (چون نسبت به اهمیت و روش محاسبهء میزان امنیت اونا آگاه نیستن)، بعضیا در جزییات دیگری مشکل دارن مثلا در روش اشتقاق کلید اشتباهاتی رو مرتکب میشن، بعضیا از توابع رندوم ناامن استفاده میکنن، خلاصه رمزنگاری در عمل خیلی جزییات داره که باید دربارهء هرکدام اطلاعات کافی داشته باشی و خوب روشن باشی بینش داشته باشی حواست باشه که اشتباهی نکنی. یک علت هم که این مسائل رو تشدید میکنه اینه که خیلی وقتا در کدهای رمزنگاری وقتی اشتباهی میشه، برنامه همچنان کار میکنه و در ظاهر هیچ مشکل و نشانه ای مشاهده نمیشه که فرد بتونه براحتی متوجه اشتباهش بشه؛ فرض مثلا ممکنه شما یه اشتباهی در جایی از کدها و الگوریتم بکنی که باعث بشه کلید شما بجای 128 بیت بشه 64 بیت، در خیلی موارد میبینی برنامه با هیچ مشکلی در ظاهر مواجه نمیشه، و هیچکس هم از روی متن رمز شده نمیتونه بفهمه امنیتش کمتر شده، بطور معمول هیچ ابزار و تست و مثلا اسکنر امنیتی هم برای اینطور مسائل وجود نداره و استفاده نمیشه. افراد غیرمتخصص احتمال اشتباهاتشون در این زمینه واقعا زیاده، و اینو کسی که اطلاعات و تجربهء کافی داشته باشه میفهمه.
بهرحال این برنامه هم با اینکه از امکانات حداقلی استفاده کرده ولی کسی بدون بدست آوردن کلید رمزنگاری نمیتونه کاری بکنه. ولی از روشهای دیگر ممکنه نفوذ و هک صورت بگیره، مثلا از طریق حفره های سیستم عامل به سیستم عامل کلاینت ها نفوذ کنن، یا فرضا در یک بخشی از مفسر یا کتابخانه های استفاده شدهء پایتون باگ buffer overflow باشه که اونا مباحث دیگریست و لزوما به برنامهء بنده مربوط نمیشه بلکه تامین امنیت بخشهای دیگریست.
خلاصه رمزنگاری به حرف خیلی آسون تره، ولی در عمل هست که باید دید! چون اطلاعات کلی رو همهء ما ظاهرا میدونیم، همه میتونیم از پیشرفته ترین روشهای رمزنگاری اسم ببریم و اشاره کنیم، ولی خیلی جاها همون جزییات هست که اطلاع یا حضور ذهن و دقت کافی نسبت بهشون نیست و اشتباه میشن. حتی بعضی کتابخانه های رمزنگاری که بنده دیدم درشون چنین ضعف هایی وجود داشته. مثلا همین phpseclib که بنده در سمت php استفاده کردم، تابع رندومش ضعیف بود که بنده پیشنهاد و نظرهایی به توسعه دهنده اش دادم (چند سال پیش) که فکر میکنم یکیش رو اعمال هم کرد. ولی من تابع رندوم خودم رو از اون هم کاملتر سعی کردم درست کنم و حتی دربست به توابع رندوم امنیتی سیستم عامل یا کتابخانهء خاصی اعتماد نکردم. یک کتابخانهء رمزنگاری اگر تابع رندومش ضعیف باشه، ضعف مهمی است چون خیلی جاها اساس امنیت بر همین تابع رندوم بنا شده و فرض شما از قوی ترین و جدیدترین الگوریتم ها هم استفاده کنید ولی تابع رندوم شما امنیت بالایی نداشته باشه، امنیت شما از امنیت تابع رندوم هرگز بالاتر نمیره، و بدیش اینه کسی هم بدون بررسی دقیق این کدها از چشم یک متخصص و آدم مطلع، متوجه ضعف موجود نمیشه.
البته PHP بخصوص در چندین سال پیش از نظر توابع و کتابخانه های رمزنگاری ضعف و نقص زیاد داشت، یعنی به هیچ وجه کامل نبود، ولی الان وضع ظاهرا بهتر شده، ولی همچنان نسبت به زبانهای دیگری مثل سی++ هنوزم امکانات محدودتر و قدیمی تری داره و خیلی جزییات و کارها رو خودت باید دقت کنی و انجام بدی. البته پایتون هم تاجاییکه دیدم چندان کامل و بروز نیست.
بهرحال بنده فکر میکنم در این برنامه بازهم خوب کار کردم، بطور مثال جلوی Replay attack رو گرفتم، که این کار زیاد هم ساده نبود و کلی کار و کدم بخاطر این پیچیده شد، البته بعدا به روش بهتری رسیدم و کدم رو خیلی ساده تر و مختصرتر کردم ولی اولش که تجربه نداشتم همین مسئله کلی پیچیدگی و کار افزوده ایجاد کرد چون یکسری مسائل مثل امکان چند درخواست HTTP همزمان رو پیشبینی نکرده بودم و میخواستم همه کار رو بصورت synchronous انجام بدم ولی بعد دیدم نمیشه و باید درخواستهای Asynchronous هم داشته باشم، و از اون طرف بنظرم خیلی برنامه ها میشه پیدا کرد که جلوی این حمله رو نگرفتن، بعد مثلا میتونستم از یک کلید رمزنگاری مشترک در کلاینت ها و سرور استفاده کنم، ولی گفتم بهتره به سرور هم اعتماد نشه و اگر به سرور نفوذ شد (یا مثلا خود وبمستر و مالک سرور و افراد دیگری که ممکنه براحتی به کدها و کلید ما روی سرور دست پیدا کنن) امنیت برنامه از بین نره، بخاطر همین کلید و رمزنگاری بین کلاینت ها و سرور جدای از رمزنگاری بین کلاینت هاست، اینطور مجبور شدم جلوگیری از Replay attack رو هم دوبار پیاده سازی کنم؛ و همهء اینها در دو زبان متفاوت، یکی PHP و یکی پایتون. خب میتونم بگم واقعا کار برد این برنامه و علاوه بر سواد و اطلاعات و دقت کافی در علم رمزنگاری، نیاز به مهارت و دانش برنامه نویسی بالایی هم داشت و کسی که هم برنامه نویسی دسکتاپ بلد بشه هم سمت سرور وب با PHP و هم از یکسری مسائل سیستم عامل سردربیاره (بعضی کارها در این برنامه از طریق دستورات پیشرفتهء خط فرمان سیستم عامل انجام میشه که نکات و مشکلات خودش رو داشت) و بتونه همهء اینا رو با هم ارتباط بده و ترکیب و سازگار کنه. بخاطر همین من فکر میکنم از نظر ارزش کدنویسی این برنامه ارزش کمی نداره، چون برنامهء کلیشه ای و روتینی نبوده بگیم مثلا نمونه و کدش براحتی هرجایی پیدا میشه و همینطور برمیداری کپی و پیست میکنی یا هرکسی میتونه بنویسه. برنامه های دیگر آماده و مثلا بازمتن هم مطمئن هستم بهرحال تمام خصیصه ها و امکانات مورد نظر منو همینطور از قبل و راحت آماده ندارن و اگر بخوای دستکاری کنی یا امکاناتی بهشون اضافه کنی بهرحال خودش کار زیادی میبره؛ دوما از نظر امنیت نمیشه همینطور به برنامهء دیگران اعتماد کرد و باید بشینی کدهاش رو بخونی و سردربیاری که اشتباه و ضعفی درش نباشه (اشاره کردم فقط به اسم و ادعا و کلیت روش های استفاده شده نیست که مثلا این برنامه از فلان الگوریتم های خفن پفن استفاده میکنه مطمئن بشی پس امنیتی رو که فکر میکنی داره). خلاصه باید به چشم یک کار سفارشی خاص به اینطور پروژه ها نگاه کرد، چون هم برنامش با بقیهء برنامه های بازاری و کلیشه ای فرق میکنه هم و برنامه نویسی که نیاز داره از بین صدتا برنامه نویس شاید یک نفر دانش و مهارت های کامل چنین کارهایی رو داشته باشه.

----------


## SZsXsZS

> توی این مقاله هم یک ادعاهایی شده که اگه درست باشه باید فاتحه امنیت رو خوند...
> https://freedom-to-tinker.com/2008/1...-certificates/


اینکه همون قضیهء سوء استفاده از MD5 است.
تاریخ مقاله هم مال 2008.
Certificate های جدید از MD5 استفاده نمیکنن.
در ضمن فکر کنم بیشتر مرورگرهای جدید اصلا گواهینامه هایی رو که از MD5 استفاده کرده باشن قبول نمیکنن!
کلا به تاریخ پیوست!
البته SHA1 هم همچین امن نیستا  :متفکر:

----------


## golbafan

> ارتباط رو بدون داشتن کلید رمزگذاری چطور میشه جعل کرد؟!!


وای خداااااا
چند بار باید توضیح بدم؟؟؟

اصلا اصلا اصلا قرار نیست دیتای نرم افزار شما رو کاری باهاش داشته باشیم. تا اینجا درست؟
قرار هم نیست کاری به رمز نگاری و کلید شما داشته باشیم...
*
بحث نفوذ به رایانه هست. رایانه ای که در بستر اینترنت داره ارتباط میگیره و با روش کار شما بایستی یک درگاه و کانال ارتباطی رو هر از گاهی و یا دائما باز کنه...
*



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

----------


## SZsXsZS

> بحث نفوذ به رایانه هست. رایانه ای که در بستر اینترنت داره ارتباط میگیره و با روش کار شما بایستی یک درگاه و کانال ارتباطی رو هر از گاهی و یا دائما باز کنه...


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

----------


## SZsXsZS

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

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

----------


## golbafan

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


در مورد P2P منظورت رو متوجه نمیشم! اگر منظورت اینه که سرور واسط فقط داره  نقش روتر رو بازی میکنه که میشه گفت ارتباط ppp هست و سرور فقط  بعنوان یک گره در شبکه هست.




> ضمنا ارتباط P2P هم اگر بود بهرحال مشکلی درش نمیبینم و این حرفا که شما میزنید عجیبه چون این همه برنامه های مختلف هست دارن از همین بند و بساط و داستان استفاده میکنن اگر قرار بود مشکل جدی داشته باشه که تمام سیستم ها و امنیت دنیا بهم میریخت!


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

اینو ببین
https://en.wikipedia.org/wiki/Private_network

----------


## golbafan

لایه های مختلف شبکه
Firefox_Screenshot_2017-02-13T10-32-41.952Z.png

منبع مطالعه
https://en.wikipedia.org/wiki/Internet_protocol_suite

----------


## SZsXsZS

بله اینا که گفتی اطلاع دارم.
اینا همونطور که خودت اشاره کرده به برنامهء من ربطی نداره و سطوح و لایه های دیگر است که اگر جایی نیاز بود خب میتونن پیاده کنن! اگر واقعا بنظرشون ارزشش رو داشت و صرف میکرد. وظیفهء من بعنوان یک برنامه نویس نوشتن یک برنامهء امن است که در شرایط و امکانات حداقلی هم حداکثر امنیتی رو که میشه تامین کرد داشته باشه. در خیلی موارد و جاها شاید صرف نکنه یا امکانات و منابع و دسترسی های لازم رو نداشته باشن که بتونن لایه های افزوده و این پیچیدگی ها رو اضافه و مدیریت کنن. هرچی لایه اضافه بشه و پیچیدگی زیاد بشه، طبیعتا هزینه ها و دردسرهای فنی و ناپایداری ها هم بطور معمول بیشتر میشن. حتی ممکنه خود اون پروتکل ها و برنامه های اضافی که استفاده میکنن ضعف هایی داشتن باشن و خودشون یجورایی راه نفوذ به سیستم رو باز کنن. بطور مثال طبق اسنادی که اسنودن فاش کرده، NSA تونسته به اکثر ارتباطهای V*P*N نفوذ کنه (میدونی که این ارتباطها خودشون رمز شده هستن). اینه گاهی استفاده از این فناوریها و لایه ها ممکنه خودشون یک توهم امنیت ایجاد کنن و باعث میشه در پایه و لایه های پایین تر و اصلی زیاد کار نشه و نرم افزارها خودشون از نظر امنیت ضعیف باشن. یا همون نرم افزارهای سمت سرور و کلاینت که شما برای تونل و V*P*N و این حرفا استفاده میکنی هم بالاخره ماهیتا نرم افزاری هستن مثل نرم افزارهای دیگر، و پورت و ارتباطات خودشون رو روی سیستم عامل و در شبکه/اینترنت باز میکنن، و از کجا میشه کاملا مطمئن بود خودشون باگ و حفره ای ندارن که از اون طریق مثلا به سیستم عامل کلاینت و سرور نفوذ بشه؟ خب احتمالش شاید زیاد نباشه، ولی بهرحال غیرممکن نیست و میدونیم که در دنیای کامپیوتر و نرم افزارها بارها حفره ها و ضعف ها در تمام نرم افزارها کشف شدن و میشن و این وسط هیچ نرم افزاری استثناء نیست.

بهرحال هم شما یک بحث دیگر رو پیش کشیدی و خوب هم روشن نکردی؛ ببین چطور صحبت کردی:



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


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

----------


## SZsXsZS

> برنامه من اشکالش از نظر خودم کمبودهای مهمش ایناست:
> - باید برای هر جلسه ارتباطی یک session key جدید ایجاد و استفاده بشه (الان همیشه از master key استفاده میشه).
> - مسئلهء پیچیده تر forward secrecy که نداره. برای این منظور باید از الگوریتم ها/پروتکل های پیشرفته ای استفاده کرد که باعث میشن اگر کلید اصلی دست نفوذگر بیفته با این حال نتونه ارتباطات قبلی رو رمزگشایی کنه. البته این یک ویژگی پیشرفته است که فکر میکنم خیلی از نرم افزارهای دیگر هم ندارن، ولی بهرصورت چیز خوبیه دیگه!! من دنبالش نرفتم دقیق نمیدونم چطور باید پیاده اش کرد، اونم برنامهء من که ارتباطش از طریق HTTP است و حالت سوکت مستقیم و پایدار نداره شاید به همین خاطر از یکسری کتابخانه های مربوطه نشه درش استفاده کرد.
> - امکانی برای تغییر کلید از راه دور (از طریق سمت مانیتورینگ) باید بهش اضافه کنم ویژگی مفیدیه (هم کلید کلاینت ها و هم کلید سرور واسط رو بشه توسط برنامهء کنترل تغییر داد).
> 
> بقیش دیگه نمیفهمم چی میگی اصلا منظورت چیه! بنظرم باید بیشتر توضیح بدی. دقیقا بگو اشکال برنامهء من کجاست چطوری چه حمله و نفوذ یا سوء استفاده ای ازش ممکنه.


فکر کردم دیدم وقتی forward secrecy رو پیاده نمیکنیم، چه ضرورتی برای session key هست؟  :متفکر: 
حقیقتش هم نیازی نیست!
اینجا هم پرسیدم گفتن ضرورت نداره: http://crypto.stackexchange.com/ques...-key-each-time
البته اینکه میگیم ضرورت نداره یعنی حیاتی نیست، ولی تحت بعضی شرایط میتونه فوایدی داشته باشه بهرحال، ولی در کاربردهایی که خیلی مهم و حساس نیستن فکر نمیکنم ارزش پیاده سازی داشته باشه.
البته در برنامهء بنده کلید اصلی هم مستقیما استفاده نشده و توسط HKDF، دو کلید یکی برای AES و دیگری برای HMAC ازش مشتق شده. ولی حتی این هم مطمئن نیستم ضرورت داشته باشه، ولی خب ضرری هم نداره و بهرحال وقتی میخوایم از کلید اصلی یک کلید دیگر هم مشتق کنیم (برای HMAC)، بهرحال باید از HKDF استفاده کنیم و بنابراین از نظر کد فرق چندانی نمیکنه که از کلید اصلی مستقیم استفاده کنیم یا نه.

----------


## golbafan

> فکر کردم دیدم وقتی forward secrecy رو پیاده نمیکنیم، چه ضرورتی برای session key هست؟ 
> حقیقتش هم نیازی نیست!
> اینجا هم پرسیدم گفتن ضرورت نداره: http://crypto.stackexchange.com/ques...-key-each-time
> البته اینکه میگیم ضرورت نداره یعنی حیاتی نیست، ولی تحت بعضی شرایط میتونه فوایدی داشته باشه بهرحال، ولی در کاربردهایی که خیلی مهم و حساس نیستن فکر نمیکنم ارزش پیاده سازی داشته باشه.


خب این برای p2p و شبکه های محلی درسته البته...
ولی وقتی بخوای این رو در اینترنت پیاده سازی کنی  باید به تولید سیشن ها دقت کنی تا هر کسی نتونه خودشو جای تو جا بزنه و یک  سیشن جعلی درست کنه و نرم افزار رو گول بزنه. ولی همونطور که گفتی این  مساله رو باید بزاری روی الاکلنگ تا بر اساس اهمیت نرم افزار و معروف بودنش  در جامعه جهانی روی امنیتش هم از سرمایه وقت و انرژی صرف کنی! مثلا نرم افزار تلگرام به علت وجود تعداد زیادی کاربر در دنیا و البته تبادل حجم زیاد اطلاعات مجبوره forward secrecy رو رعایت کنه. چون اعتبارش به اینه که بتونه امنیت کاربراش رو تامین کنه... (حالا کاری نداریم که خودش ممکنه اطلاعات کاربراشو بفروشه)




> البته در برنامهء بنده کلید اصلی هم مستقیما استفاده نشده و توسط HKDF، دو کلید یکی برای AES و دیگری برای HMAC ازش مشتق شده. ولی حتی این هم مطمئن نیستم ضرورت داشته باشه، ولی خب ضرری هم نداره و بهرحال وقتی میخوایم از کلید اصلی یک کلید دیگر هم مشتق کنیم (برای HMAC)، بهرحال باید از HKDF استفاده کنیم و بنابراین از نظر کد فرق چندانی نمیکنه که از کلید اصلی مستقیم استفاده کنیم یا نه.


اینکه فرق چندانی میکنه یا نه رو دقیقا نمیدونم. ولی فکر میکنم این که کلید ها رو به این شکل مشتق میکنن یک استاندارد هست برای رعایت بهتر فکر کنم randomness و اعتماد بیشتر به سیستم...

----------


## SZsXsZS

دیروز که به crypto.stackexchange.com سر زدم تعدادی موضوع جالب دیدم که خوندم، همینطور سرنخ ها رو گرفتم رسیدم به مقاله های دیگه، خلاصه یه 20 تایی موضوع و بحث رو خوندم، گذارم به ویکیپدیا هم افتاد، اونجا هم یه 20 تا مقالهء دیگه خوندم! خلاصه روز پرباری بود  :چشمک: 
علم رمزنگاری خیلی گسترده است و مدام هم بروز میشه؛ آدم توی این رشته باید چند وقت یک بار دوباره تحقیق و مطالعه بکنه تا بروز باشه.
راستی یه الگوریتم رمزنگاری دیدم توی ویکیپدیا که فقط چند خطه  :متعجب: 
https://en.wikipedia.org/wiki/Speck_%28cipher%29
اینم کدش:
#include <stdint.h>

#define ROR(x, r) ((x >> r) | (x << (64 - r)))
#define ROL(x, r) ((x << r) | (x >> (64 - r)))
#define R(x, y, k) (x = ROR(x, 8), x += y, x ^= k, y = ROL(y, 3), y ^= x)
#define ROUNDS 32

void encrypt(uint64_t const pt[static 2],
             uint64_t ct[static 2],
             uint64_t const K[static 2])
{
   uint64_t y = pt[0], x = pt[1], b = K[0], a = K[1];

   R(x, y, b);
   for (int i = 0; i < ROUNDS - 1; i++) {
      R(a, b, i);
      R(x, y, b);
   }

   ct[0] = y;
   ct[1] = x;
}
موضوع اینه الگوریتم درست و حسابی هم هست ظاهرا، چون توسط متخصصان NSA طراحی شده.
البته فکر نمیکنم امنیتش بتونه با AES برابری بکنه!

----------


## golbafan

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

در مقاله زیر از این روش برای استفاده در حوزه اینترنت اشیا و سخت افزارها و نرم افزارهای سبک (از نظر پردازش) نام میبره:
در مقدمه میگه که NSA این الگوریتم ها رو برای جاهایی که نمیشه از AES استفاده کرد طراحی کرده. پس میشه حدس زد که قدرتش کمتر از AES هست و سرعتش بسیار بیشتر و استفاده از منابع سیستم بسیار کمتر!
http://csrc.nist.gov/groups/ST/lwc-w...hors-paper.pdf

یکی از دلایلی که میاره اینه که مثلا میگه AES-128 میتونه روی GE>2400 و یا میکرو کنترلرهای 8 بیت به بالا پیاده بشه 
در حالی که برای برخی سخت افزارها و میکرو کنترلرهای حوزه Beacon و اینترنت اشیا که پردازنده 4 بیت دارند نمیشه از AES بهره برد!
---

Untitled.jpg

----------


## negative60

> راستی یه الگوریتم رمزنگاری دیدم توی ویکیپدیا که فقط چند خطه 
> https://en.wikipedia.org/wiki/Speck_%28cipher%29
> اینم کدش:
> #include <stdint.h>
> 
> #define ROR(x, r) ((x >> r) | (x << (64 - r)))
> #define ROL(x, r) ((x << r) | (x >> (64 - r)))
> #define R(x, y, k) (x = ROR(x, 8), x += y, x ^= k, y = ROL(y, 3), y ^= x)
> #define ROUNDS 32
> ...


خیلی‌ وقت بود دنبال یه الگوریتم سریع و با امنیت متوسط/خوب میگشتم احتمالا به درد من میخوره (بهتره برای موضوعاتی که به این تاپیک ربطی‌ نداره تو بخش خودش تاپیک ایجاد بشه)

البته الگوریتم با قدرت AES همین حالا هم وجود داره chacha20-poly1305 که چند ساله اجرایی شده و دنیا رمزنگاری الگوریتم جدیدی به حساب میاد در حال حاضر خیلی‌ از غولهای‌ اینترنتی مثل گوگل, فیسبوک, کلود فلار, ویزا کارت و... به این الگوریتم مهاجرت کردن به دلیل اینکه در کنار امنیت خوبش پرفورمنس خیلی‌ خوبی‌ هم داره تو رمزنگاری فقط امنیت مهم نیست چیزی که به اندازه امنیت مهم هست سرعت پردازش هست که می‌تونه هزینه‌های سرور‌های بزرگ رو به مقدار قابل توجی کاهش بده و همچنین تو کامپیوترهای جیبی‌ هم باعث می‌شه انرژی کمتری صرف پردازش بشه که باعث صرفه جویی در مصرف باطری می‌شه

این نتایج بنچمارک الگوریتمهای مختلف رو کامپیوتر منه:
type            	16 bytes     64 bytes     256 bytes    1024 bytes   8192 bytes   16384 bytes
chacha20-poly1305    	81109.32k    145302.35k   246685.76k   258933.31k   263730.33k   264456.20k
chacha20        	115274.44k   198422.90k   390654.99k   405981.39k   410297.62k   411064.72k
aes-128-cbc          	69128.70k    78088.70k    81174.07k    81249.24k    79965.24k    80604.32k
aes-256-cbc      	51901.55k    55649.78k    57602.00k    57891.29k    57943.07k    58040.60k
aes-128-gcm          	36732.21k    43238.44k    96182.36k    103388.09k   104936.15k   104886.04k
aes-256-gcm      	28769.41k    33372.52k    80532.20k    87074.71k    88707.66k    88794.52k
aes-128-ctr          	46843.66k    54598.40k    172586.67k   194556.28k   201581.48k   202342.40k
aes-128-ofb          	65602.52k    74269.11k    76572.21k    77349.14k    77355.48k    77549.08k
des-cbc              	31732.41k    35228.92k    36133.79k    36337.52k    36516.88k    36360.30k
camellia-128-cbc     	46407.84k    72056.02k    83611.60k    86968.04k    88196.77k    87988.77k
bf-cbc           	55239.62k    63547.59k    66546.55k    67155.03k    67229.94k    67202.55k


با اینکه chacha20 به صورت پیشفرض از کلید ۲۵۶ بیتی استفاده می‌کنه اما از تمام مدهای جدید و قدیمی‌ AES-128 و الگوریتم‌های دیگه هم سریعتره البته الگوریتم poly1305 که برای اصالت سنجی در این رمزنگاری استفاده شده خودش از AES استفاده می‌کنه.

----------


## SZsXsZS

در این PDF حرفهای جالبی زده: http://www.bsdcan.org/2010/schedule/..._crypto1hr.pdf
البته بیشترش اطلاعات عمومی هست که قبلا میدونستم، ولی بعضیاش جالب تره. مثلا گفته از Poly1305 استفاده نکنید؛ علتش اشاره کرده ظاهرا بخاطر حساسیت و مشکل بودن پیاده سازیش هست:
AVOID: Poly1305
If your name is Daniel Bernstein, go ahead and use this Otherwise, you’re never going to produce a secure and correct implementation

همچنین توصیه کرده:
DON’T: Use modes which provide both encryption and authentication
یعنی از مدهایی مثل EAX و GCM استفاده نکنیم!
البته بنده هم در جریان بحث ها اشاره کرده بودم که جایی خوندم که از بعضی لحاظ این مدها رو مقداری ضعیف تر از روشهای قدیمی تر کلاسیک مثل AES+HMAC میدونست.
کلا یه الگوریتم جدید که میاد نباید فکر کرد لزوما از همه جهت بهتر و امن تره. بعضی وقتا ضعف هایی دارن. پس باید مطالعه و تحقیق کرد و زیاد عجله نکرد. الگوریتم ها و مدهای قدیمی جا افتاده مثل AES و CBC و HMAC ضریب اطمینان خوبی دارن، چون در طول سالها امتحان خودشون رو پس دادن، حسابی تحلیل شدن، ولی الگوریتم های جدید هنوز خیلی نمیشه مطمئن بود و ممکنه بعدا کسی درشون ضعفی پیدا کنه.

ضمنا نویسندهء این مقاله Colin Percival رو میشناسم، مخترع الگوریتم scrypt هستن (کم کسی نیست  :چشمک: )

----------


## golbafan

> البته الگوریتم با قدرت AES همین حالا هم وجود داره chacha20-poly1305 که چند ساله اجرایی شده و دنیا رمزنگاری الگوریتم جدیدی به حساب میاد در حال حاضر خیلی‌ از غولهای‌ اینترنتی مثل گوگل, فیسبوک, کلود فلار, ویزا کارت و... به این الگوریتم مهاجرت کردن به دلیل اینکه در کنار امنیت خوبش پرفورمنس خیلی‌ خوبی‌ هم داره تو رمزنگاری فقط امنیت مهم نیست چیزی که به اندازه امنیت مهم هست سرعت پردازش هست که می‌تونه هزینه‌های سرور‌های بزرگ رو به مقدار قابل توجی کاهش بده و همچنین تو کامپیوترهای جیبی‌ هم باعث می‌شه انرژی کمتری صرف پردازش بشه که باعث صرفه جویی در مصرف باطری می‌شه
> با اینکه chacha20 به صورت پیشفرض از کلید ۲۵۶ بیتی استفاده می‌کنه اما از تمام مدهای جدید و قدیمی‌ AES-128 و الگوریتم‌های دیگه هم سریعتره البته الگوریتم poly1305 که برای اصالت سنجی در این رمزنگاری استفاده شده خودش از AES استفاده می‌کنه.


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

----------


## golbafan

> If your name is Daniel Bernstein, go ahead and use this Otherwise, you’re never going to produce a secure and correct implementation


فکر کنم قصدش کل کل با Daniel Bernstein بوده.  :قهقهه:

----------


## negative60

> در این PDF حرفهای جالبی زده: http://www.bsdcan.org/2010/schedule/..._crypto1hr.pdf
> البته بیشترش اطلاعات عمومی هست که قبلا میدونستم، ولی بعضیاش جالب تره. مثلا گفته از Poly1305 استفاده نکنید؛ علتش اشاره کرده ظاهرا بخاطر حساسیت و مشکل بودن پیاده سازیش هست:
> AVOID: Poly1305
> If your name is Daniel Bernstein, go ahead and use this Otherwise, you’re never going to produce a secure and correct implementation
> 
> کلا یه الگوریتم جدید که میاد نباید فکر کرد لزوما از همه جهت بهتر و امن تره. بعضی وقتا ضعف هایی دارن. پس باید مطالعه و تحقیق کرد و زیاد عجله نکرد. الگوریتم ها و مدهای قدیمی جا افتاده مثل AES و CBC و HMAC ضریب اطمینان خوبی دارن، چون در طول سالها امتحان خودشون رو پس دادن، حسابی تحلیل شدن، ولی الگوریتم های جدید هنوز خیلی نمیشه مطمئن بود و ممکنه بعدا کسی درشون ضعفی پیدا کنه.
> 
> ضمنا نویسندهء این مقاله Colin Percival رو میشناسم، مخترع الگوریتم scrypt هستن (کم کسی نیست )


خوشبختانه ما قرار نیست خودمون این الگوریتم‌ها رو پیاده سازی کنیم و کتاب خونه‌های معتبری هستند که این کارها رو قبلان انجام داده اند
بله این الگوریتم فکر کنم تقریبا ۲ ساله که اجرایی شده و چند ماهه‌ به OpenSSL اضافه شده هدفش این بوده یک پشتیبان برای AES باشه نه جایگزین و هنوز باید تست بشه, ولی‌ از اونجایی که شرکت‌های بزرگی دارن ازش استفاده می‌کنن این نشون میده توی تست های اونها نمره قبولی رو گرفته و می‌تونیم ازش استفاده کنیم




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


اهمیتی نداره نوعش چی‌ باشه! مهم نتیجه هست این الگوریتم استاندارد شده تا توی SSL/TSL استفاده بشه همانطور که گفت شد گوگل و سایرین دارن از این الگوریتم استفاده می‌کنن و امنیتش کمتر از AES گفته نشده 
اینکه فکر می‌کنید که مقایسه AES و chacha20-poly1305 یا استفاده از chacha20-poly1305 اشتباه هست میتونید با مدیران شبکه و امنیت گوگل و... مکاتبه کنید که نباید تو ارتباطات SSL/TSL از این الگوریتم استفاده کنند یا میتونید بیرد تو بلاگ کلود فلار اعتراض کنید که چرا AES رو با chacha20 مقایسه کرده

----------


## golbafan

> اینکه فکر می‌کنید که مقایسه AES و chacha20-poly1305 یا استفاده از chacha20-poly1305 اشتباه هست میتونید با مدیران شبکه و امنیت گوگل و... مکاتبه کنید که نباید تو ارتباطات SSL/TSL از این الگوریتم استفاده کنند یا میتونید بیرد تو بلاگ کلود فلار اعتراض کنید که چرا AES رو با chacha20 مقایسه کرده


سلام
فکر نمیکم... مطمئن هستم! 

اولا بنده کجای صحبتم گفتم استفاده از chacha20-poly1305 اشتباه است ؟؟؟؟؟؟؟؟؟؟؟؟؟  :متفکر:  چرا مغلطه میکنی داداش؟

بله، این مقایسه اشتباهه. دقیقا مثل این میمونه که میخ رو با پیچ مقایسه کنید... و بگید فلان میخ بهتر یا بدتر از فلان نوع پیچ هست!!!
شما دقیق تر مطالعه کنید متوجه میشید که گوگل RC4 رو با chacha20 جایگزین کرده و این ربطی به AES و استفاده گوگل نداره. قبلا هم گفتم هرچیزی رو بهر کاری ساختند :لبخند گشاده!: 
در ارتباطاتی که سابقا از RC4 استفاده میکرده اومده بجاش داره از chacha20 استفاده میکنه چون امنیت بهتری نسبت به RC4 داره
در این صفحه https://en.wikipedia.org/wiki/Salsa20 قسمت ChaCha20 adoption رو مطالعه کنید

در مورد blog.cloudflare.com:
لطفا دلیل علمی بیارین و از نظر الگوریتم و تئوری حرفتون رو اثبات کنید. اینکه فلان وبلاگ غیر تخصصی چی گفته و شما چی برداشت کردید دلیل نمیشه...
من این وبلاگ رو دیدم و تنها مقایسه هایی که درش بود مربوط به سرعت و مقدار بار سخت افزاری بود و ربطی به کاربرد و امنیت نداشت

حرف نهایی:
من هم AES رو با CHACHA مقایسه نکرده و نمیکنم. چون هرکدوم برای جای خاص خودش کاربرد داره و هر دو در جای خودش فعلا در دنیا خیلی خوب هستند. اما خوبه بدونید در تئوری و البته عملا chahcha20 سرعت بالاتری داره. علتش استفاده از ARX هست که با cpu سازگارتره. میتونید add-rotate-xor رو مطالعه کنید

----------


## negative60

> اولا بنده کجای صحبتم گفتم استفاده از chacha20-poly1305 اشتباه است ؟؟؟؟؟؟؟؟؟؟؟؟؟  چرا مغلطه میکنی داداش؟





> الگوریتم های مبتنی بر استریم سرعت خیلی بالاتری نسبت به الگوریتم های مبتنی بر بلوک دیتا دارند! ولی هرچیزی رو بهر کاری ساختند...


تنها برداشتی که از این جمله می‌تونم کنم اینه که این الگوریتم مناسب این کار نیست






> بله، این مقایسه اشتباهه. دقیقا مثل این میمونه که میخ رو با پیچ مقایسه کنید... و بگید فلان میخ بهتر یا بدتر از فلان نوع پیچ هست!!!


مشکل تفکر شما دقیقا اینجا مشخص می‌شه تمام این الگوریتم‌ها و تکنیک‌ها فقط ابزاری در دست برنامه نویس هستند تا یک ایده رو عملی‌ کنند عرض کردم نتیجه کار مهم هست حالا هیچ اهمیتی نداره تو یه ارتباط از چه نوع الگوریتمی استفاده شده باشه 
شما نمیتونید از یه نجار که یک اثر/محصول فوق‌العاده‌ خلق کرده ایراد بگیرید قبول نیست از پیچ بجای میخ استفاده کردی! 




> شما دقیق تر مطالعه کنید متوجه میشید که گوگل RC4 رو با chacha20 جایگزین کرده و این ربطی به AES و استفاده گوگل نداره. قبلا هم گفتم هرچیزی رو بهر کاری ساختند
> در ارتباطاتی که سابقا از RC4 استفاده میکرده اومده بجاش داره از chacha20 استفاده میکنه چون امنیت بهتری نسبت به RC4 داره
> در این صفحه https://en.wikipedia.org/wiki/Salsa20 قسمت ChaCha20 adoption رو مطالعه کنید


کی‌ چنین چیزی گفتم؟ خیلی‌ خوشحال میشم اگر جمله ایی که گفتم گوگل chacha20-poly1305 رو جایگزین AES کرده رو نشونم بدید! عرض کردم گوگل و سایرین به این الگوریتم مهاجرت کردن. این نشون دهند اینه امنیتش به اندازه AES هست چون از AES و الگوریتم‌های موجود دیگه هم می‌تونن توی ارتباطات TSL استفاده کنن ولی‌ به دلایل خودشون این کار رو نکردن همانطور که بعضی‌ از سایتها از AES-GCM تو TSL استفاده می‌کنن یا یه سایت مثل whatsapp از هر دو استفاده می‌کنه این یک گزینه انتخابیه و هیچ اجباری یا محدودیتی در کار نیست




> در مورد blog.cloudflare.com:
> لطفا دلیل علمی بیارین و از نظر الگوریتم و تئوری حرفتون رو اثبات کنید. اینکه فلان وبلاگ غیر تخصصی چی گفته و شما چی برداشت کردید دلیل نمیشه...
> من این وبلاگ رو دیدم و تنها مقایسه هایی که درش بود مربوط به سرعت و مقدار بار سخت افزاری بود و ربطی به کاربرد و امنیت نداشت
> 
> حرف نهایی:
> من هم AES رو با CHACHA مقایسه نکرده و نمیکنم. چون هرکدوم برای جای خاص خودش کاربرد داره و هر دو در جای خودش فعلا در دنیا خیلی خوب هستند. اما خوبه بدونید در تئوری و البته عملا chahcha20 سرعت بالاتری داره. علتش استفاده از ARX هست که با cpu سازگارتره. میتونید add-rotate-xor رو مطالعه کنید


چی‌ رو باید ثابت کنم؟؟ اگر فکر می‌کنید امنیت chacha20 مشکل داره یا ضعیف هست این رو شما باید به اثبات برسونید نه من



> الگوریتم chacha20 از نوع stream cipher هست و هیچ وقت نباید با الگوریتمهای بلوکی مقایسه بشه (چه از نظر امنیت و چه سرعت).


 اینکه کلود فلار رو غیر تخصصی می‌دونید به کنار با کوچیک شمردن دیگران کسی‌ بزرگ نمی‌شه تو بلاگ کلودفلار AES-GCM از لحاظ پرفورمنس با chacha20-poly1305 مقایسه کرده و هیچ اشکالی‌ در این قضیه نمی‌بینم

----------


## SZsXsZS

> فکر کنم قصدش کل کل با Daniel Bernstein بوده.


اینجا پرسیدم: http://crypto.stackexchange.com/ques...rcival-correct
 :چشمک:

----------


## golbafan

البته NSA روی پروژه ای به نام groundbreaking برای کرک کردن و رمز گشایی کلیه ارتباطات اینترنت بجای دور زدن های دولتی داره کار میکنه که سالیهنه 11 میلیارد دلار هم بودجه پروژه هست: 
https://arstechnica.com/security/201...cking-program/

----------

