دانلود مقاله پروژه تئوری رمز گذاری

word قابل ویرایش
342 صفحه
20000 تومان

پروژه تئوری رمز گذاری

مقدمه و تاریخچه

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

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

توجه داشته باشید که رمزنگاری به تغییر ساده محتویات یک متن گفته می‌شود با کدگذاری (coding) تفاوت دارد. در این صورت تنها هر کاراکتر با یک نماد تغییر می‌کند. کلمه Cryptography بر گرفته لغات یونانی‘kryptos’ به مفهوم ” محرمانه ” و grapheinبه معنای نوشتن ” است. قبل از هر چیز لازم است بین رمز و کد تفاوت قائل شویم. رمز به مفهوم تبدیل کاراکتر به کاراکتر یا بیت به بیت ؛ بدون تغییر محتویات زبان شناختی آن است. در مقابل ” کد ” تبدیلی است که کلمه‌ای را با یک کلمه یا نماد دیگر جایگزین می‌کند .
دانش رمزنگاری بر پایه مقدمات بسیاری از قبیل تئوری اطلاعات، نظریه اعداد و آمار بنا شده‌است.امروزه در کشور ما نیز دوره دکترای رمزنگاری که از شاخه های رشته ریاضی کاربردی میباشد برگزار میشود.

شروع و توسعه رمزنگاری
اولین بار سزار امپراتور رم باستان برای آنکه بتواند بدون اطلاع دشمن با ا ارتشش در سراسر دنیا در ارتباط باشد نوعی رمز را بکار گرفت. این رمز به این شکل بود که برای فرستادن یک پیام جای هر حرف را با سومین حرف بعد از آن در الفبا عوض می کردند، مثلا به جای ‘A’ حرف ‘D’ و به جای ‘X’ حرف ‘A’ را می گذاشتند.

بنابراین برای از کد خارج کردن پیام ها کافی بود دریافت کننده جای هر حرف را با سومین حرف بعد از آن در الفبا عوض کند. مثلا سعی کنید این پیغام سزاری را از رمز خارج کنید:
hqhpb dssurdfklqj
wkluwb ghdg

uhwuhdw wr iruhvw

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

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

مثلا برای به رمز درآوردن ‘A’ : داریم ۰+۳=۳
برای اینکه در مورد حرف های نزدیک به پایان الفبا دچار مشکل نشویم بهتر است به جای جمع معمولی از جمع به پیمانه ۲۶ استفاده کنیم، یعنی به جای هر عدد از باقیمانده تقسیم آن عدد بر ۲۶ استفاده کنیم.
مثلا:
برای ‘X’ داریم: (به پیمانه ۲۶) ۲۳+۳=۲۶=۰

برای ‘Y’ داریم: (به پیمانه ۲۶) ۲۴+۳=۲۷=۱

برای ‘T’ داریم: (به پیمانه ۲۶) ۱۹+۳=۲۱=۲۱

برای از رمز درآوردن هم می توانیم از تفریق به پیمانه ۲۶ استفاده کنیم. واضح است که می توانیم به جای انتقال ۳ تایی از هر انتقالی بین ۱ و ۲۵ استفاده کنیم، اما همانطور که احتمالا حدس زده اید شکستن این رمز خیلی ساده است یعنی یک جاسوس می تواند با امتحان کردن همه ۲۵ انتقال ممکن به سرعت رمز را بشکند.
حالا به سراغ یک روش پیچیده تر می رویم. فرض کنید به ازای هر حرف الفبا یک علامت جایگزین کنیم، مثلا ‘*’ به جای ‘A’ و ‘+’ به جای ‘B’. مثل رمزی که ماری ملکه اسکاتلند برای مکاتباتش بر علیه الیزابت اول ملکه انگلیس بکار می گرفت .

تا مدت ها مردم فکر می کردند شکستن این رمز ناممکن است تا اینکه آمار ریاضی بوجود آمد .

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

این اطلاعات از شمارش حروف مختلف در حجم زیادی از نوشته ها مثل کتاب ها و روزنامه ها بدست آمده است. این نمودار مثلا نشان می دهد به طور میانگین ۱۳٫۵ درصد از حروف بکار رفته در متن های انگلیسی E هستند، که فراوان ترین حرف الفبا است. بنابراین وقتی رمزی از نوع بالا داریم احتمالا علامتی که بیش از همه تکرار می شود علامت متناظر E است و فراوانترین علامت بعد از آن متناظر ‘T’ است. سرنخ های دیگری هم وجود دارد مثلا تنها دو کلمه یک حرفی در انگلیسی وجود دارد: ‘I’ و ‘A’ و همچنین ‘AND’ و ‘THE’ کلمات خیلی معمولی هستند با کمک این سرنخ ها و کمی آزمایش و خطا میتوان اینگونه رمزها را شکست.همین روش باعث شد که ماری سرش را از دست بدهد.

 

براساس متون موجود در مورد رمزنگاری تاریخچه این علم را میتوان در نگاهی گذرا بصورت زیر بیان کرد :
۱ – شروع رمزنگاری به سال ۱۹۰۰ قبل از میلاد برمیگردد برطبق اساد موجود یک مصری درآن زمان که کلمات بصورت تصویر بیان میشد ازتصاویری استفاده کرده که متداول نبوده بنابراین شروع رمزنگاری از مصریان میباشد . چهارصد سال بعد در بینالنهرین وحه هئی نوشته شد که شامل فرمولهائی رمزی از تهیه شیشه برای کوزه گری میباشد .
۲ – ۵۰۰ سال قبل از میلاد یک نویسنده یهودی کتابی نوشت که کلمات آن برعکس نوشته شده بود این روش بنام رمز آتابش نامیده شد .

