• اگر سمپادی هستی همین الان عضو شو :

    ثبت نام عضویت

مباحث جذاب رمزنگاری!

  • شروع کننده موضوع شروع کننده موضوع tiberium
  • تاریخ شروع تاریخ شروع
اگ خرابکاری کنن خودشونم‌ نمیتونن ترکیب رنگو پیدا کنن... ولی خب اون دوتا زبون بسته هم نمیتونن ترکیب یکسان بسازن :D
حالا چرا نامه رسونا نمیتونن ترکیب رنگو پیدا کنن؟ چون نمیدونن ب چه نسبت باس از هر رنگ بردارن:‌)))))
مگر اینکه یک سطل خالی مشابه سطلای آلیس و باب داشته باشن... :|
لنتی خب چجوری شماها اطلاعات میدین بدون اینکه کسی بفهمه؟ :/
خب الان با داشتن سطل خالی بازم اونا میتونن بفهمن

فقط یه راه می‌مونه
نسبتها رو مثل آدم روی یه کاغذ مینویسن میندازن توی یه کیسه
کیسه رو میندازن توی سطل رنگ میفرستن واسه هم :))
دیگه بعید میدونم نامه‌رسونا انقدر فضول باشن که دست بندازن توی رنگ :))
هیچ گونه فرض این شکلی نمیشه کرد. نامه رسان ها کاملا هم فضول هستن که دنبال پیدا کردن رنگ داخل اتاق هستن!



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

یکی از افراد یه پیغام میده به طرف دیگه که همچین ترکیب رنگی رو به عنوان پایه شروع کن.
پس اولین پیغام : مثلا پایه ترکیب رنگی ما ترکیب 2 کیلو از هر رنگ .
این پیغام رو همه میبینن! و همه از جمله نامه رسان ها میفهمن که پایه ترکیب 2 کیلو از هر رنگه.
بعد ازش می خوام یه ترکیب مخفی مثل X برا خودش بسازه! و بهش می گم خودم هم یه ترکیب متفاوت Y برای خودم میسازم.
بعد ازش می خوام X رو با رنگ پایه که ساختیم ترکیب کنه و برام بفرسته . و من هم موازی همین کار رو می کنم .

پس من یه سطل ازش میگیرم که X+base هست . و اون یه سطل از من میگیره که حاول Y+base هست.
افرادی که نامه رسان هستن میدونن base چیه ولی وقتی X+base یا Y+base رو میبینن نمیتونن X و Y رو بدست بیارن که چه ترکیب رنگی هست.
سطلی که من از طرف گرفتم X+base هست. حتی خود من هم نمیدونم X چیه ولی مهم نیست. من ترکیب مخفی خودم رو دوباره به این سطل اضافه می کنم . و اون هم ترکیب مخفی خودش رو به سطلی که من دادم اضافه می کنه. هر دو میشیم X+Y+base!!!!
ولی حالا با اون سطلی که جابجا شد اون اول نمیتونن بدست بیارن رنگ رو ؟ مثلا با ترکیب 2 سطل. خیر
یکی X+base هست. یکی Y+base . اگر این دو ترکیب بشن میشه X+Y+2 * base . و وقتی رنگا ترکیب شده باشن اینا نمیتونن مثلا 2 کیلو آبی از یه چیز ترکیب شده جدا کنن مثلا!
 
این در رابطه با سوال رنگ ها

Diffie-Hellman_Key_Exchange.svg


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

حالا من اگر تابع y= g ^ x mod p داشته باشم. یعنی g رو به توان x برسونم و باقیماندش رو به P حساب کنم و نمایش بدم . با داشتن y,g,P حساب کردن x یه مساله سخت به حساب میاد . با این میگن مساله ی لگاریتم گسسته

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


مساله َشیر یا خط هم هنوز مونده :دی
 
خب دوستان من یکم سوالای فنی تر میزارم. که حالا لزوما دانش خیلی زیادی هم نخوان . به همین چیزایی که تا الان خوندیم حل میشن.

همچین معادله ای وجود داره . x+y=7 . (میدونم مثال ساده ای هست ولی صرفا برای آشنایی با موضوع هست ) یکی می خواد به من اثبات کنه که یه x و y میدونه که تو این معادله صدق می کنه. از طرفی نمی خواد هیچ اطلاعاتی راجع به x و y هم بده بهم.
 
