หน้าเว็บ

วิทยาการรหัสลับ (Cryptography)

07:21 Posted by Beekie39

หากกล่าวถึงการเข้ารหัสและถอดรหัสมักจะได้ยินคำว่า “Cryptography” คำว่า Cryptography นี้มาจากคำว่า Crypto ที่แปลว่า “การซ่อน” ผนวกกับคำว่า Graph ที่แปลว่า “การเขียน” ดังนั้น Cryptography จึงมีความหมายว่า “การเขียนเพื่อซ่อนข้อมูล” โดยมีจุดประสงค์เพื่อป้องกันไม่ให้ผู้อื่นสามารถอ่านข้อมูลได้ ยกเว้นผู้ที่เราต้องการให้อ่านได้เท่านั้น ซึ่งผู้ที่เราต้องการให้อ่านได้จะต้องทราบวิธีการถอดรหัสข้อมูลที่ซ่อนไว้ หากแบ่ง Cryptography ตามยุคสมัยแล้วเราสามารถที่จะแบ่งได้เป็น 2 ยุคคือ ยุคประวัติศาสตร์ (หรือที่เรียกว่ายุค Classic) และยุคปัจจุบัน (Modern) กระบวนการของ Cryptography มี 2 อย่างคือ Data Encryption และ Data Decryption ซึ่งหมายถึงการเข้ารหัสข้อมูล และการถอดรหัสข้อมูลตามลำดับ ส่วนประโยชน์ของ Cryptography คือ การรักษาความลับของข้อมูล

การเข้ารหัสในยุค Classic

จากหลักฐานทางประวัติศาสตร์ที่อาจจะตีความได้ไม่ชัดเจนมากนัก บ้างก็เชื่อว่าการเข้ารหัสเกิดขึ้นโดยชาวอียิปต์เมื่อประมาณ 4,500 ปีมาแล้ว บ้างก็เชื่อว่าคิดค้นโดยชาวอาหรับเมื่อประมาณ 500-600 ปีก่อนคริสตกาล วิธีการเข้ารหัสที่สำคัญในยุคก่อนๆมีหลายวิธีการ เช่น Monoalphabetic cipher, Polyalphabetic ciphers และ Caesar cipher เป็นต้น

Caesar cipher

การเข้ารหัสข้อมูลแบบ Caesar cipher มีขึ้นในราว 50-70 ปีก่อนคริสตกาล ได้รับการคิดค้นโดยกษัตริย์ Julius Caesar แห่งโรมัน เพื่อใช้เข้ารหัสข้อความในสารที่ส่งในระหว่างการทำศึกสงครามเพื่อป้องกันไม่ให้ศัตรูสามารถอ่านข้อความในสารนั้นได้หากสารนั้นถูกแย่งชิงไป การเข้ารหัสแบบ Caesar cipher จะใช้วิธีการแทนที่ตัวอักษรที่อยู่ห่างออกไปข้างหน้าสามตัว เช่น แทนที่ตัว A ด้วยตัว D และแทนที่ตัว B ด้วยตัว E เป็นต้น ดังรูปที่ 1 ดังนั้นการเข้ารหัสแบบ Caesar cipher จึงเป็นการเลื่อนตัวอักษรโดยจำนวนครั้งของการเลื่อนเท่ากับ 3 (Shipment, n = 3)

clip_image002

รูปที่ 1 วิธีการเข้ารหัสแบบ Caesar cipher

การแม็ปของตัวอักษรในการเข้ารหัสแบบ Caesar cipher สามารถเขียนได้ดังนี้

Plain : ABCDEFGHIJKLMNOPQRSTUVWXYZ

Cipher : DEFGHIJKLMNOPQRSTUVWXYZABC

หากใช้การเข้ารหัสข้อมูลแบบ Caesar cipher เข้ารหัส Fox Code จะได้ดังนี้

Plainertext : the quick brown fox jumps over the lazy dog

Ciphertext : WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ

(Fox Code คือประโยค “The quick brown fox jumps over the lazy dog” ซึ่งเป็นประโยคสั้นๆที่มีตัวอักษรภาษาอังกฤษครบทั้ง 26 ตัว)

ต่อมา Augustus (ผู้เป็น Caesar องค์ที่สองจากทั้งหมด 12 Caesar) ซึ่งเป็นหลานของ Julius Caesar ได้เปลี่ยนสูตรให้แทนที่ตัว A ด้วยตัว C และแทนที่ตัว B ด้วยตัว D ดังนั้นจึงกลายเป็นการเลื่อนตัวอักษรที่มีจำนวนครั้งของการเลื่อนเท่ากับสอง (Shiftment, n=2) อย่างไรก็ตามการเข้ารหัสทั้งสองวิธีนี้สามารถถูกเบรค (Break) ได้โดยง่าย (การเบรคในที่นี้หมายถึงการถอดรหัสข้อมูลออกมาได้ ถึงแม้จะไม่ทราบวิธีการเข้ารหัสและไม่มีกุญแจที่ใช้ถอดรหัสก็ตาม) การเบรคการเข้ารหัสข้อมูลแบบ Caesar cipher ทำได้โดยการทดลองทำการเลื่อนตัวอักษรทุกตัว โดยทดลองเลื่อนด้วยจำนวน Shiftment ที่ต่างกันคือ n = 1,

n = 2, n = 3, … ไปจนถึง n = 26 ซึ่งจะใช้การจำนวนครั้งในการทดสอบสูงสุดเพียง 26 ครั้ง ก็จะสามารถทำการเบรคได้ในที่สุด

Monoalphabetic ciphers

การเข้ารหัสข้อมูลแบบ Manoalphabetic Cipher (หรือเรียกว่า Monoalphabetic substitution ciphers) คิดค้นโดยชาวอาหรับ โดยใช้วิธีการแทนที่ตัวอักษรแบบ 1 ต่อ 1 (ไม่ใช่การเลื่อน) ตัวอย่างของ Monoalphabetic ciphers ในยุคแรกๆคือ การเข้ารหัสข้อมูลแบบ Atbash ใช้ในการแทนที่ตัว A ด้วยตัว Z แทนที่ตัว B ด้วยตัว Y และแทนที่ตัว C ด้วยตัว X เป็นต้น

Plain : abcdefghijklmnopqrstuvwxyz

Cipher : zyxwvutsrqponmlkjihgfedcba

หากทำการวิเคราะห์อัลกอริทึมของการเข้ารหัสแบบ Atbash ดูก็จะพบว่ามีรูปแบบ (Pattern) คือ ใช้ตัวสุดท้ายแทนตัวแรก ใช้ตัวรองสุดท้ายแทนตัวที่สอง และใช้ตัวที่สามจากสุดท้ายแทนตัวที่สามไปเรื่อยๆตามลำดับ ดังนั้น Monoalphabetic ciphers ในยุคต่อมาจึงใช้การกำหนดการจับคู่ของตัวอักษรที่ไม่เป็น pattern เช่น

Plain : abcdefghijklmnopqrstuvwxyz

Cipher : rfigzvpxasqehowkcuynjtlbmd

การเบรค Monoalphabetic ciphers จะทำได้ยากกว่าการเบรค Caesar cipher เนื่องจากมีคู่ที่เป็นไปได้อยู่ 26 ยกกำลัง 26 คู่ การเบรคจะต้องใช้การสุ่มไปเรื่อยๆจนกว่าจะสำเร็จ ซึ่งจะต้องใช้จำนวนครั้งในการคำนวณ 26! ครั้ง (26! = 26x25x24x23x…x1)

การเบรค Monoalphabetic ciphers สามารถทำได้อีกวิธีหนึ่ง คือการวิเคราะห์ความถี่ของตัวอักษรที่ปรากฏ (Frequency analysis) ตัวอย่างเช่น ตัวอักษร e กับ t จะเกิดบ่อยที่สุดในข้อความภาษาอังกฤษ โดยอักษร e มีอัตราการเกิดบ่อยถึง 13% ส่วนอักษร t มีอัตราการเกิดบ่อยถึง 9% ดังรูปที่ 2

clip_image004

รูปที่ 2 ความถี่ของตัวอักษรที่ปรากฏ

ตัวอักษรที่พบได้บ่อยมากได้แก่ e, t, a, o, I, n, s, h, r, d และ 1 ตามลำดับ หากนำมาเรียงตามลำดับจากการพบได้มาก ไปจนถึงการพบได้น้อยจะได้ดังรูปที่ 3 การนำตัวอักษรที่ใช้บ่อยไปใช้เพื่อถอดรหัสแบบ Monoalphabetic ciphers จะสามารถทำให้เดาและถอดรหัสได้เร็วขึ้น เช่น หากพิจารณาข้อมูลที่เข้ารหัสด้วย Monoalphabetic ciphers แล้วพบว่ามีตัวอักษรตัวหนึ่งที่พบได้บ่อยที่สุด ก็อาจสันนิษฐานได้ว่าเป็นตัวอักษร e เป็นต้น

clip_image006

รูปที่ 3 ความถี่ของตัวอักษรที่ปรากฏ (เรียงตามความถี่มากไปน้อย)

Polyalphabetic Encryption

Polyalphabetic Encryption คิดค้นโดย Blaise De Vignere ชาวฝรั่งเศสเมื่อประมาณ 500 ปีที่แล้ว อัลกอริทึ่มนี้ใช้เทคนิคที่ประกอบไปด้วย Multiple Monoalpha Cipher คือมี Monoalphabetic ciphers หลายๆตัวประกอบกัน ซึ่งจะมีการกำหนดระยะห่างให้กับตัวอักษรก่อนโดยระยะห่างในแต่ละช่วงจะไม่เท่ากันตัวอย่างเช่น n = 7 ให้เป็น C1 และ n = 15 ให้เป็น C2 หลังจากนั้นกำหนด รูปแบบ (Pattern) ในการใส่ข้อมูล เช่น C1,C2,C2,C1,C2 เป็นต้น