۳ – در سال ۴۸۷ قبل از میلاد اسکیتال در یونان بوجود آمد و مورد استفاده قرار گرفت
۴ – ۴۰۰ سال بعد ژولیوس سزار در مکاتبات دولتی از رمز سزار استفاده کرد . او در این رمز جای حروف الفبا را عوض کرد . رمز سزار هرچند در نسبت به رمز آتابش ساده تر است اما مدارک محرمانه دولتی در نگاه اول قابل فهمیدن نبود .

۵ – بین سالهای ۰ تا ۴۰۰ بعد از میلاد رمز به عنوان یک هنر توسط هندیان در کاماسوترا بیان شده است . در کاما سوترا به شیوه های ساده رمزنگاری اشاره شده است .
۶ – ۲۰۰ سال بعد از میلاد لیدن دستورالعمل های مهم خود را بصورت رمز می نوشت .

۷ – در شروع امپراتوری اسلامی ابوعبدل الرحمان الخلیل ابن احمد امرابن تمام الفرهادی الزیدی الیهمدی کتابی در علم رمزنگاری نوشت که الهام گرفته از رمزهای یونانی میباشد که برای امپراتوری روم شرقی نوشته شده بود . البته این کتاب مفقود شده است شیوه هائی که در این کتاب اشاره شده است در جنگ جهانی دوم در مقابل رمز انگما نیز استفاده شده است .

۸ – در سال ۸۵۵ ابوبکر احمد ابن علی ابن وحششیه نباتی رمزهای مختلفی را ابداع کرده تست ۹ – در حکومت غزنویان که کشورگشائی های زیادی داشتند در بحث نظامی و سفارت خانه ای خود به وفور از رمزها استفاده می کردند .مقامات عالیرتبه حکومتی با توجه به موقعیتشان از سیستم رمز مخصوص آن مقام استفاده می کردند .
۱۰ – در سالهای بعد از ۱۲۶۶ ( بعد از میلاد ) در ونیز رمزهائی ساده در عالم سیاست استفاده می شد . در این رمز جای حروف با نقطه و ضریبدر عوض می شد .
۱۱ – در حدود ۱۵۰۰ ( بعد از میلاد ) شخصی بنام روگر بکن رمزهای متعددی را نوشت او در اول کارهایش مینویسد . : کسی که متن محرمانه ای را طوری بنویسد که بقیه بفهمند احمق می باشد .

۱۲ – در ۱۳۰۰ میلادی ابن خلدون جهت استفاده اداره مالیات و ارتش برای ساده نویسی و پنهان کاری از نوعی رمز استفاده می کرد .
۱۳ – در سالهای بعد از ۱۳۷۹ میلادی گابریل دی لاوندی بتقاضلی کلمنت هفتم رمزی نوشت که ترکیبی از جابجائی حروف و کدها بود این رمز سالها مورد استفاده دولتمردان قرارگرفت و تا ۴۰۰ سال این رمز کاربرد داشت .

۱۴ – جوفری چاوسر در سالهای ۱۳۹۲ رمزی نوشت که ترکیبی از علائم و جابجائی حروف و کد بود
۱۵ – در ۱۴۱۲ میلادی عابد الله الکلکشندی دائره المعارفی عربی نوشت که ۱۴ جلد می باشد و یکی از جلد های آن مربوط به رمزنگاری و منصوب به طالب موصولی می باشد . او برای اولین بار ؛ چند بار از جانشانی استفاده می کند او در کتاب خود راجع به رمزگشائی نیز بحث می کند که رمز شکنی با استفاده از روش فرکانسی منصوب به او می باشد .
۱۶ – در سال ۱۴۶۶ اون باتیستا البرتی رمزی را اختراع کرد که امروزه به رمز ( Capital Midnight Decode Badge ) مشهور است برای نزدیک به ۴۰۰ سال یعنی تا ۱۸۰۰ این رمز شکسته نشد

۱۷ – در ۱۵۱۸ اولین کتاب چاپی در باره رمز توسط جوهان تریتیمیوس نوشته شده او در انی کتاب از رمزهای مختلف سخن میگوید او از رمز polyalphabetic با شیوه جانشانی مستطیلی را توضیح می دهد .

۱۸ – جیوان باتیستاپورتا در سال ۱۵۵۳ رمزی را ابداع کرد که در آن ازیک عبارت بعنوان کلید استفاده می شود بسیاری از نویسندگان این رمزبلاسو را با رمز ویگنر اشتباه میگیرند .
۱۹ – جیوانی باتیستا پورتا در سال ۱۵۶۳ از رمزی استفاده کرد که در آن رمز ضمن استفاده از اسپل غلط و در ضمن جانشانی و انتقال از حروف عجیب و غریب در متن های خود استفاده کرد .

