الخميس، 28 مارس 2013

بناء خوارزمية HMAC بلغة VB.NET


   MAC Based ON Hash Function (HMAC)   خوارزمية

هي إحدى خوارزميات MAC حيث تقوم بإيجاد Hash ثابت من أي نص أو ملف متغير .
حيث يعتمد  على أحدى خوارزميات   Hash مثلا (MD5,SHA512(شرح الخوارزميات هنا)) بالإضافة إلى Secret Key نحن ندخله  شاهد شكل (10) . ويختلف MAC عن  HASH أن الأول يستخدم Secret Key لإيجاد   Hash ثابت من أي رسالة أما الثاني لا يستخدم Secret Key  تقوم بإيجاد سلسلة ثابتة من أي نص أو ملف  .

 

                                                                                 شكل  (10)


H ,Hash: إحدى خوارزميات Hash التي سنستخدمها هنا مثلا (SHA512,MD5)
[Y0---Yn]: هي بيانات الرسالة الحقيقية Mi  التي نريد إيجاد HMAC لها تقسم الى Block  حسب خوارزمية Hash المستخدمة مثلا تقسم إلى Block حجمه   bit512  اذا كنا نستخدم MD5 او تقسم الى Block حجمه  bit1024  اذا كنا نستخدم SHA512 
b bits: يمثل عدد Bit ضمن كل Block من بيانات الرسالة الحقيقية
K+:هو Secret Key  الذي نحن ندخله على رسالة لأننا نستخدم هنا MAC وهذه الخوارزمية تحتاج الى Secret Key.
 اذا كان عدد Bits الخاص Secret Key اقل من عدد bits b  الخاص بكل Block  نضيف أصفار إلى الجهة اليسرى من Secret Key الى ان يصبح عدد bits الخاص به مساوي لعدد bits الخاص بكل Block .
مثلا اذا كنا نستخدم في HMAC  خوارزمية MD5 هذه الخوارزمية تقسم البيانات الى Block حجمه  512 bits  وكان Secret Key من 400 bits  نحتاج الى إضافة 122 صفر في الجهة اليسرى من Secret Key
اذا كان عدد Bits الخاص Secret Key اكبر من عدد bits b  الخاص بكل Block  نعمل Hash  على Secret Key لكي نقلل عدد bits  الخاص به
مثلا: اذا كنا نستخدم  في HMAC خوارزمية MD5 هذه الخوارزمية تقسم البيانات الى Block حجمه  512 bits  وكان Secret Key من 1024 bits  نعمل hash  على Secret Key لكي نقلل Bits الخاص به  الى 512 bits  هنا سنستخدم خوارزمية SHA512 لأنها تجد   Hash طوله  512 bits   من Block  طوله 1024 bits
ipad: هو رقم معين مثلا نستخدم هنا (36 hex)
opad: هو رقم معين مثلا نستخدم هنا (5C hex)
Si :هي عملية  Xor  بين ipad و K+ وبعدها يلحق الناتج على شكل Block  الى Blocks الخاص بالرسالة الحقيقية لينفذ خوارزمية Hash عليها. وطول البيانات في آخر Block  يمثل طول بيانات الرسالة الحقيقية بالإضافة إلى طول Si
iV: هي القيم الأولية لبيانات Registers المستخدم في خوارزمية Hash
H(Si||Mi): تنفيذ احدى خوارزميات Hash على بيانات الرسالة الحقيقية مضافة اليها Si
S0: هي عملية  Xor  بين opad و K+
n bits: هو Hash الناتج من احدى  خوارزميات Hash التي استخدمناها على الرسالة تقوم بإلحاقها ببيانات S0 ونطبق عليها احدى خوارزميات Hash التي استخدمناها في البداية لينتج لنا HMAC

ولخوارزمية HMAC معادلة عامة وهي :







 تستخدم (ipad,opad) للحصول على مفتاحين مختلفين من  Secret Key واحد



برمجة الخوارزمية HMAC بلغة VB.NET 

نكون دالة تستقبل الرسالة و لمفتاح Secret Key  بصيغة Byte ونحدد خوارزمية Hash التي سنستخدمها داخل  HMAC  وتعيد لنا مفتاح ثابت من أي رسالة سنرسلها لها


VB.NET CODE
Function GetHMACData(ByVal data As Byte(), ByVal key As Byte()) As String
'create new instance of md5
Dim sha As HMAC = HMAC.Create()
'حددنا مفتاح الخاص بهذه الخوارزمية
sha.Key = key
' نححد خوارزمية Hash التي سنستخدمها داخل HMAC هنا حددنا SHA512 '
sha.HashName = "SHA512"
'convert the input text to array of bytes
Dim hashData As Byte() = sha.ComputeHash(data)

'create new instance of StringBuilder to save hashed data
Dim returns As New StringBuilder()

'loop for each byte and add it to StringBuilder
For i As Integer = 0 To hashData.Length - 1
returns.Append(hashData(i).ToString("x2"))
Next
' return hexadecimal string
Return returns.ToString()
End Function


عند استدعاء الدالة نرسل لها الرسالة والمفتاح

VB.NET CODE
 TextBox2.Text = GetHMACData(Encoding.[Default].GetBytes(TextBox1.Text), Encoding.[Default].GetBytes("1234"))




صورة من برنامج تشفير كامل يوضح فيها نص مشفر ومفتاح التشفير الداخلية
 




حمل المقالة كاملة من هنا  او حمل من هنا

إرسال تعليق