เทคนิคนี้จะใช้ในช่วงสงครามโลกครั้งที่ 1 และยากที่จะถอดรหัสด้วยมือเปล่า แต่ถ้าใช้คอมพิวเตอร์จะสามารถถอดรหัสได้ง่าย นอกจากนั้นหากต้องการจะเบรคโดยใช้คอมพิวเตอร์ก็จะทำการเบรคได้ง่ายเช่นกัน ผู้ที่เบรค Polyalphabetic Encryption ได้ เป็นชาวรัสเซียชื่อ Friedrich Kasiski เบรคได้ในปี 1863 โดยให้ข้อสังเกตว่าถ้าได้ Cipher Text ที่มีความยาวมากพอ Pattern จะเริ่มซ้ำและสามารถที่จะเห็นความเหมือนของ Cipher text โดยดูที่ Frequency Analysis ตัวอักษรแต่ละลัวปรากฏบ่อยแค่ไหน

One-Time Pad

One-Time Pad คิดค้นโดย Gilbert Vernam ชาวอังกฤษในช่วงสงครามโลกครั้งที่ 1 เป็นวิธีการเพิ่มความสามารถในการเข้ารหัสให้กับ Polyalphabetic Encryption โดยใช้การแม็ปจาก 1 ตัวอักษรให้เป็นไปได้หลายตัวอักษร ซึ่งมีวิธีการดังนี้

· ใช้ Key ที่มีขนาดเท่ากันกับ Plain Text

· Cipher Text ที่เป็นการคำนวณออกมาได้จะมีขนาดเท่ากันกับขนาดของ Plain Text

· ตัวอักษรทุกตัวจะต้องมีการเปลี่ยนหมด เช่น หาก L ตัวแรกแม็ปได้เป็น N (สมมุติ) แล้ว L ตัวที่สองจะต้องแม็ปได้เป็นตัวอื่น เช่น ตัว V เป็นต้น

· ใช้ Operation ง่ายๆ เช่น (+) เพื่อเข้ารหัสและ (-) เพื่อถอดรหัส หรือใช้ XOR สำหรับทั้งการเข้ารหัสและถอดรหัส

การเข้ารหัสแบบ One-Time Pad นี้ Cipher Text จะมีความเป็น Random มากหรือน้อยขึ้นอยู่กับความเป็น Random ของ Key ตัวอย่างการเข้ารหัสด้วยวิธี One-Time Pad แสดงดังนี้ (จะเห็นว่า L ตัวแรกแม็ปได้เป็น N ส่วน L ตัวที่สองแม็ปได้เป็น V ขึ้นอยู่กับคีย์)

Plain Text : H E L L O

Key : X M C K L

Cipher Text : E Q N V Z

การเข้ารหัส

7 (H) 4 (E) 11 (L) 11 (L) 14 (O) message (Plain Text)

+ 23 (X) 12 (M) 2 (C) 10 (K) 11 (L) key

= 30 16 13 21 25 message + key

= 4 (E) 16 (Q) 13 (N) 21 (V) 25 (Z) message + key (mod 26) à Cipher text

การถอดรหัส

4 (E) 16 (Q) 13 (N) 21 (V) 25 (Z) Cipher Text

- 23(X) 12 (M) 2 (C) 10 (K) 11 (L) Key

= -19 4 11 11 14 Cipher Text – key

= 7 (H) 4 (E) 11 (L) 11 (L) 14 (O) Cipher Text – key (mod 26) à message (Plain Text)

แต่อย่างไรก็ตาม One Time Pad ก็ยังมีปัญหาอยุ่ เช่น Key ที่ใหญ่เท่ากับ Plain Text จะต้องใช้พื้นที่มากสำหรับเก็บ Key นอกจากนั้น Key ที่ใหญ่ก็ทำให้ใช้งานได้อย่างลำบาก (หากเทียบกับการใช้ Key ที่มีขนาดเล็ก) นอกจากนั้นผู้ส่งข้อความจะต้องมีการส่ง Key ไปยังปลายทางเพื่อใช้ในการถอดรหัส ซึ่งอาจจะทำให้ Key ถูกขโมยได้ในระหว่างขั้นตอนการส่ง

Playfair cipher

Payfair cipher เป็น Block Cipher ตัวแรกเกิดขึ้นในปี ค.ศ. 1854 โดย Sir Charles Wheatstone ซึ่งเล่าให้ Baron Playfair ฟัง แล้วจากนั้นก็ถูกเล่าต่อให้ Albert และ Load Palmerston ฟังบนโต๊ะอาหารเย็น Playfair cipher ถูกใช้ในกองกำลังทางประเทศสหราชอาณาจักรในสงครามโลกครั้งที่ 1 มีกระบวนการทำงานของอัลกอริทึมดังนี้

1. สร้างตาราง Key ขนาด 5x5 = 25 แบบสุ่มโดยตัดตัว Q ออก

ตัวอย่าง Key ขาด 5x5

clip_image008

รูปที่ 4 สร้างตาราง Key ของ Playfair cipher

2. แบ่งตัวอักษร Plain Text ต้นฉบับออกมาเป็นคู่ ๆ หากมีตัวอักษรที่ติดกันให้เอา X คั่นกลาง และหากตัวสุดท้ายไม่ ครบคู่ให้ใส่ Z เข้าไปแทนเช่น ต้องการเข้ารหัสข้อความว่า "Hide the gold in the tree stump" ก็สามารถจัดตัวอักษร เป็นคู่ ๆ ได้ดังนี้

HI DE TH EG OL DI NT HE TR EX ES TU MP

^

ใส่ X เข้าไปเนื่องจากมีตัว E สองตัวติดกัน

3. ถ้าไม่อยู่ในแถวและ Column เดียวกัน ให้แทนที่ตัวอักษรแบบไขว้กัน เช่น HI ในข้อความต้นฉบับ (H ไม่ได้อยู่แถว เดียวกันกับ I และ H ก็ไม่ได้อยู่ใน Column เดียวกันกับ I) จะกลายเป็น BM (H กลายเป็น I และ B กลายเป็น M)

4. ถ้า 2 ตัวอักษรอยู่ Column เดียวกัน ให้เอาตัวอักษรที่อยู่ข้างล่างติดกันมาแทนที่ โดยทำทีละตัว (หากตัวอักษรนั้นอยู่ ล่างสุดให้เอาตัวบนสุดมาแทนที่) เช่น DE ในข้อความต้นฉบับ จะกลายเป็น ND เนื่องจาก D ถูกแทนที่ด้วย N ส่วน E ถูกแทนที่ด้วย D

5. ถ้า 2 ตัวอักษรอยู่แถวเดียวกัน ให้เอาตัวอักษรที่อยู่ขวามือมาแทนที่ โดยทำทีละตัว (หากตัวอักษรนั้นอยู่ขวาสุดให้ เอาตัวซ้ายสุดมาแทนที่) เช่น TU ในข้อความต้นฉบับ จะกลายเป็น UV เนื่องจาก T ถูกแทนที่ด้วย U ส่วน U ถูกแทนที่ ด้วย V

หากทำการเข้ารหัสแล้วจะได้ดังนี้

Plain Text: HI DE TH EG OL DI NT HE TR EX ES TU MP

Cipher Text: BM ND ZB XD KY BE JV DM UI XM MN UV IF

การเข้ารหัสในยุค Modern

DES (Data Encryption Standard)

DES เป็นการเข้ารหัสแบบ Block cipher ที่พัฒนามาจากอัลกอริทึม Lucifer ของ IBM โดยLucifer ได้รับการพัฒนาเพิ่มความสามารและเปลี่ยนชื่อเป็น DES แล้วได้รับการนำเสนอ US NIST (US National Institute of Standards and Technology) ให้กลายเป็นมาตรฐานของการเข้ารหัส

