การรับรองความถูกต้องของข้อความมีบทบาทสำคัญในการรับรองความถูกต้องของข้อมูลประจำตัวและเป็นส่วนสำคัญของระบบการตรวจสอบความถูกต้อง ซึ่งใช้กันอย่างแพร่หลายในระบบการเงินและการพาณิชย์
รหัสตรวจสอบความถูกต้องของข้อความ (รหัสตรวจสอบข้อความหรือ MAC) มักใช้เป็นพื้นฐานในการตรวจสอบความถูกต้อง
หลักการพื้นฐานคือ: ใช้คีย์ (คีย์ส่วนตัว) เพื่อสร้างบล็อกข้อมูลขนาดเล็กและต่อท้ายข้อความที่จะส่ง เทคโนโลยีนี้ถือว่าทั้งสองฝ่ายที่สื่อสารใช้คีย์ K ร่วมกัน เมื่อฝ่ายสื่อสารฝ่ายหนึ่งต้องการส่งข้อมูล M ไปยังอีกฝ่าย MAC ของข้อความ M จะถูกคำนวณผ่านอัลกอริทึมเฉพาะ = F (K, M) โดยที่ F คืออ้างอิง ไปยังฟังก์ชันการดำเนินการตรวจสอบสิทธิ์ จากนั้นข้อมูลข้อความ M และ MAC จะถูกส่งไปยังอีกฝ่ายพร้อมกัน เมื่ออีกฝ่ายได้รับข้อมูล จะใช้อัลกอริทึม F เดียวกันในการคำนวณ MAC และเปรียบเทียบกับ MAC ที่ส่ง หากเหมือนกันจะถือว่าข้อมูลถูกต้อง ฟังก์ชันการตรวจสอบสิทธิ์มักถูกพิจารณาว่าเป็นอัลกอริธึมการเข้ารหัสประเภทหนึ่ง แต่ความแตกต่างก็คือไม่ได้ใช้สำหรับการดำเนินการผกผันและมีระดับความปลอดภัยที่แน่นอน โดยปกติแล้ว ระบบแอปพลิเคชันต่างๆ จะใช้ฟังก์ชันการตรวจสอบสิทธิ์เฉพาะของตนเอง ซึ่งช่วยให้มั่นใจในความปลอดภัยของข้อมูลได้ในระดับหนึ่ง
ตั้งแต่ j2sdk1.4 เป็นต้นไป Java จัดเตรียมการพิสูจน์ตัวตนข้อความคลาส javax.crypto.Mac
ดู plaincopy ไปที่ clipboardprint หรือไม่
byte[] macData = "นี่คือการทดสอบ mac".getBytes(); //รับอินสแตนซ์ของ Mac โดยใช้อัลกอริทึม HmacMD5
Mac mac = Mac.getInstance("HmacMD5"); // เริ่มต้น IV ของอัลกอริทึม 8 ไบต์อาจอ่านจากไฟล์
ไบต์ [] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // ไบต์คีย์ลับของการตรวจสอบความถูกต้องของ Mac อาจอ่านจากไฟล์ได้เช่นกัน
ไบต์ [] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; // สร้างออบเจ็กต์คีย์ลับโดยใช้ไบต์ลับและ อัลกอริทึม DESede
รหัส SecretKey = SecretKeySpec ใหม่ (keyBytes, "DESede"); // init Mac mac.init (คีย์, spec);
ไบต์ [] macCode = mac.doFinal (macData);
byte[] macData = "นี่คือการทดสอบ mac".getBytes(); //รับอินสแตนซ์ของ Mac โดยใช้อัลกอริทึม HmacMD5
Mac mac = Mac.getInstance("HmacMD5"); // เริ่มต้น IV ของอัลกอริทึม 8 ไบต์อาจอ่านจากไฟล์
ไบต์ [] ivInitKey = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
IvParameterSpec spec = new IvParameterSpec(ivInitKey); // ไบต์คีย์ลับของการตรวจสอบความถูกต้องของ Mac อาจอ่านจากไฟล์ได้เช่นกัน
ไบต์ [] keyBytes = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; // สร้างออบเจ็กต์คีย์ลับโดยใช้ไบต์ลับและ อัลกอริทึม DESede
รหัส SecretKey = SecretKeySpec ใหม่ (keyBytes, "DESede"); // init Mac mac.init (คีย์, spec);
ไบต์ [] macCode = mac.doFinal (macData);
macCode คือ Mac ที่สร้างขึ้น และ Mac เดียวกันสามารถสร้างได้ด้วยคีย์เดียวกัน
ตราบใดที่ฝ่ายที่สื่อสารกันตรวจสอบให้แน่ใจว่าพวกเขาใช้คีย์เดียวกัน พวกเขาสามารถมั่นใจได้ว่าพวกเขาได้รับ Mac เครื่องเดียวกันเพื่อให้บรรลุวัตถุประสงค์ในการตรวจสอบข้อความ
ดูเหมือนว่านี่เป็นหลักการเดียวกันกับเช็คซัมที่ใช้กันทั่วไปบนอินเทอร์เน็ต
-