560 likes | 792 Views
Cryptography. DES & RSA. رمزنگاري. زمانيكه ژوليوس سزار پيامهائي را براي فرمانده ارتش خود در جنگ ميفرستاد از بيم كشته شدن يا خيانت پيك ، در تمام متنِ نامة خود هرحرف را با حرفي كه سه تا بعد از آن قرار گرفته بود عوض ميكرد. مثلاً بجاي A حرف D و بجاي B حرف E را قرار ميداد.
E N D
Cryptography DES & RSA
رمزنگاري • زمانيكه ژوليوس سزار پيامهائي را براي فرمانده ارتش خود در جنگ ميفرستاد از بيم كشته شدن يا خيانت پيك ، در تمام متنِ نامة خود هرحرف را با حرفي كه سه تا بعد از آن قرار گرفته بود عوض ميكرد • مثلاً بجاي A حرف D و بجاي B حرف E را قرار ميداد • با اينكار متن حالت معني دار خود را از دست ميداد • تنها كسي ميتوانست از مفهوم متن چيزي بفهمد كه به رمز آن (يعني Shift by 3 ) آگاهي داشت
رمزنگاري • علم رمزنگاري (Cryptography) با اصول رياضي به رمز درآوردن اطلاعات و خارج كردن آنها از حالت رمز سر و كار دارد • در مقابلِ علم رمزنگاري ، علم تحليل رمز (Cryptoanalysis) قرار دارد • كه روشهاي تجزيه و شكستن رمز اطلاعات (بدون نياز به كليد) و كشف كليد رمز را مورد بحث قرار ميدهد • به شكل بعد دقت كنيد. در اين شكل سيماي كلي يك سيستم رمزنگاري و رمزگشائي به تصوير كشيده شده است
رمزنگاري • الگوريتم يا روشي كه بر اساس آن متن رمز ميشود بايد بگونه اي قابل برگشت (وارون پذير) باشد تا بتوان به متن اصلي دست پيدا كرد
روشهاي جانشيني (Substitution) • روش جانشيني قديميترين نوع رمزنگاري است كه اولين بار سزار آن را بكار برده است • در اين روش هر حرف از جدول حروف الفبا به حرفي ديگر تبديل ميشود • بعنوان مثال در رمز سزار هر حرف به حرف سوم بعد از خودش تبديل ميشد كه با اين روش كلمه “حمله” (Attack) بصورت زير در ميآمد: Attack متن اصلي Dwwdfn متن رمز شده
روشهاي جانشيني (Substitution) • اين روش بعداً بهبود داده شد و بجاي آنكه تمام حروف بطور منظم و با قاعده به يكديگر تبديل شوند جدول حروف الفبا طبق يك قاعده نامشخص كه “جدول رمز” ناميده ميشد به هم تبديل ميشدند • بعنوان مثال اگر نامه يا متن تماماً حروف كوچك در نظر بگيريم جدول رمز ميتواند بصورت زير باشد: • طبق اين جدول كه گيرنده پيام بايستي از آن آگاهي داشته باشد كلمه attack به كلمه QZZQEA تبديل ميشود
روشهاي جانشيني (Substitution) • شايد يك مبتدي احساس كند كه اين روش امروزه مفيد خواهد بود • چرا كه جدول رمز داراي 26 !(معادل 1026*4) حالت متفاوت خواهد بود و امتحان تمام اين حالات مختلف براي يافتن جدول رمز كاري مشكل است • در حالي كه چنين نيست و اين نوع رمزنگاري براي متون معمولي در كسري از ثانيه و بدون كليد رمز شكسته خواهد شد! • نقطه ضعف اين روش در مشخصات آماري هر حرف در يك زبان ميباشد. بعنوان مثال درزبان انگليسي حرف e در متن بيش از همه حروف تكرار ميشود
روشهاي جانشيني (Substitution) • ترتيب فراوانيِ نسبي براي شش حرف پرتكرار در متون انگليسي بصورت زير است: e t o a n i • اولين اقدام در رمزشكني ( رمزشكني همان رمزگشائي است بدون در اختيار داشتن كليد يا جدول رمز) آنست كه متن رمز شده تحليل آماري شود • هر كاراكتري كه بيش از همه در آن تكرار شده باشد معادل e، حرف پرتكرار بعدي معادل t قرار بگيرد و روند به همين ترتيب ادامه يابد
روشهاي جانشيني (Substitution) • البته ممكن است برخي از حروف اشتباه سنجيده شوند ولي ميتواند در مراحل بعدي اصلاح شود • دومين نكته آنست كه در زباني مثل انگليسي حروف كنار هم وابستگي آماري بهم دارند • مثلاً در 9/99 درصد مواقع در سمت راست حرف q حرف u قرار گرفته (qu)يا در كنار حرف t معمولاً (البته با احتمال پائين تر) h قرار گرفته است • يعني بمحض كشف حرف q رمز u هم كشف ميشود و اگر t كشف شد كشف h ساده تر خواهد شد
روشهاي جانشيني (Substitution) • ترتيب فراوانيِ نسبي براي پنج “دوحرفي”پرتكرار در متون انگليسي بصورت زير است: th in er re an • سومين نكته نيز به سه حرفي ها بر ميگردد • مثلاً در زبان انگليسي سه حرفي هاي and, the, ingion,به كرّات استفاده ميشوند و ميتوانند با بررسي آماري تمام سه حرفيهاي يك متن رمزشده ، پرتكرارترين آنها در متن ، ملاك رمزشكني قرار بگيرند • در تمام زبانهاي دنيا چنين خصوصيتي را ميتوان بررسي كرد
روشهاي جانشيني (Substitution) • چهارمين نكته براي رمزشكني مراجعه به فرهنگ لغات يك زبان است كه بر اساس پيدا شدن چند حرف از يك كلمه رمز بقيه حروف آن نيز آشكار ميشود • به دلائل فوق روش رمزگذاري جانشيني كارآئي مناسبي ندارد و براحتي رمز آن بدست خواهد آمد
رمزنگاري جايگشتي Permutation • در رمزگذاري جانشيني محل قرار گرفتن و ترتيب حروف كلمات در يك متن بهم نميخورد بلكه طبق يك جدول رمز جايگزين ميشد • در روش رمزنگاري جايگشتي آرايش و ترتيب كلمات به هم ميخورد • بعنوان يك مثالِ بسيار ساده فرض كنيد تمام حروف يك متن اصلي را سه تا سه تا جدا كرده و طبق قاعده زير ترتيب آن را بهم بريزيم:
رمزنگاري جايگشتي Permutation • براي رمزگشائي، گيرندة پيام بايد كليد جايگشت را كه در مثال ما (2و1و3) است بداند • معمولا براي راحتي در به خاطر سپردن كليد رمز ، يك كليد متني انتخاب ميشود و سپس جايگشت بر اساس ترتيب حروف كلمة رمز انجام ميشود
رمزنگاري جايگشتي Permutation • به مثال زير دقت كنيد: : متن اصلي please-trasnfer-one-million-dollors-to-my-swiss-bank-account-six-two-two • كلمه رمز :MEGABUCK • تمام كلمات متن اصلي بصورت دسته هاي هشت تائي جدا شده و تماماً زير هم نوشته ميشود: ( علامتِ – را فاصلة خالي در نظر بگيريد )
رمزنگاري جايگشتي Permutation • حال بر اساس ترتيب الفبايي هر حرف در كلمه رمز، ستونها بصورت پشت سر هم نوشته ميشوند. يعني ابتدا ستون مربوط به حرف A، سپس B ، E و …
رمزنگاري جايگشتي Permutation • پس رمز بصورت زير در ميآيد: as---wkt-sfmdti---rll-sciolanor-auwenenssnnot-llm-cx-proiayboteeioosasw” • بنابراين براي بازيابيِ اصل پيام درمقصد ، گيرنده بايد كليد رمز (يا حداقل ترتيب جايگشت) را بداند • اين روش رمز هم قابل شكستن است چرا كه اگر چه ترتيب حروف بهم ريخته است ولي در متن رمز شده تمام حروف هر يك از كلمات وجود دارند • بعنوان مثال تك تك حروف dollars يا swiss bank را ميتوان در متن رمز شده پيدا كرد
رمزنگاري جايگشتي Permutation • لذا با بررسي تمام حالات ممكن كه كلمه dollars را به صورت پراكنده در متن در ميآورد ميتوان رمز را بدست آورد • البته حجم پردازش مورد نياز بيشتر خواهد بود ولي بهر حال اين نوع رمزگذاري براحتي قابل شكستن ميباشد و در دنياي امروز چندان قابل اعتماد نيست
استانداردهاي نوين رمزگذاري • در اوائل دهه هفتاد دولت فدرال آمريكا و شركت آي.بي.ام (IBM)مشتركاً روشي را براي رمزنگاري دادهها ايجاد كردند كه بعنوان استانداردي براي نگهداري اسناد محرمانه دولتي مورد استفاده قرار گرفت • اين استاندارد كه DES(Data Encryption Standard)نام گرفت امروزه محبوبيت خود را از دست داده است • الگوريتم روش رمزنگاري DES در شكل بعد نشان داده شده است كه در ادامه كليّت آنرا توضيح ميدهيم:
استانداردهاي نوين رمزگذاري • ورودي رمزنگار يك رشته 64 بيتي است، بنابراين متني كه بايد رمز شود بايستي در گروههاي هشت كاراكتري دسته بندي شوند • اولين عملي كه بر روي رشته ورودي 64 بيتي انجام ميشود جابجا كردن محل بيتهاي رشتة 64 بيتي طبق جدول صفحة بعد است • به اين عمل جايگشت مقدماتي (Initial permutation)گفته ميشود :
استانداردهاي نوين رمزگذاري • در جدول بالا پس از عمل جايگشت, بيت اول به موقعيت بيت پنجاه وهشتم و بيت دوم به بيت پنجاهم از رشته جديد منتقل شده و بهمين ترتيب ادامه مييابد تا رشته 64 بيتي جديد بدست آيد • در مرحله بعدي رشته 64 بيتي جديد از وسط به دو قسمت 32 بيتي چپ و راست تقسيم ميشود • 32 بيت سمت چپ را L0 و 32 بيت سمت راست را R0 ميناميم • سپس در 16 مرحلة پياپي اعمال زير انجام ميشود:
استانداردهاي نوين رمزگذاري • در هر مرحله 32 بيت سمت راست مستقيماً به سمت چپ منتقل شده و 32 بيت سمت چپ طبق رابطه زير به يك رشته بيت جديد تبديل و به سمت راست منتقل خواهد شد. Li-1f (Ri-1,Ki) • Li-1 رشته سي و دو بيتي سمت چپ از مرحله قبل ميباشد • علامت بمعناي XOR و f تابع خاصي است كه آنرا به صورت مجزا توضيح خواهيم داد • Ri-1رشته سي و دو بيتي سمت راست از مرحله قبل و Ki كليد رمز در هر مرحله است
استانداردهاي نوين رمزگذاري • پس مجموعاً 16 كليد مختلف وجود دارد • نمودار زير يك مرحله از 16 مرحله عمليات را نشان ميدهد:
استانداردهاي نوين رمزگذاري • اين عمليات 16 مرحله اجرا ميشود و پس از مرحله آخر جاي Li و Ri عوض خواهد شد • حال عكس عمل جايگشتي كه در ابتدا انجام شده بود صورت ميگيرد تا بيتها سرجايشان برگردند اين كار طبق جدول زير انجام ميشود:
استانداردهاي نوين رمزگذاري • پس از اين عمل ، 64 بيت جديد معادل هشت كاراكتر رمز شده خواهد بود كه ميتوان آنها را بجاي متن اصلي ارسال كرد • حال بايستي جزئيات تابع f را كه اصل عمل رمزنگاري است تعيين كنيم: • در تابع f كه به صورت يك بلوك پياده سازي ميشود ابتدا رشته 32 بيتي Ri كه از مرحله قبل بدست آمده بر طبق جدول زير به يك رشته 48 بيتي تبديل ميشود • بنابراين بعضي از بيتها در رشته جديد تكراري هستند :
استانداردهاي نوين رمزگذاري • پس از تبديل Ri به رشته 48 بيتي عمل XOR روي آن با كليد 48 بيتيKi انجام ميشود • نتيجة عمل يك رشتة 48 بيتي است و بايستي به 32 بيتي تبديل شود • براي اينكار 48 بيت به هشت مجموعه 6 بيتي تبديل شده و هر كدام از شش بيتي ها طبق جداولي به يك چهار بيتي جديد نگاشته ميشود ( در مجموع 8 جدول ) • براي كامل شدن عمل تابع f رشته 32 بيتي جديد طبق جدول زير جايگشت مجددي خواهد داشت
استانداردهاي نوين رمزگذاري • در سيستم DES فقط يك كليد 56 بيتي وجود دارد كه تمام 16 كليد مورد نياز در هر مرحله با جايگشتهاي متفاوت از همان كليد 56 بيتي استخراج خواهد شد • بنابراين كاربر براي رمزگشايي فقط بايد يك كليد در اختيار داشته باشد و آنهم همان كليدي است كه براي رمزنگاري به كار رفته است • براي رمزگشائي از سيستم DES دقيقاً مراحل قبلي تكرار ميشود با اين تفاوت كه كليد K1 براي رمزگشائي ، كليد K16در مرحله رمزنگاري خواهد بود، كليد K2 همان K15 است و به همين ترتيب
استانداردهاي نوين رمزگذاري • در حقيقت براي رمزگشائي كافي است 16 كليد بصورت معكوس به سيستم اعمال شوند • نكته ديگري كه در مورد سيستم DES قابل توجه است آنست كه چون رشتة رمز شده بصورت هشت كاراكتري رمز ميشود ، تكرار بلوكهاي رمز ميتواند به رمزشكنها براي حمله به سيستم DES كمك نمايد • بهمين دليل در سيستم DES قبل از آنكه يك بلوك رمز شود ابتدا با بلوك رمز شدة قبلي خود XOR ميشود و سپس اين 8 كاراكتر مجدداً رمز خواهد شد • به شكل بعد دقت كنيد:
استانداردهاي نوين رمزگذاري • بلوك اول با يك رشته 64 بيتي اوليه بنام IV (بردار اوليّه) XOR ميشود
استانداردهاي نوين رمزگذاري • نتيجه اين بلوك كد رمز 64 بيتي است • همين كد رمز براي رمز كردن بلوك بعدي بكار ميآيد ، بدينصورت كه بلوك رمز نشدة Pi با بلوك رمز شدة قبلي Ci-1 ابتدا XOR شده و متن جديد مجدّداً رمز خواهد شد • اين الگوي رمزنگاري بعنوان استانداردي براي اسناد حسّاس فدرال آمريكا پذيرفته شد • تا آنكه در سال 1977 يكي از محققين دانشگاه استانفورد با هزينه اي معادل 20 ميليون دلار ماشيني طراحي كرد كه در عرض 24 ساعت ميتوانست رمز DES را بشكند
استانداردهاي نوين رمزگذاري • بعد از آن ايده هاي جديدي براي رمزنگاري مطرح شد كه DES را در سيستمهاي عملي كنار زد • نكته ديگر آنست كه چون كليد رمزنگاري و رمزگشائي هر دو يكي است لذا بايد از كليد شديداً حفاظت شود • شايد صلاح نباشد كسي كه عمل رمزنگاري را انجام ميدهد ، كليد رمزگشايي را بداند! • در مدلهاي جديد كليد رمزنگاري را همه ميدانند ولي كليد رمزگشائي سرّي است
رمزگذاري كليد عمومي (Public Key Cryptography) • در هر يك از الگوهاي رمزنگاري كه مورد بحث قرار گرفتند لازم است كه فرستنده پيام و گيرنده پيام كليد رمز را بدانند • وقتي فرستندة پيام از كليدي براي رمزنگاري استفاده ميكند و گيرندگان هم از همان كليد براي رمزگشايي بهره ميبرند ، افشا شدن كليد رمز توسط يكي از گيرندگان پيام ، امنيت را به خطر مياندازد • در الگوهاي جديدِ رمزگذاري، براي حل مشكل از دو كليد متفاوت استفاده ميشود • يك كليد براي رمز كردن پيام و كليد ديگر براي رمزگشائي آن
رمزگذاري كليد عمومي (Public Key Cryptography) • با كليدِ مخصوص رمزنگاري نميتوان رمزگشائي پيام را انجام داد • بنابراين رمزكنندة پيام خودش كليدي دارد كه حتي معتمدين و گيرندگان پيام هم آنرا لازم ندارند چرا كه فقط براي رمزنگاري بكار ميآيد و افشا شدن آن هم لطمه اي به كسي نميزند • چرا كه با آن كليد نميتوان متون رمز شده را برگرداند و پيدا كردن كليد رمزگشائي از روي كليد رمزنگاري كار ساده اي نيست • هنوز امكان پذير نشده است
رمزگذاري كليد عمومي (Public Key Cryptography) • در سال 1978 سه نفر بنامهاي ريوست ، شامير و اَدلمن روشي را براي پياده سازي “رمزنگاري كليد عمومي” با يك جفت كليد ابداع كردند • اين روش كه چگونگي آن در زير تشريح شده است بنام روش RSA (مخفف اسامي آنها) مشهور است و بطرز فزاينده اي از آن استفاده ميشود • روش كار فوق العاده ساده است: دو عدد صحيح (e,n)براي رمزگذاري انتخاب ميشوند • متني كه بايد رمز شود به بلوكهايي تقسيم ميشود
رمزگذاري كليد عمومي (Public Key Cryptography) • مثلاً كل متن پيام به K تا بلوك تقسيم شده و هر بلوك به نحوي به يك عدد صحيح تبديل ميشود • مثلاً كدهاي اَسكي هر حرف پشت سر هم قرار ميگيرند • براي آنكه همين ابتدا بحث را پيچيده نكنيم فرض كنيد بخواهيم رشته M=”IDESOFMARCH” را رمز كنيم • براي سادگي اين رشته را به بلوكهاي 2 كاراكتري تقسيم كرده و سپس هر بلوك را به يك عدد صحيح تبديل مينماييم:
رمزگذاري كليد عمومي (Public Key Cryptography) • روش تبديل در مثال بالا اين بوده كه براي A عدد 00 ، B عدد 01 ، ... و Z عدد 25 در نظر گرفته شده و در هر بلوك عدد متناظر با هر كاراكتر پشت سر هم قرار ميگيرد تا كد بلوك را بسازد • شما ميتوانستيد كد اَسكي آن يا هر قاعدة ديگري را به كار ببريد
رمزگذاري كليد عمومي (Public Key Cryptography) • در مرحله بعدي جفت عدد صحيح (17,2773) معادل (e,n) براي رمزگذاري بلوكها با استفاده از روش زير انتخاب ميشوند: Ci=(Pi)e mod n • بلوكهاي عددي پس از آنكه به توان e رسيد ، باقيماندة تقسيم آن بر n محاسبه ميشود و بلوكهاي Ci بدست ميآيد • بلوكهاي Ci كدهاي رمز هستند و بجاي متن اصلي ارسال ميشوند . پس در مثال فوق داريم:
رمزگذاري كليد عمومي (Public Key Cryptography) • قبل از آنكه روش رمزگشائي را تشريح كنيم الگوي رمزنگاري RSA را بصورت جمعبندي شده ارائه ميدهيم: • الف) رشته اي كه بايد رمز شود ، به بلوكهاي K كاراكتري تبديل ميشود. • ب) هر بلوك طبق قاعدة دلخواه به يك عدد صحيح تبديل ميشود. (Pi) • ج) با جفت عدد صحيح (e,n) براي تمام بلوكها اعداد جديدي طبق رابطه زير بدست ميآيد: • Ci=(Pi)e mod n
رمزگذاري كليد عمومي (Public Key Cryptography) • د) كدهاي Ci ، بجاي كد اصلي ارسال ميشود • نكته اساسي در اين الگو آنست كه براي رمزگشائي كدها بايد عددي مثل d پيدا شود كه در رابطه زير صدق كند: (xe.d) mod n=x • با چنين عددي خواهيم داشت: • Pi =(Cid) mod n • يعني مشابه عمل رمزنگاري مجدداً كدهاي رمز به توان d رسيده ، باقيماندة آن بر n محاسبه خواهد شد. كدهاي حاصل دقيقاً همان كدهاي اوليه هستند
رمزگذاري كليد عمومي (Public Key Cryptography) • به كليد (e,n)كه با آن متن رمز ميشود “كليد عمومي” (Public key) و به كليد (d,n)كه با آن متن از رمز خارج ميشود “كليد خصوصي” (Private key) اطلاق ميشود • قبل از آنكه مثالي ديگر ارائه بدهيم اجازه بدهيد روش انتخاب و معيارهاي e , d را كه توسط ابداع كنندگانِ اين روش پيشنهاد شده است ، معرفي كنيم: • الف) دو عدد اوّل دلخواه (ولي بزرگ) p , q انتخاب كنيد. (براي كاربردهاي عملي اگر اين اعداد صد رقمي باشند اطمينان بخش خواهد بود - يعني از مرتبه 10100 باشد-)
رمزگذاري كليد عمومي (Public Key Cryptography) • ب) عدد z , n را طبق دو رابطه زير محاسبه نمايد: • ج)عدد d را بگونه اي انتخاب كنيد كه نسبت به z اول باشد يعني هيچ عامل مشتركي كه هر دو بر آن بخش پذير باشند نداشته باشد • د) براساس d عدد e را بگونه اي انتخاب كنيد تا رابطه زير برقرار باشد:
رمزگذاري كليد عمومي (Public Key Cryptography) • نكاتي كه در رمزنگاري بايد رعايت شود آنست كه كدهاي Pi كه به هر بلوك نسبت ميدهيم بايد 0< Pi <n باشد • بنابراين اگر بلوكها را بصورت رشته هاي k بيتي مدل ميكنيد بايد شرط برقرار باشد • براي يك مثال آموزشي فرض كنيد بخواهيم رشته “SUZANNE” را رمز نمائيم • براي راحتي كار مجبوريم كليدها را بسيار كوچك بگيريم ولي دقت داشته باشيد در عمل اينطور نيست:
رمزگذاري كليد عمومي (Public Key Cryptography) • الف) دو عدد اول p=3 و q=11 را انتخاب ميكنيم • ب) عدد n=33 و z=20 بدست ميآيند • ج) عدد 7 كه نسبت به z اول است را براي d انتخاب مينمائيم • د) بايد عدد e بگونه اي پيدا شود كه رابطة برقرار باشد اين عدد را 3 انتخاب كرده ايم. ( عدد 23 هم قابل قبول است )
رمزگذاري كليد عمومي (Public Key Cryptography) • پس داريم : (3,33)=(e,n)كليد عمومي (7,33)=(d,n)كليد خصوصي • براي آشنايي با مراحل كار به شكل بعد دقت نمائيد • بدليل آنكه n عدد كوچكي است و بايد Pi<33 باشد، مجبوريم بلوكها را يك كاراكتري فرض كرده و به A عدد 1 ، به B عدد 2 نسبت داده و بهمين ترتيب كاراكترها را به عدد صحيح تبديل نمائيم
رمزگذاري كليد عمومي (Public Key Cryptography)
رمزگذاري كليد عمومي (Public Key Cryptography) • همانگونه كه اشاره شد در عمل p و q صد رقمي انتخاب ميشوند. يعني • بنابراين مقدار n از مرتبه 10200 (دويست رقمي ) خواهد بود • سؤال آنست كه عدد صحيح مربوط به بلوك هاي Pi كه بايد از n كوچكتر باشند چند بيتي خواهند بود؟ • پس هر بلوك متن بايستي حداكثر 664 بيت يا معادل 83 كاراكترِ هشت بيتي باشد