การเข้ารหัสข้อมูลแบบ DES เป็นการเข้ารหัสโดยกระทำกับกลุ่มของข้อมูลขนาด 64 บิต (ดังรูปที่ 5) ลำดับแรกข้อมูล 64 บิต นี้จะถูกกลับตำแหน่ง (สลับบิต) จากนั้นจะถูกแบ่งเป็น 2 ส่วน ได้แก่ ส่วนทางซ้ายและส่วนทางขวา (ส่วนละ 32 บิต) ขั้นตอนต่อไปจะใช้ฟังก์ชั่นทางคณิตศาสตร์ (ฟังก์ชั่น 0 ข้อมูลจากส่วนซ้ายหรือขวาจะถูกนำมารวมกันกับ Key โดยจะทำซ้ำกันอย่างนี้เป็นจำนวนทั้งสิ้น 16 รอบ เมื่อเสร็จสิ้นขั้นตอนนี้ (รอบที่ 16) ผลลัพธ์ที่ได้จากทั้งส่วนทางซ้ายและขวาก็จะถูกนำมารวมกันเป็นข้อมูลขนาด 64 บิตอีกครั้งหนึ่ง และนำไปสลับตำแหน่งในขั้นตอนสุดท้าย

การทำงานของฟังก์ชั่น 1 ในแต่ละรอบ จะเป็นการเลื่อนบิตของ Key ซึ่งจะเลือกใช้เพียง 46 บิต จากทั้งสิ้น 56 บิต ข้อมูลในส่วนทางขวา (32 บิต) จะถูกขยายให้กลายเป็นข้อมูลขนาด 48 บิต (ดังรูที่ 6) จากนั้นจะนำมารวมกับกุญแจขนาด 48 บิต (ที่เลือกมา) การรวมกันในขั้นตอนจะใช้การ XOR ผลลัพธ์ขนาด 48 บิต ที่ได้จะถูกนำไปแทนที่อีก 8 ครั้ง ผลลัพธ์จากการแทนที่จะเหลือข้อมูลเพียง 32 บิต เท่านั้นหลักจากนั้นก็จะต้องสลับตำแหน่งอีกครั้งหนึ่ง

clip_image010

รูปที่ 5 กระบวนการทำงานของ DES

หนึ่งรอบของการทำฟังก์ชั่น F จะประกอบด้วยกระบวนการข้างต้น 4 ครั้ง ข้อมูลในส่วนทางซ้ายจะต้องผ่านกระบวนการเดียวกัน ผลลัพธ์ที่ได้จากทั้งส่วนทางซ้ายและขวาจะถูกนำมารวมกันแบบ XOR เมื่อเสร็จสิ้นขั้นตอนนี้แล้ว ผลลัพธ์ที่ได้จะถูกใช้เป็นข้อมูลส่วนทางขวาของรอบใหม่ และข้อมูลของส่วนทางขวาเดิมก็จะกลายเป็นข้อมูลส่วนซ้ายของวงรอบใหม่

บริษัทแห่งหนึ่งต้องการเบรก DES เพื่อสร้างความแข็งแกร่งให้กับ RSA จึงจัดการประกวดการเบรกขึ้นโดยให้รางวัล 10,000 US$ สำหรับผู้ชนะในแต่ละรอบ บริษัท Distribution.net ใช้เวลา 41 วัน ก็ทำการเบรก DES ได้สำเร็จ บริษัท EFF สามารถเบรกได้ภายในเวลา 56 ชั่วโมง จากนั้นบริษัท Distribution.net และบริษัท EFF ก็จับมือกันและใช้คอมพิวเตอร์กว่า 100,000 เครื่องทั่วโลกมาแคร็ก DES ซึ่งก็สามารถทำได้ในเวลา 22 ชั่วโมง 15 นาที เป็นต้นเหตุทำให้มีการขยาย Key ของ DES จาก 64 บิต ให้เป็น 128 บิต เพื่อจะได้ใช้เวลาในการแคร็กนานขึ้น

clip_image012

รูปที่ 6 การทำงานของฟังก์ชั่น f ของ DES

ปัจจุบัน DES แบ่งออกเป็น DES 64 บิต และ DES 128 บิต แต่ถึงแม้ว่าจะใช้ 128 บิต ก็ตาม DES ก็ยังสามารถถูกแคร็กได้ จึงได้มีการพัฒนาให้มี Tripple-DES (3DES) ที่มีความปลอดภัยสูงขึ้น

Tripple-DES (30DES)

Tripple-DES เป็นการเข้ารหัสที่ถูกสร้างมาเพื่อแก้ปัญหาความอ่อนแอของ DES โดย Tripple-DES ช่วยเสริมความปลอดภัยให้การเข้ารหัสมีความปลอดภัยมากขึ้นโดยการใช้อัลกอริทึม DES เป็นจำนวนสามครั้งเพื่อเข้ารหัส โดยในแต่ละครั้งจะใช้กุญแจในการเข้ารหัสที่แตกต่างกันออกไป ดังนั้นจำนวนกุญแจที่ใช้ใน Tripple-DES จึงมีทั้งสิ้น 3 ดอก (ความยามดอกละ 56 บิต) ด้วยความแข็งแกร่งนี้จึงทำให้ Tripple-DES เป็นอีกหนึ่งในมาตรฐานในการเข้ารหัสในปัจจุบัน

clip_image014

รูปที่ 7 กระบวนการทำงานของ Tripple-DES

AES (Advanced Encryption Standard)

AES (Advanced Encryption Standard) เป็นการเข้ารหัสที่พัฒนาขึ้นมาเพื่อใช้ทดแทน DES หลังจากที่ DES ถูกเบรกได้โครงการพัฒนา AES ได้เริ่มต้นเมื่อปี 1997 โดย NIST หลังจากนั้น (ในปี 1998) NIST ก็ให้นักวิทยาการรหัสสลับทั่วโลกส่งอัลกอริทึมเข้ามาเพื่อคัดเลือกโดยกำหนดให้ 128 บิต เป็นมาตรฐานของ AE$ ซึ่งอัลกอริทึมต่างๆ ถูกคัดเลือกเข้ามาทั้งสิ้น 15 อัลกอริทึม และมีอยู่ 5 อัลกอริทึมที่ผ่านเข้ารอบชิงจนผลสุดท้ายอัลกอริทึมของ Rijndeal ได้รับการตัดสินให้ชนะเพราะเร็วกว่าและใช้อัลกอริทึมที่ธรรมดากว่า แต่ได้ความปลอดภัยเท่ากัน จากนั้นจึงได้กลายเป็น RFC 3826 เมือปี 2004 ข้อกำหนดในมาตรฐานล่าสุดอนุญาตให้ใช้ AES เข้ารหัสข้อมูลโดยใช้ Key ที่มีขนาดต่างๆ ได้แก่ 128 บิต, 192 บิต, และ 256 บิต

วงรอบการทำงาน AES แบ่งเป็น 3 ส่วนหลักๆ ได้แก่ Initial Round, และ Final Round และในแต่ละส่วนก็มีการบวนการย่อยต่างๆ ดังนี้ (รูปที่ 8 และ 9)

1. Initial Round

· AddroundKey

2. Rounds

· SubBytes : เป็น non-linear substitution ซึ่งแต่ละไบต์จะถูกแทนที่ด้วยไบต์ที่ได้จาก lookup table (รูปที่ 8)

· ShiftRows : เป็นการเลื่อนไบต์ในแต่ละแถว ซึ่งจะทำเฉพาะแถวที่ 2, 3 และ 4

· MixColumns : เป็นการผสมรวม 4 ไบต์ภายในคอลัมน์

· AddRoundKey เป็นการนำ Cipher Text และ Key (ที่มาจาก key schedule) ผสมรวม กลายเป็น Cipher Text ใหม่

3. Final Round (no MixColumns)

· SubBytes

· ShiftRows

· AddRoundKey

clip_image016clip_image018

clip_image020clip_image022

รูปที่ 8 กระบวนการ SuBytes, ShiftRows, MixColumns และ AddRoundKey

clip_image024

รูปที่ 9 วงรอบการทำงานของ AES

Symmetric Key Cryptography

หัวข้อที่ผ่านเราได้ศึกษาการเข้ารหัสที่ใช้กุญแจดอกเดียว (ไม่ว่าจะเป็นการเข้ารหัสด้วยอัลกอริทึม DES หรือ AES) การเข้ารหัสโดยใช้กุญแจดอกเดียวเรียกว่า “การเข้ารหัสแบบสมมาตร” (Symmetric Key Cryptography) เนื่องจากใช้ Key ตัวเดียวกันในการเข้ารหัสและถอดรหัส นอกจาก DES และ AES แล้วอัลกอริทึมในการเข้ารหัสแบบสมมาตรอย่างอื่นก็มี เช่น Blowfish และ IDEA แต่อาจจะไม่เป็นที่นิยมมากนัก การเข้ารหัสแบบสมมาตรถึงแม้จะใช้อัลกอริทึมที่แข็งแกร่งอย่าง AES และใช้ Key ที่มีความยามตั้งแต่ 128 บิต ขึ้นไปแล้วก็ยังมีข้อด้อยอยู่ ตัวอย่างเช่น

· การส่ง Key ไปยังผู้รับเพื่อใช้ในการถอดรหัส หาก Key ถูกดักจับได้แล้วการเข้ารหัสก็ จะ ไม่มีความหมายอะไรเลยเพราะผู้ดักฟังที่ดักจับได้ Key ไป ก็สามารถที่จะดักจับ Cipher Text แล้วถอดรหัสได้

· หากมีจำนวนผู้ใช้มากขึ้น ซึ่งผู้ใช้แต่ละคู่จะต้องใช้คีย์ที่แตกต่างจากคู่สื่อสารอื่นจะทำให้จำนวนคีย์ที่ต้องใช้ทั้งหมดมีจำนวนมาก เช่น ผู้ใช้ N คนจะต้องใช้คีย์ทั้งหมดเท่ากับ Nx(N-1)/2

ด้วยข้อจำกัดเกี่ยวกับเรื่องการบริหารจัดการคีย์นี้ จึงได้มีการคิดขึ้น “การเข้ารหัสแบบอสมมาตร” ขึ้นมาซึ่งภาษาอังกฤษเรียกว่า Asymmetric Key Cryptography

Asymmetric Key Cryptography

การเข้ารหัสแบบอสมมาตร (Asymmetric Key Cryptography) บางตำราอาจใช้คำว่า Asymmetric Key Encryption หรือ Public Encryption หรือใช้คำว่า Public Key Infrastructure (PKI) หรือ Public-Key Cryptography อย่างไรก็ตามการเข้ารหัสแบบนี้ถูกคิดค้นโดย Whit Diffie และ Marty Hellman ตั้งแต่ปี 1976 โดยถูกสร้างมาเพื่อเป็นทางเลือกในการส่งข้อมูลที่เป็นความลับ เพราะการเข้ารหัสแบบสมมาตร (ใช้กุญแจดอกเดียว) จะมีปัญหาเรื่องการถูกดักจับ key และปัญหาเกี่ยวกับการจัดการ Key ที่มีอยู่เป็นจำนวนมากเมื่อใช้ในระบบใหญ่ การเข้ารหัสแบบอสมมาตรจะใช้ Key สองอัน โดยหากเราเข้ารหัสด้วย Key อันหนึ่งจะต้องถอดรหัสด้วย Key อีกอันหนึ่งที่เหลือ ตัวอย่างเช่น

· หากเข้ารหัสด้วย Key1 จะต้องถอดรหัสด้วย Key2 เท่านั้น

· หากเข้ารหัสด้วย Key2 จะต้องถอดรหัสด้วย Key1 เท่านั้น

· หากเข้ารหัสด้วย Key1 แล้วถอดรหัสด้วย Key1 จะไม่สามารถถอดรหัสได้

· หากเข้ารหัสด้วย Key2 แล้วถอดรหัสด้วย Key2 จะไม่สามารถถอดรหัสได้

การประยุกต์ใช้งานทำได้โดย เก็บ Key อันหนึ่งไว้กับตัวเองเรียกว่า Private Key ส่วนอีก Key หนึ่ง สามารถแจกจ่ายให้ผู้อื่นได้ ดังนั้น Key นี้จะถูกเรียกว่า Public Key เมื่อผู้อื่นต้องการส่งข้อมูลที่เป็นความลับมายังเจ้าของ Key จะต้องเข้ารหัสข้อมูลนั้นด้วย Public Key ของผู้รับ ดังนั้นจึงทำให้ผู้ที่มี Private Key เท่านั้นที่จะถอดรหัสข้อมูลได้ ส่วนการส่งข้อมูลที่เข้ารหัสด้วย Private Key ไปยังผู้อื่น ผู้ใดก็ตามที่มี Public Key (ซึ่งมีอยู่หลายคน) จะสามารถถอดรหัสข้อมูลได้

ตัวอย่างที่ 1

1. สร้าง Private Key และ Public Key ของผู้ใช้ A ขึ้นมา เรียกว่า PvK-A และ PbK-A 1 ตามลำดับ

2. ผู้ใช้ A แจกจ่าย Public Key ของตน (PbK-A) ไปให้กับผู้ใช้ และผู้ใช้ C

3. ผู้ใช้ B สามารถส่งข้อมูลลับ มายังผู้ใช้ A ได้ โดยเข้ารหัสข้อมูลด้วย Pbk-A ซึ่งทำให้

· ผู้ใช้ A ถอดรหัสได้เพราะมี PvK-A (เนื่องจากข้อมูลเข้ารหัสด้วย PbK-A จึงต้องถอดด้วย PvK-A ซึ่งผู้ใช้ A มีคีย์นี้)

· ผู้ใช้ C ถึงแม้ดักจับ Cipher Text ของผู้ใช้ B ได้ แต่ก็ไม่สามารถถอดรหัสได้ เพราะไม่มี PvK-A (เนื่องจาก Private Key จะถูกเก็บไว้ที่เจ้าของเท่านั้น)

4 ผู้ใช้ C สามารถส่งข้อมูลลับมายังผู้ใช้ A ได้ โดยเข้ารหัสข้อมูลด้วย PbK-A ซึ่งทำให้ผู้ใช้ A ถอดรหัสได้ แต่ผู้ใช้อื่นถอดรหัสไม่ได้

5 ผู้ใช้ A ต้องการส่งข้อมูลที่ “ไม่เป็นความลับ” ไปให้ผู้ใช้ B โดยเข้ารหัสข้อมูลด้วย PvK-A ซึ่งทำให้

· ผู้ใช้ B สามารถถอดรหัสข้อมูลได้โดยใช้ PbK-A และมั่นใจได้ว่าเป็นข้อมูลนี้มาจาก A เนื่องจากข้อมูลที่ถอดด้วย PbK-A ได้จะต้องถูกเข้ารหัสด้วย PvK-A ซึ่งผู้ที่มีคีย์นี้มีอยู่คนเดียวเท่านั้นคือผู้ใช้ A

· ผู้ใช้ C ดักจับ Cipher Text ได้ ก็จะสามารถถอดรหัสข้อมูลได้โดยใช้ PbK-A แต่เนื่องจากข้อมูลนี้เป็นข้อมูลที่ “ไม่เป็นความลับ” จึงไม่ได้เกิดปัญหาอะไร

NOTE : การเข้ารหัสโดยใช้ Private Key ของผู้ส่ง สามารถยืนยันตัวผู้ส่งได้

ตัวอย่างที่ 2

1. สร้าง Private Key และ Public Key ของผู้ใช้ A ขึ้นมา เรียกว่า PvK-A และ PbK-

A ตามลำดับ

2. สร้าง Private Key และ Public Key ของผู้ใช้ B ขึ้นมา เรียกว่า PvK-B และ PbK-B ตามลำดับ

3. หาก A ต้องการจะส่งข้อมูลที่เป็นความลับไปยัง B จะต้องเข้ารหัสข้อมูลด้วย PbK-B ซึ่ง B จะเป็นคนเดียวที่สามารถถอดรหัส

ได้ เพราะมี PvK-B

4. หาก B ต้องการจะส่งข้อมูลที่เป็นความลับไปยัง A จะต้องเข้ารหัสข้อมูลด้วย PbK-A ซึ่ง A จะเป็นคนเดียวที่สามารถถอดรหัส

ได้ เพราะมี PvK-A

5. A เข้ารหัสข้อมูลด้วย PvK-A ส่งไปยัง B เมื่อ B ได้รับและถอดรหัสด้วย PbK-A ออกมาได้จึงมั่นใจได้ว่าข้อมูลถูกส่งมาจาก A

(เพราะหากถอดรหัสด้วย PbK-A แสดงว่าข้อมูลนี้จะต้องถูกเข้ารหัสด้วย PvK-A)

6. B เข้ารหัสข้อมูลด้วย PvK-B ส่งไปยัง A เมื่อ A ได้รับและถอดรหัสด้วย PbK-B ออกมาได้จึงมั่นใจได้ว่าข้อมูลถูกส่งมาจาก B

(เพราะหากถอดรหัสด้วย PbK-B แสดงว่าข้อมูลนี้จะต้องถูกเข้ารหัสด้วย PvK-B)

อัลกอริทึมที่ใช้ในการเข้ารหัสแบบอสมมาตร (Asymmetric Key Cryptography) ที่เป็นที่นิยม ได้แก่ RSA และ ECC

RSA

RSA เป็น อัลกอริทึมในการเข้ารหัสแบบอสมมาตรถูกสร้างขึ้นมาเมื่อ ปี 1978 โดย Ron Rivest, AdiShamir และ Leonard Adleman ตั้งแต่คิดค้นมายังไม่มีใครสามารถเบรกอัลกอริทึมนี้ได้ และ RSA ได้ถูกนำมาใช้อย่างแพร่หลายในด้าน e-commerce

กระบวนการทำงานของ RSA

1. เลือก p และ q ซึ่งเป็นจำนวนเฉพาะที่มีค่าต่างกับ

2. ให้ n = pq

3. ให้ m = (p-1)(q-1)

4. เลือกค่า e ที่ 1 < e < m ซึ่งหารร่วมมากของ m กับ e มีค่าเป็น 1 (สามารถหาค่า e ได้โดยการสุ่มค่าจำนวนเต็มบวก

พร้อมกับทดสอบว่าหารร่วมมากของ m กับ e มีค่าเป็น 1)

5. หาค่า d ที่ทำให้ ed mod m = 1

6. Public key คือ (e.n)

7. Private key คือ (d.n)

8. ให้ M คือข้อความที่ยังไม่ถูกเข้ารหัส (ในรูปแบบของตัวเลข) M<n

9. สมการของการถอดรหัสคือ C = Me mod n

10.สมการของการถอดรหัสคือ M = Cd mod n

สาเหตุที่ทำให้ RSA ยากที่จะทำการเบรค ได้คือ แม้จะทราบ Public Key (e.n) ทราบค่า Message (M) และทราบค่า Cipher (C) ก็ตาม แต่ก็ยากที่จะคำนวณย้อนกลับเพื่อหาค่าของ Private Key (d) ได้

ตัวอย่างการเข้ารหัสและถอดรหัสด้วย RSA

1. เลือก p และ q ซึ่งเป็นจำนวนเฉพาะที่มีค่าต่างกัน

p = 7

q = 17

2. ให้ n = pq

ดังนั้น n = 7*17 = 119

3. ให้ m = (p-1)(q-1)

ดังนั้น m = 6*16 = 96

4. เลือกค่า e ที่ 1<e<m ซึ่งหารร่วมมากของ m กับ e มีค่าเป็น1 (สามารถหาค่า e ได้โดยการสุ่มค่าจำนวนเต็มบวกพร้อม

กับทดสอบว่าหารร่วมมากของ m กับ e มีค่าเป็น 1)

5. หาค่า d ที่ทำให้ ed mod m = 1

ได้ค่า d = 77 เพราะ 5*77 mod 96 ได้ 1

6. Public key คือ (e.n)

ดังนั้น Public key คือ (77.119)

7. Private key คือ (d.n)

ดังนั้น Private key คือ (77.119)

8. ให้ M คือข้อความที่ยังไม่เข้ารหัส (ในรูปแบบของตัวเลข) M < n

ให้ข้อความที่ยังไม่เข้ารหัส M = 19

9. การเข้ารหัส C = Me mod n

ได้ C = 195 mod 119 = 66

10.การเข้ารหัส M = Cd mod n

ได้ M = 6677 mod 119 = 19

ECC

ECC ย่อมาจาก Elliptic Curves Cryptography ได้รับการนำเสนอโดย Neal Koblitz และ Victor S. Miller ในปี 1985

โดยอัลกอริทึมการเข้ารหัส ECC นี้ได้รับการพัฒนาจากสมการของเส้นโค้งของวงรี y2 = x3 + ax + b ดังรูปที่ 10

clip_image026

รูปที่ 10 กราฟแสดงความสัมพันธ์ของสมการ Elliptic Curves

ECC มีข้อดีที่เหนือกว่า RSA คือ จะใช้ Key ที่สั้นกว่าแต่สามารถให้ความปลอดภัยเท่ากับ RSA จะมีความปลอดภัยสูงกว่านั่นคือ หากต้องการเบรกจะใช้เวลาในการ Brute Force นานกว่า RSA

เนื่องจาก ECC ใช้ Key ที่มีขนาดเล็กกว่า RSA มาก และมีความสามารถในการคำนวณที่รวดเร็ว ใช้พลังงานต่ำและใช้หน่วยความจำน้อย ดังนั้น ECC จึงเหมาะสำหรับการใช้งานในอุปกรณ์เคลื่อนที่ขนาดเล็ก เช่น โทรศัพท์มือถือ Pocket PC และ PDA เป็นต้น

clip_image028

รูปที่ 11 กราฟแสดงเวลาที่ใช้ในการแคร็ก ECC เมื่อเทียบกับ RSA

Hash

การเข้ารหัสแบบ Hash (Cryptographic hash) หมายถึง การแปลงรูปแบบของข้อมูลที่รับเข้ามาให้เป็นข้อมูลที่ถูกย่อย (Message Digest) ไม่ว่าข้อมูลต้นฉบับจะมีขนาดเล็กหรือใหญ่เท่าใดก็ตาม ก็จะถูกย่อยให้อยู่ในรูปแบบที่มีขนาดคงที่ ดังนั้นจึงไม่สามารถทำกระบวนการย้อนกลับเพื่อให้กลายเป็นข้อมูลต้นฉบับได้ จะทำได้เพียงแค่ตรวจสอบว่าข้อมูลที่ให้มาแต่ละครั้งเหมือนกันหรือไม่

ฟังก์ชั่น Hash ที่สำคัญๆ ได้แก่ MD4, MD5, SHA-1 และ SHA-2 ตัวอย่างการใช้งานฟังก์ชั่น Hash ที่พบเห็นได้บ่อยก็คือ การเก็บรหัสผ่านในฐานข้อมูล ตัวอย่างเช่น ผู้ใช้ thawatchai ตั้งรหัสผ่านเป็นคำว่า abc123 หากเก็บรหัสผ่านลงบน Database โดยตรงจะทำให้ผู้ใดก็ตามที่เข้าถึงฐานข้อมูลได้ ทราบรหัสผ่านที่เก็บไว้ (ผู้ที่เข้าถึงฐานข้อมูลได้ เช่น ผู้ดูแลระบบ ผู้ดูแลฐานข้อมูล และแฮกเกอร์ที่เจาะเข้ามาทางเว็บไซต์ด้วยวิธีการพิเศษ ตัวอย่างเช่น SQL Injection) หากทำการย่อยรหัสผ่านด้วยฟังก์ช่น Hash เช่น ใช้ MD5 ย่อยรหัสผ่าน abc123 ได้เป็น e99a18c428cb38d5f260853678922e03 แล้วจึงเก็บค่าแฮชนั้นลงใน Database จะทำให้การเปิดดูรหัสผ่านใน Database โดยตรง ไม่พบรหัสผ่าน abc123 แต่จะพบเพียงค่าแฮชดังกล่าว ซึ่งเป็นการป้องกันการเปิดเผยรหัสผ่านและไม่สามารถใช้ค่าแฮช เพื่อคำนวณย้อนกลับไปเป็นรหัสผ่านได้ ในการตรวจสอบสิทธิ์ผู้ใช้แต่ละครั้งสำหรับการล็อกอินก็สามารถทำได้โดยนำรหัสผ่านที่ผู้ใช้ส่งผ่านฟอร์มล็อกอินเข้ามาแล้วนำไปผ่านฟังก์ชั่น Hash เช่น MD5 จากนั้นก็นำค่าแฮชที่ได้มาเทียบกับค่าแฮชที่เก็บไว้ใน Database หากมีค่าตรงกันก็แสดงว่ารหัสผ่านถูกต้อง ไฟล์รหัสผ่านของ Linux (/etc/shadow) ก็รหัสผ่านด้วย MD5 เช่นกัน นอกจากนั้นก็ยังพบเห็นการประยุกต์ใช้การแฮชรหัสผ่านใน Web Application ต่างๆ เช่น Moodle และ Mambo

MD5

อัลกอริทึม MD5 คิดค้นโดย Ron Rivest ซึ่งเป็น 1 ใน 3 คน ที่คิดค้น RSA

clip_image030

รูปที่ 12 อัลกอริทึม MD5

ถึงแม้ MD5 จะได้รับความนิยมอย่างมาก และได้มีการนำมาใช้อย่างแพร่หลาย เช่น นำมาใช้สร้าง Digital Signature ในระบบ e-commerce อย่างไรก็ตาม MD5 ก็ถูกเบรคได้โดยนักคณิตศาสตร์หญิงชาวจีน (Professor Dr. Xiaoyun Wang) ในปี 2004 โดยใช้เครื่องซูเปอร์คอมพิวเตอร์ IBM P690 โดยใช้เวลาแคร็กเพียง 1 ชั่วโมงก็สามารถเบรกได้ หลังจากนั้นก็มีคนอ้างว่าสามารถใช้เครื่องคอมพิวเตอร์ Notebook ความเร็ว 1.6 GHz เบรก MD5 ได้ภายในเวลา 8 ชั่วโมง

ต่อไปนี้เป็น ตัวอย่างการใช้งานคำสั่ง MD5 บน Linux

$ md5 exim-4, 43, tar.bz2

MD5 (exim-4, 43, tar.bz2) = f8f646d4920660cb5579becd9265a3bf

$

SHA

SHAO และ SHA1 ได้ถูกพัฒนาจาก MD5 เดิมให้ Output มีความเป็น Random สูงกว่า และมี Collision น้อยกว่าเพื่อลดโอกาสในการถูกแคร็กได้ อัลกอริทึมของ SHA1 แสดงดังรูปที่ 13

clip_image032

รูปที่ 13 อัลกอริทึม SHA1

อย่างไรก็ตาม SHA0 และ SHA1 ก็ถูกเบรกได้โดยนักคณิตศาสตร์หญิงชาวจีน (Professor Dr. Xiaoyun Wang) คนเดียวกันกับที่เคยเบรค MD5 ได้ ดังนั้นปัจจุบันนี้ความหวังจึงอยู่ที่ SHA2 ซึ่งยังไม่มีใครเบรคได้ อัลกอริทึมของ SHA2 แสดงดังรูปที่ 14

clip_image034

รูปที่ 14 อัลกอริทึม SHA2

Digital Signatures

การทำธุรกรรมอิเล็กทรอนิคส์จำเป็นที่จะต้องมีการยืนยันเอกสารหรือข้อมูลว่าถูกส่งมาจากผู้ส่งจริงเพื่อป้องกันการปฏิเสธความรับผิดชอบ (Non-repudiation) และเป็นการพิสูจน์ทราบตัวตน (Authentication) จากที่เราได้ศึกษาไปในหัวข้อ Asymmetric Key Cryptography ทำให้ทราบว่าการเข้ารหัสข้อมูลด้วย Private Key สามารถยืนยันผู้ส่งได้ เช่น ผู้ใช้ A เข้ารหัสข้อมูลด้วย Private Key ของตนเองแล้วส่งข้อมูลไปให้ผู้ใช้ B และผู้ใช้ C จากนั้นผู้ใช้ B และผู้ใช้ C ก็ถอดรหัสโดยใช้ Public Key ของผู้ใช้ A ได้ เป็นการยืนยันว่าข้อมูลมาจากผู้ใช้ A จริง เพราะเป็นคนเดียวที่มี Private Key ของผู้ใช้ A

ในการส่งข้อมูลที่ “ไม่เป็นความลับ” และเป็นข้อมูลมีขนาดใหญ่ หากต้องการที่จะยืนยันผู้ส่งด้วยวิธีการข้างต้นเราจะต้องเข้ารหัสข้อมูลทั้งหมดด้วย Private Key ของผู้ส่ง (เพื่อเป็นการยืนยันตัวตนผู้ส่ง) แต่มีข้อเสียคือ จะต้องมีการเข้ารหัสข้อมูลขนาดใหญ่ทั้งหมด และผู้รับต้องถอดรหัสข้อมูลทั้งหมดเช่นกัน ซึ่งทำให้เปลือง CPU และเปลืองเวลาในการประมวลผล แต่อย่างไรก็ตามเราสามารถประยุกต์กรรมวิธีข้างต้น ให้ใช้ CPU และเวลาน้อยลงโดยใช้ฟังก์ชั่น Hash

เริ่มโดยนำข้อความต้นฉบับมาทำการ Hash เพื่อย่อยให้เป็นข้อมูลขนาดเล็ก (Message Digest) จากนั้นนำ Message Digest มาเข้ารหัสด้วย Private Key ของผู้ส่ง (ในขั้นตอนนี้จะใช้ CPU น้อยเพราะ Message Digest มีขนาดเล็ก) จากนั้นก็ส่งข้อมูลต้นฉบับ (ที่มีขนาดใหญ่และเป็นข้อมูลที่ “ไม่เป็นความลับ”) และ Message Digest ที่เข้ารหัสด้วย Private Key ไปยังผู้รับ เมื่อผู้ได้รับข้อมูลทั้งสอง ก็ทำการตรวจสอบว่าข้อมูลต้นฉบับมาจากผู้ส่งจริงหรือไม่และไม่มีการแก้ไขข้อมูลระหว่างทางใช่หรือไม่ โดยการนำ Message Digest (ที่เข้ารหัสด้วย Private Key ผู้ส่ง) มาถอดรหัสด้วย Public Key ของผู้ส่งให้กลับไปเป็น Message Digest ต้นฉบับเหมือนเดิม จากนั้นก็นำข้อมูลต้นฉบับที่มีขนาดใหญ่มาผ่านฟังก์ชั่น Hash ได้เป็น Message Digest อีกอันหนึ่ง จากนั้นก็ทำการเปรียบเทียบกัน หาก Message Digest ทั้งสองตรงกันก็แสดงว่าข้อมูลนั้นมาจากผู้ส่งจริงและไม่ได้ถูกเปลี่ยนแปลงระหว่างทาง จะเห็นได้ว่าสิ่งที่สามารถยืนยันว่าข้อมูลไม่ถูกเปลี่ยนแปลงและถูกส่งมาโดยผู้ส่งจริงนั้นคือ “Message Digest ที่ผู้ส่งได้เข้ารหัสด้วย Private Key ของผู้ส่ง” ซึ่งสิ่งนี้เองเราเรียกว่า Digital Signatures

clip_image036

รูปที่ 15 Digital Signatures

สรุปเกี่ยวกับขั้นตอนของ Digital Signatures ได้ดังนี้

1. นำข้อมูลต้นฉบับ (ซึ่งอาจจะมีขนาดใหญ่) มาทำการ Hash (ด้วยแฮชชิ่งอัลกอริทึมอย่างใดอย่างหนึ่ง เช่น MDS หรือ SHA1) ได้เป็นข้อมูลก้อนเล็กๆ เรียกว่า Message Digest

2. นำ Message Digest มาเข้ารหัสด้วย Private Key ของผู้ส่งได้เป็น “Digital Signatures”

3. ส่งข้อมูลต้นฉบับ (อาจจะขนาดใหญ่) ซึ่งอยู่ในรูปของ Plain Text ไปให้ผู้รับ โดยแนบ Digital Signatures ไปด้วย (มีการส่งข้อมูลไปยังผู้รับ 2 ชิ้น คือ (a) ข้อมูลต้นฉบับ และ (b) Digital Signatures)

4. ผู้รับเมื่อได้รับข้อมูลแล้วให้ตรวจสอบข้อมูลที่ได้รับ โดยการนำ Digital Signatures มาถอดรหัสโดยใช้ Public Key ของผู้ส่ง ได้เป็น Message Digest

5. ผู้รับนำข้อมูลต้นฉบับมา Hash (ด้วยอัลกอริทึมเดียวกันกับผู้ที่ส่งใช้ เช่น MD5 หรือ SHA1) ได้เป็น Message Digest อีกอันหนึ่ง

6. นำ Message Digest ทั้งสองมาเปรียบเทียบกัน หากตรงกันก็แสดงว่าข้อมูลต้นฉบับถูกต้องมาจากผู้ส่งจริงและไม่มี การเปลี่ยนแปลงข้อมูลระหว่างทาง

ข้อสังเกต

· สิ่งที่ทำให้มั่นใจได้ว่าข้อมูลถูกส่งมากผู้ส่งจริงคือ การที่ผู้รับสามารถอด Digital Signatures โดยใช้ Public Key ของผู้ส่งได้ แสดงว่าข้อมูลนั้นถูกเข้ารหัสโดยใช้ Private Key ของผู้ส่งจริงซึ่งผู้ที่มี Key นี้มีอยู่คนเดียวเท่านั้นคือผู้ส่ง

· สิ่งที่ทำให้มั่นใจได้ว่าข้อมูลไม่ถูกเปลี่ยนแปลงระหว่างทางคือ การเปรียบเทียบค่า Hash ทั้งสองแล้วพบว่าตรงกัน โดยค่าแฮชตัวหนึ่งมาจากการนำข้อมูลต้นฉบับ ดังนั้นหากทั้งสองค่านี้ตรงกันก็แสดงว่ามาจากข้อมูลเดียวกัน

เราสามารถส่ง Data, Digital Signatures และ Public Key ไปพร้อมกันได้ โดยส่ง Public Key ในรูปแบบของ Certificate (Public Key ที่ถูกรับรองโดย CA แล้ว) นอกจากนั้นการส่ง “ข้อมูลลับ” และลงลายเซ็นดิจิตอล ก็สามารถทำได้เช่นกัน โดยการนำขั้นตอนของ Digital Signatures ทั้ง 6 ขั้นตอนมาปรับโดยการแก้ไขขั้นตอนที่ 3 และ 5 ดังนี้

ขั้นตอนที่ 3 (ปรับใหม่) นำข้อมูลต้นฉบับ (อาจจะมีขนาดใหญ่) ซึ่งเป็น Plain Text มาเข้ารหัสด้วย Public Key ของผู้รับ ให้กลายเป็น Cipher Text จากนั้นจึงส่ง Cipher Text ไปให้ผู้รับ โดยแนบ Digital Signatures ไปด้วย (มีการส่งข้อมูลไปยังผู้รับ 2 ชิ้นคือ (a) ข้อมูลที่เป็น Cipher Text และ (b) Digital Signatures)

ขั้นตอนที่ 5 (ปรับใหม่) ผู้รับนำข้อมูลที่เป็น Cipher Text มาถอดรหัสด้วย Private Key ของตนเองได้เป็นข้อมูลต้นฉบับแบบ Plain Text จากนั้นทำการ Hash (ด้วยอัลกอริทึมเดียวกันกับที่ผู้ส่งใช้ เช่น MD5 หรือ SHA1) ได้เป็น Message Digest อีกอันหนึ่ง

(เมื่อนำขั้นตอนที่ 3 และ 5 ที่ปรับใหม่ไปใช้ร่วมกับข้อที่ 1, 2, 4, 6 เดิมก็จะสามารถส่งข้อมูลลับพร้อมลงลายเซ็นดิจิตอลได้)

หลายคนเข้าใจผิดคิดว่าลายเซ็นดิจิตอลหมายถึงสิ่งต่อไปนี้

· การเซ็นชื่อใส่กระดาษแล้วสแกนเก็บไว้ในรูปภาพแบบดิจิตอล

· การเซ็นชื่อลงบนอุปกรณ์อิเล็กทรอนิคส์เพื่อเก็บลายเซ็นไว้ในรูปแบบดิจิตอล

clip_image038clip_image040

รูปที่ 16 สิ่งที่คนทั่วไปมักจะ “เข้าใจผิด” คิดว่าเป็น Digital Signature

CA (Certificate Authority)

การใช้วิธีการเข้ารหัสแบบอสมมาตร (Asymmetric Key Cryptography) ที่จำเป็นต้องมีการแจกจ่าย Public Key ไปยังผู้ร่วมสื่อสารทุกๆ รายนั้นมีจุดอ่อนจากการโจมตีแบบ MITM : Man In The Middle โดยแฮกเกอร์จะทำตัวเป็นผู้อยู่ตรงกลายของการสื่อสารแล้วรอจังหวะที่ผู้สื่อสารมีการรับส่งและแลกเปลี่ยน Key กัน โดยแฮกเกอร์จะส่ง Public Key ของแฮกเกอร์เองไปยังผู้รับ ดังนั้นแฮกเกอร์จึงสามารถที่จะปลอมแปลงข้อมูลได้โดยใช้ Private Key ของตนเองในการทำ Digital Signatures ทำให้ผู้รับหลงเชื่อคิดว่าข้อมูลนั้นถูกส่งมายังผู้ส่งจริง หรือบางครั้งแฮกเกอร์ก็ปลอมแปลงทั้ง Private Key และ Public Key ตัวอย่างของการโจมตี Asymmetric Key Cryptography โดยใช้วิธี MITM ที่เห็นได้บ่อยคือ การถอดรหัสข้อมูลที่ส่งทาง https (เช่น รหัสผ่านของ hotmail, Gmail และเว็บไซต์ e-commerce อื่นๆ) ด้วยโปรแกรมในชุดของ BackTrack หรือใช้โปรแกรม Cain โดยแฮกเกอร์จะดักรอขั้นตอนการส่ง Public Key ผ่านทาง http เมื่อ Public Key ของเว็บไซต์ (เช่น hotmail) ถูกส่งมาถึงแฮกเกอร์ เขาจะสร้าง Private Key และ Public Key ของตนเองขึ้นมา แล้วส่ง Public Key ไปให้เหยื่อ เมื่อเหยื่อต้องการส่งข้อมูลมายังเว็บไซต์ก็จะเข้ารหัสด้วย Public Key ของเว็บไซต์เพื่อให้เว็บไซต์ถอดได้แต่เพียงผู้เดียว แต่ Public Key นั้นแท้ที่จริงเป็น Public Key ของแฮกเกอร์ จึงทำให้แฮกเกอร์ถอดรหัสได้และได้ข้อมูลที่สำคัญ (เช่น รหัสผ่านหรือ Session Key ของโปรโตคอล https) แฮกเกอร์ที่มี Public Key ของเว็บไซต์อยู่แล้วก็จะเอาข้อมูลนั้นมาดำเนินการเข้ารหัสด้วย Public Key จริงของเว็บไซต์ และส่งให้เว็บเซิร์ฟเวอร์ต่อ เพื่อให้การสื่อสารครบวงจรเพื่อที่เหยื่อได้ไม่รู้สึกถึงความผิดปกติ

เพื่อแก้ปัญหาที่ผู้รับไม่สามารถตรวจสอบได้ว่า Public Key ที่ตนเองได้รับนั้นเป็นของผู้ส่งจริงหรือไม่ จึงได้มีการพัฒนาโครงสร้างพื้นฐานของ Asymmetric Key Cryptography ให้ปลอดภัยขึ้น เรียกว่า Public Key Infrastructure (PKI) โดยกำหนดให้มีหน่วยงานกลางเป็นผู้รับรอง Public Key ของแต่ละคน/เว็บไซต์/เซิร์ฟเวอร์ หน่วยงานกลางดังกล่าวมีชื่อเรียกว่า CA (Certificate Authority) โดย CA จะได้รับการรับรองโดย Root CA อีกครั้งหนึ่ง ผู้รับส่งข้อมูลทุกรายจะต้องมี Public Key ของ Root CA ติดตั้งไว้บนระบบ เช่น บน Windows XP ก็จะมี Public Key ของ Root CA ทุกราย ซึ่งเราสามารถเปิดดู Public Key ของ Root CA ได้โดยใช้ Internet Explorer (เมนู Tools > Internet Options > Content > Certificates > Trusted Root Certification Authority) CA จะนำ Public Key ของผู้ส่ง (หรือผู้ใช้/เว็บไซต์ ที่ขอให้ CA รับรอง) มารับรองด้วย Digital Signatures ของ CA (นำข้อมูลที่สำคัญ เช่น Public Key และชื่อเว็บไซต์ของผู้ส่งมาแฮช แล้วเข้ารหัสด้วย Private Key ของ CA (นำข้อมูลที่สำคัญ เช่น Public Key กลายเป็น Digital Signatures) แล้วนำข้อมูลต้นฉบับ (Public Key และชื่อเว็บไซต์) มาผนวกเข้ากับ Digital Signatures ดังกล่าว กลายเป็นสิ่งที่เรียกว่า Certificate

clip_image042

รูปที่ 17 ลำดับชั้นของ CA (Certificate Authority)

ตัวอย่างเช่น Public Key ของเว็บไซต์ www.google.com ได้รับการรับรองโดย CA ชื่อ Thawte SGC ซึ่ง Thawte SGC ทำการรับรองโดยใช้ Certificate (มี Digital Signatures ที่รับรองโดย CA และมีข้อมูล Public Key และชื่อของเว็บไซต์ www.google.com อยู่ภายใน) ส่วน Thawte SGC ก็ถูกรับรองด้วย Certificate ที่ออกโดย Root CA ชื่อ VeriSign อีกทอดหนึ่งโดยใช้กลไกแบบเดียวกันกับที่ Thawte SGC รับรอง www.google.com

บราวเซอร์สามารถใช้ Public Key ของ VeriSign (Root CA) ที่มีอยู่บน Windows ถอดรหัสทำให้แน่ใจได้ว่า Public Key ของ Thawte SGC เป็นของจริง และมั่นใจได้ว่า Public Key ของ www.google.com เป็นของจริงได้โดยใช้วิธีการในทำนองเดียวกัน

clip_image044clip_image046clip_image048

รูปที่ 18 Certificate ของ www.google.com

การพิสูจน์ทราบตัวตน (Authentication)

การพิสูจน์ทราบตัวตน (หรือเรียกสั้นๆ ว่า การพิสูจน์ตัวตน) คือกระบวนการแสดงหลักฐาน (Identity) และตรวจสอบความถูกต้องของหลักฐานของบุคคลหรือคอมพิวเตอร์ เพื่อให้ทราบว่าบุคคลหรือคอมพิวเตอร์ที่กล่าวอ้างนั้นเป็นตัวจริงหรือไม่ ขั้นตอนของการพิสูจน์ตัวตนแบ่งออกเป็น 2 ขั้นตอน ได้แก่ “การระบุตัวตน” และ “การพิสูจน์ตัวตน”

· การระบุตัวตน (Identification) คือขั้นตอนที่บุคคลหรือคอมพิวเตอร์แสดงหลักฐานว่าตนเองคือใคร เช่น สมชายป้อน username และ password บนหน้าจอล็อกอินของเว็บไซต์ www.hotmail.com หรือตัวอย่างการระบุตัวตนของคอมพิวเตอร์ ได้แก่ เครื่อง Notebook ใช้ค่า MAC Address ของตัวเองเพื่อขอเชื่อมต่อเข้าสู่ Access Point ที่ผู้ดูแลระบบตั้งค่า MAC Address Filtering ไว้

· การพิสูจน์ตัวตน (Authentication) คือขั้นตอนการตรวจสอบหลักฐาน เพื่อพิสูจน์ว่าบุคคลหรือคอมพิวเตอร์ที่แสดงตนเองนั้น (ขอพิสูจน์ตัวตน) เป็นบุคคลหรือคอมพิวเตอร์ที่กล่าวอ้างจริงหรือไม่ เช่น เครื่องเว็บเซิร์ฟเวอร์ของ www.hotmail.com ได้ตรวจสอบว่าผู้ใช้สมชายที่กล่าวอ้างนั้นเป็นตัวจริงหรือไม่ โดยการนำค่า password ที่ส่งมาจากบราวเซอร์ ไปทดสอบหรือเปรียบเทียบกับรหัสผ่านในฐานข้อมูลผู้ใช้ของ hotmail

หลักฐานที่ผู้ใช้นำมากล่าวอ้างที่เกี่ยวกับเรื่องของความปลอดภัยนั้นสามารถจำแนกได้ 2 ชนิด

· Actual identity คือหลักฐานจริงที่สามารถบ่งบอกได้ว่าบุคคลที่กล่าวอ้างนั้นเป็นใคร เช่น ลายนิ้วมือ ใบหน้า DNA และบัตรประจำตัวประชาชน

· Electronic identity คือหลักฐานทางอิเล็กทรอนิคส์ที่สามารถใช้บ่งบอกข้อมูลของบุคคล หรือคอมพิวเตอร์นั้น ซึ่งสามารถใช้ระบุตัวตนของบุคคลหรือคอมพิวเตอร์ได้ในทางอ้อม เช่น username, password ที่ใช้ล็อกอินเข้าสู่เว็บไซต์ ใช้ระบุตัวตนของบุคคลที่เป็นเจ้าของบัญชีผู้ใช้นั้น ส่วนหลักฐานทางอิเล็กทรอนิคส์ที่รับรองคอมพิวเตอร์ก็อย่างเช่น Certificate ทีออกโดย CA เพื่อรับรองตัวตนของเว็บไซต์และเครื่องคอมพิวเตอร์แม่ข่าย

กลไกของการตรวจสอบที่สามารถบ่งชี้ได้ว่าเป็นบุคคลหรือคอมพิวเตอร์ที่กล่าวอ้างนั้นจริงหรือไม่จริงสามารถตรวจสอบได้จาก “สิ่งที่คุณมี” หรือ “สิ่งที่คุณรู้” หรือ “สิ่งที่คุณเป็น” ซึ่งสามารถใช้ 2 อย่าง หรือ ทั้ง 3 อย่าง ประกอบกันได้

· สิ่งที่คุณมี (Possession factor) เช่นกุญแจรถ บัตร ATM บัตรเครดิต Smart Card หมายเลข MAC Address ของคอมพิวเตอร์ หรือ Certificate ที่รับรองโดย CA เป็นต้น

· สิ่งที่คุณรู้ (Knowledge factor) เช่น รหัสผ่าน (password) ที่ใช้ล็อกอินเข้าระบบ ตัวเลขพิน (PIN) เพื่อกดเงินจาก ATM รหัสคีย์ WEO/WPA ของระบบ Wireless LAN เป็นต้น

· สิ่งที่คุณเป็น (Biometric factor) เช่น DNA, ลายนิ้วมือ, เรตินา หรือเสียง เป็นต้น

clip_image050clip_image052

รูปที่ 19 การตรวจสอบด้วยกลไกต่างๆ

กระบวนการพิสูจน์ตัวตนจะนำ 3 สิ่งข้างต้นมาใช้ในการยืนยันหลักฐาน โดยอาจนำมาเพียงอย่างเดียว หรือมากกว่า ทั้งนี้ขึ้นอยู่กับระบบหากระบบที่ออกแบบให้มีการยืนยันหลักฐานโดยใช้เพียงสิ่งเดียวจะทำให้มีข้อจำกัดด้านความปลอดภัย เช่น

· สิ่งที่คุณมี (เช่น บัตร ATM) อาจจะสูญหายหรือถูกขโมยได้

· สิ่งที่คุณรู้ (เช่น รหัสผ่าน) อาจจะถูกดักจับข้อมูล เดา หรือขโมยจากเครื่องคอมพิวเตอร์แม่ข่าย

ดังนั้น หากใช้ “สิ่งที่คุณเป็น” (เช่น ลายนิ้วมือ หรือเรตินา) จึงถือได้ว่าเป็นวิธีที่มีความปลอดภัยสูงที่สุด แต่อย่างไรก็ตามวิธีนี้ก็มีต้นทุนที่ค่อนข้างสูง ทางเลือกอีกอย่างหนึ่งคือการนำสิ่งที่คุณมี มาใช้ร่วมกับสิ่งที่คุณรู้ เช่น ใช้บัตร ATM ร่วมกับ PIN จะสามารถช่วยให้ระดับความปลอดภัยสูงขึ้นโดยใช้ต้นทุนไม่สูงมาก

ประเภทของการพิสูจน์ตัวตน (Authentication Types)

การพิสูจน์ตัวตนโดยใช้รหัสผ่าน (Authentication by Passwords)

รหัสผ่านเป็นวิธีการที่มีความง่ายและใช้กันแพร่หลาย รหัสผ่านควรจำกัดให้เฉพาะผู้ใช้ที่มีสิทธิเท่านั้นที่ทราบ การตั้งรหัสผ่านควรจะตั้งให้มีความยาวที่เหมาะสม (ความยาวตั้งแต่ 8 ตัวอักษรขึ้นไป) และควรจะตั้งให้มีความซับซ้อน เช่น ใช้ตัวอักษรตัวเล็กและตัวใหญ่ผสมกันและควรมีตัวเลขหรืออักขระพิเศษปนอยู่ด้วย เช่น F7xV$dGh9z อย่างไรก็ตามรหัสผ่านสามารถถูกดักจับหรือถูกขโมยได้ เช่น การใช้โปรแกรม Ethereal, Wireshark หรือ Sniffer การเปลี่ยนรหัสผ่านอยู่บ่อยๆ สามารถที่จะบรรเทาปัญหานี้ได้ หรืออาจจะใช้เทคนิค leet มาช่วยในการตั้งรหัสผ่าน leet คือการใช้ตัวเลขหรือตัวอักษรที่มีรูปร่างคล้ายกันมาทดแทนกัน เช่น ใช้ 0 (เลขศูนย์) แทน O (ตัวโอใหญ่) ใช้เลข 1 หรือ I (ตัวไอใหญ่) แทนตัว 1 (แอลเล็ก) และอื่นๆ ตัวอย่างเช่น

PASSWORD à PASSWORD

Nologin à Nologin

Hello World à HeIIo%20World

ซึ่งหากแฮกเกอร์ดักจับได้รหัสผ่านก็ไม่สามารถที่จะนำไปใช้ได้ (หากไม่สังเกตหรือไม่นำไปวิเคราะห์) ผู้เขียนมีเทคนิคอย่างหนึ่งที่ทำให้แฮกเกอร์ไม่สามารถโจมตีด้วยวิธี Brute Force ได้นั่นคือ การตั้งรหัสผ่านโดยใช้ตัวอักษรที่ไม่มีในคีย์บอร์ด หรือตัวอักษรที่ไม่สามารถกดคีย์บอร์ดได้ เช่น ใช้ตัวอักษรที่อยู่บนปุ่ม ~ (ตัวที่อยู่ข้างล่าง) ซึ่งบน Windows เวอร์ชั่นภาษาไทยจะไม่สามารถกดได้เพราะ Windows จะเข้าใจว่าผู้ใช้ต้องการเปลี่ยนภาษา นอกจากตัวอักษรนี้ก็ยังมีตัวอักษรอื่นอีกหลายตัว

การพิสูจน์ตัวตนโดยใช้ PIN (Authentication by PIN)

PIN ย่อมาจาก Personal Identification Number เป็นรหัสลับส่วนบุคคลที่ใช้เป็นรหัสผ่านเพื่อเข้าสู่ระบบ รหัส PIN เป็นที่นิยมใช้อย่างแพร่หลาย เช่น ใช้กับบัตร ATM และใช้กับเครื่องโทรศัพท์มือถือ และ Bluetooth การใช้ PIN มักจะนิยมใช้เป็นตัวเลขความยาวตั้งแต่ 4 ตัวขึ้นไป PIN เป็น “สิ่งที่คุณรู้” ซึ่ง รหัส Pin อาจจะถูกแอบดู หรือรั่วไหลได้โดยวิธีการต่างๆ ดังนั้น จึงมักจะถูกนำไปใช้ร่วมกับ “สิ่งที่คุณมี” เช่น PIN ของบัตร ATM ที่ผู้ใช้จะต้องมีทั้งตัวบัตรและหมายเลข PIN

การพิสูจน์ตัวตนโดยใช้ลักษณะเฉพาะทางชีวภาพ (Authentication by Biometric traits)

ลักษณะทางชีวภาพของแต่ละบุคคลเป็นลักษณะทางภายภาพ จึงไม่สามารถลอกเลียนแบบได้ (เช่น DNA และ Retina) การนำลักษณะทางชีวภาพมาใช้ในการพิสูจน์ตัวตนจะให้ความปลอดภัยสูงที่สุด เช่น การใช้ลายนิ้วมือแทนการตอกบัตร การใช้เสียง และม่านตาเพื่อยืนยันตัวตนก่อนเข้าห้องเซิร์ฟเวอร์ (ดังที่เห็นตัวอย่างในภาพยนตร์เรื่อง Mission Impossible 1996) เป็นต้น

clip_image054

รูปที่ 20 อุปกรณ์ที่ใช้สแกนเรตินา

การพิสูจน์ตัวตนโดยใช้รหัสผ่านเพียงครั้งเดียว (One-Time Password : OTP)

One-Time Password ถูกพัฒนาขึ้นเพื่อลดปัญหาที่เกิดจากการใช้รหัสผ่านเดิมซ้ำๆ OTP จะบังคับให้ผู้ใช้รหัสผ่านใหม่และเปลี่ยนไปเรื่อยทุกครั้ง ด้วยเหตุนี้จึงทำให้ระบบมีความปลอดภัยมากขึ้น ดังตัวอย่างการนำ OTP มาประยุกต์ใช้คือ K-MOBILE BANKING PLUS ของธนาคารกสิกรไทย ดังรูปที่ 21

clip_image056

รูปที่ 21 ตัวอย่างการใช้งาน One-Time password (OTP)

การพิสูจน์ตัวตนโดยการเข้ารหัสและถอดรหัสโดยใช้ Public-key cryptography

ก่อนที่จะส่งข้อมูล หากผู้ส่งเข้ารหัสข้อมูลด้วย Private Key ของผู้ส่ง ผู้ที่รับข้อมูลสามารถถอดรหัสได้โดยใช้ Public Key ของผู้ส่งเท่านั้น (ไม่สามารถที่จะถอดรหัสโดยใช้ Key อื่น) ดังนั้นผู้รับข้อมูลถึงสามารถที่แน่ใจได้ว่าผู้ส่งข้อมูลเป็นตัวจริง (เนื่องจากเป็นเจ้า Private Key) อย่างไรก็ตามถึงแม้วิธีการนี้จะมีความปลอดภัย แต่ก็มีจุดอ่อนคือ ไม่สามารถสร้างความมั่นใจได้ว่า Private Key ของผู้ส่งที่อยู่กับผู้รับนั้นเป็นของจริงหรือไม่ เพราะมันอาจจะเป็น Private Key ของแฮกเกอร์แต่แอบอ้างว่าเป็น Private Key ของผู้ส่งก็ได้ ปัญหานี้สามารถแก้ไขได้โดยเปลี่ยนมาใช้ลายมือชื่อดิจิตอล (Digital Signature) ซึ่ง Public Key ของผู้ส่งจะได้รับการรับรองโดย CA และนอกจากนั้นหากข้อมูลที่ส่งมีขนาดใหญ่มากจะทำให้ระบบทำงานได้ช้า (เนื่องจากไม่มีการแฮชข้อมูล)

การพิสูจน์ตัวตนโดยการใช้ลายมือชื่อดิจิตอล (Digital Signature)

การพิสูจน์ตัวตนโดยการใช้ลายมือชื่อดิจิตอล (Digital Signature) เป็นการนำหลักของระบบการเข้ารหัสแบบอสมมาตร (Asymmetric) มาใช้เพื่อการพิสูจน์ตัวตน และมี CA (Certificate

Authority) รับรอง Public Key ของผู้ส่ง ส่วนฝั่งผู้รับซึ่งเชื่อถือใน CA อยู่แล้ว (มี Public Key ของ CA ใน Trust Root) ก็สามารถที่จะใช้ Public Key ของ CA เพื่อพิสูจน์ว่า Public Key ของผู้ส่งนั้นเป็นของจริงได้ (สามารถถอดรหัสโดยใช้ Public Key ของ CA ได้แสดงว่าถูกเข้ารหัสด้วย Private Key ของ CA ซึ่งก็แสดงว่า Key นั้นคือของจริง) ระบบของลายเซ็นดิจิตอลสามารถแบ่งเป็นขั้นตอนได้ดังนี้

1.เมื่อผู้ใช้ต้องการจะส่งข้อมูลไดยังผู้รับ ข้อมูลจะถูกนำไปผ่านแฮชฟังก์ชั่นเสียก่อนได้เมสเซจไดเจสต์ (Message Digest)

2.ผู้ส่งใช้ Private Key ของตนเองเข้ารหัสเมสเซจไดเจสต์ ซึ่งถือว่าผู้ส่งได้สร้าง “ลายเซ็นดิจิตอล” จากนั้นก็ส่งลายเซ็น ดิจิตอลไปพร้อมกับข้อมูลจริง (ซึ่งข้อมูลจริงอาจจะมีขนาดใหญ่)

3.ผู้รับตรวจสอบว่าข้อมูลถูกส่งมาจากผู้ส่งคนนั้นจริงหรือไม่ โดยการนำข้อมูลมาผ่านแฮชฟังก์ชั่นเพื่อคำนวณหาค่า เมสเซจไดเจสต์ ในขณะเดียวกันก็ถอดรหัสลายมือชื่อดิจิตอลด้วย Public Key ของผู้ส่ง ถ้าสามารถอดรหัสได้อย่าง ถูกต้องและตรงกันกับเมสเซจไดเจสต์ ก็สามารถยืนยันได้ว่าข้อมูลนั้นถูกส่งมาจากผู้ส่งคนนั้นจริง

การพิสูจน์ตัวตนโดยใช้การถาม-ตอบ

การพิสูจน์ตัวตนโดยใช้การถาม-ตอบ มีการใช้งานมาตั้งแต่สมัยโบราณ ตัวอย่างเช่น ในระหว่างการทำสงคราม ทหารที่มีหน้าที่ยืนเฝ้าประตูเมืองจะต้องมีการสอบถามคนแปลกหน้าก่อนที่จะให้ผ่านเข้ามา เพื่อเป็นการพิสูจน์ว่าเป็นคนในเมืองนั้นจริงหรือไม่ เพราะอาจจะเป็นข้าศึกปลอมตัวเข้ามาก็ได้ หรือในกรณีที่เราสนทนาผ่านอินเตอร์เน็ตกับคนที่เรารู้จัก (เช่น สนทนาผ่านทางโปรแกรม MSN) หากเราสงสัยว่าคู่สนทนาเราไม่ใช่ตัวจริง โดยอาจจะมีผู้อื่นแอบเอารหัสผ่านของคนนั้นมาใช้ เราก็สามารถพิสูจน์ได้ว่าเป็นตัวจริงหรือตัวปลอมโดยตั้งคำถามที่ตัวจริงเท่านั้นที่จะรู้คำตอบ หรืออาจจะต้องตั้งคำถามหลายข้อเพื่อให้แน่ใจ เป็นต้น

โปรโตคอลในการพิสูจน์ตัวตน

ในระบบเครือข่ายคอมพิวเตอร์จำเป็นที่จะต้องใช้โปรโตคอลในการพิสูจน์ตัวตน โดยแต่ละโปรโตคอลจะถูกนำมาใช้ในสภาวะแวดล้อมที่ต่างกัน ตัวอย่างของโปรโตคอลในการพิสูจน์ตัวตน ได้แก่

· Secure Socket Layer (SSL) นิยมนำมาใช้กับ e-commerce เช่น HTTPS หรือการรับเมล์ ผ่าน SSL เป็นต้น

· Secure Shell (SSH) นำมาใช้เพื่อทดแทนโปรโตคอลเดิมที่ไม่ปลอดภัย เช่น Telnet

· Internet Security (IPSEC) นำมาใช้เพื่อเพิ่มความปลอดภัยให้กับโปรโตคอล IP เช่น การเชื่อมต่อผ่านทาง VPN

· Kerberos เป็นโปรโตคอลที่ใช้ในการตรวจสอบตัวตนของเครื่องแม่ข่าย ซึ่งใช้งานได้ทั้งบนเครือข่าย Linux และ Windows

แหล่งข้อมูลอ้างอิง

1. http://mail.colonial.net/~abeckwith/S00FB0FF5

2. http://en.wikipedia.org/wiki/MD5

3. http://gdp.globus.org/gt4-tutorial/multiplehtml/ch09s03.html

4. http://www.cacsecurity.com/

5. http://www.tiresias.org9/slides/1intro_lecture.ppt

6. http://www.espionageinfo.com

7. http://en.wikipedia.org/wiki/Playfair_cipher

8. http://en.wikipedia.org/wiki/Caesar_cipher

9. http://202.28.94.51/users/somnuk/itsec/5.ppt

10. http://en.wikipedia.org/wiki/atbash_cipher

11. http://en.wikipedia.org/wiki/Frequency_analysis

12. http://en.wikipedia.org/wiki/One-time_pad

13. http://xys.ccert.edu.cn/reference/crypto/DES-JScript-Example/JS-DES.html

14. http://www.tropsoft.com/strongec/des3.html

15. http://en.wikipedia.org/wiki/Advanced_Encryption_Standard

16. http://www.quadibloc.com/crypto/co040401.html

17. http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf

18. http://www.esat.kuleuven.ac.be

19. http://www.di-mgt.com.au/rsa-alg.html

20. http://md5-hash-online.waraxe.us

21. http://www.financialcryptography.com/mt/archives/000394.html

22. http://www.infosec.sdu.edu.cn/2person_wangxiaoyun.html

23. http://eprint.iacr.org/2005/075

24. http://en.wikipedia.org/wiki/Authentication

25.http://www.redhat.com/courses/rh423_red_hat_enterprise_directory_services_and_authentication/

26. http://www.thaicert.org/paper/authen/authentication_guide.php

27. http://msdn.microsoft.com/en-us/library/aa374735(VS.85).aspx

4 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...

ช่วยถอดรหัสmd5 นี้ให้เป็นรหัส ให้หน่อยนะค่ะ

นี้ค่ะ md5 หนู = 52d7060d9321f07505192b90dd7f9c56

ไม่ระบุชื่อ กล่าวว่า...

ส่งรหัสมาที่เมล monle9999@hotmail.com นะค่ะ ฮอทเมล นะค่ะ

ไม่ระบุชื่อ กล่าวว่า...

2E 6F 58 E0 8A 2E 07 0A 3B CE B9 8F ถอดมาเป็นรหัส 12 หลักให้ทีครับ ส่งมาที่เมลล์ kamikaze_ton@hotmail.com ขอบคุณครับ ถ้าเก่ง

Thawatchai Chomsiri กล่าวว่า...

ลอกมาจากหนังสือของผมทั้งบทเลย (บทที่ 2) ไม่อ้างอิงกันเลยครับ

แสดงความคิดเห็น

My GangZ