[[Template core/front/global/updateWarning is throwing an error. This theme may be out of date. Run the support tool in the AdminCP to restore the default theme.]]
في بيئة VB.NET جميع خوارزميات التشفير تقع ضمن هذه المكتبة . لذالك بكل سهولة نكون كائن جديد من نوع خوارزمية تشفير معينة ونجد التشفير لأي بيانات نريدها
VB.NET CODEImports System.Security.Cryptography
هذه جزء من خوارزميات الموجودة ضمن هذه المكتبة
Hash And MAC
هي خوارزميات يتأكد المستلم ان الرسالة المرسلة إليه لم يتم التلاعب بهَ خلال فترة انتقالها إليه من المرسل أي التأكد من مصداقية وصول البيانات .اي يرسل رسالة وعند المستلم يتأكد ان الرسالة المستلمة هي نفسها الرسالة المرسلة ! إذن هي ليست خوارزميات تشفير إنما خوارزميات تأكد سلامة وصول بيانات لذالك ليس لها طرق فك تشفير تستخدم في كلمات مرور الحواسيب وفي ملفات التورنت للتأكد من وصول الملفات كاملة لأنه مثلا عند تنزيل أي ملف من الانترنت أي خلل في تنزيل ملف لا يعمل عند المستلم لذالك يجب ان يقوم الخادم باستخراج Hash من الملف وإرساله مع الملف والشخص الذي يحمل الملف عندما يكتمل تحميله يستخرج Hash للملف ويقارنه مع المرسل من قبل الخادم فإذا كان نفسه فالملف سليم وإلا الملف تالف .
تصل الحرب عند مرحلة انه لا يريد يقطع إرسال الرسالة أو انه حتى إذا قراها وفك شفرتها فلن يغير شيء من مسار العملية المطلوب تنفيذها فيحاول أن يغير مسار العملية المراد تنفيذها بتوصيل الرسالة للمستلم لكن بصيغة جديدة أو انه يعرف أن توصيل الرسالة مع إجراء بعض التغيرات عليها أفضل من قطعها فيعترض الرسالة ويغير عليها ويرسلها فلمستلم يستلم رسالة متغيرة وينفذها فقد ينفذ العمليات التالية 1. أما انه يعدل على الرسالة 2. او يؤثر على ترتيب البيانات أما يحذف او يضيف او يعيد ترتيب 3. او يؤخر او يعيد إرسال الرسالة
مثال : رسالة إلى محمد (اذهب اقتل احمد) معترض يعرف ان محمد سوف يقتل احمد وهو لا يستطيع ان يوقف مسار العملية أي لا يستطيع ان يمنعه من قتله لأنه مثلا في مكان بعيد عن القاتل لا يستطيع ان يصل إليه لذالك سوف يغير الرسالة ويجعلها (اذهب اقتل صالح) فلن يقتل احمد قتل صالح ونفذ ضربة المعترض ونجا الهدف ؟
• هذه العمليات التعديل على البيانات تحدث بسهولة في البث الجماعي Broadcast يعني سهولة شخص واحد يستلم رسالة ويعيد يبثها للجميع بصيغة ثانية فيغير العمل عليهم
خوارزمية MD5
هي إحدى خوارزميات Hash تكون من الرسالة المتغيرة التي نحن نريد إرسالها مفتاح تابت طوله 128 bit (16 byte ) كما في الشكل
خطوات العمل مع خوارزمية MD5 1. في شكل (1) جزء رقم (1) تقسم البيانات على شكل Block كل واحد حجمه 512bit حيث L يمثل عدد Block كما في الشكل بالأسفل مقسم إلى ثلاثة مقاطع حيث • الجزء الأول message يمثل بيانات الرسالة بعد تحويلها الى النظام الثنائي • والجزء الثاني padding وضيفته إذا لم تكفي bitsالخاص بالرسالة لي Block وتبقى بعض bits ضمن 512 bit داخل احد Block فارغة تملئ bits فارغة بواحد (1) ويليه أصفار بقدر bits الفارغة ؟ في Block الأخير نستخدم فقط bit 448 ويبقى bit 64 الأخير لخزن طول الرسالة أي لخزن عدد bits الخاص بالرسالة داخل اخر 64 bit . لحساب عدد bits الواجب إضافتها الى الرسالة نستخدم المعادلة التالية A = عدد bits رسالة حقيقية / 512 B =الجزء ألكسري (A)*512 bits مضافة=448- B • الجزء الثالث message Length يمثل طول bits الرسالة الحقيقية ونحن هنا حجز لها 64 bit من اخر Block في الرسالة لنخزن فيه طول الرسالة .إذا كانت البيانات عبارة عن Block واحد تخزن طول البيانات في 64 bit الأخير أما إذا كانت أكثر من Block تخزن طول البيانات في أخر 64 bit في نهاية Block الأخير(ويعتبر هذا جزء من Block bit الخاص بالرسالة( .واستخدمنا هنا 64 bit لتمثيل طول الرسالة أي إننا نستطيع ان نشفر رسالة بخوارزمية MD5 طولها 2^64
شكل (2)
كما مبين في الشكل (2) الرسالة اذا كانت طولها أكثر من 512 bit تقسم الى Block كل واحد حجمه 512 bit بالأسماء التالية (y0,y1,yq,yl-1) وكل Block يدخل على HMD5 واحد .
مثال : إدخال رسالة محتواها (hi) لاحظ انه حولها الى النظام الثنائي بالصيغة التالية (01101000 01101001)
نلاحظ ان البيانات حجمها 16bit لذالك لكي يجعلها Block يجب ان تصل عددها الى 448bit لذالك سيضيف 1bit قيمته واحد و431bit قيمته صفرالى نهاية السلسلة
و 64bit البقية تمثل طول الرسالة الحقيقية بصيغة النظام الثنائي لاحظها تحتها خط (وهي طولها 16 bit) (0000000000000000000000000000000000000000000000000000000000010000) .حتى يصبح طول البيانات الكلي 512bit
2. في شكل (1) جزء رقم (2) او شكل(3) وهي مجموعة عمليات تجري ضمن كل HMD5 هذا الجزء مقسم إلى أربع ROUND كل واحدة منها تنفذ عملياتها 16 مرة سوف نشرح على جزء واحد و لمرة واحدة والبقية نفسها تكرر لكن على البيانات المحدثة الجديدة حيث Yq : يمثل 512 bit الخاص ب Block بيانات رسالة معينة حيث يقسم الى 16 block كل واحد بحجم 32 bit كلها تمرر على جميع ROUND الأربعة وهي ثابتة لا تتغير خلال 16 مرة تنفيذ داخل كل ROUND ضمن HMD5 الواحد لأنها تمثل بيانات رسالة معينة لكنها تتغير في HMD5 التالي لأنها بيانات block أخر ضمن الرسالة والبيانات الناتجة لكل من (A,B,C,D) من هذا HMD5 تنتقل عبر CV الى CV1 التالي شاهد شكل (1)
ناتج الجمع هنا هو mod 2^32
(A,B,C,D) هي أربعة REGISTER حجمها الكلي 128 bit كل واحد حجمه 32 bit مخزن فيها قيم أولية وتتحدث ضمن ROUND الواحد 16 مرة وبعدها الناتج ROUND ينتقل الى ROUND التالي وعندما ينتهي من الأربعة ينتقل الى HMD5 التالي. هذه القيم الأولية بالنظام السادس عشري
A = 67452301B = EFCDAB89C = 98BADCFED = 10325476
T : هي قيم بالرادين تستخدم لتعقيد التشفير تحضر وفق المعادلة التالية
i=1:64; x= abs(sin(i))* 2^32
أي نكون مصفوفة T تبدأ من 1 الى64 وفق المعادلة أعلاه . حيث تحول هذه البيانات الى نظام Hex حيث كل ROUND يأخذ جزء منها توضيح :-
ROUND1 الأول يأخذ من T[1—16] ROUND2 الثاني يأخذ من T[17—32] ROUND3 الثالث يأخذ من T[33—48] ROUND4 الرابع يأخذ من T[49—64]
3. شكل (4) هي العمليات التي ستجري 16 مرة ضمن كل ROUND لاحظ شكل (1)
شكل (4)
CLS: هي circular left shift أي تدوير مع s bit مقدار التدوير نحن نحدده مرة واحدة او اكثر مثال : 00110 لو أزحناها بمقدار 2 من اليسار إلى اليمين ستصبح النتيجة 11000
g : هي معادلة الدوال (F,G,H,I) وهي عند كل ROUND لها معادلة مختلفة مثال: عند ROUND1 الخاص F تكون
g=F(b,c,d)=(b and c)Or(Not( and d).
وهي دوال Boolean تحضر وفق المعادلات التالية
g=F(b,c,d)=(b and c)Or(Not( and d).g=G(b,c,d)=(b and c)Or(b and Not(d)).g=H(b,c,d)=(b Xor c Xor d).g=I(b,c,d)=c Xor (b Or Not(d))
X[k : هي بيانات رسالة لكل block الذي كان يحتوي على 512 bit
قسمة الى 16 block كل واحد بحجم 32 bit
تشفير الخوارزمية بلغة VB.NET
تنتج هذه الخوارزمية مفتاح طوله 128 bit (16 byte ) .المثال التالي يشفر أي نص او ملف ( صورة او صوت او مقطع فيديو او أي نوع اخر من الملفات) بخوارزمية MD5
بداية نبني دالة تستقبل النص او الملف المراد تشفيره بصيغة Byte وتعيد لنا MD5 Hash الخاص بهذا النص بكل سهولة حيث نعرف داخل هذه الدالة متغير من نوع MD5 جديد ونكونه وبعده نعمل ComputeHash للبيانات المستلمة لحساب Hash لها وبعدها نحولها اللى بينات من Byte الى صيغة HEX
VB.NET CODEPublic Function GetMD5Data(ByVal data As Byte()) As String'create new instance of md5Dim md5a As MD5 = MD5.Create()'convert the input text to array of bytesDim hashData As Byte() = md5a.ComputeHash(data)'create new instance of StringBuilder to save hashed dataDim returnValue As New StringBuilder()'loop for each byte and add it to StringBuilderFor i As Integer = 0 To hashData.Length - 1returnValue.Append(hashData(i).ToString("x2"))Next' return hexadecimal stringReturn returnValue.ToString()End Function
في زر (FIND MD5) نحول النص الذي نكتبه الى Byte ونرسله الى الدالة لكي تعيد لنا Hash له لنستعرض نتيجتها بالنص الثاني ونعرض البيانات ايضاً داخل ListBox
VB.NET CODETextBox2.Text = GetMD5Data(Encoding.[Default].GetBytes(TextBox1.Text)) ListBox1.Items.Clear() For i = 0 To Len(TextBox2.Text) - 2 Step 2 ListBox1.Items.Add(TextBox2.Text(i) & TextBox2.Text(i + 1)) Next
وفي زر (تشفير ملفات) نتصف ملفات من الحاسبة وبعدها نحولها الى Byte ونرسلها الى الدالة لكي تعيد Hash لها
VB.NET CODE 'read file and find it md5Dim op As New OpenFileDialogop.ShowDialog()Dim fData As Byte() = File.ReadAllBytes(op.FileName)TextBox2.Text = GetMD5Data(fData)ListBox1.Items.Clear()For i = 0 To Len(TextBox2.Text) - 2 Step 2ListBox1.Items.Add(TextBox2.Text(i) & TextBox2.Text(i + 1))Next
نستخدم الدالة التالية عند المستلم للتأكد ان النص المستلم هو نفسه المرسل وذالك بمقارنة المفتاح المرسل مع المفتاح الناتج من الرسالة المستلمة
VB.NET CODEFunction ValidateMD5Data(ByVal inputData As Byte(), ByVal storedHashData As String) As Boolean'hash input text and save it string variableDim getHashInputData As String = GetMD5Data(inputData)If String.Equals(getHashInputData, storedHashData) ThenReturn TrueElseReturn FalseEnd If End Function
خوارزمية Secure Hash Algorithm(SHA)
هي إحدى خوارزميات Hash تقوم بإيجاد سلسلة ثابتة من أي نص أو ملف توجد عدة أنواع منها SHA1: تنتج هذه الخوارزمية مفتاح طوله 160 bit (20 byte ) SHA512: تنتج هذه الخوارزمية مفتاح طوله 512 bit (64 byte ) من أي رسالة او ملف مهما كان طوله وعدد من الأنواع SHA الأخرى كما نرها بالشكل (4) بالأسفل وخاصية كل نوع
سوف نشرح بالتفصيل طريقة عمل SHA512 المبينة بالشكل (5)
شكل (5)
في الشكل(5) يبين لك طريقة عمل SHA512 وقمت بتقسيمها الى أربعة اجزاء لكل يسهل فهمها وسوف اشرح كل جزء بالتفصيل
جزء رقم (1) نعرف ان SHA512 تستقبل أي طول من البيانات وتجد له HASH طوله 512 bit في شكل (6) يقسم الرسالة الى Block كل واحد حجمه 1024 bit واخر 128 bit في اخير Block يكون محجوز لطول البيانات الحقيقية أي تستطيع هذه الخوارزمية ان تجد HASH لبيانات أقصى حد لطولها 2^128 والبتات Bit التي تبقى فارغة بين اخر 128 bit والبيانات الحقيقية للرسالة بعد تحويلها الى binary نعمل لها padding أي ندخل رقم واحد ويتبعه عدد من الاصفار حتى نملئ bits الفارغة. وان اخر Block يتقبل فقط 896 bit لان كما قلنا اخر 128 bit في اخر Block تكون محجوزة لطول الرسالة الحقيقية بصيغة نظام ثنائي
شكل (6)
حيث iv=H0 يمثل Registers الثمانية (A,B,C,D,E,F,G,H) كل واحد حجمه 64 bit مجموعهم هو 512 bit الذي سيمثل في النهاية Hash الخاص بالرسالة .وهذه القيم الأولية المخزنة داخل Registers
الجزء رقم (2)
الذي يمثل الجزء رقم2 في شكل (5) هو حرف (F) في الجزء رقم1 .حيث يتكرر نفس عملياته مع كل Block لذالك سوف نشرح على Block واحد والبقية نفس الشيء. يمثل شكل (7) العمليات التي ستجري على كل Block من الرسالة الحقيقية لينتج مفتاح طولها 512 bit مخزن في (A,B,C,D,E,F,G,H) ويعتبر كمدخل للعمليات على Block التالي اذا كانت البيانات اكثر من Block وكما مبين في الشكل(7) او تعتبر النتيجة النهائية اذا كانت البيانات عبارة عن Block واحد . وان كل (F) مقسم الى 80 Round كل واحد تنفذ العمليات في داخله مره واحد (جزء رقم4 في شكل(5) يمثل العمليات التي ستجري ضمن كل Round)
شكل (7)
في شكل (7) كل Round من 80 يدخل عليه قيمة K معين بين (K0-K79) وهي قيم ثابتة مكون من 64 bit تأخذ من الجدول التالي
الجزء رقم (3)
كما نلاحظ ان في شكل (7) كل Round يدخل عليه قيمة من بيانات Block طولها 64 bit وان طول Block الواحد هو 1024 bit لذالك يقسم (1024) الى 16 Block كل واحد حجمه 64 bit ممثلا (W0-W15) ويدخل على اول 16 Round
شكل (8)
وبقية Round تأخذ Wt وفق المعادلة التالية
جزء رقم (4): جزء رقم4 في شكل(5) يمثل العمليات التي ستجري ضمن كل Round ليتم من خلا لها التحديث على قيم Registers التي ستعتبر القيم المحدثة كمدخل Round التالي وفي اخر Round تعتبر Hash الخاص بالرسالة اذا كانت الرسالة من Block واحد وخلافه تعتبر مدخل لبيانات Registers في Block التالي
شكل (9)
Wt: يمثل 64 bit من بيانات Block تم شرح طريقة تحضيرها لكل Round سابقا Kt : وهي قيم ثابتة مكون من 64 bit تأخذ من الجدول تم شرحها سابقا
برمجة الخوارزميات
SHA1: تنتج هذه الخوارزمية مفتاح طوله 160 bit (20 byte )
VB.NET CODEFunction GetSHA1Data(ByVal data As Byte()) As String'create new instance of md5Dim sha As SHA1 = SHA1.Create()'convert the input text to array of bytesDim hashData As Byte() = sha.ComputeHash(data)'create new instance of StringBuilder to save hashed dataDim returns As New StringBuilder()'loop for each byte and add it to StringBuilderFor i As Integer = 0 To hashData.Length - 1returns.Append(hashData(i).ToString("x2"))Next' return hexadecimal stringReturn returns.ToString()End Function
SHA512: تنتج هذه الخوارزمية مفتاح طوله 512 bit (64 byte )
بناء برنامج تشفير SHA512
VB.NET CODEFunction GetSHA512Data(ByVal data As Byte()) As String'create new instance of md5Dim sha As SHA512 = SHA512.Create()'convert the input text to array of bytesDim hashData As Byte() = sha.ComputeHash(data)'create new instance of StringBuilder to save hashed dataDim returns As New StringBuilder()'loop for each byte and add it to StringBuilderFor i As Integer = 0 To hashData.Length - 1returns.Append(hashData(i).ToString("x2"))Next' return hexadecimal stringReturn returns.ToString()End Function
الشرح مفصل بالمرفقات هنا بالمقالة وضعت الشرح بشكل مختصر
تم النشر منذ (معدل)
التشفير في بيئة VB.NET
في بيئة VB.NET جميع خوارزميات التشفير تقع ضمن هذه المكتبة . لذالك بكل سهولة نكون كائن جديد من نوع خوارزمية تشفير معينة ونجد التشفير لأي بيانات نريدها
هذه جزء من خوارزميات الموجودة ضمن هذه المكتبة
Hash And MAC
هي خوارزميات يتأكد المستلم ان الرسالة المرسلة إليه لم يتم التلاعب بهَ خلال فترة انتقالها إليه من المرسل أي التأكد من مصداقية وصول البيانات .اي يرسل رسالة وعند المستلم يتأكد ان الرسالة المستلمة هي نفسها الرسالة المرسلة ! إذن هي ليست خوارزميات تشفير إنما خوارزميات تأكد سلامة وصول بيانات لذالك ليس لها طرق فك تشفير تستخدم في كلمات مرور الحواسيب وفي ملفات التورنت للتأكد من وصول الملفات كاملة لأنه مثلا عند تنزيل أي ملف من الانترنت أي خلل في تنزيل ملف لا يعمل عند المستلم لذالك يجب ان يقوم الخادم باستخراج Hash من الملف وإرساله مع الملف والشخص الذي يحمل الملف عندما يكتمل تحميله يستخرج Hash للملف ويقارنه مع المرسل من قبل الخادم فإذا كان نفسه فالملف سليم وإلا الملف تالف .
تصل الحرب عند مرحلة انه لا يريد يقطع إرسال الرسالة أو انه حتى إذا قراها وفك شفرتها فلن يغير شيء من مسار العملية المطلوب تنفيذها فيحاول أن يغير مسار العملية المراد تنفيذها بتوصيل الرسالة للمستلم لكن بصيغة جديدة أو انه يعرف أن توصيل الرسالة مع إجراء بعض التغيرات عليها أفضل من قطعها فيعترض الرسالة ويغير عليها ويرسلها فلمستلم يستلم رسالة متغيرة وينفذها
فقد ينفذ العمليات التالية
1. أما انه يعدل على الرسالة
2. او يؤثر على ترتيب البيانات أما يحذف او يضيف او يعيد ترتيب
3. او يؤخر او يعيد إرسال الرسالة
مثال : رسالة إلى محمد (اذهب اقتل احمد) معترض يعرف ان محمد سوف يقتل احمد وهو لا يستطيع ان يوقف مسار العملية أي لا يستطيع ان يمنعه من قتله لأنه مثلا في مكان بعيد عن القاتل لا يستطيع ان يصل إليه لذالك سوف يغير الرسالة ويجعلها (اذهب اقتل صالح) فلن يقتل احمد قتل صالح ونفذ ضربة المعترض ونجا الهدف ؟
• هذه العمليات التعديل على البيانات تحدث بسهولة في البث الجماعي Broadcast يعني سهولة شخص واحد يستلم رسالة ويعيد يبثها للجميع بصيغة ثانية فيغير العمل عليهم
خوارزمية MD5
هي إحدى خوارزميات Hash تكون من الرسالة المتغيرة التي نحن نريد إرسالها مفتاح تابت
طوله 128 bit (16 byte ) كما في الشكل
خطوات العمل مع خوارزمية MD5
1. في شكل (1) جزء رقم (1) تقسم البيانات على شكل Block كل واحد حجمه 512bit حيث L يمثل عدد Block كما في الشكل بالأسفل مقسم إلى ثلاثة مقاطع حيث
• الجزء الأول message يمثل بيانات الرسالة بعد تحويلها الى النظام الثنائي
• والجزء الثاني padding وضيفته إذا لم تكفي bitsالخاص بالرسالة لي Block وتبقى بعض bits ضمن 512 bit داخل احد Block فارغة
تملئ bits فارغة بواحد (1) ويليه أصفار بقدر bits الفارغة ؟
في Block الأخير نستخدم فقط bit 448 ويبقى bit 64 الأخير لخزن طول الرسالة أي لخزن عدد bits الخاص بالرسالة داخل اخر 64 bit .
لحساب عدد bits الواجب إضافتها الى الرسالة نستخدم المعادلة التالية
A = عدد bits رسالة حقيقية / 512
B =الجزء ألكسري (A)*512
bits مضافة=448- B
• الجزء الثالث message Length يمثل طول bits الرسالة الحقيقية ونحن هنا حجز لها 64 bit من اخر Block في الرسالة لنخزن فيه طول الرسالة .إذا كانت البيانات عبارة عن Block واحد تخزن طول البيانات في 64 bit الأخير أما إذا كانت أكثر من Block تخزن طول البيانات في أخر 64 bit في نهاية Block الأخير(ويعتبر هذا جزء من Block bit الخاص بالرسالة( .واستخدمنا هنا 64 bit لتمثيل طول الرسالة أي إننا نستطيع ان نشفر رسالة بخوارزمية MD5 طولها 2^64
شكل (2)
كما مبين في الشكل (2) الرسالة اذا كانت طولها أكثر من 512 bit تقسم الى Block كل واحد حجمه 512 bit بالأسماء التالية (y0,y1,yq,yl-1) وكل Block يدخل على HMD5 واحد .
مثال : إدخال رسالة محتواها (hi) لاحظ انه حولها الى النظام الثنائي بالصيغة التالية (01101000 01101001)
نلاحظ ان البيانات حجمها 16bit لذالك لكي يجعلها Block يجب ان تصل عددها الى 448bit لذالك سيضيف 1bit قيمته واحد و431bit قيمته صفرالى نهاية السلسلة
و 64bit البقية تمثل طول الرسالة الحقيقية بصيغة النظام الثنائي لاحظها تحتها خط (وهي طولها 16 bit)
(0000000000000000000000000000000000000000000000000000000000010000)
.حتى يصبح طول البيانات الكلي 512bit
2. في شكل (1) جزء رقم (2) او شكل(3) وهي مجموعة عمليات تجري ضمن كل HMD5 هذا الجزء مقسم إلى أربع ROUND كل واحدة منها تنفذ عملياتها 16 مرة سوف نشرح على جزء واحد و لمرة واحدة والبقية نفسها تكرر لكن على البيانات المحدثة الجديدة حيث
Yq : يمثل 512 bit الخاص ب Block بيانات رسالة معينة حيث يقسم الى 16 block كل واحد بحجم 32 bit كلها تمرر على جميع ROUND الأربعة وهي ثابتة لا تتغير خلال 16 مرة تنفيذ داخل كل ROUND ضمن HMD5 الواحد لأنها تمثل بيانات رسالة معينة لكنها تتغير في HMD5 التالي لأنها بيانات block أخر ضمن الرسالة والبيانات الناتجة لكل من (A,B,C,D) من هذا HMD5 تنتقل عبر CV الى CV1 التالي شاهد شكل (1)
ناتج الجمع هنا هو mod 2^32
(A,B,C,D) هي أربعة REGISTER حجمها الكلي 128 bit كل واحد حجمه 32 bit مخزن فيها قيم أولية وتتحدث ضمن ROUND الواحد 16 مرة وبعدها الناتج ROUND ينتقل الى ROUND التالي وعندما ينتهي من الأربعة ينتقل الى HMD5 التالي. هذه القيم الأولية بالنظام السادس عشري
T : هي قيم بالرادين تستخدم لتعقيد التشفير تحضر وفق المعادلة التالية
أي نكون مصفوفة T تبدأ من 1 الى64 وفق المعادلة أعلاه . حيث تحول هذه البيانات الى نظام Hex حيث كل ROUND يأخذ جزء منها
توضيح :-
3. شكل (4) هي العمليات التي ستجري 16 مرة ضمن كل ROUND لاحظ شكل (1)
شكل (4)
CLS: هي circular left shift أي تدوير مع s bit مقدار التدوير نحن نحدده مرة واحدة او اكثر
مثال : 00110 لو أزحناها بمقدار 2 من اليسار إلى اليمين ستصبح النتيجة 11000
g : هي معادلة الدوال (F,G,H,I) وهي عند كل ROUND لها معادلة مختلفة
مثال: عند ROUND1 الخاص F تكون
وهي دوال Boolean تحضر وفق المعادلات التالية
X[k : هي بيانات رسالة لكل block الذي كان يحتوي على 512 bit
قسمة الى 16 block كل واحد بحجم 32 bit
تشفير الخوارزمية بلغة VB.NET
تنتج هذه الخوارزمية مفتاح طوله 128 bit (16 byte ) .المثال التالي يشفر أي نص او ملف ( صورة او صوت او مقطع فيديو او أي نوع اخر من الملفات) بخوارزمية MD5
بداية نبني دالة تستقبل النص او الملف المراد تشفيره بصيغة Byte وتعيد لنا MD5 Hash الخاص بهذا النص بكل سهولة حيث نعرف داخل هذه الدالة متغير من نوع MD5 جديد ونكونه وبعده نعمل ComputeHash للبيانات المستلمة لحساب Hash لها وبعدها نحولها اللى بينات من Byte الى صيغة HEX
في زر (FIND MD5) نحول النص الذي نكتبه الى Byte ونرسله الى الدالة لكي تعيد لنا Hash له
لنستعرض نتيجتها بالنص الثاني ونعرض البيانات ايضاً داخل ListBox
وفي زر (تشفير ملفات) نتصف ملفات من الحاسبة وبعدها نحولها الى Byte ونرسلها الى الدالة لكي تعيد Hash لها
نستخدم الدالة التالية عند المستلم للتأكد ان النص المستلم هو نفسه المرسل وذالك بمقارنة المفتاح المرسل مع المفتاح الناتج من الرسالة المستلمة
خوارزمية Secure Hash Algorithm(SHA)
هي إحدى خوارزميات Hash تقوم بإيجاد سلسلة ثابتة من أي نص أو ملف توجد عدة أنواع منها
SHA1: تنتج هذه الخوارزمية مفتاح طوله 160 bit (20 byte )
SHA512: تنتج هذه الخوارزمية مفتاح طوله 512 bit (64 byte ) من أي رسالة او ملف مهما كان طوله
وعدد من الأنواع SHA الأخرى كما نرها بالشكل (4) بالأسفل وخاصية كل نوع
سوف نشرح بالتفصيل طريقة عمل SHA512 المبينة بالشكل (5)
في الشكل(5) يبين لك طريقة عمل SHA512 وقمت بتقسيمها الى أربعة اجزاء لكل يسهل فهمها وسوف اشرح كل جزء بالتفصيل
جزء رقم (1)
نعرف ان SHA512 تستقبل أي طول من البيانات وتجد له HASH طوله 512 bit في شكل (6)
يقسم الرسالة الى Block كل واحد حجمه 1024 bit واخر 128 bit في اخير Block يكون محجوز لطول البيانات الحقيقية أي تستطيع هذه الخوارزمية ان تجد HASH لبيانات أقصى حد لطولها 2^128 والبتات Bit التي تبقى فارغة بين اخر 128 bit والبيانات الحقيقية للرسالة بعد تحويلها الى binary نعمل لها padding أي ندخل رقم واحد ويتبعه عدد من الاصفار حتى نملئ bits الفارغة. وان اخر Block يتقبل فقط 896 bit لان كما قلنا اخر 128 bit في اخر Block تكون محجوزة لطول الرسالة الحقيقية بصيغة نظام ثنائي
شكل (6)
حيث iv=H0 يمثل Registers الثمانية (A,B,C,D,E,F,G,H) كل واحد حجمه 64 bit مجموعهم هو 512 bit الذي سيمثل في النهاية Hash الخاص بالرسالة .وهذه القيم الأولية المخزنة داخل Registers
الجزء رقم (2)
الذي يمثل الجزء رقم2 في شكل (5) هو حرف (F) في الجزء رقم1 .حيث يتكرر نفس عملياته مع كل Block لذالك سوف نشرح على Block واحد والبقية نفس الشيء. يمثل شكل (7) العمليات التي ستجري على كل Block من الرسالة الحقيقية لينتج مفتاح طولها 512 bit مخزن في (A,B,C,D,E,F,G,H) ويعتبر كمدخل للعمليات على Block التالي اذا كانت البيانات اكثر من Block وكما مبين في الشكل(7) او تعتبر النتيجة النهائية اذا كانت البيانات عبارة عن Block واحد . وان كل (F) مقسم الى 80 Round كل واحد تنفذ العمليات في داخله مره واحد (جزء رقم4 في شكل(5) يمثل العمليات التي ستجري ضمن كل Round)
شكل (7)
في شكل (7) كل Round من 80 يدخل عليه قيمة K معين بين (K0-K79) وهي قيم ثابتة مكون من 64 bit تأخذ من الجدول التالي
الجزء رقم (3)
كما نلاحظ ان في شكل (7) كل Round يدخل عليه قيمة من بيانات Block طولها 64 bit وان طول Block الواحد هو 1024 bit لذالك يقسم (1024) الى 16 Block كل واحد حجمه 64 bit ممثلا (W0-W15) ويدخل على اول 16 Round
شكل (8)
وبقية Round تأخذ Wt وفق المعادلة التالية
جزء رقم (4):
جزء رقم4 في شكل(5) يمثل العمليات التي ستجري ضمن كل Round ليتم من خلا لها التحديث على قيم Registers التي ستعتبر القيم المحدثة كمدخل Round التالي وفي اخر Round تعتبر Hash الخاص بالرسالة اذا كانت الرسالة من Block واحد وخلافه تعتبر مدخل لبيانات Registers في Block التالي
شكل (9)
Wt: يمثل 64 bit من بيانات Block تم شرح طريقة تحضيرها لكل Round سابقا
Kt : وهي قيم ثابتة مكون من 64 bit تأخذ من الجدول تم شرحها سابقا
برمجة الخوارزميات
SHA1: تنتج هذه الخوارزمية مفتاح طوله 160 bit (20 byte )
SHA512: تنتج هذه الخوارزمية مفتاح طوله 512 bit (64 byte )
بناء برنامج تشفير SHA512
الشرح مفصل بالمرفقات هنا بالمقالة وضعت الشرح بشكل مختصر
تحميل شرح خوارزمية خطوة خطوة مع كود هنا
http://www.4shared.com/office/51z4zQIY/_MD5SAHHMAC__221.html
تحميل المثال Code
http://www.mediafire.com/?sw1y2x63pn7qcb7
مدونتي
http://hussienahmmed.blogspot.com/
شارك هذا الرد
رابط المشاركة
شارك الرد من خلال المواقع ادناه