تلعب مصادقة الرسائل دورًا مهمًا في مصادقة الهوية وهي جزء مهم من نظام المصادقة وتستخدم على نطاق واسع في الأنظمة المالية والتجارية.
يتم استخدام رمز مصادقة الرسالة (رمز مصادقة الرسالة، أو MAC) بشكل شائع كأساس للمصادقة.
المبدأ الأساسي هو: استخدام مفتاح (مفتاح خاص) لإنشاء كتلة بيانات صغيرة وإلحاقها بالرسالة المراد إرسالها. تفترض هذه التقنية أن كلا الطرفين المتصلين يتشاركان في مفتاح K. عندما يرغب أحد الطرفين المتصلين في إرسال البيانات M إلى الطرف الآخر، يتم حساب MAC للرسالة M من خلال خوارزمية محددة = F (K، M)، حيث F هو يشير إلى وظيفة عملية المصادقة، ثم يتم إرسال بيانات الرسالة M وMAC إلى الطرف الآخر معًا. عندما يتلقى الطرف الآخر البيانات، فإنه يستخدم أولاً نفس الخوارزمية F لحساب MAC ومقارنتها مع MAC المرسل إذا كانت هي نفسها، تعتبر البيانات صحيحة. غالبًا ما تُعتبر وظيفة المصادقة نوعًا من خوارزمية التشفير، لكن الفرق هو أنها لا تُستخدم للعمليات العكسية وتتمتع بدرجة معينة من الأمان. عادةً ما تستخدم أنظمة التطبيقات المختلفة وظائف المصادقة المحددة الخاصة بها، مما يضمن أمان البيانات إلى حد ما.
بدءًا من j2sdk1.4 فصاعدًا، توفر Java مصادقة رسائل فئة javax.crypto.Mac.
عرض نسخة عادية إلى الحافظة؟
byte[] macData = "هذا اختبار لنظام التشغيل Mac".getBytes(); // احصل على مثيل لنظام التشغيل Mac، باستخدام خوارزمية HmacMD5
Mac mac = Mac.getInstance("HmacMD5"); //init الجزء الرابع من الخوارزمية، يمكن قراءة 8 بايت من الملف
بايت[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // وحدات البايت الرئيسية للتحقق من صحة Mac، ويمكن قراءتها من الملف أيضًا
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; // إنشاء كائن المفتاح السري باستخدام وحدات البايت السرية و خوارزمية DESede
SecretKey key = new SecretKeySpec(keyBytes, "DESede"); // init Mac mac.init(key, spec);
byte[] macCode = mac.doFinal(macData);
byte[] macData = "هذا اختبار لنظام التشغيل Mac".getBytes(); // احصل على مثيل لنظام التشغيل Mac، باستخدام خوارزمية HmacMD5
Mac mac = Mac.getInstance("HmacMD5"); //init الجزء الرابع من الخوارزمية، يمكن قراءة 8 بايت من الملف
بايت[] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // وحدات البايت الرئيسية للتحقق من صحة Mac، ويمكن قراءتها من الملف أيضًا
byte[] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; // إنشاء كائن المفتاح السري باستخدام وحدات البايت السرية و خوارزمية DESede
SecretKey key = new SecretKeySpec(keyBytes, "DESede"); // init Mac mac.init(key, spec);
byte[] macCode = mac.doFinal(macData);
macCode هو جهاز Mac الذي تم إنشاؤه، ويمكن إنشاء نفس جهاز Mac بنفس المفتاح.
وطالما أن الأطراف المتصلة تتأكد من أنها تستخدم نفس المفتاح، فيمكنها التأكد من حصولها على نفس جهاز Mac لتحقيق غرض التحقق من الرسالة.
يبدو أن هذا هو نفس مبدأ المجموع الاختباري الشائع الاستخدام على الإنترنت.
-