خب نمیدونم اصن همچیین راهی درسته یا نه
ولی مثلا میتونیم یه معادله خط دگ بهش بدیم
بگیم این خط عمود بر اون خطیه ک تو دادی و اگ این معادلاتو در هم صدق بدی دوتا نقطه بدست میاد
البته خب اون میتونه دقیقا دو تا نقطه رو بدست بیاره :/
مثلا معادله خط x=y
خب بدست میاد دیگه. فرض کن تو می‌خوای یه اثبات بزاری کنار این ادعات . که تو دنیا همه بتونن بررسی کنن . و از طرفی x y رو نفهمن
 
بچه ها من این مسئله شیر یا خط رو از یک نفر پرسیدم گفت خودت برو جواب رو پیدا کن با هش حل میشه
بعد الان یه نفر بیاد به من هش رو توضیح بده:D
 
ببین hash یه مفهوم خیلی ساده ای داره. توی کامپیوتر همه چیز توی مبنای 2 هست و 0 یا 1 هست. هر ورودی ای. هر متنی. هرچیزی تهش تبدیل میشه به 0 یا 1.
hash یه تابع هست که هر ورودی ای با هر سایزی رو تبدیل میکنه به یه خروجی با سایز فیکس. مثلا 256 بیتی. یعنی من اگر ورودی 3 بیتی بهش بدم و یا یه ورودی 10 میلیون بیتی بهش بدم خروجی ای که به من میده یه خروجی 256 بیتی هست .
ما چند تا خروجی داریم ؟ 2 به توان 256. (عدد خیلی بزرگیه ) و چند تا ورودی داریم ؟ بینهایت تا.
پس قطعا یه سری ورودی ها هستن خروجی هاشون یکساینه ( به نسبت باید بدیهی باشه چرا . لانه کبوتری)
ما به همچین چیزی میگیم collision . اینکه 2 تا پیغام پیدا کنیم که خروجی یکسان داشته باشن.
تابع hash ای امن هست که پیدا کردن collision توش از لحاظ محاسباتی سخت باشه . ( سخت به صورت خودمونی یعنی با توان پردازشی ای که داریم مثلا چندین قرن طول بکشه حتی ! برای پیدا کردن یک collision)
حالا بیاید یه تابع از خودمون در بیاریم و بررسی کنیم که این امن هست یا نه. مثلا فرض کنیم همچین تابعی. میگم اگر ورودی از 256 بیت بزرگتر بود فقط 256 سمت چپش رو به عنوان خروجی میدیم. و اگر کمتر از 256 بیت بود به تعداد بیت های کمترش 0 میزاریم مثلا.
آیا این تابع خوب به حساب میاد ؟ نه . حالا ببینیم چرا :
مثلا ورودی 110 : خروجیش میشه 00000....1100000000000
و ورودی 1100 : خروجیش میشه 00000....1100000000000

یا مثلا
ورودی : 1 1111..111111111( که تعداد 1 های اون اول 256 تاست و کلش 257 بیته )
ورودی : 0 1111..111111111 ( همون 257 بیت فقط آخرین بیت سمت راست 0 شده )
الان این 2 تا هم خروجی های یکسان دارن. پس من خیلی راحت دارم اینجا collision پیدا می کنم که این خوب نیست
 
حالا اصلا این به چه دردی میخوره ؟ به درد های خیلی زیاد !
همونجور که گفتیم توابعی که الان هستن اثبات شده که از لحاظ محاسباتی پیدا کردن collision سخت هست. مثلا SHA-256 یک نمونش هست که توی بیت کوین هم استفاده میشه! اصل و پایه امنیت بیت کوین و بلاک چین تقریبا فقط همین مساله هست! سخت بودن یافتن collision!

استفاده اول اینه من که یه متنی میفرستم در کنار متنم Hash اون رو هم میفرستم ( که فقط 256 بیته و کوتاهه ) . شاید توی راه یه بیت یا بیشتر دچار تغییر بشه به اشتباه. کسی که اونور هست میاد Hash ورودی من رو محاسبه می کنه و با اون Hash که کنار پیغامم دادم مقایسه می کنه. اگر این دو تا یکسان بودن میفهمه توی دیتا تغییری ایجاد نشده مگرنه میگه که دوباره بفرست.

