View Full Version : آموزش: اصول رمزنگاري
vbhamed
پنج شنبه 23 شهریور 1391, 10:44 صبح
سلام
مطلب آموزشي در مورد اصول رمزنگاري هستش كه خيلي ها باهاش مشكل دارن و گاهي رمزنگاريهاي ساده اي ميخوان انجام بدن اما نميدونن چكاري بايد انجام بدن كه ميخوام با زبان ساده يه توضيحاتي رو بدم
در كل در رمزنگاري ما چند تا اصطلاح داريم
1 - متن آشكار (متني كه قراره رمز بشه و اونو داريم يا Plain Text)
2 - متن رمز يا متني كه به حالت رمز در اومده (cipher text)
3 - كليد رمز (رشته اي كه متن آشكار به كمك اون تبديل به متن رمز ميشه)
4 - الگوريتم رمز : مهمترين قسمت كه متن آشكار رو با استفاده از كليد و يكسري عمليات معمولا رياضي تبديل به متن رمز ميكنه)
الگوريتمهاي رمزنگاري هم به دو دسته متقارن و نا متقارن تقسيم ميشن كه در متقارن كليد رمزنگاري و كليد رمزگشايي با هم برابرند (مثل فايل rar يا zip پسورد دار كه با همون پسوردي كه zip ميشه با همونم باز ميشه) ولي در الگوريتم نامتقارن كليدها با هم فرق دارن
vbhamed
پنج شنبه 23 شهریور 1391, 10:53 صبح
سلام
رمزنگاری جانشيني سزار (Substitution Cipher) :
رمزنگاری سزار یکی از قدیمیترین رمزنگاریهای شناخت شده از نوع متقارن هستش که اولین بار توسط ژولیوس سزار برای رمزنگاری پیام ها تو جنگ استفاده میشد و یه نوع رمزنگاری جانشینی هستش که هر حرف یا گروهی از حروف با یه حرف یا گروهی دیگه از حروف جابجا میشن تا شکل پیام بهم بریزه و رمزنگاری بشه یعنی تو این روش مثلاً حرف a به d تبدیل میشه، b به c ،e به f و به همین ترتیب تا z که با حروف c جایگزین میشن
تو اين روش كليد k تعداد شيفت حروف به جلو هست مثلا اگر k=3 باشه هر حرف در متن اصلي با 3 حرف بعد از خودش به صورت چرخشي جايگزين ميشه مثلا
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
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
hello->khoor
چرخشي يعني اينكه اگر به آخرين حرف الفبا رسيديم دوباره از اول شروع ميكنيم
براي رمزگشايي هم كه مشخصه به تعداد همون K به عقب برميگرديم
متن رمز به صورت حروف بزرگ هست كه البته ميتونين به حروف كوچك و بزرگ هم تعميم بدين
Private Sub Form_Load()
Dim i%, Key%, Plain$, Cipher$, newchar%, decode$
Key = 3
Plain = "HelloHowAreYou"
'---------- Encode Section ----------------
For i = 1 To Len(Plain)
newchar = Asc(UCase$(Mid$(Plain, i, 1))) + Key
If newchar > 90 Then newchar = newchar - 26
Cipher = Cipher & Chr$(newchar)
Next
MsgBox Cipher
'---------- Decode Section ----------------
For i = 1 To Len(Cipher)
newchar = Asc(UCase$(Mid$(Cipher, i, 1))) - Key
If newchar < 65 Then newchar = newchar + 26
decode = decode & Chr$(newchar)
Next
MsgBox decode
End Sub
vbhamed
پنج شنبه 23 شهریور 1391, 11:01 صبح
سلام
چيزي كه در رمزنگاري سزار مشخص هست اينه كه خيلي راحت رمزشكني ميشه و در حالت حروف انگليسي با يك حلقه FOR ساده با تكرار نهايتا 26 ميشه در كسري از ثانيه رمز رو شكست
ولي خب اينم راه حل داره و اون استفاده از الگوريتم بهبود روش سزار هست
در اين روش ابتدا حروف انگليسي به صورت دلخواه جابجا ميشن و بعد الگوريتم سزار روي اونها اعمال ميشه
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
متن بالا با جابجايي دلخواه حروف، تبديل به متن پايين ميشه
E P N O H I J A Q R S F G K X L M B C W Y Z D T U V
حالا سه حرف به عقب شيفت ميديم يعني كليد برابر 3 است
O H I J A Q R S F G K X L M B C W Y Z D T U V E P N
E P N O H I J A Q R S F G K X L M B C W Y Z D T U V
O H I J A Q R S F G K X L M B C W Y Z D T U V E P N
hello->aoccj
در اين روش 26 فاكتوريل حالت مختلف رمز داريم (يعني 403,291,461,126,605,635,584,000,000 حالت) كه شكستنش خيلي سخت تر از حالت قبليه چون رمزشكن علاوه بر K بايد تركيب بهم ريخته حروف رو هم داشته باشه و اگر كامپيوتر هر 1 نانو ثانيه يك حالت رو تست كنه در بدترين حالت حدودا 10,000,000,000 سال طول ميكشه كه عملا غير ممكنه
البته رمزشكن روشهاي ديگه اي هم داره كه يكيش استفاده از ويژگيهاي آماري زبان هست :
مثلا در زبان انگليسي حرف e بيشترين تكرار رو داره و بعد حرف t و بعد a و ...
همچنين تركيبات دو حرفي مثل th و in و er و re و an و ...
و سه حرفي مثل the و ing و and و ion
و چهار حرفي مثل that و ...
و ...
رمزشكن با شمارش حروف متن رمز و محاسبه تكرار نسبي حروف شروع ميكنه سپس حرفي كه بيشترين تكرار رو داره با e جايگزين ميكنه، حرف بعدي با t و الي آخر
حالا اگر در متن بدست آمده تركيباتي شبيه tXe داشت و با توجه به تركيبات سه حرفي پر تكرار ميتونه نتيجه بگيره X برابر حرف h هست تا تركيب the بدست بياد و باز اگر تركيباتي مثل thYt داشت ميتونه فرض كنه Y برابر a هست تا that بدست بياد
X با h جايگزين شده و Y با a، به همين ترتيب بقيه تركيبات رو هم بدست ميره و در نهايت متن، رمز شكني ميشه
البته ممكنه برخي حروف اشتباه سنجيده بشه ولي ميتونه در مراحل بعدي اصلاح بشه
يكي ديگه از ويژگيهاي آماري زبان حروف كنار هم هستن، مثلا در 99/9 درصد مواقع سمت راست حرف q حرف u قرار داره (qu) يا در كنار حرف t (البته با احتمال كمتر) حرف h قرار داره
يعني اگر q كشف بشه، u هم كشف شده و اگر t كشف بشه، كشف h ساده تره
نكته بعدي مراجعه به فرهنگ لغت هستش يعني اگر مقداري از حروف يك كلمه پيدا بشه، ميتونيم بقيه رو از روي فرهنگ لغت بدست بياريم
vbhamed
پنج شنبه 23 شهریور 1391, 11:14 صبح
سلام
رمزنگاري جايگشتي (Transposition) :
رمز نگاري جانشيني (سزار) ترتيب سمبول هاي يك متن رو حفظ ميكنه ولي شكل كاراكترها رو تغيير ميده بر عكس رمز نگاري جايگشتي، يك بلوك از كاراكترها به طول ثابت را از ورودي دريافت ميكنه و يك بلوك رمز شده با طول ثابت در خروجي توليد ميكنه
كليد رمز در اين حالت كلمه يا عبارتيه كه هيچ حرف تكراري نداره و حداقل هم بايد 2 حرفي باشه
كاربرد كليد رمز اونه كه ستون ها رو شماره گذاري ميكنه
روش كار: فرض كنيد كليد رمز MEGABUAK هست، شماره هر ستون بر اساس ترتيب الفبايي هر حرف كليد نسبت به جدول الفبا تعيين ميشه، مثلا ستون چهارم جدول زير رو 1 قرار ميديم (ستون حرف A) چون حرف A اولين حرفي از جدول الفبا هست كه در رمز ما استفاده شده و ستون پنجم رو 2 قرار ميديم (ستون حرف B) و اگر حرفي رو نداشتيم، اولين حرف بعدي الفبا كه در كلمه رمز هست رو در نظر ميگيريم، مثلا ما در اين كلمه حروف A و B و C رو داريم و D نداريم ولي E داريم پس E رو 4 ميگيريم و به همين ترتيب
متن اصلي به صورت افقي (سطري) نوشته ميشه و در صورت لزوم تعدادي حرف مانند a و b و به آخرين سطر اضافه ميشه تا ماتريس مربوطه پر بشه (در مثال زير به سطر آخر و ستون آخر ماتريس حرف a اضافه شده)، متن رمز شده بر اساس شماره ستون ها به صورت عمودي خونده و به هم متصل ميشه
ترتيب خوندن ستون ها، از ستون با كمترين شماره به بزرگترين شماره است.
7 4 5 1 2 8 3 6 ترتيب حروف
M E G A B U C K کليد رمز
---------------------------
p l e a s e t r
a n s f e r o n
e m i l l i o n
d o l l a r s a
متن آشکار
Pleasetransferonemilliondollars
متن رمزشده
afllselatoosinmoesilrnnapaederir
اگر به شكل بالا دقت كنيد تو سطر اول اعداد 1 تا 8 نوشته شده كه بر اساس ترتيب الفبايي حروف رمز هستش
ستون اول كه زير حرف A هست رو مينويسيم يعني afll بعد ستون دوم يعني sela و تا آخر و در نهايت متن رمز بدست مياد
در سطر آخر و ستون آخر يك حرف a ميبينيم كه در متن آشكار وجود نداشته، اين a به خاطر اين اضافه شده كه ماتريس بالا كامل بشه و معمولا به تعداد لازم حروف انگليسي از a تا z اضافه ميكنيم
در اين روش شكل كاراكترها عوض نميشه ولي جاشون در متن تغيير ميكنه
vbhamed
پنج شنبه 23 شهریور 1391, 11:49 صبح
سلام
براي شكستن رمزهاي جايگشتي، تحليلگر رمز، ابتدا بايد مطمئن بشه كه آيا واقعا با يك متن رمز شده به روش جايگشت رو به رو هست يا خير كه با بررسي تعداد حروف e, t, a, o, i, n و ... ميتونه اين رو بفهمه
گام بعد اونه كه تعداد ستون ها حدس زده بشه و گام آخر به دست آوردن ترتيب ستون ها،
عمل رمز شكني در نقطه اي با موفقيت روبرو ميشه كه يك كلمه يا يك عبارت معني دار ظاهر بشه
البته با تركيب بهبود روش جانشيني سزار و روش جايگشتي با هم ميتونيم يك حالت خيلي امن تر ايجاد كنيم
و ميتونيم براي يك متن آشكار چند بار پشت سر هم روش جانشيني و جايگشتي رو اعمال كنيم تا متن رمز پيچيده تري بدست بياريم
vbhamed
پنج شنبه 23 شهریور 1391, 12:00 عصر
سلام
روش One Time Pad (به هم ريزي محتواي پيام)
در اين روش يك رشته تصادفي دلخواه به عنوان كليد در نظر ميگيريم كه طولش بايد برابر طول متن آشكار باشه
سپس كد اسكي حروف متن اصلي رو حرف به حرف با كد اسكي حروف كليد رمز XOR ميكنيم و اگر كليد خوبي انتخاب كنيم متن رمز شده هيچكدوم از خصوصيات آماري زبان (تكرار حروف و تركيبات) رو نداره بنابراين رمزشكني تقريبا غير ممكنه
اين روش با روش XOR معمولي كه راحت شكسته ميشه فرق داره، در XOR معمولي ما تمام حروف متن رو با فقط يك عدد خاص XOR ميكنيم بنابراين با امتحان اعداد مختلف در يك حلقه ساده، خيلي راحت ميشه رمزشكني رو انجام داد ولي در اين روش هر حرف جداگانه با يك عدد XOR ميشه و اگر فرض كنيم متن اصلي ما فقط و فقط 3 حرف باشه و هر حرفش با عددي 6 رقمي XOR بشه 999997000002999999 حالت مختلف داريم، حالا اگر متنمون بزرگتر بشه ميشه 999999 به توان تعداد حروف متن آشكار يعني عملا قابل تست كردن نيست تازه اين براي عدد 6 رقمي هست و اگر اون رو بيشتر كنيم باز هم تعداد حالات به صورت نجومي بالا ميره
البته اين روش معايبي هم داره
1 - كليد رو نميتونيم به خاطر بسپريم چون طولش زياده، ضمنا توليد كليد مشكله
2 - حجم اطلاعات دو برابر ميشه (طول متن + طول كليد)
3 - كليد رو بايد از كانال امني به گيرنده بديم و اگر چنين كانال امني داشته باشيم چرا خود اطلاعات اصلي رو به همين روش نديم ! (جوابشم اينكه خب به اين دليل كه اولا از اين روش ميتونيم براي رمزنگاري متون برنامه و ديتا هامون استفاده كنيم، دوما فرض كنيم كانال امن هم داريم اما رمزگذاري اطمينان بيشتري براي ما به ارمغان مياره)
اينم يك نمونه كد كه اول متن رو رمز ميكنه بعد با استفاده از كليد، رمزگشايي ميكنه
براي رمزگشايي، متن رمز شده (Cipher) رو دوباره به همون روش با كليد XOR ميكنيم
Private Sub Form_Load()
Dim Plain$, Key$, Cipher$, i%, decode$
Plain = "Hello, How are you"
Key = "ajuwerxsdfjhskdf1ks"
'---------- Encode Section ----------------
For i = 1 To Len(Plain)
Cipher = Cipher & Chr$(Asc(Mid$(Plain, i, 1)) Xor Asc(Mid$(Key, i, 1)))
Next
MsgBox Cipher
'---------- Decode Section ----------------
For i = 1 To Len(Cipher)
decode = decode & Chr$(Asc(Mid$(Cipher, i, 1)) Xor Asc(Mid$(Key, i, 1)))
Next
MsgBox decode
End Sub
vbhamed
پنج شنبه 23 شهریور 1391, 16:08 عصر
دو اصل اساسي در رمز نگاري:
1 - افزونگي (Redundancy) :
اولين اصل آن است كه تمام پيام هاي رمز شده بايد شامل مقداري افزونگي باشه به عبارت ديگر لزومي نداره كه اطلاعات واقعي به همانگونه هستند رمز و ارسال بشن، در حقيقت قضيه اينه كه تمام پيام ها بايد مقدار قابل توجهي افزونگي داشته باشن به گونه اي كه يك اخلال گر فعال (شخصي كه اطلاعات را شنود ميكنه و تغيير ميده) نتونه پيام هاي تصادفي بيمعنا توليد و ارسال كنه و باعث بشه اين پيام ها به عنوان پيام هاي معتبر تفسير بشن
افزونگي به اين جهت نيازه كه از ارسال پيام هاي بي ارزش اخلالگران و فريب خوردن گيرنده در رمز گشايي پيامها و پردازش آنها جلوگيري بشه (براي تشخيص پيام هاي معتبر از پيام هاي ساختگي)
عيب: شكستن سيستم رمز توسط اخلالگران غير فعال (كساني كه فقط اطلاعات را شنود ميكنن) را ساده تر ميكنه
افزونگي اطلاعات در قالب موارد زير هست
- افزودن تعدادي عدد در ابتدا يا انتهاي پيام
- اضافه كردن يك چند جمله اي CRC. (گيرنده اصلي به راحتي ميتواند صحت پيام ها را بررسي كند)
- استفاده از توابع در هم سازي رمز (hash)
- استفاده از توابع checksum
2-تازگي پيام ها :
دومين اصل اساسي در رمز نگاري آن است كه بايد محاسبات صورت بگيره تا مطمئن بشيم هر پيام دريافتي تازه و جديده يا به عبارتي جديدا فرستاده شده، اين بررسي براي جلوگيري از ارسال مجدد پيام هاي قديمي توسط يك اخلالگر كاملا الزاميه (فرض كنيد بانك پيامي رو براي سرور مرکزی ميفرسته كه حاصل اون انتقال مبلغي از حساب X به Y هست، حالا اگر اخلالگر فعال اين پيام رو ذخيره كنه و چندين بار ديگه همين پيام رو بفرسته و پيام هم مهر اعتبار زماني نداشته باشه نتيجش ميشه انتقال چند برابر پول به حساب Y و اين يعني فاجعه، البته در اينطور موارد غير از مهر زماني معمولا از يك شماره شناسايي غير تکراري براي پيام ها هم استفاده ميشه)، چنين محاسبهاي را ميتونيم با قرار دان مهر زمان در پيام ها پيش بيني كنيم به نحوي كه پيام مثلا براي ده ثانيه معتبر باشه، گيرنده پيام ميتونه اون رو براي حدود ده ثانيه نگه داره تا بتواند پيام هاي جديد رو با اون مقايسه كرده و نسخه هاي تكراري را حذف كنه
vbhamed
یک شنبه 10 شهریور 1392, 09:56 صبح
سلام
نكته ديگه اي كه بايد در نظر داشت اينه كه براي ايجاد يك متن رمز كاملا امن معمولا روشهاي مختلف جانشيني و جايگشتي و به هم ريزي محتوا با هم تركيب ميشن و نيز هر كدوم چند بار روي متن اعمال ميشن كه اين بستگي به ميزان امنيت درخواستي ما داره
الگوريتمهايي مثل RSA و AES هم از تركيب همين روشها استفاده ميكنند مثلا ابتدا متن رو كد ميكنند، سپس رشته حاصله رو برعكس ميكنند و دوباره كد ميكنند و دوباره برعكس و تا 15 بار اينكار انجام ميشه
ميشه گفت اگر تعداد تركيبها رو زياد كنيم و از الگوريتمهاي اختصاصي هم استفاده كنيم تقريبا راهي براي هك شدن رمز وجود نداره مگر اينكه كسي الگوريتم شما رو دربياره و معكوسش رو انجام بده و کلید ها رو هم داشته باشه !
smseman
یک شنبه 01 دی 1392, 00:55 صبح
سلام ممنون از مطالبتون در سایت در مورد رمز نگاری 2 سوال داشتم
اول اینکه من مفهوم کلید را نفهمیدم اگر میشود مثال بزنید
دوم اینکه یه سوال معلم ما طرح کرده که یک متن را با یک کلید کاملا دلخواه مثلا a به d و b به e و همینطور 26 حرف انگلیسی به یک حرف دلخواه دیگر بدون هیچگونه ترتیبی نسبت داده شوند آیا این یک روش رمز گذاری معروف است چون از ما خواسته بر فرض اینکه بدانیم در متن اصلی یعنی قبل از رمز کردن 3 بار کلمه مثلا financial تکرار شده باشد گفته کدی بنویسید که تا حد ممکن متن رمز شده را رمز گشایی کند
آیا شما کدش را دارید ؟ من خیلی vb وارد نیستم
ممنون میشم راهنماییم کنید
vbhamed
یک شنبه 01 دی 1392, 14:05 عصر
سلام
منظور از كليد همان كلمه رمز است
با مشخصات گفته شده مشابه بهبود روش سزار است كه در پست شماره 3 به همراه مثال توضيح داده شده
ARData
دوشنبه 27 تیر 1401, 14:36 عصر
سلامی دوباره :
برای الگوریتم های هش مثل SHA1 , SHA2 , SHA3 مخصوصا Keccak256 فایل ریفرنسی یا dll یا یک Function وجود داره ؟
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.