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

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
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"))
TextBox2.Text = GetHMACData(Encoding.[Default].GetBytes(TextBox1.Text), Encoding.[Default].GetBytes("1234"))
صورة من برنامج تشفير كامل يوضح فيها نص مشفر ومفتاح التشفير الداخلية
حمل المقالة كاملة من هنا او حمل من هنا