استفاده دوم : گوگل و سایت های امن پسورد های ما رو به صورت پسورد سیو نمی کنن! چون اگر سرور هک بشه پسورد لو میره . اونا چیزی که سیو میکنن Hash پسورد ها هست . وقتی من می خوام وارد سایت گوگل بشم و پسوردم رو میزنم در واقع دارم Hash رو محاسبه می کنم و براشون میفرستم و اونا این رو با چیزی که سیو شده مقایسه می کنن. اگر Hash ها یکسان باشه تقریبا میشه مطمئن بود که من پسورد رو میدونم! .
اگر سایتی رو هک کرده باشین و دیتابیس رو داشته باشین میبینید که معمولا پسوردها که ذخیره شدن به صورت هش هست. یعنی من نمیتونم بفهمم پسورد افراد چیه. دونستن هش هم بهم کمکی نمی کنه چون از روی هش نمیشه ورودی رو پیدا کرد ( یه تابع یک طرفه هست ) پس تنها کاری که برام میمونه اینه که بیام کلمات مختلف رو هش بگیرم و ببینم آیا اینا با هم برابرن یا نه.
برای همینه که میگن پسورد های بلند بزارید با داشتن حروف کوچیک و بزرگ و ... . از طرفی بررسیش خیلی زمان بر هست.
و همینطور اگر پسورد 123456 بزارید مثلا ( این هش هست با SHA-256 )
8D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92

من اگر یه سایت رو هک کنم و ببینم هش پسورد یکی همینه میفهمم 123456 هست. پس پسورد ها بهتره که پر استفاده نباشه ( یعنی برای خودتون خاص باشه تا اینکه پسورد های مثل 1234567890 , asdfgh , 1111111 استفاده کنید! )
 
بسیار کاربرد های دیگه هم داره که حالا بیاید شیر یا خط رو با این حل بکنیم :دی
 
فکر کنم یافتم
ببین فرض کنیم که آلیس و باب قبلا روی یک تابع هش خاص توافق کردن
آلیس یک عدد درست (بدون اعشار و بیشتر از یک) انتخاب می کنه در ذهنش(اسمش رو میذاریم A)
و باب هم یک عدد درست انتخاب میکنه در ذهنش (اسمش رو میذاریم B)
باب به آلیس B رو میگه
بعد آلیس سکه رو میندازه
یا شیر میاد یا خط (مثلا برای شیر عدد S رو در نظر میگیریم و برای خط K رو و این موضوع رو هر دو طرف می دونن)
حالا اگه شیر اومد
آلیس هش این عدد رو میگیره SAB
یا اگه خط اومد
KAB
بعد این عدد رو به باب میگه و بعد از باب میخواد که بگه شیر اومده یا خط
حالا باب یک کدوم رو میگه (یا شیر یا خط)
و آلیس یا تایید میکنه
یا تکذیب
بعد از این
...
باب از آلیس عددش رو (که همون A باشه) میپرسه
حالا باید جواب آلیس رو چک کنه
پس این بار باب هش میگیره!
باید جواب هش باب با جواب هش آلیس یکی بشه تا باب بفهمه که آلیس قبلا راست گفته و واقعا درصد جواب درست ۵۰ ۵۰ بوده ...

پ.ن: هش چقدر چیز به درد بخوریه! یه تابعه که نمیشه معکوسش کرد و خلاصه خیلی باحاله!!
پ.ن۲: ممنون از توضیح کاملت @tiberium
 
آخرین ویرایش:
هممممم
مثلا منظورت از اثبات یه همچین چیزیه؟
اینکه بگم:
من یه معادله خط به صورت y=x+a دارم. به ازاء هر a ای اگر معادله ی من رو با معادله ی اولیه تطابق بدین، یک x و y منحصر به فرد بدست میاد...
و این نقض نمیشه چون اشتراک دو خط متقاطع (که در اینجا عمود برهم در نظر گرفته شدن) فقط و فقط یک نقطه است که روی هر دو تا خط وجود داره. پس اثبات میشه.
ببین منظورت از اثبات به زبان عمومی، همون اثبات ریاضیه؟ ینی اینجوری توضیح دادن اوکی نیس؟ :‌))
معادله اولیه چیه؟ توضیح هم اوکیه ولی چیزی که بفهمم :))) یکم گیجم من:دی
 
Back
بالا