۲۰ – در سال ۱۵۸۵ بلالیسس دی ویگنر کتابی در مورد رمز نوشت با متنهای رمزی همراه با سیستم رمز کلید خودکار ( یعنی کلید رمز در متن قبلی قرار دارد . این سیستم بعد ها در رمزهای DES,CFB,CBC مورد استفاده قرار گرفت .
۲۱ – در سال ۱۶۲۳ فرانسیس بیکن رمزی بنام رمز کننده ۵ – بیتی باینری را ابداع کرد .
۲۲ – توماس جفرسون در سال ۱۷۹۰ با کمک دکتر جفرسون ( ریاضی دان ) چرخ رمز را اختراع کردند . این رمز تکامل پیدا کرد و بعدها در جنگ جهانی دوم مورد استفاده قرار گرفت .
۲۳ – در سال ۱۸۱۷ سرهنگ وادستورد دیسکهای چرخدنده های رمز کننده ای با تعداد حروف متفاوت را اختراع کرد

۲۴ – چارلز ویتستون رمز ( بازی مطبوع ) را در ۱۸۵۴ اختراع کرد . او همچنین رمز وادستورد را تکمیل کرد .
۲۵ – اختراع تکامل یافته چرخ رمز نگاری توسط چارلز بابگی در ۱۸۵۴
۲۶ – در ۱۸۵۷ ادمیرال سرفرانسیس بیوفورت رمز جدیدی اختراع کرد که نوعی رمز ویگنر می باشد . البته کار او س از مرگش توسط برادرش چاپ شد .
۲۷ – پلینی چاسی اولین شرح را برای رمزهای توموگرافیک در ۱۸۵۹ نوشت .

۲۸ – بین سالهای ۱۸۶۱ الی ۱۹۸۰ بحث رمز عمومی شد و در سال ۱۷۶۹ سندی در امریکا بدست امده که بنحوی با رمز سروکار دارد .
۲۹ – در ۱۸۶۱ فردریک کاساسکی کتابی نوشت برچگونگی شکستن رمز چند الفبائی که چند صد سال امن مانده بود
۳۰ – در جنگهای داخلی امریکا جنوبی ها از جانشین کردن حروف در متن رمزی استفاده کردند درصورتی که شمالی ها از رمز ویگنر که بتازگی از طرف کاساسکی ابداع شده بود استفاده می کردند .

۳۱ – در ۱۸۹۱ سرهنگ اتینی بازرایز بعد از انکه مدل جدید چرخ رمزکننده را ابداع کرد و ارتش فرانسه از آن استقبال نکرد آن انتشار داد
۳۲ – کاپیتان پارکت هیت در سال ۱۹۱۳ با تغییر در چرخ رمز کننده منجر به رمز کننده M-138-A از WW-II شد .
۳۳ – در سال سال ۱۹۱۶ سرتیپ ژوزف مورجنی رمز هیت را بصورت چرخ رمزی درآورد و جایگزینی حروف را قویتر انجام داد و در نهایت منجر به دستکاه رمز کننده M-94 شد .
۳۴ – در ۹۱۷ ویلیام فردریک فایردمن که پدر علم رمز امریکا نامیده می شود در دولت محلی ریوربنک امریکا بعنوان متخصص رمز استخدام شد و اولین مرکز آموزشی رمز را برای ارتش آمریکا ایجاد کرد و بعدها به خاطر فعالیتش به واشنگتن رفت .

۳۵ – در همین سال گیلبرت ورنام رمزی را ابداع نمود که کاملا” از کلیدهای اتفاقی استفاده می شد که دیگر تکرار نمی شد تا این تاریخ این اولین ماشین رمزکننده ای است که به ثبت رسیده است . رمز او برای استفاده در جنگ جهانی اول پیشنهاد شد ولی ارتش امریکا آن را نپذیرفت و در کارهای بازرگانی بکار گرفته شد .
۳۶ – در اواخر جنگ جهانی اول آلمانها سیستم رمز کننده ADFGVX را اختراع کردند که توسط رمز شکن مشهور فرانسوی پینوین شکسته شد .
۳۷ – در ۱۹۱۹ الکساندر کوخ رمز استوانه ای را ابداع کرد که در ۱۹۲۷ امتیاز رمز را به ارتور اسچربیوس که مخترع ماشین انیگما بود واگذار کرد .
۳۸ – در سوئد گرهارد دراما رمز استوانه ای را ابداع نمود که بعدها توسط وایلهلم هگالین به مجموعه ای از رمز مشهور شد . بعدها دولت سوئد در ۱۹۱۹ پیشنهاد کرد شرکتی که شرکتی با نام CryptoAG تاسیس گردد و دولت نیز در موارد مربوط به رمز از آن شرکت استفاده کند . این شر۳۹ – در ۱۹۲۱ ادوارد هوگ هیرن کد های الکتریکی را ابداع نمود . که در حال حاضر نیز فعال است و بخاطر فروش رمز کننده به ایران مورد چالش قرار گرفت .

۳۹ – تا سال ۱۹۲۴ رمز وون کریا که به شدت مورد استفاده دپیماتهای آلمانی قرار می گرفت توسط رمز شکنان امریکائی در مدت دو ساعت و چهل دقیقه شکسته شد و بعد از این تاریخ دیگر مورد استفاده قرار نگرفت .

۴۰ – از سال ۱۹۲۵ به بعد کاربران رمز از بانکها . نیرو های مسلح و عاشقان . مورد استفاده خلافکاران نیز قرار گرفت بطوری که در اداره رمز در واشنگتن دی سی امریکا گشایش یافت .
۴۱ – بین سالهای ۱۹۲۷ الی ۱۹۳۳ یکی از بازنشستگان نیروی دریائی آمریکا که نام او مشخص نشد شبکه رمزی قوی ایجاد که که مورد استفاده وسیع اچاقچیان قرار گرفت و بسیاری از رمزهای انان شکسته نشد .

۴۲ – لستر هیل در ۱۹۲۹ مقاله زیبائی تحت عنوان ” رمز نگاری در جبر حروف انتشار داد در این رمز از ماتریسها جهت رمز کردن استفاده می شود .
۴۳ – بین سالهای ۱۹۳۳ تا ۱۹۴۵ رمز انگما که به المان برده شده بود و تکامل پیدا کرد و مورد استفاده المانها قرار گرفت توسط یک ریاضدان لهستانی به نام مارین رجوسکی شکسته شد . این رمز در جنگ جهانی در انگلیس هم توسط آلن ترنینگو و گردن ریچمن شکسته شد .
۴۴ – در همین ایام رمز ژاپنی ها توسط هربرت یاردلی شکسته شد و ژاپنیس ها رمز ارغوانی را ابداع کردند این رمز نیز توسط گروهی به سرکردگی ویلیام فریدمن شکسته شد .
۴۵ – اختراع رمز کننده SIGABA_131_C در سال ۱۹۳۰ به ویلیام فایردمن نسبت داده می شود . این رمز کننده کامل تر از رمز کننده انیگما می باشد . و دارای پانزده استوانه برای انتقال رقم ها و نج استوانه برای کنترل باند می باشد .

۴۶ – در سال ۱۹۳۰ رمز کننده Typex جایگزین رمز کننده انیگما می شود .
۴۷ – در سال ۱۹۷۰ دکتر هورست فیستال در یک پروژه تحقیقاتی روز رمزها مجموعه ای از رمزرمز ها را بوجود آورد که منجر به رمز کننده DES گردید .
۴۸ – در سال ۱۹۷۶ در شرکت IBM طراحی رمزی براساس رمز لیسوفر به نام رمز FIPS PUB 46 انجام گرفت که دارای S – BOX پیشرفته و همچنین کاهش اندازه کلید را دربرداشت . و برای بیست سال در برار حملات مقاومت کرد . و بدین خاطر بسیار مورد استفاده قرار گرفت .

۴۹ – در سال ۱۹۷۶ وایت فیلد دیفی و مارتین هلمن برای اولین بار در مقاله خویش کلید عمومی را معرفی کرد .
۵۰ – در سال ۱۹۷۷ براساس مقاله هلمن سه ماتور کار رمز بنامهای رونالد ریوست . عدی شامیر و لئونارد ادلمن رمز RSA ابداع کردند . در اولیل کار سازمان NSA امریکا اجازه نداد که کار انها انتشار پیدا کند ولی بعد از مدتی کار خود را انتشار دادند که همزمان با انتشار دو ژورنال Cryptologia و Cryptology می باشد . در واقع این سه نفر مقاله هلمن را عملی کردند .
۵۱ – در سال ۱۹۷۸ در ACM برای اولین بار RSA انتشار یافت
۵۲ – در ۱۹۸۴ الی ۱۹۸۵ رمز ROT13 در خبرنامه USENET انتشار یافت .
۵۳ – در ۱۹۹۰ جیمز مسی ولیی در سیوزرلند رمز های بلوکی استاندارد را که به دلیل استفاده ساده تر جای رمز DES را گرفت با نام IDEA ابداع کرد .
۵۴ – برای اولین بار در ۱۹۹۱ رمز کوانتومی توسط بنتووبراساد مطرح شد . آنها از یک فوتون جهت انتقال کلید استفاده کردند در این رمز کننده گیرنده و فرستنده باید دارای کابل فیبر اپتیکی باشند

۵۵ – در همین سال زیمرمن رمز PGP را برای اولین بار معرفی کرد این رمز به دلیل سادگی و امنیت بالا مورد استفاده جهانی قرار گرفته است .
۵۶ – در سال ۱۹۹۴ پروفسور رون ریوست به دنبال ابداع RC4 رمز RC5 را ابداع نمود

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

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

رمزنگاری مخفف‌ها و اصطلاحات مخصوص به خود را دارد. برای درک عمیق‌تر به مقداری از دانش ریاضیات نیاز است. برای محافظت از دیتای اصلی ( که بعنوان plaintext شناخته می‌شود)، آنرا با استفاده از یک کلید (رشته‌ای محدود از بیتها) بصورت رمز در می‌آوریم تا کسی که دیتای حاصله را می‌خواند قادر به درک آن نباشد. دیتای رمزشده (که بعنوان ciphertext شناخته می‌شود) بصورت یک سری بی‌معنی از بیتها بدون داشتن رابطه مشخصی با دیتای اصلی بنظر می‌رسد. برای حصول متن اولیه دریافت‌کننده آنرا رمزگشایی می‌کند. یک شخص ثالت (مثلا یک هکر) می‌تواند برای اینکه بدون دانستن کلید به دیتای اصلی دست یابد، کشف رمز‌نوشته (cryptanalysis) کند. بخاطرداشتن وجود این شخص ثالث بسیار مهم است.

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

دیتای اولیه اغلب قبل از رمزشدن بازچینی می‌شود؛ این عمل عموما بعنوان scrambling شناخته می‌شود. بصورت مشخص‌تر، hash functionها بلوکی از دیتا را (که می‌تواند هر اندازه‌ای داشته باشد) به طول از پیش مشخص‌شده کاهش می‌دهد. البته دیتای اولیه نمی‌تواند از hashed value بازسازی شود. Hash functionها اغلب بعنوان بخشی از یک سیستم تایید هویت مورد نیاز هستند؛ خلاصه‌ای از پیام (شامل مهم‌ترین قسمتها مانند شماره پیام، تاریخ و ساعت، و نواحی مهم دیتا) قبل از رمزنگاری خود پیام، ساخته ‌و hash می‌شود.
یک چک تایید پیام (Message Authentication Check) یا MAC یک الگوریتم ثابت با تولید یک امضاء برروی پیام با استفاده از یک کلید متقارن است. هدف آن نشان دادن این مطلب است که پیام بین ارسال و دریافت تغییر نکرده است. هنگامی که رمزنگاری توسط کلید عمومی برای تایید هویت فرستنده پیام استفاده می‌شود، منجر به ایجاد امضای دیجیتال (digital signature) می‌شود.
الگوریتم‌ها

طراحی الگوریتمهای رمزنگاری مقوله‌ای برای متخصصان ریاضی است. طراحان سیستمهایی که در آنها از رمزنگاری استفاده می‌شود، باید از نقاط قوت و ضعف الگوریتمهای موجود مطلع باشند و برای تعیین الگوریتم مناسب قدرت تصمیم‌گیری داشته باشند. اگرچه رمزنگاری از اولین کارهای شانون (Shannon) در اواخر دهه ۴۰ و اوایل دهه ۵۰ بشدت پیشرفت کرده است، اما کشف رمز نیز پابه‌پای رمزنگاری به پیش آمده است و الگوریتمهای کمی هنوز با گذشت زمان ارزش خود را حفظ کرده‌اند. بنابراین تعداد الگوریتمهای استفاده شده در سیستمهای کامپیوتری عملی و در سیستمهای برپایه کارت هوشمند بسیار کم است.
۱-۲ سیستمهای کلید متقارن

یک الگوریتم متقارن از یک کلید برای رمزنگاری و رمزگشایی استفاده می‌کند. بیشترین شکل استفاده از رمزنگاری که در کارتهای هوشمند و البته در بیشتر سیستمهای امنیت اطلاعات وجود دارد data encryption algorithm یا DEA است که بیشتر بعنوان DES شناخته می‌شود. DES یک محصول دولت ایالات متحده است که امروزه بطور وسیعی بعنوان یک استاندارد بین‌المللی شناخته ‌می‌شود. بلوکهای ۶۴بیتی دیتا توسط یک کلید تنها که معمولا ۵۶بیت طول دارد، رمزنگاری و رمزگشایی می‌شوند. DES از نظر محاسباتی ساده است و براحتی می‌تواند توسط پردازنده‌های کند (بخصوص آنهایی که در کارتهای هوشمند وجود دارند) انجام گیرد.

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

کلیدهای DES ۴۰بیتی امروزه در عرض چندین ساعت توسط کامپیوترهای معمولی شکسته می‌شوند و بنابراین نباید برای محافظت از اطلاعات مهم و با مدت طولانی اعتبار استفاده شود. کلید ۵۶بیتی عموما توسط سخت‌افزار یا شبکه‌های بخصوصی شکسته می‌شوند. رمزنگاری DESسه‌تایی عبارتست از کدکردن دیتای اصلی با استفاده از الگوریتم DES که در سه مرتبه انجام می‌گیرد. (دو مرتبه با استفاده از یک کلید به سمت جلو (رمزنگاری) و یک مرتبه به سمت عقب (رمزگشایی) با یک کلید دیگر)
این عمل تاثیر دوبرابر کردن طول مؤثر کلید را دارد؛ این عمل یک عامل مهم در قدرت رمزکنندگی است.

الگوریتمهای استاندارد جدیدتر مختلفی پیشنهاد شده‌اند. الگوریتمهایی مانند Blowfish و IDEA برای زمانی مورد استفاده قرار گرفته‌اند اما هیچکدام پیاده‌سازی سخت‌افزاری نشدند بنابراین بعنوان رقیبی برای DES برای استفاده در کاربردهای میکروکنترلی مطرح نبوده‌اند. پروژه استاندارد رمزنگاری پیشرفته دولتی ایالات متحده (AES) الگوریتم Rijndael را برای جایگزینی DES بعنوان الگوریتم رمزنگاری اولیه انتخاب کرده است. الگوریتم Twofish مشخصا برای پیاده‌سازی در پردازنده‌های توان‌ـ‌پایین مثلا در کارتهای هوشمند طراحی شد.
در ۱۹۹۸ وزارت دفاع ایالات متحده تصمیم گرفت که الگوریتمها Skipjack و مبادله کلید را که در کارتهای Fortezza استفاده شده بود، از محرمانگی خارج سازد. یکی از دلایل این امر تشویق برای پیاده‌سازی بیشتر کارتهای هوشمند برپایه این الگوریتمها بود.

برای رمزنگاری جریانی (streaming encryption) (که رمزنگاری دیتا در حین ارسال صورت می‌گیرد بجای اینکه دیتای کدشده در یک فایل مجزا قرار گیرد) الگوریتم RC4 سرعت بالا و دامنه‌ای از طول کلیدها از ۴۰ تا ۲۵۶ بیت فراهم می‌کند. RC4 که متعلق به امنیت دیتای RSA است، بصورت عادی برای رمزنگاری ارتباطات دوطرفه امن در اینترنت استفاده می‌شود.

رمزنگاری به ‌شیوه کلید متقارن‌
همان‌طور که در شکل می‌بینید، در رمزنگاری به شیوه کلید متقارن، تابع رمزگذاری (‌)E با استفاده از یک کلید محرمانه k، پیغام متنی P را به متن رمزشده C تبدیل می‌کند. دریافت‌کننده این پیغام رمزشده، با اعمال تابع رمزگشایی (‌)D و همان کلید محرمانه k، این پیغام را به حالت اولیه P بازمی‌گرداند.
بهترین تکنیک رمزنگاری به شیوه کلید متقارن، DES یا‌ Data Encryption Standard نام دارد و از سال ۱۹۷۶ مورد استفاده قرار گرفته است. تکنیک DES در واقع یک متن کدشدهِ تکراری است که به قطعات ۶۴ بیتی متن ساده متصل می‌شود.

تابع رمزگذاری به‌ واسطه جابه‌جایی، توسعه، انتقال، فشرده‌سازی، تعویض و ترکیب قطعات ۶۴ بیتی متن پیغام با یک کلید ۵۶ بیتی، هر قطعه از متن ورودی را به یک قطعه متن ۶۴ بیتی کدشده تبدیل می‌کند. گیرنده پیغام، با اجرای معکوس مراحل رمزگذاری و با استفاده از همان کلید ۵۶ بیتیk ، قادر است پیغام را به حالت اولیه بازگرداند.

شکل۱- فرآیند رمزگذاری از فرمول (C=E(P تبعیت می‌کند. برای رمزگشایی پیغام از فرمول (P=D(C استفاده می‌شود. در رمزگذاری به شیوه کلید متقارن،
رابطه K1=K2 برقرار است. در رمزگذاری به شیوه کلید عمومی، کلید رمزگذاری با کلید عمومی دریافت‌کننده پیغام یکسان است و کلید رمزگشایی همان کلید خصوصی دریافت‌کننده است.

تکنیک DES از همان ابتدای کار، به عنوان یک روش ایمن برای انجام تراکنش‌های مالی مورد استفاده قرار گرفت، اما امروزه کارایی گذشته را ندارد. فضای ۵۶ بیتی کلید مورد استفاده در این تکنیک، ۲ به توان ۵۶ کلید منحصر به‌فرد تولید می‌کند. بنابراین، جست‌وجوی دقیق فضای کلید، متضمن دستیابی به مقدار کلیدk و تبدیل متن کدشدهC به پیغام اولیه P خواهد بود.
با این‌که فضای ۲۵۶ بیتی برای انسان‌ها بسیار بزرگ به ‌نظر می‌رسد، جست‌وجوی آن برای ماشین‌های ویژهِ کشف‌رمز یا سوپرکامپیوترهای امروزی، چندان مشکل نیست. در نتیجه، محققان روش‌های جدیدی را برای پیاده‌سازی الگوریتم‌های رمزنگاری به‌شیوه کلید متقارن ابداع کرده‌اند.

از میان این روش‌ها می‌توان از DES سه‌گانه (در این روش، تکنیک DES سه بار پیاپی و با استفاده از سه کلید ۵۶ بیتی متفاوت اجرا می‌شود. در این نوع رمزنگاری، فضای کلید مود استفاده، معادل یک کلید ۱۶۸ بیتی خواهد بود.)، تکنیک IDEA یا International Data Encryption Algorithm با کلیدهای ۱۲۸ بیتی، تکنیک RC4 (کلیدهایی با فضای بالای دو کیلوبیت یا ۲۰۴۸ بیت) و تکنیک RC5 (کلیدهایی با فضای بالای ۲۵۶ بیت) نام برد.

هنگام استانداردسازی روش‌های رمزنگاری در سال ۱۹۹۷ مؤسسه ملی استاندارد و فناوری با برگزاری یک مسابقه عمومی، تکنیک DES را با تکنیک AES یا Advanced Encription Standard جایگزین کرد. برنده این مسابقه روشی موسوم به Rijndael یا Rhine-doll بود که دو رمزنگار بلژیکی معرفی کردند.

تکنیک AES مانند DES نوعی رمزنگاری با استفاده از قطعات تکراری متن کدشده است، اما در آن از متن‌های ۱۲۸ بیتی همراه کلیدهای ۱۲۸، ۱۹۲ یا ۲۵۶بیتی استفاده می‌شود. بهره‌گیری از کلید ۲۵۶ بیتی، تعداد ۲ به توان ۲۵۶ انتخاب را برای کلید فراهم می‌کند. جست‌وجوی این فضا حتی برای کامپیوترهای پیشرفتهِ امروزی نیز غیرممکن است.
از آنجایی که برای اجرای رمزنگاری به شیوه کلید متقارن از فرمول‌های ریاضی ساده استفاده می‌شود، این شیوه با سرعت نسبتاً زیادی به اجرا در می‌آید. صرف‌نظر از فضای کلید، تمام رویکردهای رمزنگاری به شیوه کلید متقارن یک ضعف مشابه دارند. برای بازگرداندن پیغام به حالت اولیه، کلید مورد استفاده در رمزگذاری باید در اختیار دریافت‌کننده پیغام قرار بگیرد. در این بین اگر کسی به کلید دسترسی یابد، رمزنگاری پیغام بی‌فایده خواهد بود. برای رفع مشکل انتقال کلید، می‌توان از رمزنگاری به شیوه کلید عمومی بهره گرفت.
الگوریتم رمزنگاری قابل بازگشت (Rijndael)
string SecureDataAlg(string StrInp,byte[] key,byte[] iv)
{
byte[] input = Encoding.UTF8.GetBytes(StrInp);

CryptoStream cryptoStream = null;
RijndaelManaged rijndael = null;
ICryptoTransform rijndaelTransform = null;
MemoryStream memStream = null;

rijndael = new RijndaelManaged();
rijndael.Key = key;
rijndael.IV = iv;

rijndaelTransform = rijndael.CreateEncryptor();

memStream = new MemoryStream();
cryptoStream = new CryptoStream(memStream, rijndaelTransform, CryptoStreamMode.Write);

cryptoStream.Write(input, 0, input.Length);

cryptoStream.FlushFinalBlock();
byte[] str = memStream.ToArray();

return Convert.ToBase64String(str);
}
متغیر key ، ۱۶ بایتی و متغیر iv ، ۲۴ بایتی که به عنوان کلید عمومی و کلید اختصاصی استفاده می شوند.
الگوریتم رمزنگاری BlowFish :
الگوریتم رمزنگاری متقارن BlowFish یکی از روشهای متداول رمزنگاری است . این الگوریتم با پذیرش کلید عمومی از ۳۲ بیت تا ۴۴۸ بیت ، جایگزین خوبی برای روشهائی مثل DES است . ( خصوصا در کشورهائی مثل آمریکا که صدور و فروش نرم افزارهای دارای سیستم رمزنگاری به خارج از کشور ممنوع و برای استفاده های داخلی هم در طول کلید محدودیتهائی وجود دارد.)
از این روش امروزه به وفور در نرم افزارهای گسترده و سازمانی استفاده میشه ، به عنوان مثال Oracle . این الگوریتم در سال ۱۹۹۳ توسط Bruce Schneier طراحی و توسعه داده شد فایل هدر برای دسترسی به توابع :

#define MAXKEYBYTES 56 /* 448 bits */
// #define little_endian 1 /* Eg: Intel */
#define big_endian 1 /* Eg: Motorola */

short opensubkeyfile(void);
unsigned long F(unsigned long x);
void Blowfish_encipher(unsigned long *xl, unsigned long *xr);
void Blowfish_decipher(unsigned long *xl, unsigned long *xr);

متن الگوریتم و پیاده سازی توابع :
#ifdef little_endian /* Eg: Intel */
#include <dos.h>
#include <graphics.h>
#include <io.h>
#endif

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#ifdef little_endian /* Eg: Intel */
#include <alloc.h>
#endif

#include <ctype.h>

#ifdef little_endian /* Eg: Intel */
#include <dir.h>
#include <bios.h>
#endif

#ifdef big_endian
#include <Types.h>
#endif

#include “Blowfish.h”

#define N 16
#define noErr 0
#define DATAERROR -1
#define KEYBYTES 8
#define subkeyfilename “Blowfish.dat”

unsigned long P[N + 2];
unsigned long S[4][256];
FILE* SubkeyFile;

short opensubkeyfile(void) /* read only */
{
short error;

error = noErr;

if((SubkeyFile = fopen(subkeyfilename,”rb”)) == NULL) {
error = DATAERROR;
}

return error;
}

unsigned long F(unsigned long x)
{
unsigned short a;
unsigned short b;
unsigned short c;
unsigned short d;
unsigned long y;

d = x & 0x00FF;
x >>= 8;
c = x & 0x00FF;
x >>= 8;
b = x & 0x00FF;
x >>= 8;
a = x & 0x00FF;
//y = ((S[0][a] + S[1][b]) ^ S[2][c]) + S[3][d];
y = S[0][a] + S[1][b];
y = y ^ S[2][c];
y = y + S[3][d];

return y;
}

void Blowfish_encipher(unsigned long *xl, unsigned long *xr)
{
unsigned long Xl;
unsigned long Xr;
unsigned long temp;
short i;

Xl = *xl;
Xr = *xr;

for (i = 0; i < N; ++i) {
Xl = Xl ^ P[i];
Xr = F(Xl) ^ Xr;

temp = Xl;
Xl = Xr;
Xr = temp;
}

temp = Xl;
Xl = Xr;
Xr = temp;

Xr = Xr ^ P[N];
Xl = Xl ^ P[N + 1];

*xl = Xl;
*xr = Xr;
}

void Blowfish_decipher(unsigned long *xl, unsigned long *xr)
{
unsigned long Xl;
unsigned long Xr;
unsigned long temp;
short i;

Xl = *xl;
Xr = *xr;

for (i = N + 1; i > 1; –i) {
Xl = Xl ^ P[i];
Xr = F(Xl) ^ Xr;

/* Exchange Xl and Xr */
temp = Xl;
Xl = Xr;
Xr = temp;
}

/* Exchange Xl and Xr */
temp = Xl;
Xl = Xr;
Xr = temp;

Xr = Xr ^ P[1];
Xl = Xl ^ P[0];

*xl = Xl;
*xr = Xr;
}

short InitializeBlowfish(char key[], short keybytes)
{
short i;
short j;
short k;
short error;
short numread;
unsigned long data;
unsigned long datal;
unsigned long datar;

/* First, open the file containing the array initialization data */
error = opensubkeyfile();
if (error == noErr) {
for (i = 0; i < N + 2; ++i) {
numread = fread(&data, 4, 1, SubkeyFile);
#ifdef little_endian /* Eg: Intel We want to process things in byte */
/* order, not as rearranged in a longword */
data = ((data & 0xFF000000) >> 24) |
((data & 0x00FF0000) >> 8) |
((data & 0x0000FF00) << 8) |
((data & 0x000000FF) << 24);
#endif

if (numread != 1) {
return DATAERROR;
} else {
P[i] = data;
}
}

for (i = 0; i < 4; ++i) {
for (j = 0; j < 256; ++j) {
numread = fread(&data, 4, 1, SubkeyFile);

#ifdef little_endian /* Eg: Intel We want to process things in byte */
/* order, not as rearranged in a longword */
data = ((data & 0xFF000000) >> 24) |
((data & 0x00FF0000) >> 8) |
((data & 0x0000FF00) << 8) |
((data & 0x000000FF) << 24);
#endif

if (numread != 1) {
return DATAERROR;
} else {
S[i][j] = data;
}
}
}

fclose(SubkeyFile);

j = 0;
for (i = 0; i < N + 2; ++i) {
data = 0x00000000;
for (k = 0; k < 4; ++k) {
data = (data << 8) | key[j];
j = j + 1;
if (j >= keybytes) {
j = 0;
}
}
P[i] = P[i] ^ data;
}

datal = 0x00000000;
datar = 0x00000000;

for (i = 0; i < N + 2; i += 2) {
Blowfish_encipher(&datal, &datar);

P[i] = datal;
P[i + 1] = datar;
}

for (i = 0; i < 4; ++i) {
for (j = 0; j < 256; j += 2) {

Blowfish_encipher(&datal, &datar);

S[i][j] = datal;
S[i][j + 1] = datar;
}
}
} else {
printf(“Unable to open subkey initialization file : %d\n”, error);
}

return error;
}

۲-۲ سیستمهای کلید نامتقارن
سیستمهای کلید نامتقارن از کلید مختلفی برای رمزنگاری و رمزگشایی استفاده می‌کنند. بسیاری از سیستمها اجازه می‌دهند که یک جزء (کلید عمومی یا public key) منتشر شود در حالیکه دیگری (کلید اختصاصی یا private key) توسط صاحبش حفظ شود. فرستنده پیام، متن را با کلید عمومی گیرنده کد می‌کند و گیرنده آن را با کلید اختصاصی خودش رمزنگاری میکند. بعبارتی تنها با کلید اختصاصی گیرنده می‌توان متن کد شده را به متن اولیه صحیح تبدیل کرد. یعنی حتی فرستنده نیز اگرچه از محتوای اصلی پیام مطلع است اما نمی‌تواند از متن کدشده به متن اصلی دست یابد، بنابراین پیام کدشده برای هرگیرنده‌ای بجز گیرنده مورد نظر فرستنده بی‌معنی خواهد بود. معمولترین سیستم نامتقارن بعنوان RSA شناخته می‌شود (حروف اول پدیدآورندگان آن یعنی Rivest ، Shamir و Adlemen است). اگرچه چندین طرح دیگر وجود دارند. می‌توان از یک سیستم نامتقارن برای نشاندادن اینکه فرستنده پیام همان شخصی است که ادعا می‌کند استفاده کرد که این عمل اصطلاحا امضاء نام دارد. RSA شامل دو تبدیل است که هرکدام احتیاج به بتوان‌رسانی ماجولار با توانهای خیلی طولانی دارد:

 

• امضاء، متن اصلی را با استفاده از کلید اختصاصی رمز می‌کند؛
• رمزگشایی عملیات مشابه‌ای روی متن رمزشده اما با استفاده از کلید عمومی است. برای تایید امضاء بررسی می‌کنیم که آیا این نتیجه با دیتای اولیه یکسان است؛ اگر اینگونه است، امضاء توسط کلید اختصاصی متناظر رمزشده است.

به بیان ساده‌تر چنانچه متنی از شخصی برای دیگران منتشر شود، این متن شامل متن اصلی و همان متن اما رمز شده توسط کلید اختصاصی همان شخص است. حال اگر متن رمزشده توسط کلید عمومی آن شخص که شما از آن مطلعید رمزگشایی شود، مطابقت متن حاصل و متن اصلی نشاندهنده صحت فرد فرستنده آن است، به این ترتیب امضای فرد تصدیق می‌شود. افرادی که از کلید اختصاصی این فرد اطلاع ندارند قادر به ایجاد متن رمز‌شده‌ نیستند بطوریکه با رمزگشایی توسط کلید عمومی این فرد به متن اولیه تبدیل شود.
اساس سیستم RSA این فرمول است: X = Y k (mod r)

که X متن کد شده، Y متن اصلی، k کلید اختصاصی و r حاصلضرب دو عدد اولیه بزرگ است که با دقت انتخاب شده‌اند. برای اطلاع از جزئیات بیشتر می‌توان به مراجعی که در این زمینه وجود دارد رجوع کرد. این شکل محاسبات روی پردازنده‌های بایتی بخصوص روی ۸ بیتی‌ها که در کارتهای هوشمند استفاده می‌شود بسیار کند است. بنابراین، اگرچه RSA هم تصدیق هویت و هم رمزنگاری را ممکن می‌سازد، در اصل برای تایید هویت منبع پیام از این الگوریتم در کارتهای هوشمند استفاده می‌شود و برای نشاندادن عدم تغییر پیام در طول ارسال و رمزنگاری کلیدهای آتی استفاده می‌شود.

این فقط قسمتی از متن مقاله است . جهت دریافت کل متن مقاله ، لطفا آن را خریداری نمایید
wordقابل ویرایش - قیمت 20000 تومان در 342 صفحه
سایر مقالات موجود در این موضوع
دیدگاه خود را مطرح فرمایید . وظیفه ماست که به سوالات شما پاسخ دهیم

پاسخ دیدگاه شما ایمیل خواهد شد