340 likes | 510 Views
344-484 วิทยาการเข้ารหัสลับเบื้องต้น. บทที่ 6 ลายมือชื่อดิจิตอลและฟังก์ชันแฮช. เนื้อหา. ลายมือชื่อดิจิตอล (Digital Signatures) MD5 SHA (Secure Hash Algorithm) MAC (Message Authentication Code) HMAC เทคนิคลายมือชื่อดิจิตอล. ลายมือชื่อดิจิตอล (Digital Signatures).
E N D
344-484 วิทยาการเข้ารหัสลับเบื้องต้น บทที่ 6 ลายมือชื่อดิจิตอลและฟังก์ชันแฮช
เนื้อหา • ลายมือชื่อดิจิตอล (Digital Signatures) • MD5 • SHA (Secure Hash Algorithm) • MAC (Message Authentication Code) • HMAC • เทคนิคลายมือชื่อดิจิตอล
ลายมือชื่อดิจิตอล (Digital Signatures) • จากการทำงานของวิทยาการเข้ารหัสลับแบบกุญแจอสมมาตร เห็นได้ว่า • ถ้านาย ก คือ ผู้ส่งข้อความ และนาย ข คือผู้รับข้อความ • นาย ก เข้ารหัสข้อความโดยใช้กุญแจสาธารณะของนาย ข และส่งข้อความที่เข้ารหัสไปให้นาย ข • ในทางกลับกัน • ถ้านาย ก ส่งข้อความไปให้นาย ข • นาย ก เข้ารหัสข้อความโดยใช้กุญแจส่วนตัวของนาย ก และส่งข้อความที่เข้ารหัสแล้วไป
ผู้ส่ง (ก) ผู้รับ (ข) ข้อความ (M) ข้อความ ไซเฟอร์ (C) เข้ารหัสด้วยกุญแจส่วนตัวของนาย ก การเข้ารหัสข้อความด้วยกุญแจส่วนตัวของผู้ส่ง ลายมือชื่อดิจิตอล (Digital Signatures) (ต่อ)
ลายมือชื่อดิจิตอล (Digital Signatures) (ต่อ) • วัตถุประสงค์ที่นาย ก เข้ารหัสข้อความด้วยกุญแจส่วนตัวของตนเอง: • เพื่อให้ผู้รับมั่นใจว่าข้อความนี้ส่งมาจากนาย ก หรือผู้ส่งจริง ๆ • ข้อมูลอาจไม่เป็นความลับ (Confidentiality) แต่ทำให้ระบุตัวตน (Authentication) ได้ว่า นาย ก คือผู้ส่ง อีกทั้งยังทำให้นาย ก ไม่สามารถปฏิเสธได้ว่า เขาคือผู้ส่งข้อความจริง ๆ (Non-repudiation)
ความสำคัญของลายมือชื่อดิจิตอลความสำคัญของลายมือชื่อดิจิตอล • เป็นกลไกการอนุญาตที่ถูกต้องเสมือนการลงลายมือชื่อยอมรับในเอกสารต่างๆ ที่ใช้กันมานานแล้ว • ปัจจุบันลายมือชื่อดิจิตอล ได้รับการยอมรับว่าถูกต้องตามกฎหมาย ดังเช่น การส่งข้อความติดต่อกับธนาคารผ่านทางอินเตอร์เน็ต
ผู้ส่ง (ก) ผู้รับ (ข) ข้อความ ไซเฟอร์ (C) ข้อความ ไซเฟอร์ (C) ข้อความ (M) เครือข่าย ข้อความ (M) เข้ารหัสด้วยกุญแจส่วนตัว ถอดรหัสด้วยกุญแจสาธารณะ การทำงานของลายมือชื่อดิจิตอล การทำงานของลายมือชื่อดิจิตอล
การย่อยข้อความ (Message Digest) • บางครั้งเรียกว่า Hash • เป็นการพิมพ์ลายนิ้วมือวิธีหนึ่ง หรือคือการสรุปข้อความ ซึ่งใช้หลักการทำงานคล้ายคลึงกับ Longitudinal Redundancy Check (LRC) หรือ Cyclic Redundancy Check (CRC) • LRC หรือ CRC ใช้เพื่อตรวจสอบการมีบูรณภาพของข้อมูล (กล่าวคือ มั่นใจได้ว่าข้อความที่ส่งไปจะไม่ถูกเปลี่ยนแปลงก่อนจะถึงผู้รับ)
การทำงานของ LRC • นำข้อความต้นฉบับขนาด n บิต มาแบ่งเป็นกลุ่มๆ ละ 8 บิต • นำมาเขียนใหม่เรียงทีละแถว คำนวณหาผลลัพธ์ที่ได้ (LRC) จากการนับจำนวนของ 1 หรือ 0 ในสดมภ์ทั้ง n แถว • ถ้าจำนวนของ 1 ในสดมภ์ทั้ง n แถว เป็นจำนวนคี่เรียกว่า odd parity (แทนค่าด้วย 1) • ถ้าจำนวน 1 ในสดมภ์ทั้ง n แถว เป็นจำนวนคู่ เรียกว่า even parity (แทนค่าด้วย 0)
ข้อมูลต้นฉบับ ข้อมูลต้นฉบับและ LRC 11100100 11011101 00111001 00101001 ข้อมูลต้นฉบับที่นำมาเรียงเป็นแถว LRC 11100100 11011101 00111001 00101001 00101001 11100100 11011101 00111001 00101001 00101001 ตัวอย่างการทำงานของ LRC • กำหนดให้ข้อความต้นฉบับมีขนาด 32 บิต คือ 11100100 11011101 00111001 00101001
แนวคิดของการย่อยข้อความแนวคิดของการย่อยข้อความ • ทำงานคล้ายคลึงกับ LRC • โดยทั่วไปแล้วการย่อยข้อความจะทำให้ขนาดของข้อความเล็กกว่าข้อความต้นฉบับเดิม
101010101 010101010 …. ข้อมูลต้นฉบับ ขั้นตอนวิธี ย่อยข้อความ 0101 1011 …. ข้อความย่อย แนวคิดของการย่อยข้อความ สรุปแนวคิดการย่อยข้อความ
สิ่งที่ต้องคำนึงถึงของการย่อยข้อความสิ่งที่ต้องคำนึงถึงของการย่อยข้อความ • การย่อยข้อความจำเป็นต้องมีคุณสมบัติดังนี้คือ 1. ข้อความต้นฉบับเดียวกันต้องได้ข้อความย่อยเดียวกัน 2. การย่อยข้อความไม่สามารถดำเนินการในทางกลับกัน 3. เมื่อกำหนดให้มีข้อความ 2 ข้อความ ถ้าคำนวณหาข้อความย่อยของทั้ง 2 ข้อความ ข้อความย่อยที่ได้ต้องแตกต่างกัน
ข้อมูลต้นฉบับ ขั้นตอนวิธี ย่อยข้อความ ข้อความย่อยที่ได้ต้องมีข้อความเดียว ข้อความย่อย ข้อความย่อยสำหรับข้อมูลต้นฉบับเดียวกันต้องได้ข้อความย่อยเดียวกัน ข้อความย่อยสำหรับข้อมูลต้นฉบับเดียวกันต้องได้ข้อความย่อยเดียวกัน
ข้อความย่อย ไม่สามารถหาข้อความต้นฉบับโดยใช้ขั้นตอนวิธีในทางกลับกัน ขั้นตอนวิธีย่อยข้อความ ข้อมูลต้นฉบับ การย่อยข้อความไม่สามารถดำเนินการในทางกลับกัน การย่อยข้อความไม่สามารถดำเนินการในทางกลับกัน
ข้อความต้นฉบับบล็อค 1 ข้อความย่อย 1 (MD1) ขั้นตอนวิธี ย่อยข้อความ ข้อความย่อย 2 ข้อความนี้แตกต่างกัน ข้อความต้นฉบับบล็อค 2 ขั้นตอนวิธี ย่อยข้อความ ข้อความย่อย 2 (MD2) ข้อความย่อย 2 ข้อความจากข้อความที่ต่างกันได้ข้อความย่อยที่ต่างกัน ข้อความย่อย 2 ข้อความจากข้อความที่ต่างกันได้ข้อความย่อยที่ต่างกัน
การชนกัน(Collision) • ข้อความ 2 ข้อความได้ข้อความย่อยเดียวกัน
MD5 • ขั้นตอนวิธีย่อยข้อความที่ถูกพัฒนาโดย Ron Rivest • ผลลัพธ์จากขั้นตอนวิธีย่อยข้อความจะมีขนาด 128 บิต • ข้อดี • ทำงานได้เร็ว • ผลลัพธ์หรือข้อความย่อยที่ได้ไม่เกิดการชนกัน
การทำงานของ MD5 • นำข้อมูลบล็อกละ 512 บิต -> ดำเนินการตามขั้นตอนวิธีย่อยข้อความ ->ผลลัพธ์ขนาด 128 บิต • ขั้นตอนที่ 1 การเพิ่มบิตหลังข้อความ (Padding) • ขั้นตอนที่ 2 การระบุขนาดของข้อความต้นฉบับ (Append Length) • ขั้นตอนที่ 3 แบ่งข้อความออกเป็นบล็อคละ 512 บิต • ขั้นตอนที่ 4 กำหนดค่าเริ่มต้นของตัวแปรลูกโซ่ • ขั้นตอนที่ 5 การดำเนินการกับบล็อค
ขั้นตอนที่ 1 การเพิ่มบิตหลังข้อความ (Padding) M + Pd + 64 = 512 n โดย M คือ ข้อความต้นฉบับ Pd คือ จำนวนบิตที่เพิ่มเข้าไป และ n คือ จำนวนเต็มบวก ** บิตที่เพิ่มนี้จะเริ่มต้นด้วย 1 และตามด้วย 0 เท่ากับจำนวนบิตที่ต้องการเพิ่มเข้าไป
ข้อความต้นฉบับ การเพิ่มบิตอีก (1-512 บิต) ข้อความต้นฉบับบิตที่เพิ่ม(100...0) ขั้นตอนการเพิ่มบิต ขั้นตอนที่ 1 การเพิ่มบิตหลังข้อความ (Padding) (ต่อ) ข้อสังเกตุ แม้ว่าขนาดของข้อความเมื่อรวมกับ 64 บิต แล้วมีค่าเท่ากับจำนวนเท่าของ 512 บิต แต่ต้องเพิ่ม Pd ด้วย เช่น ข้อความมีขนาด 448 เมื่อรวมกับ 64 บิต แล้วจะมีค่าเท่ากับ 512 บิต ก็ต้องเพิ่มบิตอีก 512 บิต เพื่อให้ข้อความมีขนาด 960 บิต ซึ่งจะเห็นได้ว่า ขนาดของบิตที่เพิ่มเข้าไปจะอยู่ระหว่าง 1 ถึง 512
ข้อความต้นฉบับ การเพิ่มบิตอีก (1-512 บิต) ขนาดของข้อความ (บิต) ขนาดของข้อความ (บิต) ข้อความต้นฉบับบิตที่เพิ่ม(100...0) ขั้นตอนที่ 2 การระบุขนาดของข้อความต้นฉบับ (Append Length) • นำค่าขนาดของข้อความต้นฉบับเริ่มต้นไปเพิ่มในส่วนท้ายสุดของข้อความหลังจากการเพิ่มบิตในขั้นตอนที่ 1 • ในกรณีที่ขนาดของข้อความต้นฉบับมากกว่า 264 บิต นั่นก็คือ มีขนาดยาวมาก ๆ ให้เลือกบิตต่ำ (low-order bit) 64 บิต
ข้อมูลที่จะนำไปดำเนินการย่อยข้อความข้อมูลที่จะนำไปดำเนินการย่อยข้อความ บล็อค 1 บล็อค 2 บล็อค n บล็อค 3 . . . 512 บิต 512 บิต 512 บิต 512 บิต แบ่งข้อมูลออกเป็นบล็อคละ 512 บิต ขั้นตอนที่ 3 แบ่งข้อความออกเป็นบล็อคละ 512 บิต
ขั้นตอนที่ 4 กำหนดค่าเริ่มต้นของตัวแปรลูกโซ่ ค่าเริ่มต้นของตัวแปรลูกโซ่
A B C D b c d a ขั้นตอนที่ 5 การดำเนินการกับบล็อค • ขั้นตอนย่อยที่ 5.1 สำเนาค่าเริ่มต้นของตัวแปรลูกโซ่ ให้กับตัวแปรต่อไปนี้คือ a, b, c และ d กล่าวคือ a = A, b = B, c = C และ d = D
บล็อคย่อย 1 32 บิต บล็อคย่อย 2 32 บิต .... ... บล็อคย่อย n 32 บิต ข้อความบล็อค 1 (512 บิต) ขั้นตอนที่ 5 การดำเนินการกับบล็อก (ต่อ) • ขั้นตอนย่อยที่ 5.2 แบ่งข้อความ 512 บิตของบล็อคที่ดำเนินการขณะนั้นออกเป็นบล็อคย่อย 16 บล็อค โดยแต่ละบล็อคย่อยมีขนาด 32 บิต
a b c d บล็อคย่อย 16 บล็อค ค่าคงที่ t 1 รอบของการดำเนินการ การดำเนินการใน 1 รอบ ขั้นตอนที่ 5 การดำเนินการกับบล็อก (ต่อ) • ขั้นตอนย่อยที่ 5.3 มีการดำเนินการ 4 รอบ โดยแต่ละรอบ ดำเนินการกับ 16 บล็อคย่อย ข้อมูลนำเข้าของแต่ละรอบคือ ก) ข้อความ16 บล็อคย่อย ข) ตัวแปร a, b, c และ d และ ค) ค่าคงที่ ซึ่งในที่นี้เรียกว่า t
ขั้นตอน1 ฟังก์ชัน P ขั้นตอน2 บวก บวก ขั้นตอน3 M[i] a a b b c c d d ขั้นตอน4 บวก t[k] ขั้นตอน5 เลื่อน ขั้นตอน6 บวก ขั้นตอน7 การดำเนินการ 1รอบ ของ MD5 (ที่มา: Cryptography and Network Security,หน้า 136)
ขั้นตอนการดำเนินการ 1 รอบของ MD5 • ขั้นตอนการดำเนินการ 1 ครั้งในแต่ละรอบอธิบายได้ดังภาพโดยมีรายละเอียดดังนี้ • ดำเนินการกับตัวแปร b, c และ d ด้วยฟังก์ชัน P ซึ่งในแต่ละรอบของการดำเนินการมีฟังก์ชัน P ต่างกัน • นำตัวแปร a มาบวกกับผลลัพธ์ที่ได้จากการผ่านฟังก์ชัน P • นำข้อความบล็อกย่อยที่ i (M[i]) บวกกับผลลัพธ์ที่ได้จากการดำเนินการในขั้นตอนที่ 2 • นำค่าคงที่ t[k] บวกกับผลลัพธ์ที่ได้จากการดำเนินการในขั้นตอนที่ 3 • เลื่อนบิตเป็นวงไปทางซ้ายของผลลัพธ์จากขั้นตอนที่ 4 จำนวน s บิต • นำตัวแปร b บวกกับผลลัพธ์ที่ได้จากขั้นตอนที่ 5 • ได้ค่า abcd ใหม่ จากผลลัพธ์ในขั้นตอนที่ 6 เพื่อจะดำเนินการต่อไป
ขั้นตอนการดำเนินการ 1 รอบของ MD5 (ต่อ) • จากขั้นตอนดังกล่าวข้างต้น สามารถเขียนให้อยู่ในรูปสมการคณิตศาสตร์ a = b + ((a + P (b, c, d) + M[i] + t[k] <<< s)) โดยที่a, b, c, d = ตัวแปรลูกโซ่ที่ได้กล่าวข้างต้น P = ฟังก์ชันแบบไม่เชิงเส้นดังจะกล่าวต่อไป M[i] = M[q × 16 + i] ซึ่งiคือบล็อคย่อยที่i (0 i 15) และ qคือลำดับที่ของจำนวนเท่าของ 512 บิตเช่นข้อความประกอบด้วย 3×512 ดังนั้นลำดับที่ของ q คือ 0 q 2 t[k] = ค่าคงที่ซึ่งคำนวณจากค่าจาก 232 × abs(sin(j)) โดยjคือเรเดียน, 1 j 64 <<< s = การเลื่อนบิตเป็นวงทางซ้ายจำนวนsบิต
ขั้นตอนการดำเนินการ 1 รอบของ MD5 (ต่อ) • ฟังก์ชัน P คือ การดำเนินการซึ่งเกิดขึ้นแตกต่างกันทั้ง 4 รอบ โดยดำเนินการทางตรรกศาสตร์กับตัวแปร b, c และ d ซึ่งฟังก์ชัน P ทั้ง 4 รอบแสดงดังตาราง หมายเหตุ ตัวดำเนินการตรรกะ AND แทนด้วย OR แทนด้วย NOT แทนด้วย และ XOR แทนด้วย
ความแตกต่างระหว่าง MD5 กับ MD4
ประสิทธิภาพของ MD5 • Rivest ใช้หลักการคิดที่ทำให้ขั้นตอนวิธีซับซ้อนและมีการสุ่มเท่าที่จะเป็นไปได้มากที่สุด • เป็นการยากมากที่ข้อความย่อย 2 ข้อความที่ได้จากการดำเนินการ MD5 จะมีค่าเท่ากัน • แต่ก็มีผู้พยายามที่จะโจมตีข้อความย่อยที่ได้จากการดำเนินการ MD5 เช่น • Berson • Boer และ Bosselaers • Dobbertin