Вы находитесь на странице: 1из 204

ความปลอดภัยของขอมูลสําหรับการสื่อสารสื่อประสม

: จากทฤษฎีสูปฏิบัติ

Data Security for Multimedia Communications


: From Theory to Practice

ธํารงรัตน อมรรักษา

ภาควิชาวิศวกรรมคอมพิวเตอร
มหาวิทยาลัยเทคโนโลยีพระจอมเกลาธนบุรี
2551
คํานํา
ในปจจุบนั ความปลอดภัยของขอมูลขาวสารถือเปนเรื่องสําคัญ และมีผลกระทบตอทุกๆ คนทั้งใน
ระดับตัวบุคคล องคกร หรือประเทศ โดยเฉพาะขอมูลที่มีความออนไหวมากๆ เมื่อเกิดการรัว่ ไหลอาจสงผล
กระทบตอผูคนในสังคม เศรษฐกิจ หรือภาพลักษณของประเทศก็เปนได ผูเขียนไดตระหนักถึงความจําเปน
ในเรื่องนี้ จึงไดเปดสอนวิชาทางดานวิทยาการรหัสลับและการประยุกตใชงานขึ้น โดยมีวัตถุประสงคเพื่อ
สรางบุคลากรที่มีความรู ความเขาใจในศาสตรและศิลปของการปกปด ซอนพลางขอมูลชนิดตางๆ โดยเนน
ไปที่ขอมูลสื่อประสม วิชาทีเ่ ปดสอนในสายนี้ไดแบงออกเปน 2 สวนตอกันคือ “บทนําสูวิทยาการรหัสลับ”
(Introduction to Cryptography) และ “ความปลอดภัยของขอมูลสําหรับการสื่อสารสื่อประสม” (Data
Security for Multimedia Communications)
จากประสบการณสอนที่ผานมาของผูเขียนพบวา นักศึกษาสวนใหญจะใชเวลานานในการทําความ
เขาใจทฤษฎีและเนื้อหาของวิชา ซึ่งถานักศึกษาไมเขาใจอยางลึกซึ้งแลวก็จะสงผลตอการนําไปประยุกตใช
งานเพื่อใหมีประสิทธิภาพสูงสุด หรือเพื่อใหเหมาะกับสถานการณมากที่สุด ทั้งนี้จากการพูดคุยและอภิปราย
กับนักศึกษาหลายๆ รุนพบวา นักศึกษาสวนใหญประสบปญหาในเรื่องภาษาอังกฤษอันเนื่องจากหนังสือ
เรียนหรือเอกสารอางอิงตางๆ ทางสาขาวิชานี้สวนมากเปนภาษาอังกฤษทั้งหมด ผูเขียนจึงไดเขียนหนังสือ
เลมนี้ขึ้นมาเพื่อใชประกอบการสอนในวิชา “บทนําสูวิทยาการรหัสลับ” ขางตน โดยมีจุดประสงคหลักคือ
เพื่อชวยใหนักศึกษาไดเขาใจถึงทฤษฎีและแนวคิดตางๆ ทางดานวิทยาการรหัสลับไดอยางรวดเร็วและ
ลึกซึ้งจนเกิดความเชี่ ยวชาญในระดับที่สามารถนําไปประยุกตใชไดจริง นอกจากนี้เมื่อนักศึ กษาเขาใจ
พื้นฐานที่สําคัญเปนอยางดีแลว ก็จะชวยใหเกิดเขาความใจในการเรียนรูเนื้อหาขั้นสูงในวิชา “ความปลอดภัย
ของขอมูลสําหรับการสื่อสารสื่อประสม” ไดรวดเร็วขึ้น
ทายสุดผูเขียนขอขอบพระคุณทุกๆ คนที่ไดใหการสนับสนุนทั้งทางตรงและทางออมจนทําให
หนังสือเลมนี้สําเร็จลุลวง โดยเฉพาะครอบครัวของผูเขียนที่ไดเปนกําลังใจและใหการสนับสนุนผูเขียนใน
ทุกๆ เรื่องตลอดมา หากมีขอผิดพลาดประการใดผูเขียนขอนอมรับไวแตเพียงผูเดียว

ขอขอบพระคุณ
ธํารงรัตน อมรรักษา

ii
สารบัญ
บทที่ 1 บทนําสูวิทยาการรหัสลับ ตอนหนึง่
1.1 เกริ่นนํา 1
1.2 ศัพทเฉพาะทางดานวิทยาการรหัสลับ 4
1.3 พื้นฐานอัลกอริทึมทางดานวิทยาการรหัสลับ 5
1.4 ขอกําหนดทัว่ ไปของระบบการเขารหัสลับ 8
1.5 คําถามทายบท 10

บทที่ 2 บทนําสูวิทยาการรหัสลับ ตอนสอง


2.1 ความแข็งแกรงของระบบและการวิเคราะหรหัสลับ 11
2.2 การประเมินระบบความปลอดภัย 14
2.3 โพรโทคอลทางดานวิทยาการรหัสลับ 15
2.4 คําถามทายบท 25

บทที่ 3 อัลกอริทึมสมมาตร ตอนหนึ่ง


3.1 บทนํา 26
3.2 ตัวแปลงรหัสแบบกระแส 26
3.3 เรจิสเตอรแบบเลื่อนปอนกลับเชิงเสน 29
3.4 ตัวแปลงรหัสแบบกระแสโดยใช LFSR 34
3.5 One-time Pad 37
3.6 คําถามทายบท 39

บทที่ 4 อัลกอริทึมสมมาตร ตอนสอง


4.1 ตัวแปลงรหัสแบบกลุม 40
4.2 ตัวแปลงรหัสยุคดั้งเดิม 40
4.3 คําถามทายบท 49

iii
บทที่ 5 อัลกอริทึมสมมาตร ตอนสาม
5.1 ตัวแปลงรหัสแผนใหม 50
5.2 ตัวแปลงรหัสผลคูณ 50
5.3 ตัวแปลงรหัส Feistel 51
5.4 มาตรฐานการเขารหัสลับขอมูล DES 55
5.5 การเขารหัสลับขอมูล DESX 63
5.6 การเขารหัสลับขอมูลนานาชาติ IDEA 63
5.7 มาตรฐานการเขารหัสลับขั้นสูง AES 69
5.8 คําถามทายบท 80

บทที่ 6 อัลกอริทึมอสมมาตร ตอนหนึ่ง


6.1 บทนํา 81
6.2 ทฤษฎีคํานวณ 81
6.3 ความซับซอนในการแกปญหาเชิงคณิตศาสตร 92
6.4 คําถามทายบท 93

บทที่ 7 อัลกอริทึมอสมมาตร ตอนสอง


7.1 ขอตกลงกุญแจของ Diffie-Hellman 94
7.2 อัลกอริทึม El Gamal 98
7.3 คําถามทายบท 101

บทที่ 8 อัลกอริทึมอสมมาตร ตอนสาม


8.1 อัลกอริทึม RSA 102
8.2 ระบบการเขารหัสลับเสนโคงเชิงวงรี 105
8.3 คําถามทายบท 107

iv
บทที่ 9 ฟงกชนั่ แฮชและลายมือชื่อดิจิทัล
9.1 ฟงกชั่นแฮชทางเดียว 108
9.2 อัลกอริทึม MD5 111
9.3 อัลกอริทึม SHA-1 115
9.4 การโจมตีแบบวันเกิด 117
9.5 คําถามทายบท 121

บทที่ 10 ฟงกชั่นแฮชและลายมือชื่อดิจิทัล
10.1 รหัสพิสูจนตัวจริงของขอความ 122
10.2 ลายมือชื่อดิจทิ ัล 125
10.3 คําถามทายบท 132

บทที่ 11 เทคนิคทางวิทยาการรหัสลับ
11.1 การเลือกใชงานตัวแปลงรหัส 133
11.2 โหมดการทํางานทางวิทยาการรหัสลับ 134
11.3 การเขารหัสลับในระบบสื่อสารขอมูล 144
11.4 การเขารหัสลับในหนวยเก็บขอมูล 146
11.5 การเลือกใชอปุ กรณเขารหัสลับ 149
11.6 การประยุกตใชงานตัวแปลงรหัสแบบกลุม 151
11.7 คําถามทายบท 159

บทที่ 12 วิทยาการรหัสลับประยุกต ตอนหนึ่ง


12.1 การกระจายกุญแจ 160
12.2 ระบบการกระจายกุญแจสมมาตร 160
12.3 โพรโทคอล Kerberos 163
12.4 คําถามทายบท 166

v
บทที่ 13 วิทยาการรหัสลับประยุกต ตอนสอง
13.1 การกระจายกุญแจอสมมาตรและโครงสรางพื้นฐานกุญแจสาธารณะ 167
13.2 การประยุกตใชงานในระบบเครือขายคอมพิวเตอร 169
13.3 โพรโทคอล PGP 170
13.4 คําถามทายบท 173

บทที่ 14 วิทยาการรหัสลับประยุกต ตอนสาม


14.1 ชุดโพรโทคอล IPSec 174
14.2 ชุดโพรโทคอล SSL/TLS 180
14.3 คําถามทายบท 184

บรรณานุกรม 185
ดรรชนีทายเลม 189

vi
สารบัญภาพ
1.1 ปญหาที่เกิดขึน้ ในการรักษาความลับ 2
1.2 ปญหาที่เกิดขึน้ ในการพิสูจนตัวจริง 2
1.3 ปญหาที่เกิดขึน้ ในการตรวจสอบบูรณภาพของขอมูล 3
1.4 การดําเนินการหลักทั้งสามชนิดที่กระทําตอตัวขอมูล 3
1.5 แผนผังการเขาและถอดรหัสลับ 4
1.6 การแบงประเภทอัลกอริทึมที่ใชในวิทยาการรหัสลับ 6
1.7 ขอกําหนดเฉพาะสําหรับการใชงานในดานการรักษาความลับและการพิสูจนตัวจริง 10
2.1 รูปแบบการโจมตีระบบการเขารหัสลับ 13
2.2 ตัวอยางโพรโทคอลสําหรับการซื้อขายสินคา 17
2.3 ชนิดของการโจมตีโพรโทคอล 18
2.4 โพรโทคอลสําหรับการสื่อสารในระบบการเขารหัสลับลูกผสม 22
2.5 การโจมตีแบบคนที่อยูตรงกลาง 23
2.6 โพรโทคอลควบโยง 24
3.1 แผนผังการทํางานของตัวแปลงรหัสแบบกระแสที่ใชเวกเตอรเริ่มตน 28
3.2 เรจิสเตอรแบบเลื่อนและฟงกชันปอนกลับ 29
3.3 เรจิสเตอรแบบเลื่อนปอนกลับเชิงเสน 30
3.4 LFSR ขนาด 4 บิต ที่มีการนําบิตในตําแหนงที่หนึ่งและสามมาทําการออรเฉพาะกัน 30
3.5 ตัวอยางการสราง LFSR ขนาด 64 บิต 33
3.6 LFSR ขนาด 4 บิตแบบ x4 + x + 1 33
3.7 ตัวสรางกระแสบิตแบบเจฟว 35
3.8 วงจรภายในตัวสรางกระแสบิตแบบเจฟว 36
3.9 วงจรภายในตัวสรางกระแสบิตแบบขั้นสลับ 36
4.1 ผลลัพธที่ไดจากการเขารหัสลับแบบซีซาร 41
4.2 ตัวอยางการเขารหัสลับแบบซีซาร 42
4.3 ตัวอยางผลลัพธจากการโจมตีแบบตะลุยที่ K คาตางๆ 43
4.4 ผลลัพธที่ไดจากตัวแปลงรหัสแบบคูณที่ K = 2 44
4.5 ผลลัพธที่ไดจากตัวแปลงรหัสแบบคูณที่ K = 3 44
4.6 ผลลัพธที่ไดจากการเขารหัสลับแบบ Vigenère 46
4.7 การเรียงสับเปลี่ยนตําแหนงภายในกลุมตัวอักษร 48
4.8 ตัวอยางการเขารหัสลับโดยวิธีการเรียงสับเปลี่ยน 48

vii
4.9 ตัวอยางการเขารหัสลับโดยวิธีการยายคอลัมน 49
5.1 เครือขายการแทนที่ (S) และการเรียงสับเปลี่ยน (P) 51
5.2 ขั้นตอนการทํางานของตัวแปลงรหัส Feistel 53
5.3 การเขาและถอดรหัสลับของตัวแปลงรหัส Feistel 54
5.4 ตัวอยางของการแทนที่และการเรียงสับเปลี่ยนตัวอักษร 56
5.5 แผนผังการทํางานของ DES 57
5.6 กระบวนการทีเ่ กิดขึ้นในแตละรอบของการประมวลผลโดยอัลกอริทึม DES 58
5.7 กระบวนการแทนที่โดย S-box จํานวน 8 ตัว 60
5.8 โครงสรางของอัลกอริทึม DESX 63
5.9 โครงสราง MA ที่ใชในอัลกอริทึม IDEA 64
5.10 กระบวนการทีเ่ กิดขึ้นในแตละรอบของการประมวลผลโดยอัลกอริทึม IDEA 65
5.11 การจัดเรียงกลุม บิตนําเขาใหอยูในรูปของสเตท 69
5.12 กระบวนการยอย SubBytes 70
5.13 การแทนที่ S-box ในอัลกอริทึม AES 71
5.14 กระบวนการยอย Shift Rows 71
5.15 กระบวนการยอย MixColumns 72
5.16 ขั้นตอนการเขารหัสลับ AES แสดงโดยรหัสเทียม 73
5.17 กระบวนการขยายกุญแจของ AES แสดงโดยรหัสเทียม 74
5.18 กระบวนการยอย InvShiftRows 77
5.19 การแทนที่ S-box ผกผัน 78
5.20 ขั้นตอนการถอดรหัสลับของ AES แสดงโดยรหัสเทียม 79
6.1 ตัวอยางการบวกเลขในมอดุโล 8 83
6.2 ตัวอยางการคูณเลขในมอดุโล 8 83
7.1 ขั้นตอนการสรางกุญแจรวมกันระหวางผูใชงานสองคน 95
7.2 ขั้นตอนการสรางกุญแจรวมกันระหวางคนสามคน 98
7.3 การเขาและถอดรหัสลับดวยอัลกอริทึม El Gamal 99
8.1 การเขาและถอดรหัสลับดวยอัลกอริทึม RSA 103
9.1 แนวคิดการสรางฟงกชันแฮชทางเดียว 109
9.2 แนวคิดการคํานวณหาคาแฮชโดยใชฟงกชนั แฮชทางเดียว 110
9.3 ขั้นตอนการจัดเตรียมกลุมบิตนําเขาสําหรับอัลกอริทึม MD5 111
9.4 ขั้นตอนการคํานวณหาคาแฮชของอัลกอริทึม MD5 112
9.5 แผนผังการดําเนินการ 1 รอบการทํางานของอัลกอริทึม MD5 113

viii
9.6 แผนผังการดําเนินการ 1 รอบการทํางานของอัลกอริทึม SHA-1 117
10.1 การนําฟงกชนั แฮชทางเดียวมาประยุกตใชเปน MAC 122
10.2 แผนผังการทํางานของอัลกอริทึม HMAC 123
10.3 แผนผังการทํางานของอัลกอริทึม MAC โดยใชตวั แปลงรหัสแบบกระแสเปนหลัก 124
10.4 การประยุกตใชอัลกอริทึม RSA เพื่อสรางลายมือชื่อดิจทิ ัล 127
10.5 การสรางลายมือชื่อดิจิทัลจากคาแฮช 127
10.6 การพิสูจนยนื ยันคาแฮชที่ถกู เซ็น 128
10.7 การเซ็นเอกสารพรอมตราเวลา 131
11.1 การทํางานในโหมด ECB 135
11.2 การทํางานในโหมด CBC 137
11.3 การทํางานในโหมด CFB 138
11.4 การทํางานในโหมด OFB 140
11.5 การเขารหัสลับภาพกราฟก "Test" โดยใชอัลกอริทึม DES ในโหมด ECB
(ก) ภาพตนฉบับ (ข) ภาพทีผ่ านการเขารหัสลับมาแลว 142
11.6 การเขารหัสลับรูปภาพ "Lena" โดยใชอัลกอริทึม DES ในโหมด ECB
(ก) รูปภาพตนฉบับ (ข) รูปภาพที่ผานการเขารหัสลับมาแลว 142
11.7 (ก) ภาพตนฉบับ "Test" (ข) ภาพผลลัพธที่ไดจากการเขารหัสลับดวย DES
ในโหมด CBC (ค) โหมด CFB ขนาด 64 บิต (ง) โหมด OFB ขนาด 64 บิต 143
11.8 การเขารหัสลับที่ชั้นกายภาพ 144
11.9 การเขารหัสลับแบบขั้นปลายถึงขั้นปลาย 145
11.10 การเขาและถอดรหัสลับสองครั้ง 152
11.11 การเขารหัสลับสามครั้งดวยกุญแจสองดอก 154
11.12 การเขารหัสลับสามครั้งดวยกุญแจสามดอกทั้ง 2 แบบ 156
11.13 การเขารหัสลับแบบตอเรียงโดยใช 2 อัลกอริทึม 158
12.1 การทํางานของ KDC ในระบบการกระจายกุญแจสมมาตร 161
12.2 การทํางานของโพรโทคอล Needham-Schroeder 163
12.3 การติดตอสื่อสารระหวางที่เกิดขึ้นในโพรโทคอล Kerberos 164
12.4 ขั้นตอนการทํางานของโพรโทคอล Kerberos 165
13.1 การรองขอกุญแจสาธารณะจาก CA 168
13.2 การรองขอใบรับรองจาก CA 168
13.3 โครงสรางพื้นฐานกุญแจสาธารณะ 169
13.4 กลุมโพรโทคอล TCP/IP เทียบกับแบบจําลองโอเอสไอ 170

ix
13.5 PGP เมื่อเทียบกับการทํางานของกลุมโพรโทคอล TCP/IP 171
13.6 ขั้นตอนการสงอีเมลโดยใชโพรโทคอล PGP 172
13.7 แผนผังการทํางานของ PGP ทางฝงผูสง 173
13.8 แผนผังการทํางานของ PGP ทางฝงผูรับ 173
14.1 IPSec เมื่อเทียบกับการทํางานของกลุมโพรโทคอล TCP/IP 174
14.2 รายละเอียดของ IPSec ในโหมดขนสง 175
14.3 การทํางานของ IPSec ในโหมดขนสง 175
14.4 รายละเอียดของ IPSec ในโหมดอุโมงค 176
14.5 การทํางานของ IPSec ในโหมดอุโมงค 176
14.6 โพรโทคอลยอย AH ในโหมดขนสงของ IPSec 177
14.7 โพรโทคอลยอย ESP ในโหมดขนสงของ IPSec 179
14.8 โพรโทคอลยอย AH และ ESP ในโหมดอุโมงคเทียบกับในโหมดขนสง 180
14.9 SSL เมื่อเทียบกับการทํางานของกลุมโพรโทคอล TCP/IP 181
14.10 โพรโทคอลยอยทั้ง 4 ในชุดโพรโทคอล SSL 181
14.11 ขั้นตอนการทํางานของโพรโทคอลยอย Record ในชุดโพรโทคอล SSL 182

x
บทที่ 1
บทนําสูวิทยาการรหัสลับ ตอนหนึ่ง

1.1 เกริ่นนํา
ในปจจุบันความกาวหนาทางดานเทคโนโลยีการสื่อสาร การรับสง และการจัดเก็บขอมูลในรูปแบบ
อิเล็กทรอนิกส ไดจุดประเด็นทางดานการสื่อสารและสารสนเทศที่นําไปสูขอโตเถียงตางๆ ในสังคมอยาง
มากมาย หนึ่งในนั้นก็คือ เรื่องของภาวะความเปนสวนตัว (Privacy) ของคนในสังคม ทุกวันนี้พวกเราทุกคน
รับรู และตระหนักถึงผลลัพธจากการถูกเปดเผยขอมูลสวนตัวของบุคคลใดบุคคลหนึ่งตอสาธารณชน
โดยเฉพาะขอมูลที่มีความเปนสวนตัวจริงๆ ซึ่งเปนผลมาจากความสามารถในการเขาถึงขอมูลสวนตัว
เหลานั้นจากบุคคลที่ไมประสงคดี ระหวางที่มีการรับสงหรือจัดเก็บขอมูลอยูในหนวยเก็บ (Storage)
สวนตัว เชน ในจานบันทึกแบบแข็ง (Hard disk) เปนตน นอกจากนี้เหตุการณขางตนอาจเกิดขึ้นกับขอมูลที่
ถือเปนความลับ (Secret) ของหนวยงานหรือองคกรใดๆ รวมไปถึงขอมูลทางการคาของบริษัททั่วๆ ไปได
เชนเดียวกัน ซึ่งความเสียหายที่เกิดขึ้นนี้ จะสงผลกระทบโดยตรงตอการดําเนินชีวิต การดําเนินกิจการ
โอกาสทางสังคม โอกาสทางธุรกิจ หรืออาจกระทบไปถึงความมั่นคงขององคกร ตลอดจนความมั่นคงของ
ชาติก็ได
ถึงแมวาหลายๆ ประเทศทั่วโลกไดออกกฎหมายที่ครอบคลุมและรองรับตอการกระทําความผิดที่
เกี่ยวของกับการลวงละเมิดขอมูลสวนตัว หรือขอมูลที่เปนความลับของบุคคล หนวยงาน และองคกรตางๆ
รวมทั้งในอีกหลายๆ ประเทศก็ไดมีการพิจารณาและเตรียมพรอมที่จะประกาศใชกฎหมายในลักษณะ
เดียวกัน แตในทางปฏิบัติแลว เจาของขอมูลควรทําการปกปอง (Protect) ปดบังหรืออําพราง (Conceal)
ขอมูลสวนตัวเหลานั้นดวยตนเองเสียกอน กอนที่จะมีความเสียหายใดๆ เกิดขึ้นอันเนื่องมาจากการกระทํา
ของบุคคลที่ไมประสงคดี การรักษาความปลอดภัยของขอมูล (Data Security) ถือเปนแนวทางหนึ่งที่คน
สวนใหญเลือก เพื่อนํามาใชในการปกปองหรือปดบังขอมูลที่เปนความลับของตนเอง ในปจจุบันเทคนิค
(Technique) และวิธีการ (Method) ตางๆ ไดมีการคิดคนและพัฒนาขึ้นอยางมากมาย เพื่อนํามาใชในการ
รักษาความปลอดภัยของขอมูล
ในโลกยุคดิจิทัล (Digital) ขอมูลสวนใหญมักจัดเก็บอยูในรูปของขอมูลสื่อประสม ที่ประกอบไป
ดวยสื่อขอมูลเดี่ยวหลายๆ ชนิดรวมกัน เชน ขอความ ภาพ กราฟก ภาพเคลื่อนไหว วีดีทัศน เสียง คําพูด
ดนตรี ฯลฯ ซึ่งขอมูลสื่อประสมที่สรางขึ้นสามารถนํามาใชในการนําเสนอ (Present) จัดเก็บ (Store) สง
(Transmit) และประมวลผล (Process) ในรูปของสัญญาณดิจิทัลไดโดยตรง การประชุมทางไกลพรอม
ระบบเสียงและภาพเคลื่อนไหวผานเครือขายอินเทอรเน็ต ถือเปนตัวอยางของการประยุกตใชงานขอมูลสื่อ

1
ประสมแบบหนึ่ง จากคุณลักษณะขางตนของขอมูลสื่อประสม สงผลใหคนจํานวนมากเลือกใชขอมูลชนิดนี้
เพื่อเพิ่มประสิทธิภาพในการติดตอสื่อสารหรือแลกเปลี่ยนขาวสารกับคนอื่นๆ ในสังคม จึงเปนที่มาของคํา
วา การสื่อสารสื่อประสม (Multimedia Communications)
เมื่อมีการประมวลผล จัดเก็บ หรือสงขอมูลที่มีขนาดใหญอยางขอมูลสื่อประสม ความจําเปนในการ
รักษาความปลอดภัยของขอมูลยิ่งเพิ่มสูงขึ้น และมีรูปแบบที่แตกตางกันมากขึ้น ตามชนิดของขอมูลที่นํามา
ประกอบกันเปนขอมูลสื่อประสม ยกตัวอยางเชน การรักษาความลับ (Secrecy) ของขอมูลที่สงไปใหบุคคล
ใดบุคคลหนึ่ง การพิสูจนตัวจริง (Authentication) ของขอมูลที่ไดรับมา การพิสูจนตัวตน (Identity
Verification) ของบุคคลที่สงขอมูลมา บูรณภาพ (Integrity) ของขอมูลที่ไดรับมา การรักษาและปองกัน
ขอมูลที่จัดเก็บอยูในระบบฐานขอมูล และการควบคุมการเขาถึงขอมูล เปนตน ปญหาและความซับซอนใน
ดานการรักษาความปลอดภัยของขอมูลไดเพิ่มขึ้นมาก เมื่อเทคโนโลยีการสื่อสารขอมูลมีการพัฒนาอยาง
รวดเร็ว ฉะนั้นความตองการหรือความจําเปน (Requirement) ในการรักษาความปลอดภัยของขอมูลจึงไม
คงเดิม แตจะเปลี่ยนแปลงไปตามเทคโนโลยีตางๆ ที่มีการพัฒนาและนํามาใชงาน ตัวอยางปญหาที่เกี่ยวของ
กับความปลอดภัยของขอมูลใน 3 ดานหลักๆ คือ ปญหาในการรักษาความลับ ปญหาในการพิสูจนตัวจริง
และปญหาในการตรวจสอบบูรณภาพของขอมูล ดูรูปที่ 1.1-1.3 ประกอบ

รูปที่ 1.1 ปญหาที่เกิดขึ้นในการรักษาความลับ

รูปที่ 1.2 ปญหาที่เกิดขึ้นในการพิสูจนตัวจริง

2
รูปที่ 1.3 ปญหาที่เกิดขึ้นในการตรวจสอบบูรณภาพของขอมูล

โดยการเปรียบเทียบการดําเนินการ (Operation) หลักทั้งสามชนิดที่กระทําตอตัวขอมูล


ประกอบดวย การประมวลผล การจัดเก็บ และการสงขอมูล ดูรูปที่ 1.4 ประกอบ พบวาการรักษาความ
ปลอดภัยในขณะที่ทําการสงขอมูลจะมีความยากลําบากมากที่สุด เนื่องจากการระมัดระวังปองกันสายสงใน
ทุกๆ ตําแหนงขณะที่มีการสงขอมูล แทบจะเปนไปไมไดในทางปฏิบัติ ดังนั้นความปลอดภัยของขอมูลสวน
ใหญจะขึ้นอยูกับเทคนิคและวิธีการที่ใชในการประมวลผลขอมูลเปนหลัก สําหรับความปลอดภัยของขอมูล
ที่จัดเก็บนั้นก็จะขึ้นอยูกับเทคนิคและวิธีการที่ใชในการจัดเก็บเชนเดียวกัน ซึ่งเทคนิคและวิธีการตางๆ ที่ใช
สําหรับรักษาความปลอดภัยของขอมูล สวนใหญจะอยูบนพื้นฐานของวิทยาการรหัสลับ (Cryptography)
จากสิ่งที่กลาวมาทั้งหมด อาจสรุปไดวา เราสามารถนําวิทยาการการเขารหัสลับมาประยุกตใชในการรักษา
ความปลอดภัยของขอมูลสื่อประสมไดอยางมีประสิทธิภาพและเกิดประสิทธิผล

รูปที่ 1.4 การดําเนินการหลักทั้งสามชนิดที่กระทําตอตัวขอมูล

3
1.2 ศัพทเฉพาะทางดานวิทยาการรหัสลับ
วิทยาการรหัสลับหมายถึง ศาสตร (Science) หรือ ศิลป (Art) ที่ใชในการรักษาขอมูลขาวสารให
เปนความลับ ในขณะที่การวิเคราะหรหัสลับ (Cryptanalysis) หมายถึง ศาสตรหรือศิลปที่ใชเพื่อใหไดมาซึ่ง
ขอมูลขาวสารตนฉบับ โดยไมจําเปนตองใชวิธีการถอดรหัสลับที่ถูกตอง ผูที่ทําหนาที่สรางหรือออกแบบ
วิทยาการรหัสลับจะเรียกวา นักสรางรหัสลับ (Cryptographer) ผูที่ทําหนาที่วิเคราะหหาจุดออนเพื่อใชใน
การโจมตีหรือเพื่อใหไดมาซึ่งขอมูลขาวสารตนฉบับจะเรียกวา นักวิเคราะหรหัสลับ (Cryptanalyst)
ในโลกของวิทยาการรหัสลับ เราเรียกขอความ (Message) หรือขอมูล (Data) ใดๆ วา ขอความ
ตนฉบับ (Plaintext) เรียกกระบวนการที่แปลงขอความตนฉบับใหอยูในรูปแบบที่มีการปกปดซอนเรน
เนื้อหา (Content) วา การเขารหัสลับ (Encryption) สําหรับขอความหรือขอมูลที่ผานการเขารหัสลับมาแลว
เรียกวา ขอความรหัส (Ciphertext) และเรียกกระบวนการที่แปลงขอความรหัสใหกลับไปอยูในรูปแบบของ
ขอความตนฉบับวา การถอดรหัสลับ (Decryption) โดยปกติการเขาและถอดรหัสลับจะใชกุญแจ (Key) และ
วิธีการเขารหัส (Coding) ในลักษณะที่วา การถอดรหัสลับจะทําสําเร็จไดดวยกุญแจที่เหมาะสมเทานั้น
แผนผังการเขาและถอดรหัสลับแสดงไวในรูปที่ 1.5

รูปที่ 1.5 แผนผังการเขาและถอดรหัสลับ

โดยทั่วไป เราจะใชตัวยอภาษาอังกฤษ M แทนขอความตนฉบับ ซึ่งอยูในรูปของบิตขอมูลที่เปนตัว


เลขฐานสอง (Binary) มีคาเทากับ 1 หรือ 0 ในทางปฏิบัติขอความตนฉบับอาจมาจากแฟมขอความ แฟมรูปภาพ
แฟมเสียง หรือแฟมขอมูลใดๆ ซึ่งขอมูลเหลานั้นถามีการสรางขึ้นหรือจัดเก็บอยูในรูปแบบดิจิทัล ก็จะสามารถ
นําเสนอในรูปของเลขฐานสองไดเชนเดียวกัน หลังจากที่ผานการเขารหัสลับมาแลว เราจะใชตัวยอ
ภาษาอังกฤษ C แทนขอความรหัส ซึ่งจะอยูในรูปของบิตขอมูลเลขฐานสองที่มีขนาดเทากับหรือใหญกวา
ขอความตนฉบับ เราใชตัวยอภาษาอังกฤษ E และ K แทนฟงกชันและกุญแจที่ใชในการเขารหัสลับ โดย
สามารถเขียนใหอยูในรูปของสมการไดคือ

4
EK(M) = C (1.1)

ตัวยอภาษาอังกฤษ D จะใชแทนฟงกชันการถอดรหัสลับ และเขียนในรูปของสมการไดคือ

DK(C) = M (1.2)

ใหสังเกตวาสมการ DK( EK (M)) = M เปนจริงเมื่อกุญแจที่ใชในการเขาและถอดรหัสลับ K เปนตัว


เดียวกัน

1.3 พื้นฐานอัลกอริทึมทางดานวิทยาการรหัสลับ
โดยปกติเราเรียกอัลกอริทึม (Algorithm) ใดๆ ที่ออกแบบมาสําหรับการเขาและถอดรหัสลับวา ตัว
แปลงรหัส (Cipher) อัลกอริทึมในลักษณะนี้อาจอยูในรูปของฟงกชันทางคณิตศาสตร ซึ่งโดยทั่วๆ ไปจะ
ประกอบดวย ฟงกชันสองฟงกชันที่มีความสัมพันธเกี่ยวเนื่องกันคือ ฟงกชันที่ใชสําหรับการเขารหัสลับ และ
ฟงกชันที่ใชสําหรับการถอดรหัสลับ ในอดีตที่ผานมา มีหลายอัลกอริทึมที่ออกแบบโดยที่ความปลอดภัยของ
ตัวอัลกอริทึมจะขึ้นอยูกับการปกปดวิธีการที่ใชในกระบวนการเขาและถอดรหัสลับ อยางไรก็ตาม ไดมีการ
ยอมรับกันอยางกวางขวางวา อัลกอริทึมเหลานั้นไมมีความปลอดภัยอยางเพียงพอ และไมเหมาะสมที่จะ
นําไปใชงานในทางปฏิบัติ เหตุผลหลักสองขอที่สนับสนุนแนวความคิดนี้คือ
1. ผูใชงานจะไมมีทางรูเลยวา อัลกอริทึมที่พวกเขากําลังใชงานอยู จะมีความปลอดภัย และทนทาน
ตอการโจมตีในทุกๆ รูปแบบที่เปนไปได และที่มีอยูในปจจุบัน
2. ความปลอดภัยของระบบที่ประยุกตใชวิทยาการรหัสลับ ควรจะขึ้นอยูกับความลับของตัวกุญแจ
ไมใชวิธีการที่ใชในกระบวนการเขาและถอดรหัสลับ เพื่อที่วาเมื่อใดก็ตามที่ความปลอดภัยของ
ระบบเกิดการรั่วไหล หรือทําใหมีจุดออน (Compromise) เชน เมื่อกุญแจถูกขโมยไป ผูใชงาน
สามารถแกไขไดโดยเปลี่ยนแตเพียงตัวกุญแจที่ใชในการเขาและถอดรหัสลับเทานั้น ไม
จําเปนตองเปลี่ยนตัวอุปกรณที่ใชในระบบทั้งหมด
จากเหตุผลขางตน อัลกอริทึมทางดานวิทยาการรหัสลับสมัยใหมจะใชกุญแจเปนตัวควบคุม
กระบวนการเขาและถอดรหัสลับ กลาวคือ การถอดรหัสลับขอความรหัส จําเปนตองใชกุญแจที่ออกแบบมา
สําหรับการถอดรหัสลับนั้นๆ โดยเฉพาะ ซึ่งกุญแจที่ใชในการถอดรหัสลับอาจเปนตัวเดียวกันหรือคนละตัวกัน
กับกุญแจที่ใชในการเขารหัสลับก็ได เราจะเรียกอัลกอริทึมที่ใชในการเขาและถอดรหัสลับ รวมไปถึงรูปแบบ
(Pattern) ที่เปนไปไดทั้งหมดของขอความตนฉบับ ขอความรหัส และกุญแจ โดยรวมวา ระบบการเขารหัสลับ
(Cryptosystem)

5
อัลกอริทึมที่ใชในวิทยาการรหัสลับ สามารถแบงออกตามลักษณะของกุญแจที่ใชได 2 แบบคือ
อัลกอริทึมสมมาตร (Symmetric Algorithm) และอัลกอริทึมอสมมาตร (Asymmetric Algorithm) อัลกอริทึม
สมมาตรมักเปนที่รูจักกันโดยทั่วไปในชื่อ อัลกอริทึมสัญนิยม (Conventional Algorithm) ซึ่งมีลักษณะเฉพาะ
คือ กุญแจที่ใชในการเขารหัสลับสามารถนํามาใชในการคํานวณหากุญแจถอดรหัสลับได หรือในทํานองเดียว
แตกลับกัน ในอัลกอริทึมสมมาตรสวนใหญ กุญแจที่ใชในการเขาและถอดรหัสลับมักจะเปนตัวเดียวกัน
ฉะนั้นในทางปฏิบัติ ผูใชงานที่เลือกใชอัลกอริทึมชนิดนี้จําเปนจะตองเห็นชอบรวมกัน (Agree) และยอมรับที่
จะใชกุญแจตัวเดียวกันเสียกอนที่จะมีการติดตอสื่อสารระหวางกันโดยการเขารหัสลับ ถามีผูใชงานเปนกลุม
ทุกคนในกลุมจะตองเห็นชอบรวมกันและยอมรับที่จะใชกุญแจตัวเดียวกันดวย บางครั้งจึงมีคนเรียกอัลกอริทึม
ชนิดนี้วา อัลกอริทึมกุญแจลับ (Secret Key Algorithm) หรืออัลกอริทึมกุญแจเดียว (Single Key Algorithm)
ใหสังเกตวาความปลอดภัยของอัลกอริทึมสมมาตรนี้ จะขึ้นอยูกับตัวกุญแจลับเปนสําคัญ บุคคลใดที่ไดกุญแจ
ลับนี้มา ไมวาจะโดยวิธีการใด สามารถที่จะทําการเขารหัสลับขอความตนฉบับหรือทําการถอดรหัสลับ
ขอความรหัสใดๆ ก็ได ดังนั้นในการใชงานอัลกอริทึมชนิดนี้ ถาตองการใหการสื่อสารขอมูลหรือการจัดเก็บ
ขอมูลยังคงเปนความลับ กุญแจที่ใชจะตองเก็บรักษาเปนความลับเชนเดียวกัน
ตัวอัลกอริทึมสมมาตรยังสามารถแบงยอยออกเปน 2 ชนิดไดคือ อัลกอริทึมที่เขารหัสลับทีละหนึ่งบิต
(Bit) หรือหนึ่งไบต (Byte) เรียกวาอัลกอริทึมแบบกระแส (Stream Algorithm) หรือตัวแปลงรหัสแบบกระแส
(Stream Cipher) และอัลกอริทึมที่เขารหัสลับทีละกลุมบิต (Block) เรียกวาอัลกอริทึมแบบกลุม (Block
Algorithm) หรือตัวแปลงรหัสแบบกลุม (Block Cipher) ในยุคปจจุบันกลุมบิตที่ใชในการเขาและถอดรหัสลับ
มักจะมีขนาด 64 บิต หรือมากกวา ใหสังเกตวาถาขนาดของกลุมบิตที่ใชเทากับ 8 บิต อัลกอริทึมแบบกลุมจะมี
ลักษณะการทํางานเหมือนกับอัลกอริทึมแบบกระแส เชน ในกรณีของการเขารหัสลับทีละอักขระ (Character)

รูปที่ 1.6 การแบงประเภทอัลกอริทึมที่ใชในวิทยาการรหัสลับ

6
สําหรับอัลกอริทึมอสมมาตร มักเปนที่รูจักกันโดยทั่วไปในชื่อ อัลกอริทึมกุญแจสาธารณะ (Public
Key Algorithm) จะมีลักษณะเฉพาะคือ กุญแจที่ใชในการเขารหัสลับจะแตกตางจากกุญแจที่ใชในการ
ถอดรหัสลับ และไมสามารถนํามาใชในการคํานวณหากุญแจถอดรหัสลับได เราเรียกอัลกอริทึมลักษณะนี้วา
กุญแจสาธารณะ (Public Key) เพราะกุญแจที่ใชในการเขารหัสลับสามารถเปดเผยตอสาธารณชนได บุคคลใด
ก็ตามที่ตองการสงขอความรหัสใหเจาของกุญแจ สามารถเขาถึงตัวกุญแจที่ใชเขารหัสลับและใชมันในการ
เขารหัสลับขอความตนฉบับใดๆ ก็ได แตจะมีเพียงเจาของกุญแจที่มีกุญแจถอดรหัสลับที่สัมพันธกันเทานั้น ที่
จะสามารถถอดรหัสลับขอความรหัสที่ไดรับมา ในระบบการเขาและถอดรหัสลับลักษณะนี้ เราเรียกกุญแจ
เขารหัสลับวา กุญแจสาธารณะ และเรียกกุญแจถอดรหัสลับวา กุญแจสวนตัว (Private Key) ในบางครั้งเราอาจ
เขารหัสลับขอความตนฉบับโดยใชกุญแจสวนตัว และถอดรหัสลับขอความรหัสโดยใชกุญแจสาธารณะ ซึ่ง
วิธีการใชงานในลักษณะนี้จะเปนงานประยุกต (Application) ที่เรียกวา ลายมือชื่อดิจิทัล (Digital Signature)
ซึ่งจะกลาวถึงอยางละเอียดในหัวขอตอๆ ไป ใหสังเกตวา เหตุผลหนึ่งที่เราเรียกอัลกอริทึมชนิดนี้วา
อัลกอริทึมอสมมาตร เนื่องมาจากเวลาที่ใชในการเขาและถอดรหัสลับมีความแตกตางกันมาก
ในการออกแบบอัลกอริทึมทางดานวิทยาการรหัสลับสมัยใหม ผูออกแบบหรือนักสรางรหัสลับจะ
ออกแบบใหอัลกอริทึมมีการประมวลผลภายในเครื่องคอมพิวเตอร หรืออุปกรณประเภทฮารดแวรที่สรางขึ้น
เปนพิเศษ โดยปกติอัลกอริทึมสมมาตรจะมีความเร็วในการเขาและถอดรหัสลับสูงกวาอัลกอริทึมอสมมาตร
เนื่องจากขั้นตอนที่ใชในการเขาและถอดรหัสลับแบบสมมาตรมีความซับซอนนอยกวา นอกจากนี้ยังมีความ
เหมาะสมและเขากันได (Compatible) กับอุปกรณประเภทฮารดแวร อยางไรก็ตามในทางปฏิบัติ อัลกอริทึม
ทั้งสองแบบมักมีการนํามาใชรวมกัน โดยอัลกอริทึมอสมมาตรและกุญแจสาธารณะจะใชในการเขารหัสลับ
กุญแจอีกดอกหนึ่งที่สรางขึ้นมาแบบสุม (Randomly Generate) ขณะที่อัลกอริทึมสมมาตรและกุญแจดอก
ดังกลาวจะใชในการเขารหัสลับขอความตนฉบับแทน การนํามาใชงานรวมกันในลักษณะนี้จะเรียกวา ระบบ
การเขารหัสลับลูกผสม (Hybrid Cryptosystem) ตัวอยางของระบบที่มีการเขารหัสลับแบบลูกผสมที่ใชกัน
อยางแพรหลายในปจจุบันคือ โพรโทคอล PGP (Pretty Good Privacy, PGP Protocol)

7
1.4 ขอกําหนดทั่วไปของระบบการเขารหัสลับ
ระบบการเขารหัสลับใดๆ จะตองมีคุณสมบัติเปนไปตามขอกําหนดทั่วไปของระบบการเขารหัสลับ
3 ขอ เพื่อที่จะเปนที่ยอมรับในการนําไปใชงานในทางปฏิบัติ ขอกําหนดเหลานั้นคือ
1. อัลกอริทึมที่ใชในการเขาและถอดรหัสลับตองมีประสิทธิภาพในทุกๆ รูปแบบของกุญแจที่
เปนไปได เชน ถากุญแจที่ใชในการเขาและถอดรหัสลับมีขนาด 8 บิต จํานวนรูปแบบของกุญแจ
ที่เปนไปไดทั้งหมดจะเทากับ 28 หรือ 256 รูปแบบ ในการใชงานอัลกอริทึมในระบบการเขารหัส
ลับ ไมวาจะใชกุญแจรูปแบบใด ระดับความปลอดภัยของขอความรหัสที่ไดจากการใชกุญแจ
รูปแบบนั้นตองคงที่ ไมเปลี่ยนแปลง เมื่อเทียบกับระดับความปลอดภัยของขอความรหัสที่ได
จากการใชกุญแจรูปแบบอื่นๆ
2. ระบบตองมีความงายตอการนําไปใชงาน ขอกําหนดนี้บงชี้ถึงความสามัญ (Simple) ในการ
คํานวณหากุญแจโดยวิธีการแปลงแบบผกผันได (Invertible Transformation) ซึ่งจะมี
ประโยชนเมื่อนํามาใชในกระบวนการถอดรหัสลับ นอกจากนี้ความหมายของขอกําหนดนี้ยัง
ครอบคลุมไปถึงระยะเวลาที่ใชในการเขาและถอดรหัสลับ กลาวคือ อัลกอริทึมที่ใชในการเขา
และถอดรหัสลับ ไมควรมีความซับซอนและใชเวลาในการประมวลผลมากเกินไป เนื่องจาก
ในทางปฏิบัติ ผูใชงานมักทําการเขาและถอดรหัสลับขอมูลในเวลาที่ทําการสงหรือรับขอมูล
นั้นๆ สงผลใหระบบที่มีความซับซอนสูงจะทําใหมีการติดตอสื่อสารแบบเวลาจริง (Real-time
Communication) ไมได
3. ความปลอดภัยของระบบควรขึ้นอยูกับการเปนความลับของกุญแจเทานั้น ไมขึ้นกับการเปน
ความลับของอัลกอริทึมที่ใชในการเขาและถอดรหัสลับ ขอกําหนดนี้บงชี้วา ระบบการเขารหัส
ลับทีดี ไมควรเกิดจุดออน เพียงเพราะวาผูโจมตีรูและเขาใจถึงวิธีการหรืออัลกอริทึมที่ใชในการ
เขาและถอดรหัสลับ
นอกจากนี้ระบบการเขารหัสลับใดๆ จะตองประกอบไปดวยคุณสมบัติเฉพาะสําหรับการนํามา
ประยุกตใชงานในดานการรักษาความลับและการพิสูจนตัวจริง การรักษาความลับในการติดตอสื่อสาร
ระหวางบุคคลสองคนหรือมากกวานั้น หมายความวา นักวิเคราะหรหัสลับไมสามารถที่จะคนหาขอความ
ตนฉบับจากขอความรหัสที่ดักฟงมาได ขอกําหนดเฉพาะสําหรับการใชงานประเภทนี้คือ
1. มันควรเปนไปไมไดในทางคํานวณ ที่นักวิเคราะหรหัสลับจะสามารถคนหากุญแจที่ใชในการ
ถอดรหัสลับ (KD) อยางเปนระบบจากขอความรหัสที่ดักฟงมาได ถึงแมนักวิเคราะหรหัสลับจะรู
ขอความตนฉบับสมนัย (Corresponding) ของขอความรหัสนั้นๆ

8
2. มันควรเปนไปไมไดในทางคํานวณ ที่นักวิเคราะหรหัสลับจะสามารถคนหาขอความตนฉบับ
อยางเปนระบบจากขอความรหัสที่ดักฟงมาได
ขอกําหนดเฉพาะที่ 1 มีไวเพื่อใหแนใจวา นักวิเคราะหรหัสลับไมมีทางคนพบวิธีการที่เปนระบบเพื่อ
ใชคนหากุญแจสําหรับการถอดรหัสลับ นักวิเคราะหรหัสลับอาจใชการเดา (Guess) ในการคนหากุญแจ แต
จะไมถือวาเปนวิธีการคนหาอยางเปนระบบ จากขอกําหนดเฉพาะนี้ นักวิเคราะหรหัสลับจะไมสามารถ
ถอดรหัสลับขอความรหัสใดๆ ที่มีการเขารหัสลับโดยใชกุญแจตัวเดียวกันได ขอกําหนดเฉพาะที่ 2 มีไว
เพื่อใหแนใจวา นักวิเคราะหรหัสลับไมมีทางคนพบวิธีการที่เปนระบบเพื่อใชคนหาขอความตนฉบับโดยไม
ใชกุญแจ ขอกําหนดเฉพาะทั้ง 2 นี้ควรเปนจริงเสมอไมวานักวิเคราะหรหัสลับจะแอบดักฟงขอความรหัสไป
ยาวเทาใดหรือจํานวนมากแคไหนก็ตาม
การพิสูจนตัวจริงในการสื่อสารแลกเปลี่ยนขอมูลนั้น หมายความวา นักวิเคราะหรหัสลับไมสามารถ
ที่จะแทนที่ขอความรหัสที่แทจริง (Genuine) ดวยขอความรหัสที่สรางขึ้นเองโดยที่ไมถูกตรวจพบใน
ภายหลังได ขอกําหนดเฉพาะสําหรับการใชงานประเภทนี้คือ
1. มันควรเปนไปไมไดในทางคํานวณ ที่นักวิเคราะหรหัสลับจะสามารถคนหากุญแจที่ใชในการ
เขารหัสลับ (KE) อยางเปนระบบจากขอความรหัสที่กําหนดให (Given Ciphertext) ถึงแม
นักวิเคราะหรหัสลับจะรูขอความตนฉบับสมนัยของขอความรหัสนั้นๆ
2. มันควรเปนไปไมไดในทางคํานวณ ที่นักวิเคราะหรหัสลับจะสามารถสรางขอความรหัส ซึ่ง
ขอความตนฉบับของมันเปนขอความตนฉบับที่มีความสมเหตุสมผล (Valid Plaintext)
ขอกําหนดเฉพาะที่ 1 มีไวเพื่อใหแนใจวา นักวิเคราะหรหัสลับไมมีทางคนพบวิธีการที่เปนระบบ
เพื่อใชคนหากุญแจสําหรับการเขารหัสลับ ดังนั้นพวกเขาจะไมสามารถเขารหัสลับขอความตนฉบับที่มี
เนื้อหาแตกตางกัน และนําขอความรหัสที่สรางขึ้นใหมนี้ไปแทนที่ขอความรหัสเดิมโดยไมมีใครสามารถ
ตรวจพบได ขอกําหนดเฉพาะที่ 2 มีไวเพื่อใหแนใจวา นักวิเคราะหรหัสลับไมมีทางคนพบวิธีการสราง
ขอความรหัสใดๆ ที่ถอดรหัสลับออกมาแลว จะไดผลลัพธเปนขอความตนฉบับที่มีความหมาย
(Meaningful) ในกรณีนี้ ขอมูลที่มีลักษณะเปนตัวเลขจะไมทนทานตอการโจมตีประเภทการแทนที่ขอความ
รหัส ทั้งนี้เนื่องมาจากคาตัวเลขที่นําไปแทนที่อาจมีความหมายไดทั้งหมด เชน การแทนที่ 20 ดวย 21 หรือ
30 เปนตน ขอกําหนดเฉพาะทั้ง 2 นี้ควรเปนจริงเสมอไมวานักวิเคราะหรหัสลับจะแอบดักฟงขอความรหัส
ไปจํานวนมากแคไหนก็ตาม

9
รูปที่ 1.7 ขอกําหนดเฉพาะสําหรับการใชงานในดานการรักษาความลับและการพิสูจนตัวจริง

จากขอกําหนดที่กลาวไปในขางตน มีวลีสําคัญ 2 วลีที่ควรใหความสนใจ วลีแรกคือ “อยางเปน


ระบบ” (Systematic) จะนํามาใชเพื่อทําใหกรณีของการคาดเดากุญแจที่ใชในการเขาหรือถอดรหัสลับ ไม
จัดอยูในวิธีการคนหากุญแจที่เปนระบบ เนื่องจากวิธีการคาดเดานั้นไมสามารถใชเพื่อนําไปสูการหาจุดออน
ของระบบการเขารหัสลับใดๆ อยางเปนขั้นตอนหรืออยางมีระเบียบแบบแผนได วลีที่สองคือ “เปนไปไมได
ในทางคํานวณ” (Computationally Infeasible) ซึ่งเปนแนวความคิดทางคณิตศาสตร (Mathematic
Concept) ที่เปนรากฐานของทฤษฎีการคํานวณและจํานวน (Computing and Number Theories) ในทาง
ปฏิบัติ “เปนไปไมไดในทางคํานวณ” จะมีความหมายเสมือนวา นักคณิตศาสตรไดพิจารณาแลววา มันเปน
การยากมากๆ ที่จะทํางานชิ้นนั้นใหสําเร็จ ภายในระยะเวลาและทรัพยากรที่จํากัด (อาจใชระยะเวลาเปน
พันๆ ปในการคํานวณดวยเครื่องคํานวณระดับซุปเปอรคอมพิวเตอร)

1.5 คําถามทายบท
1. จงใหคําจํากัดความของคําวา ขอมูลสื่อประสม การที่เราเขาไปชมภาพยนตรในโรงหนัง ภาพยนตรที่เรา
ชมถือเปนขอมูลสื่อประสมหรือไม ถาใชมีสื่อขอมูลชนิดใดบางที่ประกอบรวมกันอยู
2. จงอธิบายวา เหตุใดจึงตองใหความสําคัญตอการรักษาความปลอดภัยในการสื่อสารขอมูลสื่อประสม
3. มีการดําเนินการหลักใดๆ บางที่กระทําตอระบบขอมูล การดําเนินการหลักชนิดไหนที่มีความเสี่ยงตอการ
รักษาความปลอดภัยมากที่สุด เพราะเหตุใด ใหยกตัวอยางมาประกอบคําอธิบายดวย
4. จงอธิบายความแตกตางระหวางอัลกอริทึมสมมาตรและอัลกอริทึมอสมมาตร อัลกอริทึมทั้งสองมีผลกระทบ
ตอการนําไปใชงานกับขอมูลสื่อประสมอยางไร
5. จงอธิบายความแตกตางระหวาง ระบบการเขารหัสลับแบบสมมาตร แบบอสมมาตร และแบบลูกผสม
ระบบการเขารหัสลับลูกผสมมีจุดเดนเหนือกวาระบบการเขารหัสลับอีกสองระบบอยางไร

10
บทที่ 2
บทนําสูวิทยาการรหัสลับ ตอนสอง

2.1 ความแข็งแกรงของระบบและการวิเคราะหรหัสลับ
วัตถุประสงคหลักในการใชงานระบบการเขารหัสลับก็คือ เพื่อปกปดเนื้อหาที่เปนความลับของ
ขอความตนฉบับจากผูลอบฟง (Eavesdropper) หรืออาจเรียกในชื่ออื่นๆ วา ฝายปรปกษ (Adversary) ผูโจมตี
(Attacker) ผูดักจับ (Interceptor) ผูขัดขวาง (Interloper) ผูบุกรุก (Intruder) ฝายตรงขาม (Opponent) หรือศัตรู
(Enemy) โดยปกติเราจะสมมุติใหผูลอบฟงสามารถเขาถึงขอมูลที่สงถึงกันระหวางผูสงและผูรับไดอยาง
สมบูรณ ฉะนั้นผูลอบฟงสามารถนําการวิเคราะหรหัสลับมาใชเพื่อใหไดมาซึ่งความลับที่ซอนอยูในขอความ
รหัส หรือใหไดมาซึ่งกุญแจที่ใชในการถอดรหัสลับได ซึ่งความพยายามที่ใชในการวิเคราะหรหัสลับ หรือการ
ทําใหระบบการเขารหัสลับนั้นมีจุดออน จะเรียกวา การโจมตี (Attack) และผูที่ทําการวิเคราะหรหัสลับหรือ
โจมตีระบบการเขารหัสลับนั้นก็คือนักวิเคราะหรหัสลับนั่นเอง
เมื่อนักวิเคราะหรหัสลับทําการโจมตีระบบการเขารหัสลับระบบใดระบบหนึ่ง สิ่งแรกที่เขาตองทําก็
คือ จะตองพิจารณาถึงความแข็งแกรง (Strength) ของตัวแปลงรหัสที่ใชในระบบ เนื่องจากตัวแปลงรหัสที่
แตกตางกันจะมีระดับความปลอดภัยที่แตกตางกัน ความแข็งแกรงของตัวแปลงรหัสใดๆ จึงขึ้นอยูกับระดับ
ความยากในการทําใหตัวแปลงรหัสนั้นๆ เกิดจุดออน โดยทั่วไประดับความแข็งแกรงของตัวแปลงรหัสใดๆ
สามารถวัดหรือเปรียบเทียบไดงายๆ ในรูปของฟงกชันการทํางาน (Work Function) ซึ่งแปรผันโดยตรงกับ
จํานวนของการดําเนินการ (Operation) ที่จําเปนตองใชในการถอดรหัสลับขอความรหัส ยกตัวอยางเชน ใน
ตัวแปลงรหัสที่ใชกุญแจขนาด 64 บิต จะมีรูปแบบที่เปนไปไดทั้งหมดของกุญแจอยู 264 รูปแบบ ถาเราทํา
การโจมตีตัวแปลงรหัสนี้โดยการลองถอดรหัสลับขอความรหัสดวยกุญแจทุกๆ รูปแบบที่เปนไปไดทีละครั้ง
แลวตรวจสอบขอความตนฉบับผลลัพธที่ไดวามีความหมายหรือไม ฟงกชันการทํางานที่จะนํามาพิจารณาก็
คือ จํานวนของการดําเนินการที่จําเปนตองใชในขั้นตอนการสรางกุญแจ การถอดรหัสลับดวยกุญแจที่สราง
ขึ้น และการตรวจสอบวาขอความผลลัพธที่ไดมีความหมายหรือไม ตามทฤษฎี จํานวนครั้งในการลอง
ถอดรหัสลับจนประสบความสําเร็จโดยเฉลี่ยจะมีคาเปนครึ่งหนึ่งของจํานวนรูปแบบที่เปนไปไดทั้งหมดของ
กุญแจ กลาวคือ ถาใชกุญแจขนาด 64 บิต โดยเฉลี่ยจะตองทดลองการถอดรหัสลับดวยกุญแจในรูปแบบ
ตางๆ กันเปนจํานวน 263 ครั้ง จึงจะพบกุญแจที่ใชในการถอดรหัสลับไดอยางถูกตอง ใหสังเกตวาตัวเลข
จํานวนนี้ไดมาจากการวิเคราะหเชิงสถิติ (Statistical Analysis)

11
จากตัวอยางที่ยกมาขางตน เราอาจวัดหรือเปรียบเทียบความแข็งแกรงของตัวแปลงรหัสใดๆ โดยดูได
จากขนาดของกุญแจที่ใชและความซับซอนในกระบวนการถอดรหัสลับ โดยทั่วไป เราเรียกการโจมตี
ตัวแปลงรหัสโดยการลองถอดรหัสลับดวยกุญแจทุกๆ รูปแบบวา การคนหาอยางละเอียด (Exhaustive
Search) หรือการโจมตีแบบตะลุย (Brute-force Attack) ในทางปฏิบัติ ถาเลือกใชการโจมตีในลักษณะนี้
ฟงกชันการทํางานที่จําเปนตองใชในการถอดรหัสลับจะมีคาเพิ่มมากขึ้นเปนแบบเลขชี้กําลัง (Exponentially
Increase) เมื่อเทียบกับขนาดที่ใหญขึ้นของตัวกุญแจ ฟงกชันการทํางานที่แสดงในรูปของระยะเวลาเฉลี่ยที่
ตองใชในการโจมตีแบบตะลุยที่กุญแจขนาดตางๆ กันไดแสดงไวเปนตัวอยางในตารางที่ 2.1 โดยในการ
คํานวณ เราจะสมมุติวา อุปกรณที่ใชในการโจมตีแบบตะลุยมีความสามารถในการถอดรหัสลับขอความรหัส
ที่ความเร็ว 100 ลานครั้งตอวินาที (108 decryptions / sec.)

ตารางที่ 2.1 ระยะเวลาเฉลี่ยที่ใชในการโจมตีแบบตะลุยที่กุญแจขนาดตางๆ

ขนาดกุญแจ รูปแบบที่เปนไปได เวลาเฉลี่ยที่ใชจนพบ


(บิต) ทั้งหมดของกุญแจ กุญแจที่ถูกตอง
16 216 = 65,536 0.3 มิลลิวินาที
32 232 = 4.3 × 109 21.5 วินาที
64 264 = 1.9 × 1019 2,925 ป
128 2128 = 3.4 × 1038 5.4 × 1022 ป
256 2256 = 1.2 × 1077 1.8 × 1061 ป

นอกจากการโจมตีแบบตะลุยแลว นักวิเคราะหรหัสลับอาจโจมตีระบบการเขารหัสลับดวยวิธีการ
วิเคราะหรหัสลับ ซึ่งในบางครั้งจะมีประสิทธิภาพสูงกวาการโจมตีแบบตะลุย โดยปกติการวิเคราะหรหัสลับ
สามารถแบงออกกวางๆ ได 4 รูปแบบ และทั้ง 4 รูปแบบนี้เราจะสมมุติใหนักวิเคราะหรหัสลับรูและเขาใจถึง
ขั้นตอนและวิธีการที่ใชในการเขาและถอดรหัสลับของตัวแปลงรหัส ฉะนั้นนักวิเคราะหรหัสลับจะสามารถ
โจมตีระบบโดยมุงเปาไปที่การวิเคราะหขอมูลที่ดักจับมาได ในระหวางที่ผูใชงานทั้งสองคน (หรือมากกวา)
กําลังติดตอสื่อสารเพื่อแลกเปลี่ยนขอมูลกันอยู รายละเอียดการโจมตีดวยการวิเคราะหรหัสลับทั้ง 4 มีดังนี้
1. การโจมตีขอความรหัสเทานั้น (Ciphertext-only Attack) ในการโจมตีประเภทนี้ ผูโจมตีสามารถ
เขาถึงขอความรหัสที่เกิดจากขอความตนฉบับหลายๆ ขอความได โดยทุกๆ ขอความตนฉบับจะมา
จากการเขารหัสลับโดยใชอัลกอริทึมตัวเดียวกัน สิ่งที่ผูโจมตีตองการจากการโจมตีประเภทนี้ก็คือ
ปริมาณการกูคืน (Recover) ขอความตนฉบับจากขอความรหัสที่มากที่สุด หรือการคนหาเพื่อให
ไดมาซึ่งกุญแจที่ใชในการถอดรหัสลับ

12
2. การโจมตีที่รูขอความตนฉบับ (Known Plaintext Attack) ในการโจมตีประเภทนี้ ผูโจมตีไมเพียงแต
สามารถเขาถึงขอความรหัสที่เกิดจากขอความตนฉบับหลายๆ ขอความได แตยังสามารถเขาถึง
ขอความตนฉบับเหลานั้นไดอีกดวย สิ่งที่ผูโจมตีตองการจากการโจมตีประเภทนี้ก็คือ การคนหา
เพื่อใหไดมาซึ่งกุญแจที่ใชในการถอดรหัสลับ หรืออัลกอริทึมตัวใหมที่ใชในการถอดรหัสลับจาก
ขอความรหัสที่ผานการเขารหัสลับดวยกุญแจตัวเดียวกัน
3. การโจมตีขอความตนฉบับแบบเลือกได (Chosen Plaintext Attack) ในการโจมตีประเภทนี้ ผูโจมตี
ไมเพียงแตสามารถเขาถึงขอความตนฉบับและขอความรหัสสมนัยหลายๆ ขอความได แตยังสามารถ
เลือกขอความตนฉบับในรูปแบบที่กําหนด เพื่อใชในการเขารหัสลับไดอีกดวย สิ่งที่ผูโจมตีตองการ
จากการโจมตีประเภทนี้ก็คือ การคนหาเพื่อใหไดมาซึ่งกุญแจที่ใชในการถอดรหัสลับ หรืออัลกอริทึม
ที่ใชในการถอดรหัสลับจากขอความรหัสที่ผานการเขารหัสลับดวยกุญแจตัวเดียวกัน
4. การโจมตีขอความรหัสแบบเลือกได (Chosen Ciphertext Attack) ในการโจมตีประเภทนี้ ผูโจมตี
สามารถเลือกขอความรหัสใดๆ เพื่อใชในการถอดรหัสลับ และยังสามารถเขาถึงขอความตนฉบับสม
นัยภายหลังการถอดรหัสลับนั้นๆ ได สิ่งที่ผูโจมตีตองการจากการโจมตีประเภทนี้ก็คือ การคนหา
เพื่อใหไดมาซึ่งกุญแจที่ใชในการถอดรหัสลับ การโจมตีประเภทนี้มีประสิทธิภาพสูง และมักนํามาใช
โจมตีอัลกอริทึมกุญแจสาธารณะเปนสวนใหญ

รูปที่ 2.1 รูปแบบการโจมตีระบบการเขารหัสลับ

การโจมตีที่กลาวมาทั้ง 4 รูปแบบนี้ อาจมีการปรับเปลี่ยนแกไขรายละเอียดในบางจุดเพื่อเพิ่ม


ประสิทธิภาพตอการวิเคราะหรหัสลับได ยกตัวอยางเชน การโจมตีที่เลือกขอความตนฉบับแบบปรับตัวได
(Adaptive Chosen Plaintext Attack) จะมีวิธีการโจมตีเหมือนกับการโจมตีขอความตนฉบับแบบเลือกได
เพียงแตผูโจมตีจะสามารถเลือกและดัดแปลงขอความตนฉบับตามที่ตองการโดยอาศัยขอมูลจากการเขารหัสลับ
ครั้งกอนหนานี้ได ใหสังเกตวาความซับซอนของการโจมตีโดยการวิเคราะหรหัสลับจะขึ้นอยูกับ 3 ปจจัยหลัก
คือ ปริมาณของขอมูลที่จําเปนตองใชในการวิเคราะหรหัสลับ เวลาที่ใชในการวิเคราะหรหัสลับ หรือที่รูจักกัน
ในชื่อ ปจจัยการทํางาน (Work Factor) และปริมาณของหนวยความจําที่ใชในการวิเคราะหรหัสลับ

13
2.2 การประเมินระบบความปลอดภัย
ความปลอดภัย (Security) มีคุณลักษณะที่ซับซอนและมีความยากลําบากในการออกแบบใหมีความ
เหมาะสมกับการใชงานเฉพาะใดๆ การออกแบบระบบความปลอดภัยระบบใดระบบหนึ่งนั้น หมายถึง การ
วิเคราะหปญหาตางๆ ที่มาจากการโจมตี (Attack) ระบบทั้งหมดเทาที่เปนไปได โดยที่ผูออกแบบระบบและ
ฝายตรงขามตางก็คิดถึงกลยุทธ (Strategy) ที่ตนเองจะใชในการปองกันระบบและโจมตีระบบอยางเปน
อิสระตอกัน เนื่องจากวิธีการตางๆ ที่ใชในการโจมตีระบบทุกวันนี้มีมากมาย ทําใหการปองกันระบบเริ่มมี
ความยากลําบากมากขึ้นเรื่อยๆ ฉะนั้นในการออกแบบระบบความปลอดภัยในทางปฏิบัติ ผูออกแบบจะตอง
คํานึงถึงสิ่งคุกคาม (Threat) ทุกรูปแบบที่เปนไปไดที่อาจมีตอระบบ ถึงแมมันจะยากที่จะลวงรู หรือ
จินตนาการถึงสิ่งคุกคามทั้งหมดเทาที่มีในปจจุบัน แตผูออกแบบระบบก็สามารถคาดเดาถึงแรงกระตุนหรือ
ความตั้งใจที่จะนําไปสูการโจมตีระบบจากฝายตรงขามได ยกตัวอยางเชน ขอมูลขาวสารที่มีการลักลอบ
ขโมยออกไปจากระบบจัดเก็บขอมูลสามารถนําไปใชในการขมขู เรียกรองสิ่งใดสิ่งหนึ่งจากตัวเจาของขอมูล
หรือเพื่อใหเกิดขอไดเปรียบในเชิงธุรกิจ เปนตน
โดยทั่วๆ ไป ผูออกแบบระบบจะตัดสินวาระบบใดระบบหนึ่งมีความปลอดภัย ถาพวกเขาไม
สามารถคิดคนวิธีการใดๆ ที่จะใชโจมตีระบบนั้นๆ ใหประสบความสําเร็จได วิธีการคิดแบบนี้จะสงผลดีตอ
ผูโจมตี เนื่องจากผูออกแบบระบบอาจพลาดพลั้ง หรือลืมนึกถึงวิธีการโจมตีที่เปนไปไดแบบใดแบบหนึ่ง
ฉะนั้นความคิดที่ใชในการตรวจสอบหรือประเมินระบบความปลอดภัยที่ดี ไมควรวางอยูบนพื้นฐานที่เปน
แนวคิดของผูออกแบบระบบเพียงอยางเดียว ถึงแมผูออกแบบระบบเหลานั้นจะคิดและมั่นใจวา ไดมีการ
พิจารณาถึงสิ่งคุกคามที่มีตอระบบในทุกๆ รูปแบบอยางครอบคลุมแลวก็ตาม บางครั้งผูออกแบบระบบอาจมี
เหตุผลทางทฤษฎีที่ดี ที่จะเชื่อวาระบบที่พวกเขาออกแบบมีความปลอดภัย แตอยางไรก็ตาม สิ่งที่มีความ
จําเปนหลังจากนั้นก็คือ การคิดแบบกลับขาง (Lateral Thinking) ซึ่งจะทําใหผูออกแบบระบบเกิดคําถาม
หรือขอสงสัยจากขอสมมุติ (Assumption) ที่ตนเองไดตั้งเอาไวในตอนแรก และจะนําไปสูการเขาถึง
(Approach) ซึ่งคําตอบของคําถามหรือขอสงสัยที่แตกตางกันออกไป นอกจากนี้ในการออกแบบระบบ
ผูออกแบบอาจมุงความสนใจไปที่บางสวนของระบบ และลืมสวนอื่นๆ ที่เหลือไปกอน ทั้งนี้เพื่อทําใหการ
ออกแบบระบบเฉพาะสวนนั้นมีความซับซอนนอยลง ในทางปฏิบัติถือเปนเรื่องปกติที่ระบบรักษาความ
ปลอดภัยใดๆ จะมีความซับซอนมาก จนมีแตเพียงผูที่ใชงานระบบนั้นเทานั้นที่จะเขาใจถึงรายละเอียดตางๆ
ของระบบอยางแทจริง
ในสวนของการประยุกตใชงานอัลกอริทึมทางดานวิทยาการรหัสลับ (Cryptographic Algorithm)
แมวาในปจจุบันจะมีการเผยแผอัลกอริทึมตางๆ มากมายสูสาธารณะชน ซึ่งหลายๆ อัลกอริทึมก็ไดรับการ
ยอมรับอยางกวางขวางวามีความปลอดภัย เชน อัลกอริทึม RSA ที่ใชกุญแจเขารหัสลับขนาด 1024 บิต แต
ระดับความปลอดภัยของอัลกอริทึมนี้ก็ไมไดมีการรับประกันตลอดไป ทั้งนี้เนื่องมาจากการพัฒนาอยาง
รวดเร็วของเทคโนโลยีประมวลผลขอมูล ซึ่งนําไปสูสิ่งคุกคามใหมๆที่หลากหลายและมีประสิทธิภาพตอ

14
ระบบความปลอดภัย ยกตัวอยางเชน ความเร็วในการประมวลผลของหนวยประมวลผลกลางหรือซีพียู
(Central Processing Unit, CPU) ที่ใชงานกันอยูทุกวันนี้ สามารถทําใหอัลกอริทึม DES ที่ใชกุญแจ
เขารหัสลับขนาด 56 บิตไมมีความปลอดภัยจากการโจมตีแบบตะลุยได ฉะนั้นในการประยุกตใชงานตางๆ
ที่ยกมาเปนตัวอยางในหนังสือเลมนี้จะเลือกใชอัลกอริทึมที่มีลักษณะเฉพาะทาง และทําการสมมุติวา
อัลกอริทึมเหลานั้นมีระดับความปลอดภัยอยางเพียงพอตอการโจมตีที่เปนไปไดทั้งหมด อยางนอยก็ใน
ชวงเวลาที่เขียนหนังสือเลมนี้อยู อยางไรก็ตามในอนาคต ถาอัลกอริทึมที่เลือกใชเปนตัวอยางในหนังสือเลม
นี้เกิดมีจุดออนขึ้น อัลกอริทึมทางดานวิทยาการรหัสลับแบบอื่นๆ ในขอสมมุติฐานเดียวกันสามารถนํามาใช
งานแทนกันได
สิ่งสําคัญสิ่งหนึ่งที่ควรจดจําไวเมื่อทําการออกแบบระบบความปลอดภัยก็คือ ไมมีระบบจัดเก็บ
ขอมูลใดๆ ที่จะมีความปลอดภัยอยางแทจริง เวนแตจะทําการปองกันการเขาถึงทางดานกายภาพ (Physical
Protection) ในบางสวนของระบบจัดเก็บขอมูลนั้นๆ นอกจากนี้ ในการประมวลผลขอมูล ขอมูลที่กําลัง
ประมวลผลมักอยูในรูปของขอมูลที่ไมมีการเขารหัสลับ ฉะนั้นตัวประมวลผลขอมูลจึงควรมีการปองกันจาก
การเขาถึงโดยผูไมประสงคดีเชนเดียวกัน ในระบบจัดเก็บขอมูลหลายๆ ระบบที่มีการใชงานกันอยูใน
ปจจุบัน ความปลอดภัยของระบบมักจะขึ้นอยูกับวัสดุหอหุมที่มีความทนทานทางกายภาพ วัสดุหอหุมนี้จะ
ออกแบบมาในลักษณะที่วา ความลับที่เก็บซอนไวภายในจะถูกทําลายเมื่อมีความพยายามที่จะแกะวัสดุ
หอหุมนี้ออก วัสดุหอหุม หรือมอดูล (Module) ของระบบจัดเก็บขอมูลใดๆ ที่มีลักษณะการทํางานเชนนี้จะ
เรียกวา มอดูลที่ตานทานตอการทําลาย (Tamper-resistant Module) ใหสังเกตวา เพื่อใหการออกแบบ
ระบบจัดเก็บขอมูลมีความปลอดภัยอยางเพียงพอในทางปฏิบัติ บางครั้งเราไมสามารถหลีกเลี่ยงการ
ประยุกตใชงานมอดูลที่ตานทานตอการทําลายไดเลย

2.3 โพรโทคอลทางดานวิทยาการรหัสลับ
โพรโทคอล (Protocol) ก็คือ ขั้นตอนการทํางานที่เปนอนุกรม (Series) ระหวางอุปกรณสองตัวหรือ
บุคคลสองคนเปนอยางนอย ซึ่งออกแบบมาเพื่อทําภารกิจ (Task) ที่กําหนดไวใหสําเร็จ “ขั้นตอนที่เปนอนุกรม”
หมายถึง โพรโตคอลจะตองมีลําดับการทํางานอยางเปนขั้นตอนที่แนชัดตั้งแตเริ่มตนจนถึงสิ้นสุด ไมมีการ
ทํางานที่ขามขั้นตอนเกิดขึ้น “ระหวางอุปกรณสองตัวหรือบุคคลสองคนเปนอยางนอย” หมายถึง โพรโทคอล
จะตองประกอบดวยอุปกรณหรือบุคคลที่อยูแตละฝายอยางนอย 2 ฝาย อุปกรณใดอุปกรณหนึ่งหรือบุคคลใด
บุคคลหนึ่งที่ทํางานตามลําดับอยางเปนขั้นเปนตอน จนทําใหภารกิจใดๆ ประสบผลสําเร็จโดยลําพัง จะไมถือวา
เปนโพรโทคอล “ออกแบบมาเพื่อทําภารกิจที่กําหนดไวใหสําเร็จ” หมายถึง โพรโทคอลจะทําใหภารกิจใดภารกิจ
หนึ่งสําเร็จ ใหสังเกตวา ลําดับการทํางานที่เปนขั้นตอนเหมือนโพรโทคอล แตไมสามารถทําใหภารกิจใดๆ ที่
กําหนดสําเร็จ จะไมถือวาเปนโพรโทคอล

15
โดยปกติ กอนดําเนินการตามโพรโทคอลใดๆ ทุกๆ ฝายที่เกี่ยวของกับโพรโทคอลนั้นๆ ตองรับรูและ
ยอมรับที่จะใชโพรโทคอล รวมถึงการยอมรับที่จะดําเนินการตามลําดับขั้นตอนทั้งหมดที่เกิดขึ้นในโพรโทคอล
นั้นๆ เปนการลวงหนากอน นอกจากนี้ทุกๆ ฝายที่เกี่ยวของจะตองดําเนินการตามลําดับการทํางานของโพรโท
คอลอยางถูกตองดวย ซึ่งกระบวนการทํางานที่กําหนดขึ้นในโพรโทคอลตองไมมีความกํากวม (Unambiguous)
มีการนิยามไวอยางชัดเจน ไมทําใหฝายหนึ่งฝายใดเกิดการเขาใจผิด
โพรโทคอลทางดานวิทยาการรหัสลับ (Cryptographic Protocol) หมายถึง โพรโทคอลที่ใชวิทยาการ
รหัสลับนั่นเอง บุคคลที่เกี่ยวของกับโพรโทคอลประเภทนี้อาจเปนมิตรตอกัน มีความไววางใจซึ่งกันและกัน
หรืออาจเปนศัตรูที่ไมไวใจซึ่งกันและกันเลยก็ได ภารกิจของโพรโทคอลประเภทนี้มักจะเปนภารกิจเฉพาะที่
สําคัญนอกเหนือไปจากการรักษาความลับของขอความตนฉบับ บุคคลที่จําเปนตองใชโพรโทคอลประเภทนี้
อาจตองการใชความลับที่แตละฝายมีรวมกันนํามาคํานวณคาตัวเลขรวมใดๆ เพื่อทําการสรางลําดับสุมรวมใดๆ
หรืออาจตองการทําใหอีกฝายหนึ่งเชื่อวาบุคคลที่ตนเองกําลังติดตออยูเปนบุคคลที่ไดอางถึงจริงๆ อาจกลาว
โดยสรุปไดวา ประเด็นสําคัญที่มีการนําวิทยาการรหัสลับมาใชในโพรโทคอลก็คือ เพื่อปองกันหรือเพื่อ
ตรวจจับการลอบฟงและการฉอโกง (Cheating) ใดๆ ที่อาจเกิดขึ้นในระหวางที่อุปกรณหรือบุคคลแตละฝาย
ดําเนินการตามโพรโทคอล ในตัวอยางของการนําโพรโทคอลมาประยุกตใชงาน ในหนังสือเลมนี้จะสมมุติให
นายดํากับนายแดงคือ บุคคลทั้งสองฝายที่จะดําเนินการตามโพรโทคอล ในกรณีที่โพรโทคอลตองการบุคคล
ฝายที่สามและสี่ จะใชนายเขียวและนายเหลืองแทนตามลําดับ นายขาว คือบุคคลที่แอบลอบฟงการสื่อสาร
ระหวางนายดําและนายแดง และพยายามที่จะทําการฉอโกงฝายใดฝายหนึ่งหรือทั้งสองฝาย ผูตัดสิน
(Arbitrator) คือบุคคลที่ไมมีสวนไดสวนเสีย (Disinterested) และบุคคลทุกฝายที่เกี่ยวของกับโพรโทคอล
ไววางใจ คําวา “ไววางใจ” ในที่นี้ หมายถึง บุคคลที่เกี่ยวของกับโพรโทคอลทุกคนยอมรับวาสิ่งที่ผูตัดสินพูด
เปนความจริง สิ่งที่ผูตัดสินทําเปนสิ่งที่ถูกตอง และผูตัดสินจะดําเนินการตามหนาที่ที่กําหนดไวในโพรโทคอล
ใหสําเร็จ การนําผูตัดสินมาใชจะชวยใหการดําเนินการตามโพรโทคอลระหวางอุปกรณหรือบุคคล 2 ฝายที่ไม
ไวใจ (Distrustful) ซึ่งกันและกันประสบความสําเร็จไดโดยงาย ในทางปฏิบัติผูตัดสินดําเนินการธุรกรรมใดๆ
อาจจะเปนธนาคารก็ได ยกตัวอยางเชน เมื่อนายดําตองการซื้อสินคาชิ้นหนึ่งจากนายแดงผานทางเครือขาย
อินเทอรเน็ต นายดําอาจไมไวใจที่จะสงเงินใหนายแดงทางอินเทอรเน็ตกอน ในขณะที่นายแดงก็ไมไวใจที่จะ
สงสินคาใหกับนายดํากอนเชนกัน ทั้งนายดําและนายแดงตางไมไวใจซึ่งกันและกัน จึงใหธนาคารทําหนาที่
เปนผูตัดสิน ในกรณีนี้นายดํา นายแดงและธนาคาร อาจดําเนินการตามโพรโทคอลดังตอไปนี้ เพื่อทําการซื้อ
ขายสินคาผานทางเครือขายอินเทอรเน็ต
1. นายดํา (User A) สงเงินใหกับธนาคาร (Arbitrator) ในรูปของบัตรเครดิตหรือเช็ค
2. นายแดง (User B) สงสินคาใหกับธนาคาร
3. เมื่อธนาคารตรวจสอบแลววา เงินที่นายดําสงมาถูกตองและสินคาที่นายแดงสงมาอยูในสภาพดีใช
งานได ธนาคารจึงสงเงินใหนายแดง และสงสินคาใหกับนายดํา กรณีที่มีสิ่งใดสิ่งหนึ่งไมเรียบรอย

16
เชน เช็คที่สั่งจายไมผาน หรือสินคาที่สงมาจากนายแดงมีตําหนิ ธนาคารก็จะคืนเงินใหกับนายดํา
และคืนสินคาใหกับนายแดง

รูปที่ 2.2 ตัวอยางโพรโทคอลสําหรับการซื้อขายสินคา

จะเห็นไดวาในโพรโทคอลนี้ นายดําไวใจที่จะสงเงินใหกับธนาคารกอน ขณะที่นายแดงก็ไวใจที่จะสง


สินคาใหกับธนาคารกอน ทั้งคูตางไวใจธนาคารในฐานะผูตัดสิน ตัวธนาคารเองก็ทําหนาที่ที่กําหนดไวในโพร
โทคอล โดยในทางปฏิบัติธนาคารอาจคิดคาดําเนินการจากฝายหนึ่งฝายใดหรือทั้งสองฝายเปนคาตอบแทน
โพรโทคอลทางดานวิทยาการรหัสลับ อาจไมจําเปนตองใชผูตัดสินในการดําเนินการก็ได โพรโทคอล
ในลักษณะนี้จะเรียกวา โพรโทคอลที่มีการบังคับใชดวยตัวเอง (Self-enforcing Protocol) ซึ่งถือวาเปนโพรโท
คอลที่ดีที่สุด เนื่องจากตัวโพรโทคอลไดรับการออกแบบมาในลักษณะที่วาทุกฝายที่เกี่ยวของไมสามารถ
ฉอโกงฝายใดฝายหนึ่งได ในกรณีที่ฝายใดฝายหนึ่งพยายามที่จะฉอโกง ฝายอื่นๆ ที่เหลือจะสามารถตรวจสอบ
การฉอโกงนั้นไดทันที และโพรโทคอลก็จะหยุดการทํางาน อยางไรก็ตามใหสังเกตวา ในทางปฏิบัติเราไม
สามารถสรางโพรโทคอลที่มีการบังคับใชดวยตัวเองไดในทุกๆ สถานการณ

2.3.1 การโจมตีโพรโทคอล
การโจมตีทางดานวิทยาการรหัสลับใดๆ สามารถนํามาใชโจมตีอัลกอริทึมทางดานวิทยาการรหัสลับที่
ใชในโพรโทคอล นํามาใชโจมตีเทคนิคทางดานวิทยาการรหัสลับที่ใชงานรวมกันกับอัลกอริทึมและโพรโท
คอล หรือนํามาใชโจมตีตัวโพรโทคอลเองก็ได ในสวนนี้เราจะสมมุติให อัลกอริทึมและเทคนิคทางดาน
วิทยาการรหัสลับมีความปลอดภัยและทนทานตอการโจมตีทั้งหมดที่มีอยูในปจจุบัน เพื่อที่จะมุงโจมตีไปที่ตัว
โพรโทคอลเพียงอยางเดียว คนทั่วไปอาจทําการโจมตีโพรโทคอลไดหลายๆ วิธี บางคนอาจไมมีสวนรวมใน
การดําเนินการโพรโทคอล แตมีความสามารถในการลักลอบดักฟงการติดตอสื่อสารที่เกิดขึ้นภายในโดยไม
สงผลกระทบใดๆ ตอการทํางานของโพรโทคอล การโจมตีในลักษณะนี้เรียกวา การโจมตีแบบแพสซิฟ
(Passive Attack) ซึ่งมีจุดมุงหมายในการเรียนรูการทํางานของโพรโทคอล และการลักลอบขโมยขอมูล
ขาวสารที่มีการรับสงระหวางอุปกรณหรือบุคคลที่เกี่ยวของกับโพรโทคอล การโจมตีในลักษณะนี้จะมีรูปแบบ

17
เหมือนกับการโจมตีขอความรหัสเทานั้น ในทางปฏิบัติเปนการยากที่จะตรวจจับการโจมตีแบบแพสซิฟ โพร
โทคอลที่ออกแบบมาสวนใหญจึงพยายามปองกันการโจมตีในลักษณะนี้มากกวาที่จะตรวจจับการโจมตี

รูปที่ 2.3 ชนิดของการโจมตีโพรโทคอล

ในทางตรงกันขาม ผูโจมตีอาจพยายามที่จะทําการเปลี่ยนแปลงโพรโทคอล เพื่อใหเกิดความไดเปรียบ


ตอตนเอง เชน ผูโจมตีอาจแกลงปลอมตัวเปนบุคคลใดบุคคลหนึ่งที่มีความเกี่ยวของกับโพรโทคอล อาจทําการ
สอดแทรกขอความใหมที่สรางขึ้นเองเขาไปในโพรโทคอล ลบขอความเดิมที่มีอยู แทนที่ขอความเดิมดวย
ขอความอื่น สงขอความเกาที่ดักจับมาไดไปใหบุคคลใดบุคคลหนึ่งหลายๆ ครั้ง ทําการเปลี่ยนแปลงขอมูลที่
เก็บอยูในระบบฐานขอมูล หรือทําการใดๆ เพื่อใหการสื่อสารภายในโพรโทคอลเกิดหยุดชะงักขึ้น เปนตน การ
โจมตีในลักษณะนี้เรียกวา การโจมตีแบบแอ็กทิฟ (Active Attack) ซึ่งมีรูปแบบที่เปลี่ยนแปลง หลากหลาย
ขึ้นอยูกับโพรโทคอลที่นํามาประยุกตใชงานเปนหลัก
ใหสังเกตวาการโจมตีแบบแพสซิฟนั้น ผูโจมตีเพียงแคแอบลอบดักฟงและรวบรวมขอมูลขาวสารที่
สงผานไปมาระหวางบุคคลที่เกี่ยวของกับโพรโทคอล โดยมีจุดประสงคที่จะนําขอมูลขาวสารเหลานั้นมาทํา
การวิเคราะหรหัสลับเทานั้น ในขณะที่การโจมตีแบบแอ็กทิฟนั้น ผูโจมตีสามารถทําการใดๆ ไดหลากหลาย ผู
โจมตีอาจเพียงตองการเก็บรวบรวมขอมูลขาวสารที่สงไปมา ตองการทําใหประสิทธิภาพของระบบลดต่ําลง
ตองการทําลายขอมูลขาวสารที่มีอยู หรือเขาถึงทรัพยากรตางๆ ของระบบโดยไมไดรับอนุญาตก็เปนได การ
โจมตีแบบแอ็กทิฟถือเปนการโจมตีที่มีประสิทธิภาพสูงมาก โดยเฉพาะในโพรโทคอลที่บุคคลแตละฝายไม
จําเปนตองไวใจกันและกัน ผูที่ทําการโจมตีแบบแอ็กทิฟนั้นไมจําเปนตองเปนบุคคลภายใน ผูโจมตีอาจเปน
บุคคลใดบุคคลหนึ่งที่มีสวนรวมในการดําเนินการโพรโทคอล หรืออาจเปนผูดูแลระบบ (System
Administrator) ก็ได ในทางปฏิบัติอาจมีผูโจมตีแบบแอ็กทิฟมากกวา 1 คนที่ทํางานรวมกันเพื่อโจมตีโพรโท
คอลใดโพรโทคอลหนึ่งก็เปนได ในกรณีที่ผูโจมตีเปนบุคคลที่มีสวนรวมในการดําเนินการโพรโทคอล เราอาจ
เรียกบุคคลนั้นวา ผูฉอโกง (Cheater) โดยผูฉอโกงแบบแพสซิฟจะดําเนินการตามที่โพรโทคอลกําหนด แตก็
จะพยายามรวบรวมขอมูลขาวสารมากกวาที่ตนควรจะไดรับในเวลาเดียวกัน ขณะที่ผูฉอโกงแบบแอ็กทิฟจะ
พยายามขัดขวางกระบวนการทํางานของโพรโทคอลเพื่อที่จะทําการฉอโกง

18
ตัวอยางโพรโทคอลสําหรับการสื่อสารในระบบการเขารหัสลับแบบสมมาตรมีดังนี้
1. นายดํากับนายแดงเห็นชอบรวมกันที่จะใชระบบการเขารหัสลับระบบใดระบบหนึ่ง
2. นายดํากับนายแดงเห็นชอบรวมกันที่จะใชกุญแจตัวใดตัวหนึ่งในการเขาและถอดรหัสลับ
3. นายดําทําการเขารหัสลับขอความตนฉบับ โดยใชอัลกอริทึมการเขารหัสลับและกุญแจที่กําหนด
4. นายดําสงขอความรหัสใหนายแดง
5. นายแดงทําการถอดรหัสลับขอความรหัส โดยใชอัลกอริทึมการถอดรหัสลับและกุญแจที่กําหนด
ถานายขาวยืนอยูตรงกลางระหวางนายดํากับนายแดง และลอบดักฟงขอมูลที่สงในขั้นตอน 4 นายขาว
จะเปรียบเสมือนผูโจมตีแบบแพสซิฟ และการโจมตีโพรโทคอลในลักษณะนี้จะมีรูปแบบเหมือนกับการโจมตี
ขอความรหัสเทานั้น อยางไรก็ตามในทางปฏิบัติ นายขาวจะพยายามทุกวิธีทางที่จะลอบฟงการสื่อสารที่เกิดขึ้น
ในขั้นตอนที่ 1 และ 2 เพื่อที่วานายขาวจะสามารถถอดรหัสลับขอความรหัสใดๆ ที่สงผานไปมาระหวางนายดํา
กับนายแดงได อยางไรก็ตาม เนื่องจากความปลอดภัยของระบบการเขารหัสลับที่ดีจะขึ้นอยูกับการเปนความลับ
ของตัวกุญแจเทานั้น ไมไดขึ้นกับการเปนความลับของตัวอัลกอริทึมที่ใชในการเขาและถอดรหัสลับ ฉะนั้นนาย
ดํากับนายแดงอาจดําเนินการขั้นตอนที่ 1 ในที่สาธารณะ หรือในชองทางสื่อสารที่ไมปลอดภัยก็ได แตทั้งคู
จะตองดําเนินการขั้นตอนที่ 2 อยางเปนความลับ กุญแจที่เกิดขึ้นในขั้นตอนนี้จะตองเก็บรักษาเปนความลับทั้ง
กอนและหลังการดําเนินการโพรโทคอล ตราบเทาที่ขอความตนฉบับยังคงเปนความลับอยู
จากที่กลาวมาขางตน พบวาระบบการเขารหัสลับแบบสมมาตรมีจุดดอย 3 จุดดังนี้
1. กุญแจที่ใชจําเปนตองมีการแลกเปลี่ยน (Exchange) หรือกระจาย (Distribute) อยางเปนความลับ
2. ถามีบุคคลอื่นทราบกุญแจที่ใชในการถอดรหัสลับ ไมวาจะไดกุญแจมาจากการขโมย การคาดเดา
การบังคับขมขู หรือจากการติดสินบน บุคคลนั้นจะสามารถทําการถอดรหัสลับขอความรหัส
ทั้งหมดที่เขารหัสลับดวยกุญแจนั้นๆ ได นอกจากนี้บุคคลดังกลาวยังสามารถปลอมแปลงตนเอง
เปนบุคคลในกลุมแลวทําการสรางขอความรหัส เพื่อสงไปหลอกบุคคลอื่นๆ ในกลุมโดยที่ไมมี
ใครสามารถตรวจจับไดเชนเดียวกัน
3. มีความซับซอนในระบบการจัดการกุญแจ (Key Management) สมมุติใหบุคคลที่ติดตอสื่อสาร
กัน 2 ฝายตองเก็บรักษากุญแจหนึ่งดอกเพื่อใชสําหรับการเขาและถอดรหัสลับ จํานวนของกุญแจ
ทั้งระบบจะเพิ่มขึ้นมาก ถาจํานวนผูใชงานในระบบเพิ่มขึ้น ในทางปฏิบัติเครือขายการสื่อสารที่มี
จํานวนผูใชงาน n คน จําเปนตองสรางและเก็บรักษากุญแจจํานวน n(n-1)/2 ดอก ยกตัวอยางเชน
ถามีผูใชงาน 4 คนในระบบ และผูใชงานแตละคนสามารถติดตอกับผูใชงานคนอื่นๆ ที่เหลือโดย
ใชกุญแจที่แตกตางกัน จํานวนกุญแจที่มีอยูในระบบจะเทากับ (4 × 3)/2 = 6 ดอก และถาระบบมี
ผูใชงาน 100 คน ภายใตเงื่อนไขเดียวกัน จํานวนกุญแจที่มีอยูในระบบจะเทากับ (100 × 99)/2 =
4,950 ดอก

19
เพื่อแกไขจุดดอยของระบบการเขารหัสลับแบบสมมาตร จึงไดมีการพัฒนาระบบการเขารหัสลับแบบ
อสมมาตรขึ้น โดยมีพื้นฐานอยูที่การประยุกตใชงานอัลกอริทึมอสมมาตรซึ่งประกอบไปดวยกุญแจสาธารณะ
และกุญแจสวนตัว อางถึงแนวความคิดของอัลกอริทึมอสมมาตรที่กลาวถึงในหัวขอที่ 1.3 คือ “จะเปนการยาก
มากที่จะคํานวณหากุญแจสวนตัวจากกุญแจสาธารณะที่กําหนด” ดังนั้นใครก็ตามที่มีกุญแจสาธารณะในมือ
สามารถทําการเขารหัสลับขอความตนฉบับใดๆ แลวสงขอความรหัสผลลัพธที่ไดใหกับเจาของกุญแจ แตจะไม
สามารถใชกุญแจดอกนั้นในการถอดรหัสลับขอความรหัสใดๆ ได มีแตเฉพาะบุคคลที่มีกุญแจสวนนั้นเทานั้น
ที่จะสามารถถอดรหัสลับขอความรหัสได
ตัวอยางโพรโทคอลสําหรับการสื่อสารในระบบการเขารหัสลับแบบอสมมาตรมีดังนี้
1. นายดํากับนายแดงเห็นชอบรวมกันที่จะใชระบบการเขารหัสลับแบบอสมมาตรระบบใดระบบหนึ่ง
2. นายดําสงกุญแจสาธารณะของตนใหนายแดง
3. นายแดงทําการเขารหัสลับขอความตนฉบับโดยใชกุญแจสาธารณะของนายดําและสงขอความรหัส
ผลลัพธที่ไดใหนายดํา
4. นายดําทําการถอดรหัสลับขอความรหัสที่ไดมาโดยใชกุญแจสวนตัวของตนเอง
จะเห็นไดวา ระบบการเขารหัสลับแบบอสมมาตร จะแกไขจุดดอยหลักที่มีอยูในระบบการเขารหัสลับ
แบบสมมาตร กลาวคือ แตเดิมนายดํากับนายแดงจะตองเห็นชอบรวมกันที่จะใชกุญแจตัวใดตัวหนึ่งในการเขา
และถอดรหัสลับ นายดําอาจเลือกกุญแจนี้ขึ้นมาโดยการสุม แตจะมีปญหาตอนที่สงผานใหนายแดง หรือตอน
แจงใหนายแดงทราบ ในทางปฏิบัตินายดําอาจสงกุญแจนี้ใหกับมือนายแดงโดยตรง แตทั้งคูจําเปนตองมีการ
พบกันกอนที่จะมีการสื่อสารโดยการเขารหัสลับเกิดขึ้น นายดําอาจสงกุญแจใหกับนายแดงโดยวิธีการที่
ปลอดภัย เชน ทางไปรษณียลงทะเบียน แตวิธีการนี้จําเปนตองอาศัยระยะเวลาชวงหนึ่ง แตเมื่อมีการนําระบบ
การเขารหัสลับแบบอสมมาตรมาใช ผูใชงานในระบบทุกคนจะสรางกุญแจสําหรับตนเองเพียง 2 ดอกเทานั้น
โดยกุญแจสวนตัวจะเก็บรักษาไวอยางเปนความลับ ขณะที่กุญแจสาธารณะอาจมีการเผยแพรอยางเปดเผยใน
ระบบฐานขอมูลใดๆ ในกรณีนี้นายแดงสามารถสงขอความรหัสใหนายดําไดโดยไมจําเปนตองมีการ
ติดตอสื่อสารกับนายดํามากอน อีกทั้งโพรโทคอลที่ใชในการสื่อสารยังมีความซับซอนนอยลงคือ
1. นายแดงรองขอกุญแจสาธารณะของนายดําจากระบบฐานขอมูลกุญแจสาธารณะที่เชื่อถือได
2. นายแดงทําการเขารหัสลับขอความตนฉบับโดยใชกุญแจสาธารณะของนายดําและสงขอความรหัส
ผลลัพธที่ไดใหนายดํา
3. นายดําทําการถอดรหัสลับขอความรหัสที่ไดมาโดยใชกุญแจสวนตัวของตนเอง
ใหสังเกตวาในโพรโทคอลนี้ นายดําไมจําเปนตองเกี่ยวของกับโพรโทคอลจนกวานายดําจะตองการ
อานขอความรหัสที่สงมาจากนายแดงเทานั้น

20
ถึงแมวาอัลกอริทึมอสมมาตรจะแกปญหาในเรื่องการกระจายกุญแจที่เกิดขึ้นในระบบการเขารหัสลับ
แบบสมมาตร แตในทางปฏิบัติเรายังคงไมนําอัลกอริทึมอสมมาตรมาใชในการเขารหัสลับขอความตนฉบับ
โดยตรง เนื่องมาจากจุดดอย 3 ประการคือ
1. อัลกอริทึมอสมมาตรมีความซับซอนสูงและใชเวลาประมวลผลนาน โดยปกติ อัลกอริทึมสมมาตร
จะใชความเร็วในการเขาและถอดรหัสลับสูงกวาอัลกอริทึมอสมมาตรประมาณ 1,000 เทา
2. ขอความรหัสที่ไดจากการเขารหัสลับโดยอัลกอริทึมอสมมาตรมักจะมีขนาดใหญกวาขอความ
ตนฉบับเสมอ
3. อัลกอริทึมอสมมาตรไมทนทานตอการโจมตีขอความตนฉบับแบบเลือกได ทั้งนี้เนื่องมาจาก C =
EK(M) เมื่อ M คือ ขอความตนฉบับขอความหนึ่งจากเซตขอความตนฉบับที่เปนไปไดทั้งหมด n
ขอความ กลาวคือ นักวิเคราะหรหัสลับเพียงแตทําการเขารหัสลับทุกๆ ขอความตนฉบับที่เปนไป
ไดโดยใชกุญแจสาธารณะ แลวทําการเปรียบเทียบขอความรหัสผลลัพธที่ไดแตละตัวกับขอความ
รหัส C ในกรณีนี้นักวิเคราะหรหัสลับจะยังคงไมรูกุญแจสวนตัว แตจะรูขอความตนฉบับที่ถูกตอง
ได การโจมตีนี้มีความเปนไปไดสูง เนื่องจากความเร็วที่ใชในการเขารหัสลับจะสูงกวาความเร็วที่
ใชในการถอดรหัสลับเปนอยางมาก
การโจมตีขอความตนฉบับแบบเลือกไดจะยิ่งมีประสิทธิภาพสูงขึ้น ถาเซตของขอความตนฉบับที่
เปนไปไดทั้งหมดมีจํานวนนอย ยกตัวอยางเชน ถาขอความตนฉบับคือ ตัวเลขที่มีขนาดไมเกิน 5 หลัก การ
โจมตีรูปแบบนี้จะสัมฤทธิผล เนื่องจากนักวิเคราะหรหัสลับเพียงแคลองเขารหัสลับตัวเลขทั้งหมดตั้งแต 0 ถึง
1,000,000 แลวเปรียบเทียบผลลัพธที่ไดกับขอความรหัสที่ลอบดักฟงมาได ใหสังเกตวานักวิเคราะหรหัสลับจะ
ใชการโจมตีในลักษณะนี้กับอัลกอริทึมสมมาตรไมได เนื่องจากนักวิเคราะหรหัสลับไมสามารถทําการทดลอง
เขารหัสลับไดโดยไมรูวากุญแจคืออะไร
เนื่องจากความซับซอนที่สูงของอัลกอริทึมอสมมาตร ในทางปฏิบัติจึงไดนําเอาอัลกอริทึมอสมมาตร
มาใชในการเขารหัสลับขอมูลที่มีขนาดเล็กๆ เชน กุญแจที่ใชในการเขาและถอดรหัสลับดวยอัลกอริทึม
สมมาตร ทั้งนี้อัลกอริทึมสมมาตรจะนํามาใชในการเขารหัสลับขอความตนฉบับโดยตรงนั่นเอง เพื่อใหระบบที่
กลาวมาขางตนมีความปลอดภัยสูงขึ้น กุญแจที่ใชเขารหัสลับไปแลวจะไมนํามาใชอีก และเมื่อมีการเขารหัส
ลับครั้งตอไป ระบบจะเลือกกุญแจสําหรับการเขารหัสลับแบบสมมาตรดอกใหมขึ้นมาโดยการสุม กุญแจที่
เลือกแบบสุมขึ้นมาจะใชเพียงครั้งเดียวแลวทิ้ง จะเรียกวา กุญแจชวงเวลา (Session Key) การนําอัลกอริทึม
อสมมาตรและอัลกอริทึมสมมาตรมาใชงานรวมกันในลักษณะนี้ จะเรียกวา ระบบการเขารหัสลับลูกผสม

21
ตัวอยางโพรโทคอลสําหรับการสื่อสารในระบบการเขารหัสลับลูกผสมมีดังนี้
1. นายดํา (User A) สงกุญแจสาธารณะของตนใหนายแดง (User B)
2. นายแดงสรางกุญแจชวงเวลาขึ้นมา 1 ดอก โดยการสุม แลวทําการเขารหัสลับกุญแจดอกนั้นดวย
กุญแจสาธารณะของนายดํา จากนั้นสงขอความรหัสผลลัพธที่ไดใหนายดํา
3. นายดําทําการถอดรหัสลับขอความรหัสที่ไดมาโดยใชกุญแจสวนตัวของตนเอง ผลลัพธที่ไดก็คือ
กุญแจชวงเวลา
4. นายดําและนายแดงใชกุญแจชวงเวลาที่มีอยูในการติดตอสื่อสารระหวางกันผานระบบการเขารหัส
ลับแบบสมมาตร

รูปที่ 2.4 โพรโทคอลสําหรับการสื่อสารในระบบการเขารหัสลับลูกผสม

การนํากุญแจชวงเวลามาใชในระบบการเขารหัสลับจะชวยเพิ่มความปลอกภัยใหระบบสูงขึ้น
เนื่องจากกุญแจชวงเวลาจะใชเขารหัสลับขอความตนฉบับเพียงครั้งเดียวเทานั้น ตางกับกุญแจลับแบบดั้งเดิมที่
นํามาใชในการเขารหัสลับขอความตนฉบับขอความใหมทุกครั้ง ทั้งนี้เมื่อผูโจมตีทราบหรือรูคากุญแจชวงเวลา
ที่ใช ผูโจมตีจะสามารถถอดรหัสลับขอความรหัสที่ลอบดักฟงมาไดเพียงขอความเดียวเทานั้น
2.3.2 การโจมตีแบบคนที่อยูตรงกลาง
ถามีการโจมตีแบบแพสซิฟเกิดขึ้นกับโพรโทคอลที่ใชระบบการเขารหัสลับลูกผสม สิ่งที่ผูโจมตี
สามารถทําไดก็คือ การโจมตีอัลกอริทึมอสมมาตรโดยใชการโจมตีขอความตนฉบับแบบเลือกไดเทานั้น ใน
ทํานองกลับกัน การโจมตีแบบแอ็กทิฟที่กระทําตอโพรโทคอลขางตน จะมีประสิทธิภาพสูงกวามาก สมมุติวาผู
โจมตีแบบแอ็กทิฟนั่งอยูตรงกลางระหวางนายดํากับนายแดงคอยรับขอมูลที่สงมาจากนายดําแลวทําการสงตอ
ใหกับนายแดง ขณะเดียวกันก็คอยรับขอมูลจากนายแดงแลวสงตอใหกับนายดํา ดูรูปที่ 2.5 ประกอบ ในกรณีนี้
ผูโจมตีไมเพียงแตสามารถดักฟงและเก็บรวบรวมขอมูลที่สงถึงกันระหวางนายดํากับนายแดง ผูโจมตียัง
สามารถปรับเปลี่ยนขอมูล ลบขอมูล หรือสรางขอมูลตัวใหมขึ้นมาก็ได เนื่องจากผูโจมตีแบบแอ็กทิฟสามารถ
ปลอมเปนนายดําขณะที่ทําการติดตอกับนายแดง และสามารถปลอมเปนนายแดงขณะที่ทําการติดตอกับนายดํา
ทั้งนายดําและนายแดงจะไมรูเลยวาบุคคลที่ทั้งสองกําลังติดตออยูไมใชบุคคลที่ทั้งสองตั้งใจจะติดตอจริงๆ การ
โจมตีในลักษณะนี้เปนที่รูจักกันในชื่อ การโจมตีแบบคนที่อยูตรงกลาง (Man-in-the-middle Attack)

22
รูปที่ 2.5 การโจมตีแบบคนที่อยูตรงกลาง

ตัวอยางของขั้นตอนการโจมตีแบบคนที่อยูตรงกลางมีดังนี้
1. นายดํา (User A) สงกุญแจสาธารณะของตนใหนายแดง นายขาว (Cheater) ซึ่งอยูตรงกลางยึด
กุญแจสาธารณะนี้ขึ้นมาและสงกุญแจสาธารณะของตนเองใหนายแดง (User B) แทน
2. นายแดงสงกุญแจสาธารณะของตนใหนายดํา นายขาวซึ่งอยูตรงกลางยึดกุญแจสาธารณะนี้ขึ้นมา
และสงกุญแจสาธารณะของตนเองใหนายดําแทน
3. เมื่อนายดําสงขอความรหัสใหนายแดง นายขาวจะยึดขอความรหัสนี้ขึ้นมา ทําการถอดรหัสลับโดย
ใชกุญแจสวนตัวของตนเอง จากนั้นจึงทําการเขารหัสลับขอความตนฉบับใหม โดยใชกุญแจ
สาธารณะของนายแดงและสงขอความรหัสที่ไดตัวใหมใหกับนายแดงแทน
4. เมื่อนายแดงสงขอความรหัสใหนายดํา นายขาวจะยึดขอความรหัสนี้ขึ้นมา ทําการถอดรหัสลับโดย
ใชกุญแจสวนตัวของตนเอง จากนั้นจึงทําการเขารหัสลับขอความตนฉบับใหม โดยใชกุญแจ
สาธารณะของนายดําและสงขอความรหัสที่ไดตัวใหมใหกับนายดําแทน

ถึงแมกุญแจสาธารณะของนายดํากับนายแดงจะเก็บไวในระบบฐานขอมูล การโจมตีในลักษณะนี้ก็
ยังคงสัมฤทธิผล เนื่องจากตอนที่นายดํารองขอกุญแจสาธารณะของนายแดงจากระบบฐานขอมูล นายขาว
สามารถยึดคํารองขอของนายดําขึ้นมาและสงกุญแจสาธารณะของตนใหกับนายดําแทน นายขาวสามารถทํา
อยางเดียวกันกับนายแดงและสงกุญแจสาธารณะของตนใหกับนายแดงไดเชนเดียวกัน ยิ่งกวานั้นนายขาวอาจ
แทนที่กุญแจสาธารณะของนายดําและนายแดงที่อยูในระบบฐานขอมูลดวยกุญแจสาธารณะของตนเองก็ได
จากนั้นเขาแครอใหนายดํากับนายแดงเริ่มการติดตอสื่อสารระหวางกัน การโจมตีแบบคนที่อยูตรงกลางนี้มี
ประสิทธิภาพสูง เนื่องจากทั้งนายดําและนายแดงไมมีทางพิสูจนวาพวกเขากําลังสื่อสารถึงกันอยูจริงๆ สมมุติ
วานายขาวซึ่งนั่งอยูตรงกลางระหวางนายดํากับนายแดงไมกระทําสิ่งหนึ่งสิ่งใดใหเปนที่ผิดสังเกต เชน การ
หนวงเวลา (Delay) ขอความรหัสที่สงระหวางนายดําและนายแดง ทั้งนายดําและนายแดงจะไมรูเลยวามีใคร
บางคนนั่งอยูตรงกลางระหวางพวกเขาทั้งสอง คอยอานความลับตางๆ ที่พวกเขาทั้งสองสงถึงกันตลอดเวลา

23
ตัวอยางโพรโทคอลๆ หนึ่งที่ออกแบบมาเพื่อปองกันการโจมตีแบบคนที่อยูตรงกลางคือ โพรโท
คอลควบโยง (Interlock Protocol) [SCHN96] ซึ่งมีขั้นตอนการทํางานดังนี้ ดูรูปที่ 2.6 ประกอบ
1. นายดํา (User A) สงกุญแจสาธารณะของตนใหนายแดง (User B)
2. นายแดงสงกุญแจสาธารณะของตนใหนายดํา
3. นายดําเขารหัสลับขอความตนฉบับโดยใชกุญแจสาธารณะของนายแดง แลวสงขอความรหัสเพียง
ครึ่งหนึ่งใหกับนายแดง
4. นายแดงเขารหัสลับขอความตนฉบับโดยใชกุญแจสาธารณะของนายดํา แลวสงขอความรหัสเพียง
ครึ่งหนึ่งใหกับนายดํา
5. นายดําสงขอความรหัสที่เหลืออีกครึ่งใหกับนายแดง
6. นายแดงนําขอความรหัสทั้งสองมาตอกันแลวทําการถอดรหัสลับ โดยใชกุญแจสวนตัวของตนเอง
จากนั้นนายแดงสงขอความรหัสที่เหลืออีกครึ่งใหกับนายดํา
7. นายดํานําขอความรหัสทั้งสองมาตอกันแลวทําการถอดรหัสลับ โดยใชกุญแจสวนตัวของตนเอง

รูปที่ 2.6 โพรโทคอลควบโยง

ใหสังเกตวาขอความรหัสเพียงครึ่งหนึ่งจะใชประโยชนอะไรไมไดเลย นายแดงจะไมสามารถถอดรหัส
ลับเพื่ออานขอความตนฉบับไดจนกวาจะดําเนินการตามโพรโทคอลมาถึงขั้นตอนที่ 6 ขณะที่นายดําตองรอถึง
ขั้นตอนที่ 7 ถานายขาวซึ่งนั่งอยูตรงกลางระหวางนายดํากับนายแดงตองการโจมตีโพรโทคอลนี้ เมื่อเขายึด
ขอความรหัสเพียงครึ่งหนึ่งจากนายดําในขั้นตอนที่ 3 แลวนายขาวจะไมสามารถถอดรหัสลับขอความรหัสนั้น
และเขารหัสลับใหมดวยกุญแจสาธารณะของนายแดงได สิ่งที่นายขาวทําไดคือการสรางขอความตนฉบับตัวใหม
ขึ้นมา ทําการเขารหัสลับดวยกุญแจสาธารณะของนายแดงแลวสงขอความรหัสที่ไดเพียงครึ่งหนึ่งใหกับนายแดง
และเมื่อนายขาวยึดขอความรหัสเพียงครึ่งหนึ่งจากนายแดงในขั้นตอนที่ 4 เขาก็จะตองทําแบบเดียวกันกับนายดํา
จนถึงขั้นตอนที่ 5 และ 6 เมื่อนายขาวไดรับขอความรหัสที่เหลืออีกครึ่งหนึ่งจากนายดําและนายแดงก็จะสาย
เกินไปแลวที่นายขาวจะเปลี่ยนขอความตนฉบับที่เขาสรางขึ้นเปนขอความตนฉบับตัวจริง ซึ่งเหตุการณนี้จะสงผล
ใหการสนทนาระหวางนายดําและนายแดงเปนการสนทนาคนละเรื่องกัน

24
2.4 คําถามทายบท
1. จงอธิบายถึงวิธีการทั่วๆ ไปที่ใชในการประเมินระบบรักษาความปลอดภัยหนึ่งๆ
2. ความแข็งแกรงของระบบการเขารหัสลับขึ้นอยูกับปจจัยใดบาง จงอธิบาย พรอมยกตัวอยางประกอบ
3. จงอธิบายหนาที่และความสําคัญของโพรโทคอลทางดานวิทยาการรหัสลับ
4. จงอธิบายความสัมพันธระหวางโพรโทคอลทางดานวิทยาการรหัสลับ และอัลกอริทึมการเขารหัสลับที่ใชใน
โพรโทคอล รวมทั้งผลกระทบของระบบจากการใชโพรโทคอล และ/หรือ อัลกอริทึมที่ไมเหมาะสม
5. การโจมตีโพรโทคอลตางกับการโจมตีอัลกอริทึมการเขารหัสลับอยางไร
6. จงยกตัวอยางการประยุกตใชงานโพรโทคอลทางดานวิทยาการรหัสลับสําหรับการสื่อสารสื่อประสมมา 3
ตัวอยาง พรอมทั้งอธิบายวัตถุประสงคและขั้นตอนการทํางานของโพรโทคอลมาอยางละเอียด

25
บทที่ 3
อัลกอริทึมสมมาตร ตอนหนึ่ง

3.1 บทนํา
ลักษณะเดนของอัลกอริทึมสมมาตร ก็คือ กุญแจที่ใชในการเขารหัสลับสามารถนํามาใชในการ
คํานวณหากุญแจถอดรหัสลับได ในหลายๆ กรณีกุญแจที่ใชในการเขาและถอดรหัสรหัสลับมักจะเปนตัว
เดียวกัน เนื้อหาในบทนี้จะครอบคลุมถึงแนวความคิด วิธีการที่ใชในการเขารหัสลับ พื้นฐานการทํางานของ
ตัวแปลงรหัสสมมาตรแบบตางๆ ซึ่งสามารถแบงยอยออกเปน 2 ชนิด คือตัวแปลงรหัสแบบกระแส และตัว
แปลงรหัสแบบกลุม ในสวนของตัวแปลงรหัสแบบกลุม ยังสามารถแบงออกเปนกลุมยอยได 2 กลุมคือ
อัลกอริทึมแบบดั้งเดิม และอัลกอริทึมแผนใหม ซึ่งจะเรียนในบทที่ 4 และ 5 ตอไป

3.2 ตัวแปลงรหัสแบบกระแส
ตัวแปลงรหัสแบบกระแสจะใชตัวสรางกระแสบิต (Bit-stream Generator) ในการสรางกระแสเลข
โดดฐานสอง (Binary Digits) ที่เรียกวา กระแสบิตทางดานวิทยาการรหัสลับ สําหรับนําไปใชรวมกับขอความ
ตนฉบับเพื่อสรางขอความรหัส หรือใชรวมกับขอความรหัสเพื่อกูคืนขอความตนฉบับ โดยผานตัวดําเนินการ
ออรเฉพาะ (Exclusive-OR, XOR) หรือการบวกแบบมอดุโล 2 (Addition Modulo 2) ซึ่งแสดงในรูปของ
สมการไดดังนี้
Pi ⊕ Ki = Ci (3.1)
Ci ⊕ Ki = Pi (3.2)
เมื่อ i คือตําแหนงของบิตที่เปนเลขจํานวนเต็มและ ⊕ คือตัวดําเนินการออรเฉพาะ ใหสังเกตวา
0 ⊕ 0 = 0, 0 ⊕ 1 = 1, 1 ⊕ 0 = 1, 1 ⊕ 1 = 0,

ตัวแปลงรหัสที่ใชวิธีการขางตนในการเขารหัสลับมักเปนที่รูจักโดยทั่วไปในชื่อ ตัวแปลงรหัส
Vernam (Vernam Cipher) ถาตัวสราง (Generator) สามารถสรางกระแสบิตแบบสุมจริง (True Random)
ได เราจะสามารถนําตัวสรางนั้นมาใชในการสรางตัวแปลงรหัสที่ไมมีจุดออน (Unbreakable Cipher) ได
เชนกัน กลาวคือ โดยการนําขอความตนฉบับมาออรเฉพาะโดยตรงกับกระแสบิตแบบสุมจริงที่สรางขึ้น ใน
กรณีนี้เราจะใชกระแสบิตเปนกุญแจ ซึ่งจะมีความยาวเทากับขอความที่ทําการเขารหัสลับ อยางไรก็ตาม
ผูใชงานจะไมไดรับความสะดวกเมื่อตองการเก็บ หรือสงกุญแจที่มีขนาดใหญเชนนั้นผานชองทางการ

26
สัญญาณที่เปนอิสระและปลอดภัย (Independent and Secure Channel) เพื่อใชในกระบวนการถอดรหัส
ลับ ดังนั้นในทางปฏิบัติ ตัวสรางกระแสบิตตองมีลักษณะการทํางานในรูปแบบของ กระบวนคําสั่งที่เปน
ขั้นตอนวิธี (Algorithmic Procedure) เพื่อที่วาผูใชงานทั้งทางดานผูสงและผูรับจะสามารถสรางกระแสบิต
ทางดานวิทยาการรหัสลับชุดเดียวกันขึ้นมาได โดยใชแนวคิดขางตน เราจะพิจารณาตัวสรางกระแสบิต
เสมือนกับอัลกอริทึมตัวหนึ่งที่ใชกุญแจในการควบคุม (Key-controlled Algorithm) รูปแบบของกระแสบิต
สงออกที่มีความปลอดภัยและสามารถนําไปใชในดานวิทยาการรหัสลับ
ในตัวแปลงรหัสแบบกระแส อัลกอริทึมที่ใชภายในอาจสรางกระแสบิตขึ้นมาทีละบิต (Bit-by-bit)
หรือทีละกลุมบิต (Block of Bits) ก็ได ฉะนั้นจึงมีความเปนไปไดที่จะนําตัวแปลงรหัสแบบกลุมมา
ประยุกตใชงานเปนตัวแปลงรหัสแบบกระแส อยางไรก็ตามในการใชงานจริงในระบบสื่อสารใดๆ ผูสงและ
ผูรับจําเปนตองสรางกระแสบิตที่มีความปลอดภัย มีขนาดและรูปแบบของกระแสบิตสงออกที่เหมือนกัน
ดังนั้นอัลกอริทึมอสมมาตรอาจนํามาใชเปนตัวแปลงรหัสแบบกระแสก็ได ถาอัลกอริทึมนั้นถูกใชงานใน
ลักษณะของอัลกอริทึมแบบดั้งเดิม กลาวคือ กุญแจเขารหัสลับจะใชในการสรางกระแสบิตทั้งในฝงผูสงและ
ผูรับ และจะตองเก็บรักษาเปนความลับดวยเชนกัน
เนื่องจากกุญแจที่ใชในการสรางกระแสบิต มีขนาดและรูปแบบของบิตที่คงที่ กระแสบิตที่สรางขึ้น
ทุกครั้งจะมีรูปแบบของบิตสงออก (Output Bit) ที่เหมือนเดิมไมเปลี่ยนแปลงเชนเดียวกัน (พิจารณาในกรณี
ที่การสรางกระแสบิตขึ้นอยูกับกุญแจที่ใชเทานั้น) ซึ่งในกรณีนี้ถานักวิเคราะหรหัสลับไดรับกระแสบิตที่
สรางขึ้น ไมวาจะมาจากที่ใด พวกเขาจะสามารถถอดรหัสลับขอความรหัสใดๆ ที่แอบดักฟงมาไดโดยไม
ตองใชกุญแจอีกเลย กลาวอีกนัยหนึ่งก็คือ ถาเราใชกุญแจตัวเดิมในการสรางกระแสบิตเพื่อใชเขารหัสลับ
ขอความตนฉบับใหมในแตละครั้ง หากนักวิเคราะหรหัสลับสามารถสรางกระแสบิตนั้นๆ ขึ้นมาได พวกเขา
ก็จะสามารถถอดรหัสลับทุกๆ ขอความรหัสไดเชนเดียวกัน เพื่อหลีกเลี่ยงปญหาที่กลาวมาขางตน ตัวแปลง
รหัสแบบกระแสจะตองไมเริ่มการทํางานดวยเงื่อนไขเริ่มตน (Initial Conditions) แบบเดียวกัน มิฉะนั้นจะ
เกิดการสรางกระแสบิตที่มีรูปแบบของบิตซ้ําๆ กันในแตละครั้งของการเขารหัสลับ ในทางปฏิบัติแมจะมี
การเก็บรักษากุญแจที่ใชในการสรางกระแสบิตใหเปนความลับ แตก็ไมไดหมายความวา กระแสบิตที่สราง
ขึ้นในแตละครั้งจะมีรูปแบบที่แตกตางกัน ดังนั้นจึงไดมีการนําเอาเวกเตอรเริ่มตน (Initialization Vector,
IV) มาใชรวมกันกับตัวกุญแจในกระบวนการสรางกระแสบิต ซึ่งคนทั่วไปมักรูจักเวกเตอรเริ่มตนนี้ในชื่อ
ตัวเริ่มตน (Seed) แผนผังการทํางานของตัวแปลงรหัสแบบกระแสที่นําเวกเตอรเริ่มตนมาประยุกตใชงานได
แสดงไวในรูปที่ 3.1

27
รูปที่ 3.1 แผนผังการทํางานของตัวแปลงรหัสแบบกระแสที่ใชเวกเตอรเริ่มตน

วัตถุประสงคของการใชเวกเตอรเริ่มตนก็คือ เพื่อทําใหกระแสบิตที่สรางขึ้นในแตละครั้งโดยใช
กุญแจตัวเดิมมีความแตกตางกัน โดยเวกเตอรเริ่มตนที่วานี้จะมีลักษณะพิเศษคือ เมื่อใชคาเวกเตอรเริ่มตนที่
แตกตางกันในตัวสรางกระแสบิต กระแสบิตที่สรางขึ้นจะมีรูปแบบที่แตกตางกันดวย นอกจากนี้กระแสบิต
ที่สรางขึ้นนี้จะมีรูปแบบของบิตที่ไมสามารถคาดเดาได ถาเวกเตอรเริ่มตนที่นํามาใชสอดคลองกับเงื่อนไข
ดังตอไปนี้
1. เวกเตอรเริ่มตนถูกสรางขึ้นแบบสุม - โดยอางอิงจากปรากฏการณที่เกิดขึ้นตามธรรมชาติ
(Natural Phenomenon) บางชนิด ซึ่งมีลักษณะของการเกิดเหตุการณเปนแบบสุมในเชิงสถิติ เชน อุณหภูมิ
ของหนวยประมวลผลกลางหรือซีพียู หรือความแรงลมของพัดลมระบายอากาศที่อยูในเครื่องคอมพิวเตอร
เปนตน นอกจากนี้เวกเตอรเริ่มตนที่ไดจากการอางอิงปรากฏการณธรรมชาติควรสรางขึ้นจากการรวม
เงื่อนไขที่แตกตางกันหลายๆ เงื่อนไข เพื่อที่วา ความนาจะเปนที่จะไดผลลัพธที่มีคาซ้ําๆ กัน จากการอางอิง
ปรากฏการณธรรมชาติขางตนมีคาต่ํามากๆ
2. เวกเตอรเริ่มตนถูกสรางขึ้นแบบสุมเทียม - โดยอางอิงจากกระบวนการเชิงกําหนด
(Deterministic Process) ที่คาบ (Period) หรือชวงระหวางรูปแบบของบิต 2 รูปแบบที่ซ้ํากัน มีขนาดใหญ
มากๆ เมื่อเทียบกับความยาวของเวกเตอรเริ่มตน นอกจากนี้รูปแบบของบิตที่สรางขึ้นจากกระบวนการเชิง
กําหนดควรมีลักษณะเปนแบบสุมในเชิงสถิติ
3. เวกเตอรเริ่มตนถูกสรางขึ้นแบบไมซ้ํากัน - ภายใตเงื่อนไขที่แนนอน เวกเตอรเริ่มตนสามารถ
สรางขึ้นจากกระบวนการใดกระบวนการหนึ่งซึ่งอาจคาดเดาผลลัพธที่เกิดขึ้นได แตคาบของกระบวนการ
นั้นๆ กอนที่จะเริ่มสรางรูปแบบของบิตที่ซ้ํากันออกมา มีขนาดใหญมากๆ จนทําใหการคาดเดาผลลัพธที่
เกิดขึ้นเพื่อหารูปแบบของบิตที่สรางซ้ํากันออกมาตองใชระยะเวลายาวนาน โดยสวนใหญคาเวกเตอรเริ่มตน
ที่มีขนาด 64 บิต จะสอดคลองกับเงื่อนไขนี้

28
จากทั้งสามเงื่อนไขขางตน แมวานักวิเคราะหรหัสลับจะไดรับกระแสบิตที่สรางขึ้นพรอมกับคา
เวกเตอรเริ่มตนที่ใชในการสรางกระแสบิตนั้นๆ มา พวกเขาก็ไมสามารถคนหาหรือคาดเดากระแสบิตที่
สรางขึ้นจากเวกเตอรเริ่มตนคาใหมได ในทางปฏิบัติกุญแจที่ใชจําเปนตองเก็บรักษาเปนความลับ แต
เวกเตอรเริ่มตนอาจไมจําเปนตองทําอยางนั้นก็ได ทั้งนี้เนื่องจากเวกเตอรเริ่มตนที่สรางขึ้นในแตละครั้งของ
การเขารหัสลับจะไมซ้ํากัน หรืออาจซ้ํากันไดดวยความนาจะเปนที่ต่ํามากๆ เทียบกับความยาวของตัว
เวกเตอรเริ่มตนเอง

3.3 เรจิสเตอรแบบเลื่อนปอนกลับเชิงเสน
ในอดีตที่ผานมา ไดมีการนําเรจิสเตอรแบบเลื่อนปอนกลับเชิงเสน (Linear Feedback Shift
Registers) หรือเรียกสั้นๆ วา LFSR มาประยุกตใชในวิทยาการรหัสลับและทฤษฎีรหัส (Coding Theory)
อยางกวางขวาง ตัวแปลงรหัสแบบกระแสที่ใช LFSR เปนหลักไดมีการนํามาใชในงานดานวิทยาการรหัสลับ
ตั้งแตยุคเริ่มตนของอุปกรณอิเลคทรอนิกส โดยพื้นฐาน เรจิสเตอรแบบเลื่อนปอนกลับ จะประกอบดวย 2
สวนหลักๆ คือ เรจิสเตอรแบบเลื่อนและฟงกชนั ปอนกลับ ดูรูปที่ 3.2 ประกอบ

รูปที่ 3.2 เรจิสเตอรแบบเลื่อนและฟงกชันปอนกลับ

เรจิสเตอรแบบเลื่อนก็คือ หนวยความจําในระดับของบิตหลายๆ บิตที่นํามาเรียงลําดับตอกัน ถา


หนวยความจําที่ใชในการสรางเรจิสเตอรแบบเลื่อนมีจํานวน n บิต เราจะเรียกเรจิสเตอรนั้นวา เรจิสเตอรแบบ
เลื่อนขนาด n บิต การทํางานของเรจิสเตอรแบบเลื่อนจะมีลักษณะที่วา ถาเราตองการบิตสงออกขนาด 1 บิต
จํานวนบิตทั้งหมดที่อยูในหนวยความจําของเรจิสเตอรแบบเลื่อนจะขยับหรือเลื่อนไปทางขวา 1 บิต จากนั้น
บิตซายสุดคาใหมจะถูกคํานวณขึ้นตามฟงกชันที่กําหนดที่ขึ้นกับบิตอื่นๆ ที่เหลือในตัวเรจิสเตอร บิตสงออก
ของเรจิสเตอรแบบเลื่อนที่มีขนาด 1 บิต มักเปนบิตที่อยูขวาสุดที่เรียกวา บิตนัยสําคัญนอยสุด (Least
Significant Bit) เสมอ คาบของเรจิสเตอรแบบเลื่อนใดๆ จะมีคาเทากับความยาวของลําดับสงออก (Output
Sequence) กอนที่รูปแบบของบิตที่สรางขึ้นจะเริ่มซ้ําแบบเดิมอีกครั้ง จากลักษณะการทํางานของเรจิสเตอร
แบบเลื่อน จะเห็นถึงความเหมาะสมตอการนําไปประยุกตใชงานในอุปกรณประเภทฮารดแวร

29
ชนิดของเรจิสเตอรแบบเลื่อนที่มีความซับซอนนอยที่สุด ซึ่งเปนที่นิยมนํามาใชกับตัวแปลงรหัส
แบบกระแสก็คือ LFSR ดังแสดงในรูปที่ 3.3 โดยฟงกชันปอนกลับใน LFSR นี้สามารถสรางขึ้นแบบงายๆ
จากการนําบิตที่ตําแหนงตางๆ ตามที่กําหนดในตัวเรจิสเตอรมาออรเฉพาะกัน รูปที่ 3.4 แสดง LFSR ขนาด
4 บิต ที่มีการนําบิตในตําแหนงที่หนึ่งและสามมาออรเฉพาะกัน

รูปที่ 3.3 เรจิสเตอรแบบเลื่อนปอนกลับเชิงเสน

รูปที่ 3.4 LFSR ขนาด 4 บิต ที่มีการนําบิตในตําแหนงที่หนึ่งและสามมาทําการออรเฉพาะกัน

โดยการสมมติใหบิตเริ่มตนใน LFSR มีคาเปน 1111 รูปแบบของบิตที่เกิดขึ้นในหนวยความจํา


ภายในตัว LFSR เมื่อมีการสรางบิตสงออกทีละ 1 บิต จะมีลําดับของสถานะภายใน (Internal State) กอนที่
จะเริ่มสรางรูปแบบของบิตที่ซ้ํากันออกมาดังตอไปนี้
1111
0111
0011
1001
1100
1110
1111
และมีลําดับสงออกที่เปนสายอักขระ (String) ของบิตนัยสําคัญนอยสุดดังตอไปนี้
1 1 1 1 0 0 1 ...

30
ในกรณีของ LFSR ขนาด 4 บิต ที่มีการออรเฉพาะของบิตในตําแหนงที่หนึ่งและสี่ จะมีลําดับของ
สถานะภายใน กอนที่รูปแบบของบิตจะซ้ํากันดังตอไปนี้
1111
0111
1011
0101
1010
1101
0110
0011
1001
0100
0010
0001
1000
1100
1110
และจะมีลําดับสงออกของบิตที่สรางขึ้นดังตอไปนี้
1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 ...
ตัว LFSR ขนาด n บิตใดๆ สามารถมีสถานะภายในไดสูงสุด 2n - 1 สถานะ ซึ่งหมายความวา ตัว
LFSR เองในทางทฤษฎีสามารถสรางลําดับสงออกของบิตแบบสุมเทียมที่มีความยาวสูงสุดเทากับ 2n - 1 บิต
กอนที่จะเริ่มสรางรูปแบบของบิตที่ซ้ํากันออกมา ใหสังเกตวาความยาวสูงสุดของบิตที่สรางขึ้นไมเทากับ 2n
บิต เพราะเรจิสเตอรแบบเลื่อนที่เริ่มตนดวยคาศูนยทั้งหมดจะใหผลลัพธของบิตสงออกเปนคาศูนยตลอดไป
ซึ่งรูปแบบของบิตสงออกในลักษณะนี้นํามาใชประโยชนในดานวิทยาการรหัสลับไมได นอกจากนี้ การจะ
ทําให LFSR สรางลําดับสงออกของบิตที่มีความยาวสูงสุด เราจําเปนตองเลือกนําบิตที่ตําแหนงตางๆ ของ
หนวยความจําภายในตัว LFSR มาออรเฉพาะกันอยางเหมาะสมดวย คาบสูงสุด (Maximal Period) ของ
ลําดับสงออกของ LFSR ใดๆ เรียกวา ลําดับเอ็ม (m-sequence) เพื่อทําให LFSR สรางลําดับสงออกของ
บิตที่ยาวที่สุด บิตที่จะนํามาออรเฉพาะกันตองอยูในรูปของสมการพหุนาม (Polynomial) บวกคาคงที่ 1 ที่มี
ลักษณะเฉพาะที่เรียกวา พหุนามปฐมฐานมอดุโล 2 (Primitive Polynomial Modulo 2) ใหสังเกตวา ลําดับ
ขั้นพหุนาม (Degree of Polynomial) ก็คือ จํานวนหนวยความจําหรือสภาวะภายในของ LFSR นั่นเอง

31
ความรูเพิ่มเติมในเรื่องพหุนามปฐมฐานมอดุโล 2 สามารถคนควาไดจาก [GOLO67], [ZIER68] ตารางที่ 3.1
แสดงตัวอยางของพหุนามปฐมฐานมอดุโล 2 ที่มีลําดับขั้นพหุนามตางๆ กัน

ตารางที่ 3.1 ตัวอยางของพหุนามปฐมฐานมอดุโล 2 ที่มีลําดับขั้นตั้งแต 2 ถึง 108


(1, 0) (2, 1, 0) (3, 1, 0) (4, 1, 0) (5, 2, 0)
(6, 1, 0) (7, 1, 0) (7, 3, 0) (8, 4, 3, 2, 0) (9, 4, 0)
(10, 3, 0) (11, 2, 0) (12, 6, 4, 1, 0) (13, 4, 3, 1, 0) (14, 5, 3, 1, 0)
(15, 1, 0) (16, 5, 3, 2, 0) (17, 3, 0) (17, 5, 0) (17, 6, 0)
(18, 7, 0) (18, 5, 2, 1, 0) (19, 5, 2, 1, 0) (20, 3, 0) (21, 2, 0)
(22, 1, 0) (23, 5, 0) (24, 4, 3, 1, 0) (25, 3, 0) (26, 6, 2, 1, 0)
(27, 5, 2, 1, 0) (28, 3, 0) (29, 2, 0) (30, 6, 4, 1, 0) (31, 3, 0)
(31, 6, 0) (31, 7, 0) (31, 13, 0) (32, 7, 6, 2, 0) (33, 13, 0)
(33, 16, 4, 1, 0) (34, 8, 4, 3, 0) (35, 2, 0) (36, 11, 0) (37, 6, 4, 1, 0)
(38, 6, 5, 1, 0) (39, 4, 0) (40, 5, 4, 3, 0) (41, 3, 0) (42, 7, 4, 3, 0)
(43, 6, 4, 3, 0) (44, 6, 5, 2, 0) (45, 4, 3, 1, 0) (46, 8, 7, 1, 0) (47, 5, 0)
(48, 9, 7, 4, 0) (49, 9, 0) (49, 6, 5, 4, 0) (50, 4, 3, 2, 0) (51, 6, 3, 1, 0)
(52, 3, 0) (53, 6, 2, 1, 0) (54, 8, 6, 3, 0) (55, 24, 0) (55, 6, 2, 1, 0)
(56, 7, 4, 2, 0) (57, 7, 0) (57, 5, 3, 2, 0) (58, 19, 0) (58, 6, 5, 1, 0)
(59, 7, 4, 2, 0) (60, 1, 0) (61, 5, 2, 1, 0) (62, 6, 5, 3, 0) (63, 1, 0)
(64, 4, 3, 1, 0) (65, 18, 0) (65, 4, 3, 1, 0) (66, 9, 8, 6, 0) (67, 5, 2, 1, 0)
(68, 9, 0) (68, 7, 5, 1, 0) (69, 6, 5, 2, 0) (70, 5, 3, 1, 0) (71, 6, 0)
(71, 5, 3, 1, 0) (72, 10, 9, 3, 0) (73, 25, 0) (73, 4, 3, 2, 0) (74, 7, 4, 3, 0)
(75, 6, 3, 1, 0) (76, 5, 4, 2, 0) (77, 6, 5, 2, 0) (78, 7, 2, 1, 0) (79, 9, 0)
(79, 4, 3, 2, 0) (80, 9, 4, 2, 0) (81, 4, 0) (82, 9, 6, 4, 0) (83, 7, 4, 2, 0)
(84, 13, 0) (85, 8, 2, 1, 0) (86, 6, 5, 2, 0) (87, 13, 0) (87, 7, 5, 1, 0)
(88, 11, 9, 8, 0) (89, 38, 0) (89, 51, 0) (89, 6, 5, 3, 0) (90, 5, 3, 2, 0)
(91, 8, 5, 1, 0) (92, 6, 5, 2, 0) (93, 2, 0) (94, 21, 0) (94, 6, 5, 1, 0)
(95, 11, 0) (96, 10, 9, 6, 0) (97, 6, 0) (98, 11, 0) (99, 7, 5, 4, 0)
(100, 37, 0) (100, 8, 7, 2, 0) (101, 7, 6, 1, 0) (102, 6, 5, 3, 0) (103, 9, 9)
(104, 11, 10, 1, 0) (105, 16, 0) (106, 15, 0) (107, 9, 7, 4, 0) (108, 31, 0)

32
ตัวอยางที่ 3.1 จงออกแบบ LFSR ขนาด 64 บิต ที่มีความยาวของลําดับสงออกสูงสุด โดยใช พหุนาม
ปฐมฐานมอดุโล 2 แบบ x64 + x4 + x3 + x + 1 หรือ (64, 4, 3, 1, 0)

วิธีทํา ตัวอยาง LFSR ที่ใชพหุนามปฐมฐานมอดุโล 2 แบบ x64 + x4 + x3 + x + 1 ไดแสดงไวดัง


รูปที่ 3.5

รูปที่ 3.5 ตัวอยางการสราง LFSR ขนาด 64 บิต

ตัวอยางที่ 3.2 กําหนดให LFSR ขนาด 4 บิตตัวหนึ่งมีการสรางลําดับสงออกของบิตโดยใชพหุนามปฐม


ฐานมอดุโล 2 แบบ x4 + x + 1 หรือ (4, 1, 0) ดังรูปที่ 3.6 จงแสดงลําดับของสถานะภายใน
คาบสูงสุด และลําดับสงออกของบิตกอนที่ตัว LFSR จะเริ่มสรางรูปแบบของบิตที่ซ้ํากัน
ออกมา สมมติใหบิตเริ่มตนใน LFSR มีคาเปน 0110

รูปที่ 3.6 LFSR ขนาด 4 บิตแบบ x4 + x + 1

33
วิธีทํา ลําดับของสถานะภายใน กอนที่รูปแบบของบิตจะซ้ํากันแสดงไดดังนี้
0110
0011
1001
0100
0010
0001
1000
1100
1110
1111
0111
1011
0101
1010
1101
ซึ่งคาบสูงสุดของ LFSR ที่ไดคือ 15 และมีลําดับสงออกของบิตที่สรางขึ้นดังนี้
0 1 1 0 0 1 0 0 0 1 1 1 1 0 1 ...

3.4 ตัวแปลงรหัสแบบกระแสโดยใช LFSR


เราสามารถนํา LFSR มาประยุกตใชงานในแบบงายๆ เพื่อสรางกระแสบิตสําหรับใชในการเขารหัส
ลับ เชน เราอาจใช LFSR หนึ่งตัวมาทํางานเปนตัวสรางกระแสบิตไดทันที ในกรณีนี้กุญแจที่ใชในการเขา
และถอดรหัสลับก็คือ คาสถานะเริ่มตนของ LFSR นั่นเอง หรือเราอาจจะใช LFSR หลายๆ ตัวที่มีความยาว
และลักษณะการปอนกลับที่แตกตางกันมาตอใชงานรวมกันก็ได โดย LFSR แตละตัวที่ใชควรไดรับการ
ออกแบบมาจากพหุนามปฐมฐานมอดุโล 2 ในการใชงานตัวสรางกระแสบิตที่สรางขึ้นนี้ เมื่อเราตองการบิต
สงออก 1 บิต เราจะทําการเลื่อนบิตที่อยูภายใน LFSR ไปทางขวาหนึ่งครั้ง ในกรณีที่ใช LFSR มากกวาหนึ่ง
ตัว บิตสงออกที่ไดจะขึ้นกับฟงกชันของบิตสงออกใน LFSR แตละตัว ซึ่งฟงกชันลักษณะนี้จะเรียกวา
ฟงกชันเชิงผสม (Combining Function) และตัวสรางกระแสบิตในลักษณะนี้จะเรียกวา ตัวสรางกระแสบิต
เชิงผสม บางครั้ง LFSR ที่ใชในตัวสรางกระแสบิตเชิงผสมอาจมีการเลื่อนบิตที่อยูภายในไมพรอมกัน ซึ่ง
ชวงเวลาในการเลื่อนบิตสวนใหญจะขึ้นกับสัญญาณนาฬิกา การเลื่อนบิตของ LFSR ตัวหนึ่งอาจขึ้นกับบิต

34
สงออกของ LFSR อีกตัวหนึ่งก็ได ลักษณะการนํา LFSR มากกวาหนึ่งตัวมาตอใชงานรวมกันเพื่อสรางตัว
สรางกระแสบิตเชิงผสมมีมากมายหลายรูปแบบ เชน ตัวสรางกระแสบิตแบบเจฟว [GEFF73] และตัวสราง
กระแสบิตแบบขั้นสลับ (Alternative Step) [MENE97]

3.4.1 ตัวสรางกระแสบิตแบบเจฟว
ตัวสรางกระแสบิตแบบเจฟว จะใช LFSR จํานวน 3 ตัว มาตอรวมกันในแบบไมเปนเชิงเสน (Non-
linear) ดูรูปที่ 3.7 ประกอบ

รูปที่ 3.7 ตัวสรางกระแสบิตแบบเจฟว

จากรูป บิตสงออกของ LFSR สองตัวจะถูกปอนเขาอุปกรณสหสัญญาณ (Multipiexer) ขณะที่ บิต


สงออกของ LFSR ตัวที่เหลือจะใชในการควบคุมบิตสงออกของอุปกรณสหสัญญาณ ถากําหนดให b1, b2
และ b3 เปนบิตสงออกของ LFSR ทั้ง 3 ตัวตามลําดับ บิตสงออกของตัวสรางกระแสบิตแบบเจฟว สามารถ
เขียนใหอยูในรูปของสมการไดดังนี้

c(t) = (b1 AND b2) ⊕ ((NOT b1) AND b3) (3.3)

จากสมการ บิตสงออก b1 จาก LFSR ตัวที่หนึ่งจะเปนตัวควบคุมบิตสงออกของอุปกรณ สห


สัญญาณ คาคาบของตัวสรางกระแสบิตสามารถหาไดจากตัวคูณรวมที่นอยที่สุดของคาบของ LFSR แตละ
ตัว ซึ่งในที่นี้ก็คือ ผลคูณของคาคาบของ LFSR ทั้งสามตัวนั่นเอง รูปที่ 3.8 แสดงวงจรภายในตัวสราง
กระแสบิตแบบเจฟว

35
รูปที่ 3.8 วงจรภายในตัวสรางกระแสบิตแบบเจฟว

3.4.2 ตัวสรางกระแสบิตแบบขั้นสลับ
ตัวสรางกระแสบิตแบบขั้นสลับ จะใช LFSR จํานวน 3 ตัวมาตอรวมกันในแบบไมเปนเชิงเสน
เหมือนตัวสรางกระแสบิตแบบเจฟว แตการทํางานของ LFSR ภายในจะถูกควบคุมโดยสัญญาณนาฬิกา
(Clock) กลาวคือการเคลื่อนที่ของกระแสบิตทั้งหมดภายในตัวสรางกระแสบิตจะถูกควบคุมโดยสัญญาณ
นาฬิกาตัวเดียวกัน ตัวสรางกระแสบิตแบบขั้นสลับนี้จัดอยูในตัวสรางชนิดที่ควบคุมโดยสัญญาณนาฬิกา
(Clock-controlled Generators) ซึ่งมีแนวความคิดในการออกแบบที่วา คุณสมบัติของความไมเปนเชิงเสน
ภายในตัวสรางกระแสบิตสามารถสรางขึ้นได โดยใชบิตสงออกของ LFSR ตัวหนึ่งไปควบคุมการทํางานใน
การสรางกระบิตของ LFSR อีกตัวหนึ่ง ซึ่งถาการทํางานของ LFSR ตัวที่ถูกควบคุมอยูในลักษณะที่ไม
สม่ําเสมอ (Irregular Manner) แลว จะสามารถปองกันการโจมตีตัวสรางกระแสบิตโดยใชพื้นฐานของการ
เคลื่อนที่ของกระแสบิตแบบสม่ําเสมอได รูปที่ 3.9 แสดงวงจรภายในของตัวสรางกระแสบิตแบบขั้นสลับ

รูปที่ 3.9 วงจรภายในตัวสรางกระแสบิตแบบขั้นสลับ


จากรูป ตัวสรางกระแสบิตแบบขั้นสลับจะใช LFSR-1 ควบคุมการทํางานของ LFSR-2 และ 3 เมื่อ
มีสัญญาณนาฬิการอบแรกเขามา LFSR-1 จะเริ่มทํางานโดยการสรางบิตสงออก b1 ออกมา 1 บิต ถา b1 มีคา
เปน 1 ตัว LFSR-2 จะเริ่มทํางานโดยการสรางบิตสงออก b2 ออกมา กระแสบิตผลลัพธที่ไดจะเกิดจากการ
ออรเฉพาะกันระหวางบิตสงออกที่ไดจาก LFSR-2 และ LFSR-3 ในกรณีนี้ b3 จะมีคาเปน 0 แตถา b1 มีคา
เปน 0 ตัว LFSR-3 จะเริ่มทํางานโดยการสรางบิตสงออก b3 ออกมา ในกรณีนี้ b2 จะมีคาเปน 0 แทน เมื่อมี
สัญญาณนาฬิการอบที่สองเขามา การทํางานของ LFSR ทั้งสามก็จะเริ่มวนซ้ํา โดยบิตสงออกของ LFSR ตัว

36
ที่ไมทํางานในสัญญาณนาฬิการอบนี้ จะใชคาบิตสงออกที่ไดจากการทํางานในสัญญาณนาฬิการอบที่แลวมา
ทําการออรเฉพาะกันแทน
ในทางปฏิบัติ การนํา LFSR มากกวาหนึ่งตัวมาตอใชงานรวมกันแบบตอเรียง (Cascade) ก็
สามารถทําได การตอเรียงของ LFSR หลายๆ ตัวจะใหคาคาบผลลัพธที่มีขนาดใหญ รูปแบบลําดับสงออก
ของบิตที่ไดมีความซับซอนเชิงเสนสูง และมีคุณสมบัติทางสถิติที่ดีขึ้น

3.5 One-time Pad


อัลกอริทึมที่เรียกวา One-time Pad [KAHN67] สื่อความหมายถึงสมุดฉีกที่ใชเพียงครั้งเดียวแลวทิ้ง
คืออัลกอริทึมแบบหนึ่งที่มีลักษณะการทํางานเหมือนกับตัวแปลงรหัสแบบกระแส และเปนอัลกอริทึมที่คน
สวนใหญในสาขาวิทยาการรหัสลับยอมรับแลววามีความปลอดภัยสูงที่สุด One-time Pad ในที่นี้ก็คือ กลุม
ตัวอักษร (Letter) แบบสุมจริงที่มีชุดรูปแบบของตัวอักษรที่ไมซ้ํากันขนาดใหญ (Large Non-repeating Set)
กลุมตัวอักษรเหลานั้นจะเขียนเก็บไวในสมุดฉีก และถูกนํามาใชเปนกุญแจในการเขาและถอดรหัสลับ
ขอความใดๆ ในการนําไปใชงาน ผูสงขอความจะนําตัวอักษรที่อยูในสมุดฉีกมาทําการเขารหัสลับรวมกับ
ขอความตนฉบับทีละตัว วิธีดําเนินการที่ใชในการเขารหัสลับก็คือ การบวกแบบมอดุโล 26 ระหวางตัวอักษร
หนึ่งจากสมุดฉีกและอีกตัวอักษรหนึ่งจากขอความตนฉบับ ซึ่งตัวอักษรแตละตัวจากสมุดฉีกจะนํามาใชเพียง
ครั้งเดียวตอการเขารหัสลับหนึ่งครั้งเทานั้น หลังจากที่ผูสงใชตัวอักษรที่อยูบนสมุดฉีกหนาหนึ่งหมดไปแลว
ก็จะฉีกหนาที่บรรจุตัวอักษรเหลานั้นออกไปทําลาย ทางฝงผูรับจะมีสมุดฉีกเลมเดียวกันอยู เมื่อผูรับได
ขอความรหัสมา ก็จะใชตัวอักษรที่อยูในสมุดฉีกของตนเพื่อถอดรหัสลับขอความเหลานั้น ซึ่งวิธีดําเนินการที่
ใชในการถอดรหัสลับก็คือ การลบแบบมอดุโล 26 หลังจากที่ผูรับใชตัวอักษรที่อยูบนสมุดฉีกหนาเดียวกัน
หมดไปแลว ก็จะฉีกหนานั้นออกไปทําลายเชนเดียวกัน ในการเขารหัสลับครั้งตอไป ผูสงจะนํามากลุม
ตัวอักษรชุดใหมที่อยูในสมุดฉีกมาใชงานแทน สมมุติวาขอความตนฉบับที่ตองการเขารหัสลับคือ
ONETIMEPAD และตัวอักษรจากสมุดฉีกที่นํามาใชเปนกุญแจคือ SDFRJDBRCP ขอความรหัสที่ไดจาก
การเขารหัสลับโดยใช One-time Pad ก็คือ HRKLSQGHDT เนื่องจาก
O + S mod 26 = H
N + D mod 26 = R
E + F mod 26 = K
….
….
D + P mod 26 = T

37
ถาตัวอักษรที่สรางขึ้นแตละตัวในสมุดฉีกเปนแบบสุมที่แทจริง และผูที่แอบดักฟงขอความรหัส
ระหวางผูสงกับผูรับไมสามารถเขาถึงกลุมตัวอักษรจากสมุดฉีกที่ใชในการเขารหัสลับได วิธีการเขารหัสลับ
แบบนี้จะมีความปลอดภัยแบบสมบูรณ เนื่องจากผูที่แอบดักฟงจะไมมีขอมูลที่เปนประโยชนใดๆ เพื่อใชใน
การวิเคราะหรหัสลับจากขอความรหัสที่ไดมา ในการถอดรหัสลับจากตัวอยางที่ยกมาขางตน ตัวอักษรที่ใช
อาจเปน USRRXMBTJA ซึ่งสามารถถอดรหัสลับออกมาเปน MYSTUDENTS จะเห็นไดวาผลลัพธที่ได
เปนคําที่มีความหมาย แตไมใชขอความตนฉบับที่แทจริง เนื่องจากขอความที่ถอดรหัสลับออกมาแลวมี
ความหมาย ทําใหนักวิเคราะหรหัสลับไมสามารถบอกไดวา ผลลัพธที่ไดเปนขอความตนฉบับที่แทจริง
หรือไม ดังนั้นวิธีเดียวที่จะใชโจมตีอัลกอริทึม One-time Pad ไดก็คือ การคนหาวิธีการที่ใชในการสราง
กลุมตัวอักษรที่อยูในสมุดฉีกเหลานั้นขึ้นมาใหม ซึ่งถากลุมตัวอักษรที่สรางขึ้นในตอนแรกมาจากแหลง
สรางตัวอักษรแบบสุมจริงแลว การโจมตีอัลกอริทึม One-time Pad เพื่อทําใหเกิดจุดออนนั้น แทบจะ
เปนไปไมไดเลย

ตัวอยางที่ 3.3 จงใชอัลกอริทึม One-time Pad ในการเขารหัสลับขอความตนฉบับ SECURITY


กําหนดใหกุญแจที่ใชคือ SPDGJVNJ

วิธีทํา โดยใชหลักการบวกแบบมอดุโล 26 ระหวางตัวอักษรตัวตอตัว จะไดผลลัพธดังนี้


S + S mod 26 = L
E + P mod 26 = U
C + D mod 26 = G
U + G mod 26 = B
R + J mod 26 = B
I + V mod 26 = E
T + N mod 26 = H
Y + J mod 26 = I
ดังนั้นขอความรหัสที่ไดคือ LUGBBEHI

แนวความคิดของการเขารหัสลับแบบ One-time Pad สามารถนํามาใชกับขอมูลเลขฐานสองได


เชนกัน กลาวคือ แทนที่จะใชสมุดฉีกที่มีแตตัวอักษร เราก็ใชสมุดฉีกที่มีแตขอมูลที่เปนเลขฐานสองแทน
หรือกลาวอีกนัยหนึ่งก็คือ แทนที่จะทําการบวกแบบมอดุโล 26 เราก็ใชการบวกแบบมอดุโล 2 หรือการออร
เฉพาะแทน เชนเดียวกันกับตัวแปลงรหัสแบบกระแสหรือตัวแปลงรหัส Vernam ซึ่งการดําเนินการกับ

38
ขอมูลเลขฐานสองโดยตรงจะมีความสะดวกกวาก็คือ ในการถอดรหัสลับเราสามารถใชขอมูลเลขฐานสอง
ในสมุดฉีกมาออรเฉพาะกับขอความรหัสเพื่อหาขอความตนฉบับไดโดยตรง อยางไรก็ตาม One-time Pad
ก็มีจุดดอยในเรื่องการนําไปประยุกตใชงาน จะเห็นไดวาอัลกอริทึม One-time Pad จะเหมาะกับการ
เขารหัสลับขอความตนฉบับที่มีขนาดเล็กๆ เทานั้น ทั้งนี้เนื่องจากขอจํากัดในเรื่องปริมาณของตัวอักษรที่ใช
แทนกุญแจในการเขารหัสลับนั่นเอง ถาขอความตนฉบับมีขนาดใหญมาก ปริมาณของตัวอักษรที่ตองใชใน
การเขารหัสลับก็จะมีขนาดใหญมากตามไปดวย ซึ่งขนาดที่ใหญของตัวอักษรที่ตองใชนี้จะทําใหการเก็บ
รักษา ทําลาย หรือสงตออยางลับๆ ใหกับผูใชงานคนอื่นทําไดไมสะดวก นอกจากนี้กระบวนการที่ใชในการ
เขาและถอดรหัสลับจะตองมีการประสานเวลา (Synchronize) กันดวย มิฉะนั้นผูรับจะไมสามารถถอดรหัส
ลับไดอยางถูกตอง ยกตัวอยางเชน ถาฝงผูรับมีบิตขอมูลขาดไปหนึ่งบิตที่ตอนตนของขอความรหัส ซึ่งอาจ
เกิดจากความผิดพลาด (Error) ในกระบวนการสงขอมูล (Data Transmission) จะสงผลใหขอความ
ตนฉบับที่เปนผลลัพธจากการถอดรหัสลับนั้นๆ ไมมีความหมายใดๆ ก็ได แตถึงแมวา One-time Pad จะมี
จุดออนดังที่ยกตัวอยางมา นักสรางรหัสลับหลายๆ คนก็ยังนําอัลกอริทึม One-time Pad มาประยุกตใชงาน
รวมกับระบบรักษาความปลอดภัยที่พวกเขาสรางขึ้น ใหสังเกตวา ถาตัวสรางกระแสบิตในตัวแปลงรหัส
Vernam มีความเปนอิสระ (Independent) และเปนแบบสุมจริง (True Random) เราอาจพิจารณาผลลัพธ
ที่ไดจากตัวแปลงรหัส Vernam นั้นเสมือนกับวาเปนเขารหัสลับแบบ One-time Pad ก็ได

3.6 คําถามทายบท
1. จงอธิบายแนวคิดการทํางานของตัวแปลงรหัสแบบกระแส รวมทั้งงานประยุกตตางๆ ที่มีความเหมาะสม
กับตัวแปลงรหัสลักษณะนี้
2. เวกเตอรเริ่มตนถูกนํามาใชในตัวแปลงรหัสแบบกระแสเพื่อเพิ่มความปลอดภัยของระบบการเขารหัสลับ
โดยรวมไดอยางไร
3. จงอธิบายถึงความปลอดภัยของอัลกอริทึม One-time Pad ทําไมคนทั่วไปจึงพิจารณาวาอัลกอริทึมนี้เปน
อัลกอริทึมที่แข็งแกรงที่สุด
4. จงอภิปรายถึงขอดี ขอเสียของการใช One-time Pad ในการเขารหัสลับขอมูลสื่อประสม
5. จงอธิบายหลักการทํางานของเรจิสเตอรแบบเลื่อนปอนกลับ รวมทั้งขอดี ขอเสียของการนํามาใชงานเปน
ตัวแปลงรหัสแบบกระแส

39
บทที่ 4
อัลกอริทึมสมมาตร ตอนสอง

4.1 ตัวแปลงรหัสแบบกลุม
ตัวแปลงรหัสแบบกลุมจะแปลงกลุมบิตนําเขา (Input Bits) ที่มีความยาวคงที่คาหนึ่งไปสูกลุมบิต
สงออกที่มีความยาวคงที่คาเดียวกัน ตามอุดมคติฟงกชันที่ใชเขาและถอดรหัสลับในตัวแปลงรหัสแบบกลุม
ควรจะมีลักษณะที่วา ทุกๆ บิตที่อยูในกลุมสงออก (Output Block) จะแปรผันตามแบบรวมกัน (Depend
Jointly) กับทุกๆ บิตที่อยูในกลุมนําเขา (Input Block) และทุกๆ บิตของกุญแจที่ใช ขนาดของกลุมบิตที่ใชใน
ตัวแปลงรหัส หรือจํานวนบิตที่อยูในแตละกลุมบิต จําเปนตองมีขนาดที่ใหญมากพอที่จะปองกันการโจมตี
โดยการคนหาอยางละเอียด หรือการโจมตีแบบตะลุย ยกตัวอยางเชน นักวิเคราะหรหัสลับสามารถสราง
พจนานุกรม (Dictionary) ที่ประกอบไปดวยขอความรหัสพรอมกับขอความตนฉบับที่เปนไปไดทุกๆ
ขอความ โดยอางอิงจากกุญแจที่กําหนดให ฉะนั้นเมื่อมีการดักฟงขอความรหัสที่สงผานระหวางผูใชงานสอง
คน นักวิเคราะหรหัสลับจะสามารถกูคืนขอความตนฉบับไดงายๆ โดยการคนหาและเปรียบเทียบกลุมบิตจาก
พจนานุกรมที่สรางขึ้นทีละกลุมบิตๆ อยางไรก็ตามถากลุมบิตที่ใชในการเขารหัสลับมีขนาดใหญพอ
พจนานุกรมที่นักวิเคราะหรหัสลับใชจะมีขนาดที่ใหญเกินไปจนยากที่จะสรางและจัดเก็บ ยกตัวอยางเชน ถา
กลุมบิตนําเขามีขนาด 64 บิต พจนานุกรมที่สรางขึ้นจากกุญแจหนึ่งดอกจะมีจํานวนรูปแบบของกลุมบิตทั้งสิ้น
264 รูปแบบหรือประมาณ 1.85 ×1019 รูปแบบ โดยปกติตัวแปลงรหัสแบบกลุมสามารถแบงออกตามลักษณะ
ของอัลกอริทึมที่ใชในการเขาและถอดรหัสลับภายในตัวแปลงรหัสนั้นๆ ไดคือ ตัวแปลงรหัสแบบดั้งเดิมหรือ
แบบฉบับ (Traditional or Classical Cipher) และตัวแปลงรหัสแผนใหม (Modern Cipher)

4.2 ตัวแปลงรหัสแบบดั้งเดิม
ที่มาของคําวา ตัวแปลงรหัสแบบดั้งเดิมหรือแบบฉบับนั้น ก็เพื่อที่จะสื่อความหมายถึงวิธีการเขา
และถอดรหัสลับที่เปนที่รูจักกันดี (Well-known) มาเปนเวลานานแลว โดยทั่วไปมักจะหมายถึงวิธีการที่
คิดคนพัฒนาขึ้นในสมัยโบราณกอนปคริสตศักราช 1500 ตัวแปลงรหัสแบบดั้งเดิมจะใชอัลกอริทึมการเขา
และถอดรหัสลับที่อยูบนพื้นฐานของตัวอักขระ (Character) การเขารหัสลับจะดําเนินการโดยการแทนที่ตัว
อักขระหรือการสลับตําแหนงตัวอักขระเหลานั้น อัลกอริทมึ ที่มีการออกแบบมาอยางเหมาะสมจะมีการ
ดําเนินการทั้งสองอยาง แตละอยางอาจกระทําหลายๆ ครั้ง ซึ่งทําใหขั้นตอนการเขาและถอดรหัสลับมีความ
ซับซอนสูง ใชเวลานาน และจําเปนตองใชเครื่องคอมพิวเตอร หรืออุปกรณประเภทฮารดแวรที่สรางขึ้นเปน

40
พิเศษมาชวยดําเนินการ โดยทั่วไปตัวแปลงรหัสแบบดั้งเดิมสามารถแบงยอยออกเปน 2 ชนิดคือ ตัวแปลง
รหัสแบบแทนที่ (Substitution Cipher) และตัวแปลงรหัสแบบสลับตําแหนง (Transposition Cipher)

4.2.1 ตัวแปลงรหัสแบบแทนที่
ตัวแปลงรหัสแบบแทนที่จะใชวิธีการแทนที่ตัวอักขระที่เปนสัญลักษณ (Symbol) หรือชุดตัวอักษร
(Alphabet) ดวยสัญลักษณหรือชุดตัวอักษรอีกตัวหนึ่ง ยกตัวอยางเชน ในกระบวนการเขารหัสลับหนึ่งๆ
อาจทําการแทนที่ตัวอักษร A ดวยตัวอักษร E และแทนที่ตัวอักษร C ดวยตัวอักษร U หรืออาจทําการแทนที่
สัญลักษณที่เปนตัวเลข 3 ดวยตัวเลข 5 และแทนที่ตัวเลข 1 ดวยตัวเลข 7 เปนตน ในสวนนี้เราจะเนนไปที่
การแทนที่อักขระที่เปนตัวอักษร (Alphabetic Character) เปนหลัก ซึ่งสามารถแบงยอยออกเปนกลุม
ใหญๆ ได 2 กลุมคือ แบบแทนที่อักษรเดี่ยว (Mono-alphabetic Substitution) และแบบแทนที่หลายอักษร
(Poly-alphabetic Substitution) ในการแทนที่ตัวอักษรในกลุมแรกนี้ อาจใชพื้นฐานของการบวก การคูณ
หรือทั้งสองอยางก็ได ในที่นี้เราจะศึกษาวิธีการแทนที่โดยใชพื้นฐานทั้งการบวกและการคูณจากการทํางาน
ของตัวแปลงรหัสตัวหนึ่งซึ่งเปนที่รูจักกันทั่วไปในชื่อ ตัวแปลงรหัสสัมพรรค (Affine Cipher)

4.2.1.1 ตัวแปลงรหัสแบบแทนที่อักษรเดี่ยว
ในการแปลงรหัสแบบแทนที่อักษรเดี่ยว ตัวแปลงรหัสจะเปลี่ยนตัวอักษรใดๆ ในขอความตนฉบับ
ไปเปนตัวอักษรที่กําหนดไวในขอความรหัส โดยไมสนใจตําแหนงของตัวอักษรในขอความตนฉบับนั้นๆ
เชน ถากําหนดใหตัวอักษร B ในขอความตนฉบับเปลี่ยนเปนตัวอักษร R ในขอความรหัส ตัวอักษร B
ทั้งหมดในขอความตนฉบับจะถูกเปลี่ยนเปนตัวอักษร R ในขอความรหัสแทน ตัวแปลงรหัสแรกสุดที่มีการ
บันทึกไววาใชหลักการแทนที่อักษรเดี่ยวก็คือ ตัวแปลงรหัสซีซาร (Caesar Cipher) ซึ่งมีวิธีการเขารหัสลับ
โดยการเลื่อนตัวอักษรแตละตัวไปขางหนา 3 ตัวอักษร รูปที่ 4.1 แสดงผลลัพธที่ไดจากการเขารหัสลับ
ตัวอักษร A ถึง Z โดยใชตัวแปลงรหัสซีซาร

ขอความตนฉบับ A B C D E F G H I J K L M
ขอความรหัส D E F G H I J K L M N O P

ขอความตนฉบับ N O P Q R S T U V W X Y Z
ขอความรหัส Q R S T U V W X Y Z A B C

รูปที่ 4.1 ผลลัพธที่ไดจากการเขารหัสลับแบบซีซาร

41
ใหสังเกตวาตัวอักษร X Y Z ในขอความตนฉบับจะเขารหัสลับเปนตัวอักษร A B C ในขอความ
รหัสตามลําดับ ถาเรากําหนดใหใชตัวเลขในการแสดง (Represent) ตัวอักษรที่จะทําการเขารหัสลับโดยใช
ลําดับของตัวอักษรนั้นเปนหลัก เชน A = 0, B = 1, C = 2,… วิธีการที่ใชในการเขารหัสลับแบบซีซารก็คือ
การบวกดวย 3 มอดุโล 26 ซึ่งแสดงในรูปของสมการไดดังนี้

C = EK(M) = (M + 3) mod 26 (4.1)

โดยกุญแจที่ใชในการเขารหัสลับคือ K = 3 สําหรับการถอดรหัสลับ ตัวอักษรแตละตัวในขอความ


รหัสจะถูกเลื่อนไปขางหลัง 3 ตัวอักษร ซึ่งแสดงในรูปของสมการไดดังนี้

M = DK(C) = (C - 3) mod 26 (4.2)

ใหสังเกตวาในทางปฏิบัติ K ที่ใชในการแปลงรหัสแบบแทนที่อักษรเดี่ยว อาจมีคาไดตั้งแต 0 ถึง 25


แตถาใชตัวแปลงรหัสซีซารในการเขารหัสลับ K จะมีคาเทากับ 3 เสมอ

ตัวอยางที่ 4.1 จงใชตัวแปลงรหัสซีซาร ในการเขารหัสลับขอความตนฉบับ SECURITY

วิธีทํา ขั้นตอนการเขารหัสลับโดยตัวแปลงรหัสซีซาร แสดงไวดังรูปที่ 4.2 ซึ่งขอความรหัสผลลัพธที่


ไดคือ VHFXULWB

รูปที่ 4.2 ตัวอยางการเขารหัสลับแบบซีซาร

42
ตัวอยางที่ 4.2 จงใชการโจมตีแบบตะลุย (Brute-force Attack) เพื่อหาขอความตนฉบับจากขอความรหัส
PMFM EQOGDUFK ที่ไดมาจากตัวแปลงรหัสแบบแทนที่อักษรเดี่ยว

วิธีทํา จากการโจมตีแบบตะลุยที่คา K ตางๆ ดูรูปที่ 4.3 ประกอบ พบวาที่ K = 14 ขอความ


ผลลัพธที่ไดมีความหมาย ฉะนั้นกุญแจที่ใชในการถอดรหัสลับคือ การลบดวย 14 มอดุโล
26 ซึ่งขอความตนฉบับที่กูคืนไดคือ DATA SECURITY

ขอความรหัส P M F M E Q O G D U F K
1 Q N G N F R P H E V G L
2 R O H O G S Q I F W H M
3 S P I P H T R J G X I N
4 T Q J Q I U S K H Y J O
5 U R K R J V T L I Z K P
6 V S L S K W U M J A L Q
7 W T M T L X V N K B M R
8 X U N U M Y W O L C N S
9 Y V O V N Z X P M D O T
10 Z W P W O A Y Q N E P U
11 A X Q X P B Z R O F Q V
12 B Y R Y Q C A S P G R W
K 13 C Z S Z R D B T Q H S X
14 D A T A S E C U R I T Y
15 E B U B T F D V S J U Z
16 F C V C U G E W T K V A
17 G D W D V H F X U L W B
18 H E X E W I G Y V M X C
19 I F Y F X J H Z W N Y D
20 J G Z G Y K I A X O Z E
21 K H A H Z L J B Y P A F
22 L I B I A M K C Z Q B G
23 M J C J B N L D A R C H
24 N K D K C O M E B S D I
25 O L E L D P N F C T E J

รูปที่ 4.3 ตัวอยางผลลัพธจากการโจมตีแบบตะลุยที่ K คาตางๆ

43
4.2.1.2 ตัวแปลงรหัสสัมพรรค
วิธีการแปลงรหัสที่กลาวมาขางตนจะอยูบนพื้นฐานของการบวกดวย K มอดุโล 26 (Addition
Modulo 26) และมักเรียกกันอีกชื่อหนึ่งวา ตัวแปลงรหัสแบบบวก (Additive Cipher) ในทํานองเดียวกัน เรา
อาจทําการแปลงรหัสโดยใชพื้นฐานของการคูณดวย K มอดุโล 26 (Multiplication Modulo 26) ก็ได ซึ่งเปนที่
รูจักกันในชื่อ ตัวแปลงรหัสแบบคูณ (Multiplicative Cipher) ยกตัวอยางเชน ถาเรากําหนดใหคา K = 2
ผลลัพธที่ไดจากการเขารหัสลับตัวอักษร A ถึง Z โดยใชตัวแปลงรหัสแบบคูณแสดงไวในรูปที่ 4.4

ขอความตนฉบับ A B C D E F G H I J K L M
ขอความรหัส B D F H J L N P R T V X Z

ขอความตนฉบับ N O P Q R S T U V W X Y Z
ขอความรหัส B D F H J L N P R T V X Z

รูปที่ 4.4 ผลลัพธที่ไดจากตัวแปลงรหัสแบบคูณที่ K = 2

ใหสังเกตวาขอความรหัสผลลัพธที่ไดจะมีคาซ้ํากันสองครั้ง เชนตัวอักษร A และ N จะใหผลลัพธ


เหมือนกันคือตัวอักษร B ในขณะที่ตัวอักษร D และ Q จะใหผลลัพธเหมือนกันคือตัวอักษร H ซึ่งในทาง
ปฏิบัติ เราไมสามารถนําวิธีการนี้มาใชในการเขารหัสลับได เพราะจะเกิดปญหาขึ้นในขั้นตอนการถอดรหัส
ลับ กลาวคือ เราตอบไมไดวาขอความตนฉบับของตัวอักษร B คือตัวอักษร A หรือ N อยางไรก็ตาม ถาเรา
กําหนดใหคา K = 3 แลวลองเขารหัสลับตัวอักษร A ถึง Z โดยใชตัวแปลงรหัสแบบคูณอีกครั้ง จะได
ผลลัพธดังที่แสดงในรูป 4.5

ขอความตนฉบับ A B C D E F G H I J K L M
ขอความรหัส C F I L O R U X A D G J M

ขอความตนฉบับ N O P Q R S T U V W X Y Z
ขอความรหัส P S V Y B E H K N Q T W Z

รูปที่ 4.5 ผลลัพธที่ไดจากตัวแปลงรหัสแบบคูณที่ K = 3

44
ครั้งนี้ขอความรหัสผลลัพธที่ไดจะมีคาไมซ้ํากัน ทําใหเราสามารถถอดรหัสลับอยางถูกตองได จะ
สังเกตไดวา วิธีการเขารหัสลับแบบนี้ถือเปนการแปลงรหัสแบบแทนที่อักษรเดี่ยว ซึ่งถาเราลองเปลี่ยนคา K
ไปเรื่อยๆ จะพบวาที่คา K = 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25 จะใหขอความรหัสผลลัพธที่มีคาไมซ้ํา
กัน ฉะนั้นเมื่อมีการใชตัวแปลงรหัสแบบคูณ กุญแจที่สามารถใชในการเขารหัสลับไดจะมีเพียง 12 คาเทานั้น
ซึ่งถือวามีความปลอดภัยนอยมาก เมื่อเทียบกับกุญแจที่ใชในตัวแปลงรหัสแบบบวกซึ่งมีไดถึง 26 คา เพื่อ
สรางวิธีการเขารหัสลับแบบใหมที่มีความปลอดภัยสูงกวา โดยใชพื้นฐานการเขารหัสลับที่งายและไม
ซับซอนอยาง การบวกและการคูณดวย K มอดุโล 26 เราจะทําการเขารหัสลับขอความตนฉบับดวยตัวแปลง
รหัสแบบบวกและ K ตัวที่หนึ่งเรียกวา K1 จากนั้นนําผลลัพธที่ไดมาเขารหัสลับอีกครั้งดวยตัวแปลงรหัส
แบบคูณและ K อีกตัวหนึ่งเรียกวา K2 ซึ่งตัวแปลงรหัสแบบใหมที่ไดนี้จะเรียกวา ตัวแปลงรหัสสัมพรรค
[BEUT94] กุญแจที่ใชในการเขารหัสลับโดยตัวแปลงรหัสสัมพรรคคือ K1 และ K2 จํานวนกุญแจที่สามารถ
ใชในการเขารหัสลับที่เปนไปไดทั้งหมดคือ K1 x K2 ในที่นี้จะมีคาเทากับ 26 x 12 = 312 รูปแบบ

4.2.1.3 ตัวแปลงรหัสแบบแทนที่หลายตัวอักษร
ในการแปลงรหัสแบบแทนที่หลายตัวอักษร ตัวแปลงรหัสจะเปลี่ยนตัวอักษรแตละตัวในขอความ
ตนฉบับเปนตัวอักษรใดๆ ก็ไดในขอความรหัส ขึ้นอยูกับกุญแจที่ใชในการเขารหัสลับตัวอักษรนั้นๆ เชน
ตัวอักษร B ตัวแรกที่เจอในขอความตนฉบับอาจถูกเปลี่ยนเปนตัวอักษร R ในขอความรหัส ขณะที่ตัวอักษร
B ตัวตอไปที่เจอ อาจถูกเปลี่ยนเปนตัวอักษร G ในขอความรหัส เปนตน ซึ่งตําแหนงการแทนที่หรือการ
เปลี่ยนแปลงที่จะเกิดขึ้นกับขอความรหัสผลลัพธนี้ จะขึ้นอยูกับกุญแจที่ใชในการเขารหัสลับขอความ
ตนฉบับนั้นๆ ใหสังเกตวาความสัมพันธของการแทนที่แบบอักษรเดี่ยว จะเปนแบบฟงกชันหนึ่งตอหนึ่ง
(One-to-one Function) ขณะที่ความสัมพันธของการแทนที่แบบหลายตัวอักษร จะเปนแบบฟงกชันหนึ่ง
ตอหลาย (One-to-many Function) ตัวอยางของตัวแปลงรหัสแบบแทนที่หลายตัวอักษรที่เปนที่รูจักกัน
อยางกวางขวางก็คือ ตัวแปลงรหัสแบบ Vigenère (Vigenère Cipher) ซึ่งจะทําการเขารหัสลับตัวอักษรแต
ละตัวโดยใชตัวแปลงรหัสแบบแทนที่อักษรเดี่ยวอยางเปนอิสระตอกัน เนื่องจากจํานวนตัวอักษรใน
ภาษาอังกฤษมีทั้งหมด 26 ตัว การแปลงรหัสแบบ Vigenère จึงเปรียบเสมือนกับการนําตัวแปลงรหัสแบบ
แทนที่อักษรเดี่ยว 26 ตัวมาใชรวมกัน กลาวคือ ตัวแปลงรหัสแบบแทนที่อักษรเดี่ยวแตละตัวสามารถ
เขารหัสลับขอความตนฉบับโดยการเลื่อนตัวอักษรไปขางหนาได 1 ถึง 26 ตัวอักษร ขึ้นอยูกับกุญแจที่ใช
ยกตัวอยางเชน ถากุญแจที่ใชในการเขารหัสลับตัวอักษร B คือ A ตัวแปลงรหัสจะไมทําการเปลี่ยนแปลง
ใดๆ เนื่องจาก A = 1 แตถากุญแจที่ใชคือตัวอักษร C ตัวแปลงรหัสจะทําการเลื่อนตัวอักษร B ไปขางหนา 2
ตัวตําแหนง ซึ่งใหผลลัพธเปนตัวอักษร D เพื่อใหเขาใจถึงวิธีการเขารหัสลับแบบ Vigenère ไดดีขึ้น
ผลลัพธที่ไดจากการเขารหัสลับตัวอักษร A ถึง Z โดยใชตัวแปลงรหัสแบบแทนที่อักษรเดี่ยวทั้ง 26 ตัวได
แสดงไวในรูปที่ 4.6

45
M
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
K
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

รูปที่ 4.6 ผลลัพธที่ไดจากการเขารหัสลับแบบ Vigenère

จากรูป ตัวอักษรในแตละแถวไดมาจากการเลื่อนตําแหนงของตัวอักษรภาษาอังกฤษทั้ง 26 ตัวไป


ขางหนาทีละหนึ่งตัวอักษร โดยตัวอักษรที่อยูหนาสุดของแตละแถวจะเลื่อนไปตอทายตัวอักษรที่เหลือใน
แถวถัดไปเสมอ ในกระบวนการเขารหัสลับ ตัวอักษรแตละตัวในขอความตนฉบับจะใชแทนคาดรรชนี
(Index) ของตัวอักษรในแนวตั้งหรือแนวคอลัมน (Column) ขณะที่ตัวอักษรแตละตัวในกุญแจเขารหัสลับ
จะใชแทนคาดรรชนีของตัวอักษรในแนวนอน (Row) ซึ่งตัวอักษรในตําแหนงจุดตัดระหวางแนวตั้งและ
แนวนอน ก็คือผลลัพธที่ไดจากการเขารหัสลับ เชน กําหนดใชตัวอักษร P ในขอความตนฉบับและตัวอักษร
K ในกุญแจ ผลที่ไดจากการเขารหัสลับก็คือตัวอักษร Z

46
ตัวอยางที่ 4.3 จงใชตัวแปลงรหัสแบบ Vigenère ในการเขารหัสลับขอความตนฉบับ TODAY กําหนดให
กุญแจที่ใชคือ KEY

วิธีทํา ในกรณีที่กุญแจที่ใชมีขนาดเล็กกวาขอความตนฉบับ เราจะนํากุญแจมาใชวนไปเรื่อยๆ


T ในแนวตั้ง K ในแนวนอน จะใหผลลัพธเปน D
O ในแนวตั้ง E ในแนวนอน จะใหผลลัพธเปน S
D ในแนวตั้ง Y ในแนวนอน จะใหผลลัพธเปน B
A ในแนวตั้ง K ในแนวนอน จะใหผลลัพธเปน K
Y ในแนวตั้ง E ในแนวนอน จะใหผลลัพธเปน C
ดังนั้นขอความรหัสที่ไดคือ DSBKC

ตัวอยางที่ 4.4 กําหนดใหขอความรหัส C = THIRMAUOLPHL ผานการเขารหัสลับโดยใชตัวแปลงรหัส


แบบ Vigenère สมมุติใหกุญแจที่ใชในการเขารหัสลับประกอบดวยตัวอักษร 3 ตัวคือ “T”,
“O” และ “N” จงวิเคราะหหาขอความตนฉบับ M และกุญแจที่ใชในการถอดรหัสลับ K

วิธีทํา ในกรณีนี้ เราจะลองถอดรหัสลับขอความรหัสขางตนโดยใชตัวอักษรที่ใหมาทั้ง 3 ตัวอักษร


ผลลัพธที่ไดคือ

T H I R M A U O L P H L
T M A B K F T N H E I A E
O H V W F A O I C Z D V Z
N G U V E Z N H B Y C U Y

ใหสังเกตวา ขอความหลังการถอดรหัสลับที่มีความหมายจะแสดงดวยตัวอักษรที่เปนตัว
เขม ซึ่งขอความตนฉบับที่ไดคือ HAVEANICEDAY หรือ HAVE A NICE DAY และ
กุญแจที่ใชในการถอดรหัสลับคือ OTNNONOOTOTN

47
4.2.2 ตัวแปลงรหัสแบบสลับตําแหนง
ตัวแปลงรหัสแบบสลับตําแหนงจะไมทําการเปลี่ยนแปลงกลุมตัวอักษรใดๆ ที่อยูในขอความ
ตนฉบับ แตจะใชวิธีการเรียงสับเปลี่ยน (Permutation) ตําแหนงภายในกลุมตัวอักษรเหลานั้น เพื่อสราง
ขอความรหัสขึ้นมาใหม ยกตัวอยางเชน ในการเขารหัสลับหนึ่งๆ เรากําหนดใหกลุมตัวอักษรขนาด 8
ตัวอักษรมีการเรียงสับเปลี่ยนตําแหนงของตัวอักษรใหมดังรูปที่ 4.7

รูปที่ 4.7 การเรียงสับเปลี่ยนตําแหนงภายในกลุมตัวอักษร

เมื่อทําการเขารหัสลับขอความตนฉบับ SECURITY จะไดผลลัพธเปนขอความรหัส CSETIUYR


ตามลําดับ ในกรณีที่ขอความตนฉบับมีความยาวมากกวา 8 ตัวอักษร เราจะแบงขอความตนฉบับนั้นออกเปน
สวนๆ แตละสวนมีขนาด 8 ตัวอักษร และทําการเขารหัสลับทีละสวนอยางเปนอิสระตอกัน ยกตัวอยางเชน
เมื่อตองการเขารหัสลับคําวา A_MULTIMEDIA_COMMUNICATION ขั้นตอนการเขารหัสลับสามารถ
แสดงไดดังรูปที่ 4.8

1 2 3 4 5 6 7 8 3 1 2 7 6 4 8 5
A M U L T I M Encryption M A I T U M L
E D I A C O M Æ I E D O C A M
M U N I C A T I Å N M U T A I I C
O N Decryption O N

รูปที่ 4.8 ตัวอยางการเขารหัสลับโดยวิธีการเรียงสับเปลี่ยน

และขอความรหัสผลลัพธที่ไดคือ MA_ITUMLIEDOCAM_NMUTAIIC_ON ตามลําดับ วิธีการ


เขารหัสลับแบบสลับตําแหนงที่ไมซับซอนอีกวิธีหนึ่งที่เปนที่รูจักกันอยางกวางขวางคือ วิธีการยายคอลัมน
(Columnar Transposition) ซึ่งทําไดงายๆ โดยการจัดเรียงตัวอักษรในขอความตนฉบับใหอยูในรูปของเมท
ริกซ (Matrix) ที่มีจํานวนคอลัมนคงที่เทากับ N และมีจํานวนแถวเปนอิสระขึ้นอยูกับขนาดของขอความ
ตนฉบับ การจัดเรียงจะทําจากซายไปขวา บนลงลาง สําหรับขอความรหัสผลลัพธที่ได จะมาจากการอาน
ตัวอักษรในแนวคอลัมน ทีละคอลัมนตามลําดับที่มีการยายสลับ ยกตัวอยางเชน เมื่อตองการเขารหัสลับคําวา

48
A_MULTIMEDIA_COMMUNICATION โดยวิธีการยายคอลัมนดวยคา N = 8 และลําดับของคอลัมน
เทากับ 3,1,2,7,6,4,8,5 ขั้นตอนการเขารหัสลับแสดงไดดังรูปที่ 4.9

1 2 3 4 5 6 7 8 3 1 2 7 6 4 8 5
A M U L T I M Encryption A M U L T I M
E D I A C O M Æ E D I A C O M
M U N I C A T I Å M U N I C A T I
O N Decryption O N

รูปที่ 4.9 ตัวอยางการเขารหัสลับโดยวิธีการยายคอลัมน

และขอความรหัสผลลัพธที่ไดคือ _DUNMIN_AEMOTCA_MMI_L_C_UAI_IOT ตามลําดับ ให


สังเกตวา ผลลัพธที่ไดจากการเขารหัสลับโดยวิธีการยายคอลัมนในรูปที่ 4.9 จะแตกตางจากการเขารหัสลับ
โดยวิธีการเรียงสับเปลี่ยนในรูปที่ 4.8 นอกจากนี้ วิธีการเขารหัสลับโดยการยายคอลัมนดวยคา N = 2 และ
ไมมีการสลับคอลัมน จะเปนที่รูจักกันในชื่อ การเขารหัสลับแบบแนวรั้วรถไฟ (Rail Fence)
จากตัวอยางขางตนจะเห็นไดวา กุญแจที่ใชในการเขาและถอดรหัสลับจะเปนตัวกําหนดตําแหนง
ของตัวอักษรที่จะทําการสลับตําแหนงภายในกลุมตัวอักษรนั้นๆ ซึ่งวิธีการเขารหัสลับในลักษณะนี้จะมี
ความปลอดภัยนอย เนื่องจากนักวิเคราะหรหัสลับสามารถวิเคราะหหาความสัมพันธระหวางขอความ
ตนฉบับและขอความรหัสไดอยางงายๆ โดยใชวิธีการลองและระบุความผิดพลาด (Trial and Error)
อยางไรก็ตามวิธีการเขารหัสลับแบบสลับตําแหนงนี้ สามารถนําไปใชรวมกับวิธีการเขารหัสลับแบบอื่นๆ
เพื่อสรางตัวแปลงรหัสที่มีความซับซอนและความปลอดภัยสูงขึ้นได

4.3 คําถามทายบท
1. จงอธิบายแนวคิดการทํางานของตัวแปลงรหัสแบบกลุม รวมทั้งงานประยุกตตางๆ ที่มีความเหมาะสมกับ
ตัวแปลงรหัสลักษณะนี้
2. จงอธิบายความแตกตางระหวางตัวแปลงรหัสแบบกระแสกับตัวแปลงรหัสแบบกลุม
3. จงอภิปรายถึงขอดี ขอเสียของการใชกลุมบิตขนาดใหญเพื่อเขารหัสลับในตัวแปลงรหัสแบบกลุม
4. จงอธิบายความแตกตางระหวางการแทนที่และการสลับตําแหนงเมื่อนําฟงกชันทั้งสองมาประยุกตใชงาน
ในการเขารหัสลับ
5. จงอภิปรายถึงตัวแปรที่ใชในการออกแบบตัวแปลงรหัสแบบกระแสและตัวแปลงรหัสแบบกลุมที่สงผล
ใหตัวแปลงรหัสทั้งสองแบบมีความแข็งแกรง ทนทานตอการโจมตีประเภทตางๆ

49
บทที่ 5
อัลกอริทึมสมมาตร ตอนสาม

5.1 ตัวแปลงรหัสแผนใหม
ตัวแปลงรหัสแบบดั้งเดิมจะใชอัลกอริทึมที่อยูบนพื้นฐานการทํางานในระดับตัวอักขระหรือ
สัญลักษณ ขณะที่ตัวแปลงรหัสแผนใหมจะใชอัลกอริทึมที่อยูบนพื้นฐานการทํางานในระดับบิตเปนหลัก
ในการเขารหัสลับตัวแปลงรหัสแผนใหมจะใชวิธีการแทนที่บิตและการสลับตําแหนงบิตเชนเดียวกัน แตจะ
มีการดัดแปร (Modify) ใหมีความซับซอนหลากหลายมากยิ่งขึ้น โดยปกติตัวแปลงรหัสแบบใหมจําเปนตอง
อาศัยการประมวลผลภายในเครื่องคอมพิวเตอร หรือฮารดแวรที่สรางขึ้นเปนพิเศษเปนหลัก
ในอัลกอริทึมสมมาตรที่จัดอยูในกลุมตัวแปลงรหัสแบบกลุมแผนใหม อัลกอริทึม DES (Data
Encryptions Standard) ถือเปนมาตรฐานการเขารหัสลับที่คนทั่วโลกใชศึกษาและนํามาพิจารณาเปนกรณี
ตัวอยางเพื่อเรียนรูการทํางานของตัวแปลงรหัสแบบกลุม [FIPS99] ในอดีตที่ผานมา DES ถือเปนมาตรฐาน
ที่ใชในการเขาและถอดรหัสลับของประเทศตางๆ มากวา 20 ปแลว ถึงแมวาตัวอัลกอริทึมจะถูกพิจารณาวา
ไมมีความปลอดภัยอยางเพียงพอสําหรับการใชงานในยุคปจจุบัน โดยเฉพาะความทนทานตอการโจมตีแบบ
ตะลุยดวยคอมพิวเตอรรุนใหมที่หนวยประมวลผลกลางหรือซีพียูมีความเร็วสูงมากๆ อัลกอริทึม DES ก็
ยังคงแข็งแกรงและทนทานตอการโจมตีและวิเคราะหรหัสลับในรูปแบบอื่นๆ ที่มีอยู ฟงกชันการทํางานของ
DES ยังคงมีประโยชน คุมคากับผูเรียนที่จะใชเวลาศึกษา ทําความเขาใจ ซึ่งความรูที่ไดนี้จะชวยใหเขาใจการ
ทํางานของตัวแปลงรหัสแบบกลุมแบบอื่นๆ ไดดียิ่งขึ้น การออกแบบอัลกอริทึม DES จะอยูบนแนวคิด
พื้นฐานของตัวแปลงรหัสแผนใหม 2 ตัวคือ ตัวแปลงรหัสผลคูณ (Product Cipher) และตัวแปลงรหัส
Feistel (Feistel Cipher)

5.2 ตัวแปลงรหัสผลคูณ
แนวคิดพื้นฐานที่ใชในการออกแบบตัวแปลงรหัสผลคูณก็คือ การพยายามสรางฟงกชันการเขารหัส
ลับที่มีความซับซอนสูงขึ้น จากการนําเอาวิธีการเขารหัสลับแบบงายๆ ที่ไมทนทานตอการโจมตีหลายๆ วิธี
มาใชงานรวมกัน วิธีการเขารหัสลับที่กลาวถึงนี้อาจเปนการแทนที่ การสลับตําแหนง การออรเฉพาะ การ
แปลงเชิงเสน การดําเนินการเชิงเลขคณิต เปนตน แนวคิดของการสรางตัวแปลงรหัสผลคูณนี้จะแตกตางจาก
แนวคิดของการเขารหัสลับแบบหลายๆ ครั้ง (Multiple Encryptions) ซึ่งจะกลาวถึงในรายละเอียดตอไป
โดยปกติตัวแปลงรหัสผลคูณมักจะประกอบดวยขั้นตอนการดําเนินการอยางนอย 2 ขั้นตอนมาตอเรียงกัน

50
โดยมีวัตถุประสงคใหขอความรหัสผลลัพธที่ไดมีความแข็งแกรง ทนทานตอการโจมตีเพิ่มขึ้น เมื่อเทียบกับ
ผลลัพธที่ไดจากขั้นตอนการดําเนินการอยางอิสระแตละตัว เครือขายการแทนที่การเรียงสับเปลี่ยน
(Substitution-Permutation, SP) จัดเปนตัวแปลงรหัสผลคูณแบบหนึ่ง [MENE97] ที่ประกอบไปดวยชุด
ดําเนินการแทนที่และเรียงสับเปลี่ยนยอยๆ นํามาตอเรียงกันหลายๆ ชุด รูปที่ 5.1 แสดงตัวแปลงรหัสผลคูณ
ในรูปของเครือขายการแทนที่ (S) และการเรียงสับเปลี่ยน (P)

รูปที่ 5.1 เครือขายการแทนที่ (S) และการเรียงสับเปลี่ยน (P)

5.3 ตัวแปลงรหัส Feistel


วัตถุประสงคของการใชงานตัวแปลงรหัสผลคูณนั้น ก็เพื่อที่จะเพิ่มความแข็งแกรงของวิธีการ
เขารหัสลับโดยรวมโดยใชวิธีการเขารหัสลับแบบงายๆ มาตอเรียงกัน เชน การแทนที่หรือสลับตําแหนง
ถึงแมวาการนําวิธีการเหลานั้นมาประยุกตใชในการเขารหัสลับรวมกันเปนจํานวนหลายๆ ครั้งจะทําให
ผลลัพธสุดทายที่ไดมีความแข็งแกรงและทนทานตอการโจมตีมากกวาผลลัพธที่ไดจากวิธีการเขารหัสลับแต
ละตัว แตการทําเชนนี้ก็ไมไดเปนการรับประกันวา ผลลัพธของตัวแปลงรหัสผลคูณจะมีความทนทานตอ
การวิเคราะหรหัสลับ โดยเฉพาะการวิเคราะหรหัสลับยุคใหมที่ใชเครื่องคอมพิวเตอรเปนตัวชวยในการ
ประมวลผลเปนหลัก เพื่อทําใหขอความรหัสผลลัพธที่ไดมีความทนทานตอการวิเคราะหรหัสลับเหลานั้น
นักสรางรหัสลับ Claude Shannon จึงเสนอแนวคิดในการนําฟงกชันการทําใหสับสน (Confusion) และ
การแพร (Diffusion) มาประยุกตใชแทนวิธีการแทนที่และสลับตําแหนงในตัวแปลงรหัสผลคูณ [SHAN 49]
การทําใหสับสนและการแพรนั้นสามารถทําไดโดยใชวิธีการแทนที่และสลับตําแหนงตามลําดับ แต
มีการคาดหวังผลลัพธที่ไดที่แตกตางไปจากวิธีการแทนที่และสลับตําแหนงทั่วๆ ไป ในมุมมองของนักสราง
รหัสลับ การทําใหสับสนและการแพร คือความพยายามที่จะทําใหความสัมพันธทางสถิติระหวางขอความ

51
ตนฉบับ ขอความรหัส และกุญแจที่ใชในการเขารหัสลับมีความซับซอนมากขึ้น โดยทั่วไป โครงสรางทาง
สถิติของตัวอักษรแตละตัวที่มีอยูในขอความตนฉบับจะมีการกระจายแบบไมเรียบ (Non-flat distribution)
ซึ่งลักษณะของการกระจายแบบนี้จะชวยใหการวิเคราะหรหัสลับสามารถทําไดงายขึ้น ฉะนั้นการ
ประยุกตใชฟงกชันการทําใหสับสนและการแพรในกระบวนการเขารหัสลับ จะทําใหความซ้ําซอน
(Redundancy) ของคําหรือประโยคที่ประกอบอยูในบางสวนของขอความตนฉบับมีการกระจาย (Spread)
ออกไปทั่วทุกสวนอยางเทาเทียมกัน สงผลใหโครงสรางทางสถิติของตัวอักษรแตละตัวที่มีอยูในขอความ
รหัสมีการกระจายแบบเรียบ (Flat distribution) ซึ่งสงผลใหเกิดความยากตอการวิเคราะหรหัสลับ อยางไรก็
ตาม การนําฟงกชันทั้งสองมาประยุกตใชงานรวมกันใหมีประสิทธิภาพ จําเปนตองพิจารณาปจจัยตางๆ ดังนี้
1. ขนาดของกลุมบิตที่ใชในการเขาและถอดรหัสลับ ยิ่งมีขนาดใหญเทาใด ยิ่งทําใหขอความรหัส ที่ได
มีความทนทานตอการวิเคราะหรหัสลับมากขึ้นเทานั้น อยางไรก็ตาม ผลเสียที่ตามมาก็คือ ความเร็ว
ในการประมวลผลที่ชาลง ในชวงกอนปคริสตศักราช 2000 กลุมบิตขนาด 64 บิต ถือวาเปนกลุม
บิตที่มีขนาดสมเหตุสมผล และมีการนํามาใชในการออกแบบอัลกอริทึมแบบกลุมเปนจํานวนมาก
แตในปจจุบันนี้ ความเร็วในการคํานวณของหนวยประมวลผลกลางหรือซีพียูในเครื่องคอมพิวเตอร
ไดเพิ่มขึ้นอยางมาก จึงเริ่มมีการนํากลุมบิตขนาด 128 บิตมาใชในการออกแบบอัลกอริทึมแบบกลุม
รุนใหมอยางมากมาย
2. ขนาดของกุญแจที่ใชในการเขาและถอดรหัสลับ เชนเดียวกันกับขนาดของกลุมบิตที่ใช ถากุญแจที่
ใชมีขนาดใหญจะทําใหระบบการเขาและถอดรหัสลับมีความปลอดภัยมากขึ้น แตความเร็วในการ
ประมวลผลก็จะลดลงตามไปดวย ในปจจุบันกุญแจขนาด 64 บิตถือวามีความปลอดภัยไมเพียงพอ
อัลกอริทึมแบบกลุมรุนใหมๆ จะใชกุญแจขนาด 128 บิตเปนหลัก บางอัลกอริทึมออกแบบให
สามารถใชกุญแจที่มีขนาด 192 หรือ 256 บิตได
3. จํานวนรอบของการประมวลผล การนําฟงกชันการทําใหสับสนและการแพรมาใชรวมกัน (อาจมี
การดําเนินการอื่นๆ รวมดวย) เพื่อเขารหัสลับขอความตนฉบับจนเสร็จสิ้น ถือเปนการประมวลผล
1 รอบ (Round) เพื่อใหขอความรหัสที่เปนผลลัพธสุดทายมีความทนทานตอการวิเคราะหรหัสลับ
มากขึ้น จําเปนตองทําการประมวลผลแบบเดียวกันซ้ําหลายๆ รอบ โดยปกติการประมวลผลซ้ําๆ
กันโดยใชแนวคิดขางตนเปนจํานวน 16 รอบ ถือวามีความปลอดภัยเพียงพอตอการโจมตีและการ
วิเคราะหรหัสลับในปจจุบัน
4. อัลกอริทึมในการสรางกุญแจยอยและประมวลผล ยิ่งมีความซับซอนมากเทาใดก็จะสงผลใหการ
วิเคราะหรหัสลับทําไดยากขึ้นเทานั้น ระบบการเขาและถอดรหัสลับที่ไดก็จะมีความปลอดภัยมาก
ขึ้นเชนกัน

52
จากแนวคิดที่กลาวมาทั้งหมดขางตน นักวิเคราะหรหัสลับ Feistel จึงไดเสนอโครงสรางมาตรฐาน
(Standard Structure) เพื่อนํามาใชในการออกแบบตัวแปลงรหัสสมมาตรแบบกลุมแผนใหม และนี่ก็คือ
ที่มาของตัวแปลงรหัส Feiste [FEIS73] กลาวโดยละเอียด ตัวแปลงรหัส Feistel คือตัวแปลงรหัสแบบกลุม
ที่มีลักษณะการเขารหัสลับโดยการแบงกลุมบิตขอความตนฉบับขนาด 2t บิตออกเปนสองกลุมบิตยอยซาย
ขวา L0 และ R0 ขนาด t บิต แลวทําการประมวลผลกลุมบิตยอยทั้งสองดวยฟงกชัน f ตามที่กําหนดเปน
จํานวน r รอบ (Round) เพื่อใหกลุมบิตผลลัพธที่เปนขอความรหัสประกอบดวยกลุมบิตยอยขวาซาย Rr
และ Lr ขนาด t บิต โดยในแตละรอบ i ของการประมวลผลจะใชกุญแจยอย (Sub-keys, Ki) ที่คํานวณหามา
จากกุญแจที่ใชในการเขารหัสลับรวมดวย โดยปกติจํานวนรอบของการประมวลผลมักจะมีคามากกวา 3
และมีจํานวนเปนคู รูปที่ 5.2 แสดงขั้นตอนการทํางานของตัวแปลงรหัส Feistel ใหสังเกตวาฟงกชันการทํา
ใหสับสนที่ใชในตัวแปลงรหัส Feistel เกิดจากการประมวลผลกลุมบิตยอยทางขวา (t-bit Ri) ดวยฟงกชัน f
และกุญแจยอย Ki จากนั้นจึงนําผลลัพธที่ไดมาทําการออรเฉพาะกับกลุมบิตยอยทางซาย (t-bit Li) ขณะที่
ฟงกชันการแพรที่ใชในตัวแปลงรหัส Feistel เกิดจากการสลับกลุมบิตยอยทั้งสอง ใหสังเกตดวยวา ในรอบ
สุดทายของการประมวลผล กลุมบิตยอยสงออกซายขวาที่ไดจะมีการสลับตําแหนงกันอีกครั้งหนึ่งจาก (Lr,
Rr) เปน (Rr, Lr) กอนที่จะนํามารวมกันเปนขอความรหัส ซึ่งเปรียบเสมือนกับวา การประมวลผลรอบ
สุดทายจะมีเพียงฟงกชันการทําใหสับสนเทานั้น ทั้งนี้เปนเพราะการสลับกลุมบิตยอยสองครั้งติดกันจะให
ผลลัพธเทียบเทากับการไมไดสลับกลุมบิตยอยใดๆ

รูปที่ 5.2 ขั้นตอนการทํางานของตัวแปลงรหัส Feistel

53
สําหรับการถอดรหัสลับนั้น จะดําเนินการเหมือนกับขั้นตอนที่ใชในการเขารหัสลับ เพียงแตวากุญแจ
ยอยที่ในการเขารหัสลับจะตองนํามาใชแบบอันดับผันกลับ (Reverse Order) ในขั้นตอนการถอดรหัสลับ
เทานั้น กลาวคือ เราจะใช Kr ในการประมวลผลรอบแรก Kr-1 ในการประมวลผลรอบที่สอง ตามลําดับ จนถึง
การประมวลผลรอบสุดทาย ซึ่งกุญแจยอยที่จะใชก็คือ K1 วิธีการถอดรหัสลับขางตนนี้ถือเปนจุดเดนของ
ตัวแปลงรหัส Feistel เนื่องจากเราไมจําเปนตองออกแบบอัลกอริทึมใหมเพื่อนํามาใชในการถอดรหัสลับอีก
เพื่อแสดงใหเห็นวาขั้นตอนการถอดรหัสลับของตัวแปลงรหัส Feistel มีการดําเนินการเหมือนกับขั้นตอนที่
ใชในการเขารหัสลับ ตางกันแตเพียงลําดับของกุญแจยอยที่ใชเทานั้น ตัวอยางที่จะแสดงตอไปนี้ จะใช
สัญลักษณ LrE, RrE แทนกลุมบิตยอยนําเขาซายขวาจากขอความตนฉบับ และใชสัญลักษณ LrD, RrD แทนกลุม
บิตยอยนําเขาซายขวาจากขอความรหัสตามลําดับ โดย r คือจํานวนรอบของการประมวลผล ซึ่งในตัวอยางที่
แสดงจะทําการประมวลผลเพียง 4 รอบเทานั้น

รูปที่ 5.3 การเขาและถอดรหัสลับของตัวแปลงรหัส Feistel

จากรูปดานซาย กลุมบิตยอยสงออกซายขวาที่เปนผลลัพธจากการประมวลผลรอบสุดทายสามารถ
แสดงในรูปของสมการไดดังนี้
L4E = R3E (5.1)
R4E = L3E ⊕ f (R3E, K4) (5.2)

54
ในสวนของการถอดรหัสลับ กลุมบิตยอยสงออกสามารถแสดงในรูปของสมการไดดังนี้

L1D = R0D = L4E = R3E (5.3)


R1D = L0D ⊕ f (R0D, K4) (5.4)
= R4E ⊕ f (R3E, K4)
= [L3E ⊕ f (R3E, K4)] ⊕ f (R3E, K4)
= L3E ⊕ [f (R3E, K4) ⊕ f (R3E, K4)]
จาก [A⊕B]⊕C = A⊕ [B⊕C]
= L3E ⊕ 0 จาก A⊕A = 0
= L3E จาก A⊕0 = A

จะไดวา L1D = R3E และ R1D = L3E เพราะฉะนั้น กลุมบิตยอยสงออกซายขวาที่เปนผลลัพธจากการ


ประมวลผลรอบแรกในการถอดรหัสลับก็คือ L3E และ R3E ซึ่งผลลัพธนี้ก็คือกลุมบิตยอยนําเขาขวาซาย (ไม
ใชซายขวา) กอนที่จะสงเขาสูการประมวลผลรอบสุดทายในการเขารหัสลับนั่นเอง เมื่อดําเนินการ
ประมวลผลไปจนครบ 4 รอบแลว กลุมบิตยอยผลลัพธที่ไดจะมีการสลับตําแหนงกันอีกครั้งหนึ่งจาก (R0E,
L0E) เปน (L0E, R0E) กอนที่จะนํามารวมกันเปนขอความตนฉบับ ใหสังเกตวาฟงกชัน f ที่ใชในการถอดรหัส
ลับยังคงเปนเหมือนเดิมกับที่ใชในการเขารหัสลับ

5.4 มาตรฐานการเขารหัสลับขอมูล DES


อัลกอริทึม DES มีการคิดคนพัฒนาขึ้นในยุค 1970s ในฐานะมาตรฐานการเขารหัสลับขอมูลตัว
หนึ่งของรัฐบาลประเทศสหรัฐอเมริกา และตอมาเปนที่ยอมรับและนํามาใชโดยรัฐบาลในประเทศอื่นๆ ทั่ว
โลก ในการทํางาน DES จะทําการเขารหัสลับขอมูลเปนกลุมๆ ละ 64 บิต กุญแจที่ใชในการเขาและ
ถอดรหัสลับมีขนาด 56 บิต แตจะแสดงใหคนทั่วไปเห็นในขนาด 64 บิต โดยทุกๆ บิตที่ 8 หรือบิตนัยสําคัญ
นอยสุดในแตละไบตของตัวกุญแจจะไมนํามาใชงาน บิตเหลานั้นจะนํามาใชเปนบิตภาวะคูหรือคี่ (Parity
Bit) เทานั้น กุญแจที่ใชใน DES อาจเปนตัวอักขระหรือตัวเลขใดๆ และสามารถปรับเปลี่ยนไดตลอดเวลา
เทคนิคพื้นฐานที่ DES ใชในการเขาและถอดรหัสลับคือ การทําใหสับสนและการแพร ซึ่งทําไดโดยใช
วิธีการแทนที่และสลับตําแหนงหรือเรียงสับเปลี่ยนเปนหลัก ตัวอยางของการแทนที่และการเรียงสับเปลี่ยน
ตัวอักษรไปพรอมๆ กันไดแสดงไวในรูปที่ 5.4

55
รูปที่ 5.4 ตัวอยางของการแทนที่และการเรียงสับเปลี่ยนตัวอักษร

วิธีการแทนที่ที่ใชใน DES จะกําหนดโดยตารางแทนคา ที่แตกตางกัน 8 ตาราง ซึ่งเปนที่รูจักกันใน


ชื่อของ “S-box (Substitution-box) ขนาด 6 บิตนําเขาและ 4 บิตสงออก” ตัว S-box จะทํางานในลักษณะ
ที่วา บิตนําเขาขนาด 6 บิตจะเปนตัวกําหนดตําแหนงของบิตสงออกขนาด 4 บิตที่เก็บบันทึกไวใน S-box แต
ละตัว
วิธีการเรียงสับเปลี่ยนที่ใชใน DES จะมี 3 รูปแบบคือ
• การเรียงสับเปลี่ยนแบบตรง (Straight Permutation) หรืออาจเรียกวา การสับเปลี่ยนแบบ P-
box (Permutation-box) ก็ได ซึ่งเปนการเรียงลําดับบิตขอมูลภายในกลุมใหมเทานั้น
• การเรียงสับเปลี่ยนแบบขยาย (Expansion Permutation) จะเปนการทําซ้ํา (Duplicate) บิต
ขอมูลบางบิตตามที่กําหนดไวภายในกลุม กอนที่จะเรียงลําดับบิตขอมูลภายในกลุมใหม
ทั้งหมด
• การเรียงสับเปลี่ยนแบบบีบอัด (Compression Permutation) จะทําการตัดบิตขอมูลบางบิต
ตามที่กําหนดไวภายในกลุมทิ้งไป กอนที่จะเรียงลําดับบิตขอมูลที่เหลืออยูภายในกลุมใหม
ทั้งหมด

โดยพื้นฐานอาจกลาวไดวา อัลกอริทึม DES ก็คือตัวแปลงรหัส Feistel ที่มีการแบงกลุมบิต


ขอความตนฉบับนําเขา t = 32 และจํานวนรอบในการประมวลผล r = 16 นั่นเอง แผนผังการทํางานของ
DES แสดงไวดังรูปที่ 5.5
จากรูป เมื่อกลุมบิตขอความตนฉบับขนาด 64 บิตเขามา DES จะทําการเรียงสับเปลี่ยนเริ่มตน (Initial
Permutation, IP) ซึ่งเปนการเรียงสับเปลี่ยนแบบตรง ดูตารางที่ 5.1 ประกอบ จากนั้นกลุมบิตผลลัพธจะถูก
แบงครึ่งออกเปนสองสวนเทาๆ กัน ครึ่งซายและครึ่งขวา แตละสวนมีขนาด 32 บิต DES จะประมวลผลกลุม
บิตทั้งสองสวน โดยผานฟงกชัน f เปนจํานวน 16 ครั้งหรือ 16 รอบ จากนั้นจะนํากลุมบิตผลลัพธที่ไดมา
รวมกันอีกครั้งเพื่อทําการเรียงสับเปลี่ยนสุดทาย (Final Permutation, IP-1) ซึ่งเปนสวนผกผัน (Inverse) ของ

56
การเรียงสับเปลี่ยนเริ่มตน ดูตารางที่ 5.2 ประกอบ กลุมบิตผลลัพธสุดทายที่ไดก็คือขอความรหัสขนาด 64 บิต
ที่ไดผานการเขารหัสลับโดย DES มาแลว

รูปที่ 5.5 แผนผังการทํางานของ DES

ตารางที่ 5.1 การเรียงสับเปลี่ยนเริ่มตน


58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3
61 53 45 37 29 21 16 5 63 55 47 39 31 23 15 7

57
ตารางที่ 5.2 การเรียงสับเปลี่ยนสุดทาย
40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25

ใหสังเกตวา คาที่แสดงในตารางที่ 5.1 และ 5.2 จะอานจากซายไปขวา บนลงลาง ยกตัวอยางเชน


การเรียงสับเปลี่ยนเริ่มตนจะทําการเปลี่ยนตําแหนงของบิตขอมูลที่อยูในกลุมบิตนําเขาจากตําแหนงที่ 58 ไป
อยูตําแหนงที่ 1 บิตขอมูลในตําแหนงที่ 50 จะเปลี่ยนไปอยูตําแหนงที่ 2 บิตขอมูลในตําแหนงที่ 42 จะ
เปลี่ยนไปอยูตําแหนงที่ 3 การเรียงสับเปลี่ยนตําแหนงจะทําจนครบ 64 ตําแหนง เนื่องจากขั้นตอนการเรียง
สับเปลี่ยนทั้งสองนี้ไมไดเปนสวนใดสวนหนึ่งของตัวแปลงรหัส Feistel จึงไมสงผลกระทบกับความ
แข็งแกรงในการเขารหัสลับ DES จุดประสงคที่มีการเพิ่มขั้นตอนการเรียงสับเปลี่ยนเริ่มตนและเรียง
สับเปลี่ยนสุดทายเขามาใน DES นั้น ก็เพื่อที่จะทําใหการปอนกลุมบิตนําเขาสูชิปประมวลผลและนํากลุมบิต
สงออกจากชิปประมวลผล ในรูปของกลุมไบต (Byte) ทําไดสะดวกขึ้น รูปที่ 5.6 แสดงกระบวนการที่
เกิดขึ้นในแตละรอบของการประมวลผลโดยอัลกอริทึม DES
ในตอนเริ่มตนของการเขารหัสลับ กุญแจที่ใชในการเขารหัสลับจะผานการเรียงสับเปลี่ยนกุญแจ
(Key Permutation) กอน โดยในกระบวนการนี้ บิตที่ 8 ของแตละไบตของตัวกุญแจจะไมนํามาใชในการ
เขารหัสลับ ยกตัวอยางเชน ถากําหนดใหกุญแจที่ใชในการเขารหัสลับ DES คือ E3D057A7 9B7FBC9D
และทุกๆ บิตที่ 8 เปนบิตภาวะคี่ เราสามารถตรวจสอบความถูกตองของกุญแจไดจากตารางดังตอไปนี้

รูปที่ 5.6 กระบวนการที่เกิดขึ้นในแตละรอบของการประมวลผลโดยอัลกอริทึม DES

58
ตารางที่ 5.3 การตรวจสอบบิตภาวะคี่ของกุญแจเขารหัสลับ DES
E3 1 1 1 0 0 0 1 1
D0 1 1 0 1 0 0 0 0
57 0 1 0 1 0 1 1 1
A7 1 0 1 0 0 1 1 1
9B 1 0 0 1 1 0 1 1
7F 0 1 1 1 1 1 1 1
BC 1 0 1 1 1 1 0 0
9D 1 0 0 1 1 1 0 1

จากขอมูลในตาราง พบวา 7 บิตของแตละไบตจะเปนตัวกําหนดคาบิตที่ 8 ในไบตนั้นๆ ซึ่งสงผลทํา


ใหจํานวนบิตที่มีคาเปนหนึ่งในแตละไบตเปนจํานวนคี่ ใหสังเกตวา ถึงแมบิตที่ 8 ของแตละไบตของตัว
กุญแจ DES จะแตกตางกัน แตผลลัพธที่ไดจากการเขาและถอดรหัสลับจะเหมือนกัน ตารางที่ 5.4 แสดง
ตําแหนงภายหลังการเรียงสับเปลี่ยนกุญแจ ซึ่งมีวิธีการอานเหมือนกับตารางกอนหนาทั้งสอง ยกตัวอยางเชน
ตําแหนงของกุญแจบิตที่ 57 จะเปลี่ยนไปอยูตําแหนงที่ 1 แทน

ตารางที่ 5.4 การเรียงสับเปลี่ยนกุญแจ


57 49 41 33 25 17 9 1 58 50 42 34 26 18
10 2 59 51 43 35 27 19 11 3 60 52 44 36
63 55 47 39 31 23 15 7 62 54 46 38 30 22
14 6 61 53 45 37 29 21 13 5 28 20 12 4

หลังจากการเรียงสับเปลี่ยนกุญแจแลว DES จะทําการแบงครึ่งผลลัพธที่ไดขนาด 56 บิตเปนสอง


สวนเทาๆ กัน แตละสวนที่มีขนาด 28 บิตจะถูกเลื่อนเปนวง (Circular Shift) ไปทางซายหนึ่งหรือสองบิต
ขึ้นอยูกับรอบของการประมวลผล ตารางที่ 5.5 แสดงจํานวนการเลื่อนเปนวงไปทางซายของกุญแจขนาด 28
บิตในแตละสวน ยกตัวอยางเชน เมื่อทําการประมวลผลกลุมบิตในรอบที่ 1 และ 2 กุญแจทั้งสองสวนนี้จะถูก
เลื่อนเปนวงไปทางซายหนึ่งบิต แตเมื่อมีการประมวลผลกลุมบิตในรอบที่ 3 ถึง 8 กุญแจทั้งสองสวนนี้จะถูก
เลื่อนเปนวงไปทางซายสองบิต

ตารางที่ 5.5 จํานวนของการเลื่อนบิตกุญแจในแตละรอบ


รอบ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
จํานวน 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

หลังจากทําการเลื่อนบิตแลว DES จะนํากลุมบิตกุญแจทั้งสองมารวมกันแลวทําการเรียงสับเปลี่ยน


แบบบีบอัด ดูตารางที่ 5.6 ประกอบ เพื่อใหไดกลุมบิตสงออกขนาด 48 บิต ขณะเดียวกันกลุมบิตขอมูลใน
ครึ่งขวาที่มีขนาด 32 บิต จะถูกขยายออกใหมีขนาด 48 บิตโดยผานการเรียงสับเปลี่ยนแบบขยาย ดูตารางที่
5.7 ประกอบ กลุมบิตทั้งสองกลุมที่ไดจากกุญแจและขอมูลที่มีขนาด 48 บิต จะถูกนํามาออรเฉพาะกัน แลว

59
สงผานไปยัง S-box จํานวน 8 ตัวที่ตอขนานกันอยู ดูรูปที่ 5.7 และตารางที่ 5.8 ประกอบ ในกระบวนการ
แทนที่โดยใช S-box นั้น กลุมบิตนําเขาขนาด 6 บิต (b1b2b3b4b5b6) จะเปนตัวกําหนดคากลุมบิตสงออก
ขนาด 4 บิตที่เก็บบันทึกไวใน S-box แตละตัว โดยบิตที่ 1 และ 6 (b1b6) จะใชเปนตัวกําหนดตําแหนงเชิง
ตัวเลข 0-3 ในแตละแถวของ S-box ขณะที่บิต 2 ถึง 5 (b2b3b4b5) จะใชกําหนดตําแหนงเชิงตัวเลข 0-15 ใน
แตละคอลัมนของ S-box ยกตัวอยางเชน ถากลุมบิตนําเขาของ S-box 1 มีคา 1001012 ตําแหนงของกลุมบิต
สงออกที่ไดจะอยูแถวที่ 3 (112) คอลัมนที่ 2 (00102) ซึ่งก็คือ 8 ในเลขฐานสิบหรือ 10002 นั่นเอง

ตารางที่ 5.6 การเรียงสับเปลี่ยนแบบบีบอัด


14 17 11 24 1 5 3 28 15 6 21 10
23 19 12 4 26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40 51 45 33 48
44 49 39 56 34 53 46 42 50 36 29 32

ตารางที่ 5.7 การเรียงสับเปลี่ยนแบบขยาย


32 1 2 3 4 5 4 5 6 7 8 9
8 9 10 11 12 13 12 13 14 15 16 17
16 17 18 19 20 21 20 21 22 23 24 25
24 25 26 27 28 29 28 29 30 31 32 1

รูปที่ 5.7 กระบวนการแทนที่โดย S-box จํานวน 8 ตัว

ผลลัพธที่ไดขนาด 8×4 = 32 บิต จะถูกเรียงสับเปลี่ยนแบบตรงดวย P-box อีกครั้ง ดูตารางที่ 5.9


ประกอบ การดําเนินการทั้งสี่ขั้นตอนนี้จะเรียกวา การดําเนินการผานฟงกชัน f ซึ่งประกอบไปดวย
1. ขั้นตอนการเลือกกลุมบิตขนาด 48 บิตจากกุญแจ
2. ขั้นตอนการเลือกกลุมบิตขนาด 48 บิตจากกลุมขอมูลในครึ่งขวา
3. ขั้นตอนการออรเฉพาะกันระหวางกลุมบิตขนาด 48 บิตที่มาจากกุญแจและขอมูล
4. ขั้นตอนการแทนที่โดยผาน S-box ตามดวยการเรียงสับเปลี่ยนแบบตรงโดยผาน P-box

60
ตารางที่ 5.8 การแทนที่ S-box
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
S-box 1 12 0
4
15
1
7
14
4
8
14
13
2
6
13
2
1
11
10
15
6
12
12
9
11
7
9
3
5
10
3
5
8
0
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
S-box 2 12 3
0
13
14
4
7
7
11
15
10
2
4
8
13
14
1
12
5
0
8
1
12
10
6
6
9
9
3
11
2
5
15
3 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
S-box 3 12 13
13
7
6
0
4
9
9
3
8
4
15
6
3
10
0
2
11
8
1
5
2
14
12
12
5
11
10
15
14
1
7
3 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
S-box 4 12 13
10
8
6
11
9
5
0
6
12
15
11
0
7
3
13
4
15
7
1
2
3
12
14
1
5
10
2
14
8
9
4
3 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
S-box 5 12 14
4
11
2
2
1
12
11
4
10
7
13
13
7
1
8
5
15
0
9
15
12
10
5
3
6
9
3
8
0
6
14
3 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
S-box 6 12 10
9
15
14
4
15
2
5
7
2
12
8
9
12
5
3
6
7
1
0
13
4
14
10
0
1
11
13
3
11
8
6
3 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
S-box 7 12 13
1
0
4
11
11
7
13
4
12
9
3
1
7
10
14
14
10
3
15
5
6
12
8
2
0
15
5
8
9
6
2
3 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
S-box 8 12 1
7
15
11
13
4
8
1
10
9
3
12
7
14
4
2
12
0
5
6
6
10
11
13
0
15
1
3
9
5
2
8
3 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

ตารางที่ 5.9 การเรียงสับเปลี่ยน P-box


16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10
2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25

หลังจากนั้น กลุมบิตสงออกที่ไดจากฟงกชัน f จะนํามาออรเฉพาะกับกลุมบิตขอมูลในครึ่งซาย


ผลลัพธที่ไดจะนํามาใชเปนกลุมบิตขอมูลในครึ่งขวาเพื่อใชในการประมวลผลในรอบตอไป ใหสังเกตวา กลุม
บิตขอมูลในครึ่งขวาจะนํามาใชเปนกลุมบิตขอมูลในครึ่งซายโดยตรงในการประมวลผลรอบตอไป ขั้นตอนที่
กลาวมาทั้งหมดนี้จะเกิดขึ้นทั้งสิ้น 16 ครั้ง และถือเปนการประมวลผลกลุมบิตนําเขาของ DES 16 รอบ

61
จากรูปที่ 5.6 ถา Li และ Ri คือกลุมบิตขอมูลครึ่งซายและขวาตามลําดับ Ki คือกลุมบิตยอยกุญแจ
ขนาด 48 บิต ในรอบการประมวลผลที่ i และ f คือฟงกชันที่ประกอบไปดวยการแทนที่ การเรียงสับเปลี่ยน
และการออรเฉพาะกับกลุมบิตของกุญแจ เราสามารถแสดงสมการของการประมวลผลในแตละรอบของ
DES ไดดังนี้
Li = Ri -1 (5.5)
Ri = Li-1 ⊕ f (Ri-1, Ki) (5.6)

สําหรับขั้นตอนในการถอดรหัสลับของอัลกอริทึม DES จะมีประสิทธิภาพและไมซับซอนไปกวา


ขั้นตอนที่ใชในการเขารหัสลับ เนื่องจาก DES ถูกออกแบบมาในลักษณะที่วา การเขาและถอดรหัสลับจะใช
ขั้นตอนที่เหมือนกัน ดังนั้นเราจะใชขั้นตอนและฟงกชันแบบเดิมในการถอดรหัสลับขอความรหัส ความ
แตกตางระหวางการเขาและถอดรหัสลับของ DES นั้นมีแคเพียง กุญแจที่ใชในการเขารหัสลับจะตอง
นํามาใชแบบอันดับผันกลับในการถอดรหัสลับเทานั้น เชนเดียวกันกับตัวแปลงรหัส Feistel ยกตัวอยางเชน
ถากุญแจที่ใชเขารหัสลับกลุมบิตขอมูลในแตละรอบคือ K1, K2, K3, … K16 กุญแจที่ใชถอดรหัสลับในแตละ
รอบจะเปน K16, K15, K14, ... K1 แทน ใหสังเกตวาขั้นตอนการเลื่อนเปนวงเพื่อสรางกลุมบิตของกุญแจในแต
ละรอบ จะตองทําในแบบที่เปนอันดับผันกลับเชนเดียวกัน โดยผานการเลื่อนเปนวงไปทางขวาหนึ่งหรือ
สองบิต ขึ้นกับจํานวนรอบในอันดับผันกลับกับที่ใชในการเขารหัสลับ
ตัวอยางการเขาและถอดรหัสลับดวยอัลกอริทึม DES โดยใชขอความตนฉบับ “Now is the time
for all” ซึ่งตัวอักษรแตละตัวจะแสดงโดยใชรหัสแอสกี (American Standard Code for Information
Interchange, ASCII) ขนาด 7 บิตบวกกับอีก 1 บิตที่มีคาเปน 0 ไวขางหนา กุญแจเขารหัสลับที่ใชคือ K =
0123456789ABCDEF16 ผลลัพธที่ไดแสดงในรูปของเลขฐาน16 ไดดังนี้

M = 4E6F7720 69732074 68652074 696D6520 666F7220 616C6C20


C = 3FA40E8A 984D4815 6A271787 AB8883F9 893D51EC 4B563B53

62
5.5 การเขารหัสลับขอมูล DESX
จุดออนที่เห็นไดชัดในอัลกอริทึม DES ก็คือ ขนาดของกุญแจที่ใชในการเขาและถอดรหัสลับที่นอย
เกินไป ซึ่งในทางปฏิบัติแลว กุญแจที่นํามาใชงานจริงมีเพียง 56 บิตเทานั้น เพื่อให DES มีความทนทานตอ
การโจมตีแบบตะลุย นักสรางรหัสลับ Ron Rivest จึงไดเสนอแนวคิดในการดัดแปรอัลกอริทึม DES แบบ
งายๆ เพื่อเพิ่มขนาดของกุญแจที่ใชในการเขาและถอดรหัสลับ และเรียกชื่ออัลกอริทึมใหมนี้วา DESX
โครงสรางของ DESX ไดแสดงไวในรูปที่ 5.8

รูปที่ 5.8 โครงสรางของอัลกอริทึม DESX

จากรูป DESX จะทําการออรเฉพาะกลุมบิตนําเขาขนาด 64 บิตจากขอความตนฉบับกับกุญแจขนาด


64 บิตดอกที่หนึ่ง K1 จากนั้นจึงทําการเขารหัสลับดวยอัลกอริทึม DES ตามปกติ ผลลัพธที่ไดจะนํามาออร
เฉพาะกับกุญแจขนาด 64 บิตดอกที่สอง K2 อีกครั้งเพื่อสรางขอความรหัสผลลัพธสุดทาย ขั้นตอนการ
เขารหัสลับ DESX สามารถเขียนในรูปของสมการไดดังนี้

C = K2 ⊕ DESK (M⊕ K1) (5.7)

ถากุญแจทั้งสามดอกที่ใชใน DESX มีความเปนอิสระตอกัน เราอาจกลาวโดยสรุปไดวา กุญแจที่ใช


ใน DESX มีขนาดเทากับ 64+56+64 = 184 บิต สงผลให DESX มีความทนทานตอการโจมตีแบบตะลุยเพิ่ม
มากขึ้นอยางมีนัยสําคัญ (Significantly) อยางไรก็ตาม เทคนิคที่นํามาใชใน DESX นี้ ไมไดชวยเพิ่มความ
ทนทานใดๆ ตอการโจมตีหรือการวิเคราะหรหัสลับในรูปแบบอื่นๆ [OPPL05]

5.6 การเขารหัสลับขอมูลนานาชาติ IDEA


การเขารหัสลับขอมูลนานาชาติ IDEA (International Data Encryption Algorithm) มีการคิดคน
พัฒนาขึ้นในป 1992 [LAI92] โดยการแกไขปรับปรุงมาจากอัลกอริทึม PES (Proposed Encryption
Standard) ที่ไดนําเสนอในการประชุมวิชาการระดับนานาชาติ EUROCRYPT’92 [LAI91] ในการทํางาน
IDEA จะทําการเขารหัสลับขอมูลเปนกลุมๆ ละ 64 บิต กุญแจที่ใชในการเขาและถอดรหัสลับมีขนาด 128 บิต
อัลกอริทึม IDEA ยังคงใชการทําใหสับสนและการแพรเปนเทคนิคพื้นฐานในการเขาและถอดรหัสลับ ใน
IDEA ฟงกชันการทําใหสับสน เกิดจากการดําเนินการระหวางกลุมขอมูลในเชิงพีชคณิต (Algebraic Groups)

63
ซึ่งประกอบไปดวย ตัวดําเนินการออรเฉพาะ (Exclusive-OR, XOR) การบวกแบบมอดุโล 216 (Addition
Modulo 216) และการคูณแบบมอดุโล 216+1 (Multiplication Modulo 216+1) ขณะที่ฟงกชันการแพรเกิดจาก
การดําเนินการกลุมขอมูลในเชิงพีชคณิตดวยโครงสรางเฉพาะที่เรียกวา โครงสราง MA
(Multiplication/Addition Structure) ดังแสดงในรูปที่ 5.9

รูปที่ 5.9 โครงสราง MA ที่ใชในอัลกอริทึม IDEA

โครงสราง MA จะทําการประมวลผลกลุมบิตยอยนําเขาขนาด 16 บิตสองกลุม Xi1 และ Xi2 และ


กุญแจยอยขนาด 16 บิตสองกลุม Ki1 และ Ki2 เพื่อใหผลลัพธเปนกลุมบิตยอยสงออกขนาด 16 บิตสองกลุม
Yi1 และ Yi2 นักสรางรหัสลับ Lai และ Massey ไดทําการตรวจสอบคุณสมบัติของโครงสราง MA โดยใช
การประมวลผลจากคอมพิวเตอรพบวา แตละบิตของกลุมบิตยอยสงออกที่ไดจากโครงสราง MA จะขึ้นอยู
กับทุกๆ บิตของกลุมบิตยอยนําเขาและทุกๆ บิตของกุญแจยอย สงผลใหฟงกชันการแพรที่ใชใน IDEA ถือ
เปนฟงกชันที่มีประสิทธิภาพมาก ทั้งนี้ขอดีของการนําตัวดําเนินการขางตนมาใชก็คือ ความงายในการนําไป
ประยุกตใชงานในรูปของซอฟทแวรและฮารดแวร รูปที่ 5.10 แสดงกระบวนการเขารหัสลับที่เกิดขึ้นในแต
ละรอบของการประมวลผลโดยอัลกอริทึม IDEA

64
รูปที่ 5.10 กระบวนการที่เกิดขึ้นในแตละรอบของการประมวลผลโดยอัลกอริทึม IDEA

จากรูป เมื่อกลุมบิตนําเขาขนาด 64 บิตเขามา IDEA จะแบงกลุมบิตเหลานั้นออกเปนกลุมบิตยอย


ขนาด 16 บิตจํานวน 4 กลุม X1, X2, X3 และ X4 กลุมบิตยอยทั้ง 4 กลุมนี้จะเขาสูกระบวนการประมวลผลใน
รอบที่ 1 ซึ่งอัลกอริทึม IDEA จะทําการประมวลผลกลุมบิตยอยทั้ง 4 เปนจํานวน 8 รอบ โดยในแตละรอบ
ของการประมวลผล จะประกอบไปดวยการดําเนินออรเฉพาะ การบวกแบบมอดุโล 216 และการคูณแบบมอ
ดุโล 216+1 ระหวางกลุมบิตยอยแตละกลุมพรอมๆ กับกลุมบิตยอยกุญแจขนาด 16 บิต Km(n) อีก 6 กลุม โดยที่
n คือ รอบของการประมวลผล m คือ ลําดับของกลุมบิตยอยกุญแจ
ในระหวางรอบของการประมวลผล กลุมบิตยอยที่ 2 และ 3 จากกลุมบิตนําเขาจะมีการสลับ
ตําแหนงกัน เมื่อทําการประมวลผลครบ 8 รอบแลว จะมีการประมวลผลกลุมบิตยอยทั้ง 4 กับกลุมบิตยอย
กุญแจขนาด 16 บิตอีก 4 กลุมอีกครั้งหนึ่ง เพื่อใหไดผลลัพธสุดทายที่เปนขอความรหัสขนาด 64 บิต ในกรณี
นี้อาจพิจารณาเปนการประมวลผลรอบที่ 9 แบบพิเศษก็ได ลําดับขั้นของการประมวลผลในแตละรอบของ
การเขารหัสลับโดยอัลกอริทึม IDEA สามารถสรุปไดดังนี้

65
1. คูณ X1 กับ K1(1)
2. บวก X2 กับ K2(1)
3. บวก X3 กับ K3(1)
4. คูณ X4 กับ K4(1)
5. ออรเฉพาะผลลัพธที่ไดจากขั้นตอนที่ 1 และ 3
6. ออรเฉพาะผลลัพธที่ไดจากขั้นตอนที่ 2 และ 4
7. คูณผลลัพธที่ไดจากขั้นตอนที่ 5 กับ K5(1)
8. บวกผลลัพธที่ไดจากขั้นตอนที่ 6 กับขั้นตอนที่ 7
9. คูณผลลัพธที่ไดที่ไดจากขั้นตอนที่ 8 กับ K6(1)
10. บวกผลลัพธที่ไดจากขั้นตอนที่ 7 กับขั้นตอนที่ 9
11. ออรเฉพาะผลลัพธที่ไดจากขั้นตอนที่ 1 และ 9
12. ออรเฉพาะผลลัพธที่ไดจากขั้นตอนที่ 3 และ 9
13. ออรเฉพาะผลลัพธที่ไดจากขั้นตอนที่ 2 และ 10
14. ออรเฉพาะผลลัพธที่ไดจากขั้นตอนที่ 4 และ 10

ผลลัพธจากการประมวลผลแตละรอบก็คือ ผลลัพธที่ไดจากขั้นตอนที่ 11, 12, 13 และ 14 จากนั้นจะ


ทําการสลับตําแหนงผลลัพธที่ไดจากขั้นตอนที่ 12 และ 13 กอนแลวจึงปอนผลลัพธสุดทายที่ไดทั้งหมดสู
กระบวนการประมวลผลรอบตอไป หลังจากดําเนินการประมวลผลจนครบทั้ง 8 รอบแลว IDEA จะทําการ
ประมวลผลผลลัพธที่ไดอีกครั้งโดยการดําเนินการตามขั้นตอนดังตอไปนี้

1. คูณ X1 กับ K1(9)


2. บวก X2 กับ K2(9)
3. บวก X3 กับ K3(9)
4. คูณ X4 กับ K4(9)

สุดทายกลุมบิตยอยผลลัพธทั้ง 4 ที่ได Y1, Y2, Y3 และ Y4 จะนํามารวมกันตามลําดับเปนกลุมบิต


สงออกหรือขอความรหัสขนาด 64 บิต ใหสังเกตวา กลุมบิตยอยกุญแจจะมีทั้งหมด 9 ชุดสําหรับการ
ประมวลผล 8 รอบปกติและ 1 รอบพิเศษ โดยในรอบปกติจะใชกลุมบิตยอยกุญแจ 6 กลุม ขณะที่รอบพิเศษ
จะใชกลุมบิตยอยกุญแจเพียง 4 กลุมเทานั้น เพราะฉะนั้น จํานวนของกลุมบิตยอยกุญแจ Km(n) ที่ใชในการ
เขารหัสลับจะมีทั้งสิ้น (8x6) + (1x4) = 52 กลุม
สําหรับขั้นตอนการสรางกลุมบิตยอยกุญแจทั้ง 52 กลุมนั้น จะเริ่มจากการแบงกุญแจที่ใชในการ
เขารหัสลับขนาด 128 บิต ออกเปนกลุมบิตยอยขนาด 16 บิตตามลําดับเปนจํานวน 8 กลุม กลุมบิตยอยกุญแจ
6 กลุมแรกจะใชในการประมวลผลรอบที่ 1 (K1(1) - K6(1)) ขณะที่กลุมบิตยอยกุญแจที่เหลืออีก 2 กลุมจะใช

66
เปนกลุมบิตยอยกุญแจ 2 กลุมแรก ในการประมวลผลรอบที่ 2 (K1(2) – K2(2)) จากนั้นจะทําการเลื่อนกุญแจที่
ใชในการเขารหัสลับขนาด 128 บิตเปนวงไปทางซาย 25 บิต แลวแบงผลลัพธที่ไดออกเปนกลุมบิตยอย
ขนาด 16 บิต ตามลําดับเปนจํานวน 8 กลุมอีกครั้ง โดยกลุมบิตยอยกุญแจ 4 กลุมแรกนี้จะใชเปนกลุมบิตยอย
กุญแจอีก 4 กลุมที่เหลือในการประมวลผลรอบที่ 2 (K3(2) – K6(2)) สวนกลุมบิตยอยกุญแจที่เหลืออีก 4 กลุม
จะนําไปใชเปนกลุมบิตยอยกุญแจ 4 กลุมแรกในการประมวลผลรอบที่ 3 (K1(3) – K4(3)) จากนั้นจะทําการ
เลื่อนกุญแจที่ใชในการเขารหัสลับเปนวงไปทางซายอีก 25 บิตแลวแบงผลลัพธที่ไดออกเปนกลุมบิตยอย
จํานวน 8 กลุมอีกครั้ง ขั้นตอนการสรางกลุมบิตยอยกุญแจจะดําเนินการไปในลักษณะนี้จนจบการทํางาน
ของการเขารหัสลับ
สําหรับขั้นตอนในการถอดรหัสลับของอัลกอริทึม IDEA นั้น จะดําเนินการเหมือนกับการเขารหัส
ลับทุกประการ ยกเวนแตเพียง กลุมบิตยอยกุญแจที่ใชในการถอดรหัสลับนั้น จะตองเปนตัวผกผันการบวก
หรือตัวผกผันการคูณของกลุมบิตยอยกุญแจที่ใชในการเขารหัสลับ ใหสังเกตวาตัวผกผันการบวกของ
จํานวนใดๆ เมื่อบวกกับจํานวนนั้นแลวจะใหผลลัพธเปน 0 ขณะที่ตัวผกผันการคูณของจํานวนใดๆ เมื่อคูณ
กับจํานวนนั้นแลวจะใหผลลัพธเปน 1 สําหรับตัวผกผันการบวกนั้นเราสามารถคํานวณหาไดงายๆ ในขณะที่
การคํานวณหาตัวผกผันการคูณ เราจําเปนตองใชอัลกอริทึมยุคลิคแบบขยาย (Extended Euclid’s
Algorithm) เปนเครื่องมือในการคํานวณ รายละเอียดในการคํานวณหาตัวผกผันการคูณจะกลาวถึงในหัวขอ
ตอไป ตารางที่ 5.10 แสดงลําดับของกลุมบิตยอยกุญแจที่ใชในการเขาและถอดรหัสลับโดยอัลกอริทึม IDEA

ตารางที่ 5.10 กุญแจยอยที่ใชในอัลกอริทึม IDEA


Round Encryption Sub-keys Decryption Sub-keys
(1) (1) (1) (1) (1) (1) (9)-1
1 K1 K2 K3 K4 K5 K6 K1 -K2(9) -K3(9) K4(9)-1 K5(8) K6(8)
2 K1(2) K2(2) K3(2) K4(2) K5(2) K6(2) K1(8)-1 -K2(8) -K3(8) K4(8)-1 K5(7) K6(7)
3 K1(3) K2(3) K3(3) K4(3) K5(3) K6(3) K1(7)-1 -K2(7) -K3(7) K4(7)-1 K5(6) K6(6)
4 K1(4) K2(4) K3(4) K4(4) K5(4) K6(4) K1(6)-1 -K2(6) -K3(6) K4(6)-1 K5(5) K6(5)
5 K1(5) K2(5) K3(5) K4(5) K5(5) K6(5) K1(5)-1 -K2(5) -K3(5) K4(5)-1 K5(4) K6(4)
6 K1(6) K2(6) K3(6) K4(6) K5(6) K6(6) K1(4)-1 -K2(4) -K3(4) K4(4)-1 K5(3) K6(3)
7 K1(7) K2(7) K3(7) K4(7) K5(7) K6(7) K1(3)-1 -K2(3) -K3(3) K4(3)-1 K5(2) K6(2)
8 K1(8) K2(8) K3(8) K4(8) K5(8) K6(8) K1(2)-1 -K2(2) -K3(2) K4(2)-1 K5(1) K6(1)
9 K1(9) K2(9) K3(9) K4(9) K1(1)-1 -K2(1) -K3(1) K4(1)-1

67
ตารางที่ 5.11 และ 5.12 แสดงตัวอยางการเขาและถอดรหัสลับดวยอัลกอริทึม IDEA โดยใชขอความ
ตนฉบับที่เปนตัวเลขขนาด 16 บิต M = 0,1,2,3 (16x4 = 64 บิต) และกุญแจเขารหัสลับที่เปนตัวเลขขนาด
16 บิต K = 1, 2, 3, 4, 5, 6, 7, 8 (16x8 = 128 บิต) ใหสังเกตวาคาสถานภาพ (Status) ตางๆ ในตารางทั้ง
สองแสดงอยูในรูปของเลขฐาน 16

ตารางที่ 5.11 ตัวอยางการเขารหัสลับดวยอัลกอริทึม IDEA


128-bit key 64-bit plaintext
K=(0,1,2,3,4,5,6,7,8) M=(0,1,2,3,4)
r K1(r) K2(r) K3(r) K4(r) K5(r) K6(r) X1 X2 X3 X4
1 0001 0002 0003 0004 0005 0006 00f0 00f5 010a 0105
2 0007 0008 0400 0600 0800 0A00 222F 21B5 F45E E959
3 0C00 0E00 1000 0200 0010 0014 0F86 39BE 8EE8 1173
4 0018 001C 0020 0004 0008 000C 57DF AC58 C65B BA4D
5 2800 3000 3800 4000 0800 1000 8E81 BA9C F77F 3A4A
6 1800 2000 0070 0080 0010 0020 6942 9409 E21B 1C64
7 0030 0040 0050 0060 0000 2000 99D0 C7F6 5331 620E
8 4000 6000 8000 A000 C000 E001 0A24 0098 EC6B 4925
9 0080 00C0 0100 0140 - - 11FB ED2B 0198 6DE5

ตารางที่ 5.12 ตัวอยางการถอดรหัสลับดวยอัลกอริทึม IDEA


128-bit key 64-bit ciphertext
K=(0,1,2,3,4,5,6,7,8) M=(11fe,ed2b,0198,6de5
)
r K1(r) K2(r) K3(r) K4(r) K5(r) K6(r) X1 X2 X3 X4
1 FE01 FF40 FF00 659A C000 E001 D98D D331 27F6 82B8
2 FFFD 8000 A000 CCCC 0000 2000 BC4D E26B 9449 A576
3 A556 FFB0 FFC0 52AB 0010 0020 0AA4 F7EF DA9C 24E3
4 554B FF90 E000 FE01 0800 1000 CA46 FE5B DC58 116D
5 332D C800 D000 FFFD 0008 000C 748F 8F08 39DA 45CC
6 4AAB FFE0 FFE4 C001 0010 0014 3266 045E 2FB5 B02E
7 AA96 F000 F200 FF81 0800 0A00 0690 050A 00FD 1DFA
8 4925 FC00 FFF8 552B 0005 0006 0000 0005 0003 000c
9 0001 FFFE FFFD C001 - - 0000 0001 0002 0003

68
5.7 มาตรฐานการเขารหัสลับขั้นสูง AES
อัลกอริทึม AES (Advanced Encryption Standard) มีการคิดคนพัฒนาขึ้นโดยนักสรางรหัสลับ
ชาวเบลเยี่ยม 2 คน จากอัลกอริทึมที่ใชชื่อเดิมวา Rijndael ซึ่งในภายหลังไดรับการยอมรับจากรัฐบาล
ประเทศสหรัฐอเมริกาใหใชเปน มาตรฐานในการเขารหัสลับขอมูลตัวใหมแทนมาตรฐานเดิม คือDES ตั้งแต
ปคริสตศักราช 2002 ทุกวันนี้ AES ไดรับการยอมรับจากองคกรตางๆ ทั่วโลก และไดมีการนํามาประยุกตใช
งานกันอยางกวางขวาง ไดมีความพยายามจากนักวิเคราะหรหัสลับทั่วโลกที่จะคนหาจุดออนของ AES แต
จนถึงปจจุบันยังไมมีใครสามารถทําให AES เกิดจุดออนในทางปฏิบัติได ในขณะที่เขียนบทความนี้ AES
ถือเปนอัลกอริทึมสมมาตรที่ไดรับความนิยมจากคนทั่วไปมากที่สุด ทั้งนี้เนื่องมาจากความรวดเร็วของการ
ประมวลผลในกระบวนการเขาและถอดรหัสลับ ความตองการหนวยความจําเพื่อใชในการเขาและถอดรหัส
ลับที่ต่ํา รวมทั้งความงายในการนําไปประยุกตใชงานทั้งในรูปของซอฟทแวรและฮารดแวร
ตามมาตรฐานที่กําหนดโดย [FIPS01] อัลกอริทึม AES จะเขารหัสลับขอมูลเปนกลุมๆ ละ 128 บิต
กุญแจที่ใชในการเขาและถอดรหัสมีขนาด 128, 192 หรือ 256 บิต ขึ้นอยูกับผูใชงาน เทคนิคพื้นฐานที่ AES
ใชในการเขาและถอดรหัสลับคือ การดําเนินการผสม (Mixing Operations) ระหวางกลุมขอมูลในเชิง
พีชคณิตเชนเดียวกันกับอัลกอริทึม IDEA อยางไรก็ตาม กลุมบิตยอยที่ใชในการประมวลผลของ AES จะถูก
จัดใหอยูในรูปของแถวลําดับ (Array) 2 มิติขนาด 4×4 ไบต (Bytes) เรียกทับศัพทวา สเตท (State) โดยแต
ละแถวของสเตทจะประกอบดวยกลุมบิตขอมูลในรูปของคํา (Word, w) ขนาด 32 บิตจํานวน Nb คํา (Nb
คํานวณจากความยาวของกลุมบิตนําเขาหารดวย 32 ในที่นี้ Nb จะมีคาเทากับ 4 เนื่องจาก 128 บิต/32 บิต =
4) ดังนั้นเมื่อกลุมบิตนําเขาขนาด 128 บิตเขามา AES จะแบงกลุมบิตนําเขาเหลานั้นออกเปนกลุมไบต (Bn)
จํานวน 16 กลุม โดยจัดใหอยูในรูปของแถวลําดับ 2 มิติเรียงจากบนลงลาง ซายไปขวาตามลําดับ กลุมบิต
นําเขาที่จัดเรียงใหอยูในรูปของสเตทแสดงไวดังรูปที่ 5.11 ใหสังเกตวา กลุมไบตในหนึ่งคอลัมนก็คือ กลุม
บิตขอมูลขนาดหนึ่งคํานั่นเอง

รูปที่ 5.11 การจัดเรียงกลุมบิตนําเขาใหอยูในรูปของสเตท

69
ขนาดของกลุมบิตกุญแจที่ใชในการประมวลผลอาจแสดงในรูปของบิตหรือคําก็ได โดยกุญแจ
ขนาด n บิต จะมีขนาด Nk = n/32 คํา ขนาดของกุญแจจะเปนตัวกําหนดจํานวนรอบของการประมวลผล Nr
ในการเขารหัสลับ AES โดยใชกุญแจขนาด128 บิต เราสามารถเขียนใหอยูในรูปยอที่แสดงถึงโหมดการ
ทํางานไดคือ AES-128 สําหรับโหมดอื่นๆ ที่เหลือไดแสดงไวในตารางที่ 5.13

ตารางที่ 5.13 โหมดการทํางานในอัลกอริทึม AES


Mode Key Length Block Size Number of
(Nk words) (Nb words) Rounds (Nr )
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14

ในแตละรอบของการประมวลผล จะประกอบไปดวยกระบวนการยอย 4 กระบวนการคือ


SubBytes, ShiftRows, MixColumns และ AddRoundKey
1. กระบวนการยอย SubBytes จะทําการแทนที่ไบตขอมูลที่อยูในสเตทโดยอางอิงจาก S-box ที่
กําหนด ดูรูปที่ 5.12 และ 5.13 ประกอบ

รูปที่ 5.12 กระบวนการยอย SubBytes

การแทนที่โดยใช S-box ในอัลกอริทึม AES นั้น กลุมบิตนําเขาขนาด 8 บิต (b1b2b3b4b5b6b7b8) จะ


เปนตัวกําหนดคากลุมบิตสงออกขนาด 8 บิตที่เก็บบันทึกไวใน S-box โดยบิตที่ 1 ถึง 4 (b1b2b3b4)
จะใชเปนตัวกําหนดตําแหนงเชิงตัวเลขฐานสิบหก 0-F ในแตละแถวของ S-box ขณะที่บิต 5 ถึง 8
(b5b6b7b8) จะใชกําหนดตําแหนงเชิงตัวเลขฐานสิบหก 0-F ในแตละคอลัมนของ S-box ยกตัวอยาง
เชน ถากลุมบิตนําเขา S1,1 มีคาเทากับ 6216 ตําแหนงของกลุมบิตสงออกที่ไดจะอยูแถวที่ 616 คอลัมนที่
216 ซึ่งก็คือ AA16 ในทํานองเดียวกัน ถา S1,0 มีคาเทากับ 5316 ผลลัพธที่ไดจากกระบวนการยอย
SubBytes ก็คือ ED16 นั่นเอง

70
Y
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76
1 CA 82 C9 7D FA 59 47 F0 AD D4 A2 AF 9C A4 72 C0
2 B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 15
3 04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 75
4 09 83 2C 1A 1B 6E 5A A0 52 3B D6 B3 29 E3 2F 84
5 53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF
6 D0 EF AA FB 43 4D 33 85 45 F9 02 7F 50 3C 9F A8
X 78 51
CD
A3
0C
40
13
8F
EC
92
5F
9D
97
38
44
F5
17
BC
C4
B6
A7
DA
7E
21
3D
10
64
FF
5D
F3
19
D2
73
9 60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DB
A E0 32 3A 0A 49 06 24 5C C2 D3 AC 62 91 95 E4 79
B E7 C8 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08
C BA 78 25 2E 1C A6 B4 C6 E8 DD 74 1F 4B BD 8B 8A
D 70 3E B5 66 48 03 F6 0E 61 35 57 B9 86 C1 1D 9E
E E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DF
F 8C A1 89 0D BF E6 42 68 41 99 2D 0F B0 54 BB 16
รูปที่ 5.13 การแทนที่ S-box ในอัลกอริทึม AES

2. กระบวนการยอย ShiftRows จะทําการเลื่อนไบตเปนวงกลมไปทางซาย n ไบต โดยในแถวที่ 1, 2,


3 และ 4 จะมีคา n เทากับ 0, 1, 2 และ 3 ตามลําดับ

รูปที่ 5.14 กระบวนการยอย Shift Rows

3. กระบวนการยอย MixColumns จะทําการคูณมอดุโล X4+1 ระหวางคอลัมนภายในสเตทกับพหุ


นามคงที่ a(x) = 0316x3 + 0116x2+ 0116x+ 0216 ในการดําเนินการนี้ กลุมไบตทั้ง 4 ในแตละ
คอลัมนของสเตทจะถูกมองเสมือนกับพหุนามตัวหนึ่งที่มีขนาด 4 เทอม b(x) = Bi+0x3 + Bi+1x2 +
Bi+2x + Bi+3 ซึ่งการคูณกันของพหุนามทั้งสองในมอดุโล x4+1 ทั้ง 4 คอลัมนนี้สามารถเขียนใหอยู
ในรูปของสมการการคูณเมทริกซไดคือ

⎡ S' 0,C ⎤ ⎡02 03 01 01 ⎤ ⎡ S 0,C ⎤


⎢ ⎥ ⎢ ⎢ ⎥
⎢ S' 1,C ⎥ = ⎢01 02 03 01 ⎥⎥ ⎢ S 1,C ⎥
for 0 ≤ c ≤ Nb (5.8)
⎢ S' 2,C ⎥ ⎢01 01 02 03 ⎥ ⎢ S 2,C ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢⎣ S' 3,C ⎥⎦ ⎣03 01 01 02 ⎦ ⎢⎣ S 3,C ⎥⎦

71
และผลลัพธที่ไดจากการคูณกันในมอดุโล X4+1 สามารถเขียนในรูปของสมการไดดังนี้

S' 0,C = (02 16 • S 0,C ) ⊕ (0316 • S 1,C ) ⊕ S 2,C ⊕ S 3,C


S' 1,C = S 0,C ⊕ (0216 • S 1,C ) ⊕ (0316 • S 2,C ) ⊕ S 3,C
(5.9)
S' 2,C = S 0,C ⊕ S 1,C ⊕ (0216 • S 2,C ) ⊕ (0316 • S 3,C )
S' 3 ,C = (0316 • S 0,C ) ⊕ S 1,C ⊕ S 2,C ⊕ (0216 • S 3,C )

รูปที่ 5.15 กระบวนการยอย MixColumns

4. กระบวนการยอย AddRoundKey จะทําการออรเฉพาะระหวางสเตทของกลุมขอมูลกับสเตทของ


กลุมกุญแจยอย

[S' 0,C , S' 1,C , S' 2,C , S' 3,C ] = [S 0,C , S 1,C , S 2,C , S 3,C ] [
⊕ w rNb + c ]
(5.10)
for 0 ≤ c ≤ Nb and 0 ≤ r ≤ Nr

ในการเขารหัสลับ AES จะทําการจัดเรียงกลุมขอมูลขนาด 128 บิตใหในรูปของสเตท จากนั้นจะ


ผานกระบวนการยอย AddRoundKey 1 ครั้งกอน ผลลัพธที่ไดจะเริ่มเขาสูกระบวนการประมวลผลเปน
จํานวน 10, 12 หรือ 14 รอบขึ้นอยูกับขนาดของกุญแจที่ใชในการเขารหัสลับ ซึ่งแตละรอบของการ
ประมวลผลจะเปนการดําเนินการกระบวนการยอยทั้ง 4 ที่กลาวมาขางตนตามลําดับ อยางไรก็ตามในรอบ
สุดทายของการประมวลผล ทั้ง 3 โหมดการทํางาน จะไมมีกระบวนการยอย MixColumns รวมอยูดวย เมื่อ
ผานกระบวนการประมวลผลครบตามรอบที่กําหนดแลว ผลลัพธสุดทายที่ไดก็คือ ขอความรหัส ขั้นตอนใน
การเขารหัสลับของ AES สามารถสรุปไดโดยใชรหัสเทียม (Pseudo Code) ดังที่แสดงในรูปที่ 5.16

72
state <-- in
state <-- AddRoundKey(state, w[0, Nb-1])
for round = 1 to (Nr–1) do
state <-- SubBytes(state)
state <-- ShiftRows(state)
state <-- MixColumns(state)
state <-- AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
state <-- SubBytes(state)
state <-- ShiftRows(state)
state <-- AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
out <-- state
รูปที่ 5.16 ขั้นตอนการเขารหัสลับ AES แสดงโดยรหัสเทียม

สําหรับขั้นตอนการเตรียมกลุมกุญแจยอยในรูปสเตทของ AES จะทําโดยใชกระบวนการขยาย


กุญแจ (Key Expansion) ซึ่งประกอบไปดวย 2 กระบวนการยอยคือ
1. กระบวนการยอย Rotword จะทําการเลื่อนไบตในแตละคําเปนวงกลมไปทางซาย 1 ไบต
2. กระบวนการยอย Subword จะทําการแทนที่ไบตขอมูลที่อยูในสเตทของกลุมกุญแจยอยโดย
อางอิงจาก S-box ตัวเดียวกันกับที่ใชในกระบวนการยอย SubBytes
ผลลัพธที่ไดจากกระบวนการขางตนจะนํามาออรเฉพาะกับคาคงที่ Rcon [i] ซึ่งมีคาเทากับ [xi-1,
00, 00, 00]16 โดย x เทากับ 0216 และ i คือลําดับของคํา (wi) มีคาตั้งแต 1 ถึง Nb(N +1)-1
ในกระบวนการขยายกุญแจ AES จะสรางกลุมกุญแจยอยเริ่มตนขนาด 32 บิต จํานวน Nb กลุมกอน
แตละกลุมจะประกอบไปดวยคํา (wi) 4 คํา จากนั้นในแตละรอบจะสรางกลุมกุญแจยอยขึ้นมาอีกเปนจํานวน
Nr รอบ สงผลใหมีกลุมกุญแจยอยที่สรางขึ้นทั้งสิ้น Nb(Nr+1) คํา ขั้นตอนในกระบวนการขยายกุญแจของ
AES สามารถสรุปไดโดยใชรหัสเทียมดังรูปที่ 5.17

73
RCon[1] <-- 0x01000000
RCon[2] <-- 0x02000000
RCon[3] <-- 0x04000000
RCon[4] <-- 0x08000000
RCon[5] <-- 0x10000000
RCon[6] <-- 0x20000000
RCon[7] <-- 0x40000000
RCon[8] <-- 0x80000000
RCon[9] <-- 0x1B000000
RCon[10] <-- 0x36000000
for i = 0 to (Nk -1) do
w[i] <-- (k[4*i], k[4*i+1], k[4*i+2], k[4*i+3])
for i = Nk to (Nb * (Nr+1) -1) do
temp <-- w[i-1]
if (i mod Nk = 0)
then temp <-- SubWord(RotWord(temp)) xor Rcon[i/Nk]
else if (Nk > 6 and i mod Nk = 4)
then temp <-- SubWord(temp)
w[i] <-- w[i-Nk] xor temp
รูปที่ 5.17 กระบวนการขยายกุญแจของ AES แสดงโดยรหัสเทียม

ตัวอยางที่ 5.1 กําหนดใหกุญแจที่ใชในการเขารหัสลับ AES มีขนาด 128 บิต


Key = 2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C
จงทําการขยายกุญแจเพื่อหากลุมกุญแจยอยในแตละรอบของการประมวลผล

วิธีทํา จากตารางที่ 5.13 กุญแจที่ใชมีขนาด 128 บิต ฉะนั้น AES จะทํางานในโหมด AES-128
ซึ่งมีคา Nk = 4, Nr = 10, Nb = 4 กุญแจยอยเริ่มตนขนาด 32 บิตจํานวน 4 คํา (Wi, i = 0-
3) คือ
W0 = 2B7E151616 W1 = 28AED2A616
W2 = ABF7158816 W3 = 09CF4F3C16

จากนั้นจะเริ่มเขาสูกระบวนการขยายกุญแจดังที่แสดงในรูปที่ 5.17 เพื่อสรางกลุมกุญแจ


ยอยขึ้นมาอีก 10 กลุม หรือ 40 คํา (Wi, i = 4-43) คาสถานะของกลุมกุญแจยอยในขั้นตอน
ขยายกุญแจ ไดแสดงไวในตารางที่ 5.14

74
ตารางที่ 5.14 คาสถานะของกลุมกุญแจยอยในขั้นตอนขยายกุญแจ

I After After After XOR W[i]=


(dec) temp RotWord() SubWord() Rcon[i/Nk] With Rcon W[i-Nk] Temp XOR
W[i-Nk]
4 09CF4F3C CF4F3C09 8A84EB01 01000000 8B84EB01 2B7E1516 A0FAFE17
5 A0FAFE17 28AED2A6 88542CB1
6 88542CB1 ABF71588 23A33939
7 23A33939 09CF4F3C 2A6C7605
8 2A6C7605 6C76052A 50386BE5 02000000 52386BE5 A0FAFE17 F2C295F2
9 F2C295F2 88542CB1 7A96B943
10 7A96B943 23A33939 5935807A
11 5935807A 2A6C7605 7359F67F
12 7359F67F 59F67F73 CD42D28F 04000000 CF42D28F F2C295F2 3D80477D
13 3D80477D 7A96B943 4716FE3E
14 4716FE3E 5935807A 1E237E44
15 1E237E44 7359F67F 6D7A883B
16 6D7A883B 7A883B6D DAC4E23C 08000000 D2C4E23C 3D80477D EF44A541
17 EF44A541 4716FE3E A8525B7F
18 A8525B7F LE237E44 B671253B
19 B671253B 6D7A883B DB0BAD00
20 DB0BAD00 0BAD00DB 2B9563B9 10000000 3B9563B9 EF44A541 D4D1C6F8
21 D4D1C6F8 A8525B7F 7C839D87
22 7C839D87 B671253B CAF2B8BC
23 CAF2B8BC DB0BAD00 11F915BC
24 11F915BC F915BC11 99596582 20000000 B9596582 D4D1C6F8 6D88A37A
25 6D88A37A 7C839D87 110B3EFD
26 110B3EFD CAF2B8BC DBF98641
27 DBF98641 11F915BC CA0093FD
28 CA0093FD 0093FDCA 63DC5474 40000000 23DC5474 6D88A37A 4E54F70E
29 4E54F70E 110B3EFD 5F5FC9F3
30 5F5FC9F3 DBF98641 84A64FB2
31 84A64FB2 CA0093FD 4EA6DC4F
32 4EA6DC4F A6DC4F4E 2486842F 80000000 A486842F 4E54F70E EAD27321
33 EAD27321 5F5FC9F3 B58DBAD2
34 B58DBAD2 84A64FB2 312BF560
35 312BF560 4EA6DC4F 7F8D292F
36 7F8D292F 8D292F7F 5DA515D2 1B000000 46A515D2 EAD27321 AC7766F3
37 AC7766F3 B58DBAD2 19FADC21
38 19FADC21 312BF560 28D12941
39 28D12941 7F8D292F 575C006E
40 575C006E 5C006E57 4A639F5B 36000000 7C639F5B AC7766F3 D014F9A8
41 D014F9A8 19FADC21 C9EE2589
42 C9EE2589 28D12941 E13F0CC8
43 E13F0CC8 575C006E B6630CA6

75
ตัวอยางที่ 5.2 จงทําการเขารหัสลับโดยใชอัลกอริทึม AES กําหนดใหกลุมขอความตนฉบับขนาด 128
บิต มีคาเทากับ M = 32 43 F6 A8 88 5A 30 8D 31 31 98 A2 E0 37 07 34
กุญแจที่ใชในการเขารหัสลับขนาด 128 บิต มีคาเทากับ
K = 2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C

วิธีทํา การดําเนินการเขารหัสลับทําไดตามขั้นตอนที่แสดงในรูปที่ 5.16 โดยตารางที่ 5.15 ได


แสดงคาสถานะในแตละสเตทของกลุมขอมูลที่กําลังทําการเขารหัสลับ

ตารางที่ 5.15 คาสถานะของสเตทในแตละขั้นตอนของการเขารหัสลับ

32 88 31 E0 2B 28 AB 09
input 43 5A 31 37 ⊕ 7E AE F7 CF
F6 30 98 07 15 D2 15 4F
A8 8D A2 34 16 A6 88 3C
19 A0 9A E9 D4 E0 B8 1E D4 E0 B8 1E 04 E0 48 28 A0 88 23 2A
1 3D F4 C6 F8 27 BF B4 41 BF B4 41 27 66 CB F8 06 ⊕ FA 54 A3 6C
E3 E2 8D 48 11 98 5D 52 5D 52 11 98 81 19 D3 26 FE 2C 39 76
BE 2B 2A 08 AE F1 E5 30 30 AE F1 E5 E5 9A 7A 4C 17 B1 39 05
A4 68 6B 02 49 45 7F 77 49 45 7F 77 58 1B DB 1B F2 7A 59 73
2 9C 9F 5B 6A DE DB 39 02 DB 39 02 DE 4D 4B E7 6B ⊕ C2 96 35 59
7F 35 EA 50 D2 96 87 53 87 53 D2 96 CA 5A CA B0 95 B9 80 F6
F2 2B 43 49 89 F1 1A 3B 3B 89 F1 1A F1 AC A8 E5 F2 43 7A 7F
AA 61 82 68 AC EF 13 45 AC EF 13 45 75 20 53 BB 3D 47 1E 6D
3 8F DD D2 32 73 C1 B5 23 C1 B5 23 73 EC 0B C0 25 ⊕ 80 16 23 7A
5F E3 4A 46 CF 11 D6 5A D6 5A CF 11 09 63 CF D0 47 FE 7E 88
03 EF D2 9A 7B DF B5 B8 B8 7B DF B5 93 33 7C DC 7D 3E 44 3B
48 67 4D D6 52 85 E3 F6 52 85 E3 F6 0F 60 6F 5E EF A8 B6 DB
4 6C 1D 3E 5F 50 A4 11 CF A4 11 CF 50 D6 31 C0 B3 ⊕ 44 52 71 0B
4E 9D B1 58 2F 5E C8 6A C8 6A 2F 5E DA 38 10 13 A5 5B 25 AD
EE 0D 38 E7 28 D7 07 94 94 28 D7 07 A9 BF 6B 01 41 4F 3B 00
E0 C8 D9 85 E1 E8 35 97 E1 E8 35 97 25 BD B6 4C D4 7C CA 11
5 92 63 B1 B8 4F FB C8 6c FB C8 6C 4F D1 11 3A 4C ⊕ D1 83 F2 F9
7F 63 35 BE D2 FB 96 AE 96 AE D2 FB A9 D1 33 C0 C6 9D B8 15
E8 C0 50 01 9B BA 53 7C 7C 9B BA 53 AD 68 8E B0 F8 87 BC BC
F1 C1 7C 5D A1 78 10 4C A1 78 10 4C 4B 2C 33 37 6D 11 DB CA
6 00 92 C8 B5 63 4F E8 D5 4F E8 D5 63 86 4A 9D D2 ⊕ 88 0B F9 00
6F 4C 8B D5 A8 29 3D 03 3D 03 A8 29 8D 89 F4 18 A3 3E 86 93
55 EF 32 0C FC DF 23 FE FE FC DF 23 6D 80 E8 D8 7A FD 41 FD

76
26 3D E8 FD F7 27 9B 54 F7 27 9B 54 14 46 27 34 4E 5F 84 4E
7 0E 41 64 D2 AB 83 43 B5 83 43 B5 AB 15 16 46 2A ⊕ 54 5F A6 A6
2E B7 72 8B 31 A9 40 3D 40 3D 31 A9 B5 15 56 D8 F7 C9 4F DC
17 7D A9 25 F0 FF D3 3F 3F F0 FF D3 BF EC D7 43 0E F3 B2 4F
5A 19 A3 7A BE D4 0A DA BE D4 0A DA 00 B1 54 FA EA B5 31 7F
8 41 49 E0 8C 83 3B E1 64 3B E1 64 83 51 C8 76 1B ⊕ D2 8D 2B 8D
42 DC 19 04 2C 86 D4 F2 D4 F2 2C 86 2F 89 6D 99 73 BA F5 29
B1 1F 65 0C C8 C0 4D FE FE C8 C0 4D D1 FF CD EA 21 D2 60 2F
EA 04 65 85 87 F2 4D 97 87 F2 4D 97 47 40 A3 4C AC 19 28 57
9 83 45 5D 96 EC 6E 4C 90 6E 4C 90 EC 37 D4 70 9F ⊕ 77 FA D1 5C
5C 33 98 B0 4A C3 46 E7 46 E7 4A C3 94 E4 3A 42 66 DC 29 00
F0 2D AD C5 8C D8 95 A6 A6 8C D8 95 ED A5 A6 BC F3 21 41 6E
EB 59 8B 1B E9 CB 3D AF E9 CB 3D AF D0 C9 E1 B6
10 40 2E A1 C3 09 31 32 2E 31 32 2E 09 ⊕ 14 EE 3F 63
F2 38 13 42 89 07 7D 2C 7D 2C 89 07 F9 25 0C 0C
1E 84 E7 D2 72 5F 94 B5 B5 72 5F 94 A8 89 C8 A6
39 02 DC 19
output 25 DC 11 6A
84 09 85 0B
1D FB 97 32

สําหรับขั้นตอนในการถอดรหัสลับของ AES นั้น จะดําเนินการในลักษณะยอนกลับกับขั้นตอนการ


เขารหัสลับ กระบวนการยอยตางๆ ที่ใชในการเขารหัสลับจะเปลี่ยนเปนกระบวนการยอยแบบผกผันแทน
ซึ่งในแตละรอบของการประมวลผละจะประกอบไปดวย 4 กระบวนการยอยเชนเดียวกันคือ
1. กระบวนการยอย InvShiftRows จะทําการเลื่อนไบตเปนวงกลมไปทางขวา n ไบต โดยในแถวที่ 1,
2, 3 และ 4 จะมีคา n เทากับ 0, 1, 2 และ 3 ตามลําดับ

รูปที่ 5.18 กระบวนการยอย InvShiftRows

77
2. กระบวนการยอย InvSubBytes จะทําการแทนที่ไบตขอมูลที่อยูในสเตทโดยอางอิงจาก S-box
ผกผัน (Inverse S-box) ที่กําหนด ดังแสดงในรูปที่ 5.19

Y
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 52 09 6A D5 30 36 A5 38 BF 40 A3 9E 81 F3 D7 FB
1 7C E3 39 82 9B 2F FF 87 34 8E 43 44 C4 DE E9 CB
2 54 7B 94 32 A6 C2 23 3D EE 4C 95 0B 42 FA C3 4E
3 08 2E A1 66 28 D9 24 B2 76 5B A2 49 6D 8B D1 25
4 72 F8 F6 64 86 68 98 16 D4 A4 5C CC 5D 65 B6 92
5 6C 70 48 50 FD ED B9 DA 5E 15 46 57 A7 8D 9D 84
6 90 D8 AB 00 8C BC D3 0A F7 E4 58 05 B8 B3 45 06
7 D0 2C 1E 8F CA 3F 0F 02 C1 AF BD 03 01 13 8A 6B
X
8 3A 91 11 41 4F 67 DC EA 97 F2 CF CE F0 B4 E6 73
9 96 AC 74 22 E7 AD 35 85 E2 F9 37 E8 1C 75 DF 6E
A 47 F1 1A 71 1D 29 C5 89 6F B7 62 0E AA 18 BE 1B
B FC 56 3E 4B C6 D2 79 20 9A DB C0 FE 78 CD 5A F4
C 1F DD A8 33 88 07 C7 31 B1 12 10 59 27 80 EC 5F
D 60 51 7F A9 19 B5 4A 0D 2D E5 7A 9F 93 C9 9C EF
E A0 E0 3B 4D AE 2A F5 B0 C8 EB BB 3C 83 53 99 61
F 17 2B 04 7E BA 77 D6 26 E1 69 14 63 55 21 0C 7D
รูปที่ 5.19 การแทนที่ S-box ผกผัน

3. กระบวนการยอย InvMixColumns จะทําการคูณมอดุโล x4+1 ระหวางคอลัมนภายในสเตทกับพหุ


นามคงที่ a-1(x) = 0B16x3 + 0D16x2 + 0916x + 0E16 ซึ่งการคูณกันของพหุนามทั้งสองในมอดุโล
x4+1 ทั้ง 4 คอลัมนนี้สามารถเขียนในรูปของสมการการคูณเมทริกซไดคือ

⎡ S'0,C ⎤ ⎡0E 0B 0D 09 ⎤ ⎡ S 0,C ⎤


⎢ ⎥ ⎢ ⎢ ⎥
⎢ S' 1,C ⎥ = ⎢09 0E 0B 0D ⎥⎥ ⎢ S 1,C ⎥
for 0 ≤ c ≤ Nb (5.11)
⎢ S' 2,C ⎥ ⎢0D 09 0E 0B ⎥ ⎢ S 2,C ⎥
⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎢⎣ S' 3,C ⎥⎦ ⎣0B 0D 09 0E ⎦ ⎢⎣ S 3,C ⎥⎦

78
และผลลัพธที่ไดจากการคูณกันในมอดุโล X4+1 สามารถเขียนในรูปของสมการไดดังนี้

S'0,C = (0E 16 • S 0,C ) ⊕ (0B16 • S 1,C ) ⊕ (0D16 • S 2,C ) ⊕ (0916 • S 3,C )


S'1,C = (0916 • S 0,C ) ⊕ (0E 16 • S 1,C ) ⊕ (0B16 • S 2,C ) ⊕ (0D16 • S 3,C )
(5.12)
S' 2,C = (0D16 • S 0,C ) ⊕ (0916 • S 1,C ) ⊕ (0E 16 • S 2,C ) ⊕ (0B16 • S 3,C )
S'3 ,C = (0B16 • S 0,C ) ⊕ (0D16 • S 1,C ) ⊕ (0916 • S 2,C ) ⊕ (0E 16 • S 3,C )

4. กระบวนการยอย AddRoundKey เนื่องจากกระบวนการนี้เปนการออรเฉพาะ ฉะนั้นกระบวนการ


ยอนกลับจึงสามารถทําไดโดยการออรเฉพาะผลลัพธที่ไดในตอนแรกอีกครั้งหนึ่ง

ขั้นตอนการถอดรหัสลับของ AES สามารถสรุปไดโดยใชรหัสเทียมดังที่แสดงในรูปที่ 5.20 ให


สังเกตวา ในรอบสุดทายของการประมวลผล จะไมมีกระบวนการยอย InvMixColumns รวมอยูดวย

state <-- in
state <-- AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])
for round = Nr-1 downto 1 do
state <-- InvShiftRows(state)
state <-- InvSubBytes(state)
state <-- AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
state <-- InvMixColumns(state)
state <-- InvShiftRows(state)
state <-- InvSubBytes(state)
state <-- AddRoundKey(state, w[0, Nb-1])
out <-- state
รูปที่ 5.20 ขั้นตอนการถอดรหัสลับของ AES แสดงโดยรหัสเทียม

79
5.8 คําถามทายบท
1. จงอธิบายความแตกตางระหวางตัวแปลงรหัสแบบดั้งเดิมกับตัวแปลงรหัสแผนใหม นักศึกษาคิดวาแบบ
ใดดีกวากัน เพราะเหตุใด ใหยกเหตุผลประกอบคําอธิบาย
2. จงอภิปรายถึงความแข็งแกรงของตัวแปลงรหัสแบบแทนที่ และตัวแปลงรหัสแบบสลับตําแหนง
นักศึกษาคิดวาแบบใดแข็งแกรงกวากัน เพราะเหตุใด ใหยกเหตุผลประกอบคําอธิบาย
3. ตัวแปลงรหัสสัมพรรค (Affine Cipher) จัดเปนตัวแปลงรหัสผลคูณ (Product Cipher) หรือไม เพราะ
เหตุใด ใหยกเหตุผลประกอบคําอธิบาย
4. จงอธิบายความแตกตางระหวาง ก) การทําใหสับสนและการแทนที่ ข) การแพรและการสลับตําแหนง
เมื่อนําฟงกชันทั้งสี่มาประยุกตใชงานในการเขารหัสลับ
5. อัลกอริทึม DES ใชกุญแจขนาด 56 บิต นักศึกษาคิดวามีความปลอดภัยเพียงพอตอการใชงานในปจจุบัน
หรือไม โดยเฉพาะความทนทานตอการโจมตีแบบตะลุย ถาไม กุญแจขนาดเทาใดจึงถือวามีความ
ปลอดภัยอยางพอเพียง ใหยกเหตุผลมาประกอบคําอธิบาย

80
บทที่ 6
อัลกอริทึมอสมมาตร ตอนหนึ่ง

6.1 บทนํา
ในการนําอัลกอริทึมสมมาตรไปประยุกตใชในระบบสื่อสารขอมูล ผูใชงานทั้งทางฝงผูรับและผูสง
จําเปนตองมีการแลกเปลี่ยนและเห็นชอบรวมกันถึงกุญแจที่จะใชในการเขาและถอดรหัสลับ กอนที่จะมีการ
แลกเปลี่ยนขอมูลที่เปนความลับระหวางกัน นอกจากนี้กุญแจที่ใช จําเปนตองเก็บรักษาเปนความลับระหวาง
ผูใชงานภายในกลุมเทานั้น ซึ่งอาจมีสองคนหรือมากกวาสองคนขึ้นไป ในกรณีที่ผูใชงานคนหนึ่งตองการ
ติดตอสื่อสารอยางเปนความลับกับผูใชงานคนอื่นๆ อีก 10 คน ผูใชงานคนนั้นจําเปนตองแลกเปลี่ยนและ
เห็นชอบที่จะใชกุญแจที่แตกตางกันกับผูใชงานทุกๆ คนถึง 10 ครั้ง และยังตองเก็บรักษากุญแจทั้ง 10 ดอก
เหลานั้นไวเปนความลับอยูตลอดเวลา มากกวานั้นเวลาที่จะติดตอสื่อสารกับใคร ผูใชงานคนนี้จําเปนตอง
คนหาหรือจําใหไดวาคนที่เขากําลังจะติดตอตองใชกุญแจดอกไหน ปญหาในลักษณะนี้เปนเรื่องของ การ
จัดการกุญแจ (Key Management) ในเครือขายระบบสื่อสาร ในทางปฏิบัติปญหาการจัดการกุญแจที่เกิดขึ้นจะ
มีความซับซอนมากกวานี้ โดยเฉพาะในกรณีที่ผูใชงานจําเปนตองติดตอกับบุคคลอื่นๆ เปนจํานวนมาก
แนวทางหนึ่งที่นํามาใชเพื่อหลีกเลี่ยงปญหาดังกลาวคือ การใชเทคนิคการเขารหัสลับที่ไมเปนความลับ (Non-
secret Encryption) ซึ่งไดมีการนําเสนอครั้งแรกในปคริสตศักราช 1970 โดยในระบบที่นําเสนอ ผูรับขอความ
รหัสที่เหมาะสมเทานั้นที่จะสามารถถอดรหัสลับ ขอความรหัสนั้นๆ ไดโดยไมจําเปนตองมีการแลกเปลี่ยน
กุญแจมากอน [ELLI70] เทคนิคนี้เปนที่รูจักกันในภายหลังในชื่อของ อัลกอริทึมอสมมาตร หรืออัลกอริทึม
กุญแจสาธารณะ หลังจากนั้นก็เริ่มมีการนําเสนออัลกอริทึมกุญแจสาธารณะแบบตางๆ โดยนักสรางรหัสลับทั่ว
โลก ความปลอดภัยของอัลกอริทึมเหลานั้นทั้งหมดจะขึ้นอยูกับความยากในการแกปญหาเชิงคณิตศาสตรที่
เปนสวนหนึ่งของทฤษฎีจํานวน (Number Theory)

6.2 ทฤษฎีคํานวณ
เนื่องจากการทํางานของอัลกอริทึมกุญแจสาธารณะอยูบนพื้นฐานการคํานวณทางคณิตศาสตร ในสวน
ของทฤษฎีจํานวน เราจําเปนตองศึกษาและทําความเขาใจเนื้อหาในบางสวนของทฤษฎีเหลานั้น เพื่อนําไปสู
ความเขาใจที่ดีขึ้นในกระบวนการทํางานของอัลกอริทึมกุญแจสาธารณะแบบตางๆ

81
6.2.1 เลขคณิตมอดุลาร
เลขคณิตมอดุลาร (Modular Arithmetic) หรือเลขคณิตสวนจําเพาะ จะมีรูปแบบดังนี้

a = b mod n (6.1)
หรือ a ≡ b (mod n) ถา a = b + kn

โดยที่ k คือจํานวนเต็มใดๆ โดยปกติเราจะเรียก a ซึ่งเปนจํานวนเต็มบวกวา สมภาค (Congruence)


ของ b มอดุโล n และเรียก b ซึ่งเปนจํานวนเต็มบวกมีคาระหวาง 0 ถึง n-1 วาเศษตกคาง (Residue) ของ a มอ
ดุโล n ขณะที่เครื่องหมาย ≡ เรียกวาเครื่องหมายสมภาค ชุดตัวเลขที่เปนจํานวนเต็มตั้งแต 0 ถึง n-1 จะเรียกวา
ชุดสมบูรณของเศษตกคาง (Complete Set of Residues) มอดุโล n ซึ่งหมายความวา ในทุกๆ จํานวนเต็ม a
คาเศษตกคางของมอดุโล n จะเปนตัวเลขระหวาง 0 ถึง n-1
การดําเนินการของ a mod n จะใชแสดงถึงเศษตกคางของ a ที่เปนตัวเลขระหวาง 0 ถึง n-1
เชนเดียวกัน ซึ่งเราจะเรียกการดําเนินการนี้วา การลดทอนสวนจําเพาะ (Modular Reduction) เชน 8 mod 5 =
3 หรือ 19 mod 12 = 7 เปนตน โดยพื้นฐานเลขคณิตสวนจําเพาะจะมีคุณสมบัติเหมือนกับเลขคณิตทั่วๆ ไป
คือมีคุณสมบัติของ

การบวก (Addition): (a + b) mod n = ((a mod n) + (b mod n)) mod n


การลบ (Subtraction): (a - b) mod n = ((a mod n) - (b mod n)) mod n
การคูณ (Multiplication): (a . b) mod n = ((a mod n) . (b mod n)) mod n
การหาร (Division): a/b mod n = ((a mod n) . (b-1 mod n)) mod n
การเปลี่ยนหมู (Associativity): (a + b) + c mod n = a + (b + c) mod n
การสลับที่ (Commutativity): (a + b) mod n = (b + a) mod n
การแจกแจง (Distributivity): (a + b) . c mod n = (((a . c) mod n) + ((b . c) mod n)) mod n
ใหสังเกตวาเราสามารถเลือกที่จะดําเนินการตางๆ กอนการลดทอนสวนจําเพาะ หรือจะลดทอนสวน
จําเพาะกอนการดําเนินการตางๆ ก็ได ตัวอยางการบวกและการคูณเลขจํานวนเต็มสองจํานวน a และ b ในมอ
ดุโล 8 แสดงไวในรูปที่ 6.1 และ 6.2

82
+ 0 b
1 2 3 4 5 6 7
0 0 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7 0
2 2 3 4 5 6 7 0 1
a 34 34 4
5
5
6
6
7
7
0
0
1
1
2
2
3
5 5 6 7 0 1 2 3 4
6 6 7 0 1 2 3 4 5
7 7 0 1 2 3 4 5 6
รูปที่ 6.1 ตัวอยางการบวกเลขในมอดุโล 8

x 0 b
1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7
2 0 2 4 6 0 2 4 6
a 34 00 3
4
6
0
1
4
4
0
7
4
2
0
5
4
5 0 5 2 7 4 1 6 3
6 0 6 4 2 0 6 4 2
7 0 7 6 5 4 3 2 1
รูปที่ 6.2 ตัวอยางการคูณเลขในมอดุโล 8

จากสมการที่ 6.1 ถา n เปนจํานวนเฉพาะ (Prime, p) ซึ่งเปนตัวเลขจํานวนเต็มที่มีตัวประกอบ


(Factor) คือ 1 และตัวของมันเอง เชน 2, 3, 5, 7, 11, 13, 17, 19, 23 เปนตน หรือเปนเลขยกกําลังของจํานวน
เฉพาะ เราจะเรียกการคํานวณที่เกิดขึ้นในเลขคณิตสวนจําเพาะภายในมอดุโล n วา การคํานวณในฟลดจํากัด
(Finite Field) หรือ ฟลด Galois (Galois Field, GF) เขียนในรูปยอวา GF(P) ซึ่งในฟลดจํากัดไดมีการนิยาม
การดําเนินการตางๆ เชน การบวก การลบ การคูณ การหาร (โดยคาที่ไมเปนศูนย) มีการนิยามเอกลักษณ
(Identity) ของการบวกคือเลขศูนย และเอกลักษณของการคูณคือเลขหนึ่ง เลขคณิตสวนจําเพาะในฟลดจํากัดมี
ประโยชนมากในวิทยาการรหัสลับ เนื่องจากผลลัพธที่ไดจากการคํานวณจะมีคาหรือขนาดที่จํากัด ยกตัวอยาง
เชน ในการคํานวณตัวเลขขนาด k บิตมอดุโล n ไมวาจะเปนการดําเนินการบวก ลบ หรือคูณ ตัวเลขผลลัพธที่
ไดจะมีขนาดไมเกิน 2k บิตเสมอ นอกจากนี้การดําเนินการหารในเลขคณิตสวนจําเพาะจะมีขอดีคือ ผลลัพธที่
ไดจะไมมีคาผิดพลาดปดเศษ (Rounding Error) เกิดขึ้น ดังนั้นอัลกอริทึมอสมมาตรหลายๆ ชนิดจึงเลือกการ
ประมวลผลภายใน GF(P) มาใชในกระบวนการเขาและถอดรหัสลับเปนหลัก โดยคา p ที่เลือกใชจะเปนตัวเลข
จํานวนเฉพาะที่มีคามากๆ

83
จากคุณสมบัติของ GF(P) ที่กลาวมาขางตน เราจึงสามารถคํานวณหาผลลัพธของเลขยกกําลังใน
GF(P) โดยมีคาหรือขนาดของผลลัพธที่จํากัดได เชน การคํานวณหาผลลัพธที่เปนเลขยกกําลังของ b มอดุโล n
ซึ่งเขียนในรูปสมการไดดังนี้

a = bx mod n (6.2)

ในการคํานวณ เราอาจดําเนินการคูณเพื่อหาผลลัพธของ bx กอน แลวจึงทําการลดทอนสวนจําเพาะก็


ได แตวิธีการนี้เปนวิธีที่ไมมีประสิทธิภาพ เพราะจะตองมีการคํานวณโดยการคูณตัวเลข b หลายๆ ครั้งกอน ใน
ที่นี้ตองคูณกันถึง x ครั้ง สงผลใหเราตองทําการลดทอนสวนจําเพาะตัวเลขผลลัพธที่มีขนาดใหญมากๆ ในทาง
กลับกัน เราสามารถลดทอนสวนที่เปนตัวเลขยกกําลังใหมีขนาดเล็กลงกอน แลวจึงทําการคูณผลลัพธที่ไดเขา
ดวยกันในภายหลัง ยกตัวอยางเชน

b8 mod n = ((b2 mod n)2 mod n)2 mod n


หรือ = ((b2 mod n) . (b2 mod n) . (b2 mod n)) mod n

ตัวอยางที่ 6.1 จงคํานวณหาคา x โดยที่ x = 89 mod 55

วิธีทํา x = 89 mod 55
= ((82 mod 55)2 mod 55 . (82 mod 55)2 mod 55) . 8 mod 55
= ((9 mod 55) 2 . (9 mod 55) 2 mod 55) . 8 mod 55
= ((92 mod 55) . (92 mod 55) mod 55) . 8 mod 55
= ((26 mod 55) . (26 mod 55) mod 55) . 8 mod 55
= ((26 . 26) mod 55) . 8 mod 55
= (16 mod 55) . 8 mod 55
= (16 . 8) mod 55
= 18

84
6.2.2 ตัวหารรวมมาก
ตัวเลขจํานวนเต็ม 2 จํานวนจะเปนจํานวนเฉพาะสัมพันธ (Relatively Prime) ของกันและกัน ถา
ตัวเลขทั้งสองจํานวนนี้ไมมีตัวประกอบรวมกันนอกจาก 1 หรือตัวหารรวมมาก (Greatest Common Divisor,
gcd) ของจํานวนทั้งสองเทากับ 1 ฉะนั้นถากําหนดใหจํานวนทั้งสองคือ b และ n จะไดวา

gcd (b,n) = 1 (6.3)

ตัวเลข 21 (3×7) กับ 26 (2×13) เปนจํานวนเฉพาะสัมพันธของกันและกัน ขณะที่ 21 (3×7) กับ 28


(2×2×7) ไมเปน ทั้งนี้เนื่องมาจาก 21 กับ 28 มีตัวหารรวมมากเทากับ 7 ใหสังเกตวาจํานวนเฉพาะใดๆ จะเปน
จํานวนเฉพาะสัมพันธกับตัวเลขอื่นๆ ทั้งหมด ยกเวนตัวเลขที่เปนจํานวนเทาของจํานวนเฉพาะนั้นๆ เชน 11 จะ
ไมเปนจํานวนเฉพาะสัมพันธกับ 22, 33, 44,… เปนตน วิธีการทั่วไปที่ใชคํานวณหาตัวหารรวมมากของ
ตัวเลขจํานวนเต็ม 2 จํานวน คือ การใชอัลกอริทึมยุคลิค (Euclid’ s Algorithm) ซึ่งอยูบนหลักความจริงที่วา ถา
a กับ b มีตัวหารรวมกันคือ x ทั้ง a-b กับ a-2b ก็จะมีตัวหารรวมกันคือ x ดวย อัลกอริทึมยุคลิคสามารถแสดง
โดยใชรหัสเทียม (Pseudo Code) ไดดังนี้

กําหนดให a < n, gcd (a,n) หาไดจาก


let g0 = n
g1 = a
gi+1 = gi-1 mod gi
เมื่อ gi = 0, gcd (a,n) = gi-1

ตัวอยางที่ 6.2 จงคํานวณหา gcd (52,91)

วิธีทํา g0 = 91, g1 = 52
g2 = 91 mod 52 = 39
g3 = 52 mad 39 = 13
g4 = 39 mad 13 = 0
ดังนั้น gcd (52,91) = 13

85
6.2.3 ตัวผกผันการคูณในมอดุโล n
ในเลขคณิตสวนจําเพาะ การหาตัวผกผันการคูณ (Multiplicative Inverse) จะมีความซับซอนกวาเลข
คณิตทั่วๆ ไป ทั้งนี้เนื่องมาจากการคํานวณใน GF(n) ทุกๆ คาที่ไมเปนศูนยจะมีตัวผกผันเพียงคาเดียว (Unique
Inverse) ใหสังเกตวาถา n ไมเปนจํานวนเฉพาะ ทุกๆ คาที่ไมเปนศูนยในฟลดจํากัดอาจจะมีตัวผกผันหรือไมมี
ตัวผกผันก็ได ยกตัวอยางเชน ตัวผกผันของ 5 มอดุโล 14 คือ 3 เพราะ 5×3 mod 14 = 1 ดังนั้น 3 จึงมีคาเทากับ
5-1 mod 14 ในขณะที่ 2 จะไมมีตัวผกผันในมอดุโล 14 สามารถเขียนสมการที่ใชแสดงการหาตัวผกผันการคูณ
ในมอดุโล n ในรูปของ

ax ≡ 1 (mod n) (6.4)
โดยที่ x คือตัวผกผันการคูณของ a mod n

โดยทั่วไปการหาตัวผกผันการคูณในมอดุโล n สามารถทําไดงายๆ โดยใชอัลกอริทึมยุคลิค แบบขยาย


(Extended Euclid’ s Algorithm) ซึ่งมีรูปแบบในการคนหาตัวผกผันการคูณตามสมการ

ax = nk + 1 (6.5)

อัลกอริทึมยุคลิคแบบขยายสามารถแสดงโดยใชรหัสเทียมไดดังนี้

กําหนดให gcd (a,n) =1 , ตัวผกผันของ a mod n หาไดจาก


Let g0 = n u0 = 1 v0 = 0
g1 = a u1 = 0 v1 = 1
y = gi-1 div gi
gi+1 = gi-1 – y.gi = gi-1 mod gi
ui+1 = ui-1 – y.ui
vi+1 = vi-1 – y.vi
เมื่อ gi = 0 ตัวผกผันของ a mod n = vi-1

86
ตัวอยางที่ 6.3 จงคํานวณหาตัวผกผันการคูณของ 3 mod 460

วิธีทํา g0 = 460 u0 = 1 v0 = 0
g1 = 3 u1 = 0 v1 = 1

i y g u v
0 - 460 1 0
1 - 3 0 1
2 460/3 =153 460 mod 3 = 1 1 -153
3 3/1 = 3 3 mod 1 = 0 -3 460

ดังนั้นตัวผกผันการคูณของ 3 mod 460 = -153 หรือ 307

ตัวอยางที่ 6.4 จงคํานวณหาตัวผกผันการคูณของ 3 mod 7

วิธีทํา g0 = 7 u0 = 1 v0 = 0
g1 = 3 u1 = 0 v1 = 1

i y g u v
0 - 7 1 0
1 - 3 0 1
2 7/3 = 2 7 mod 3 = 1 1 -2
3 3/1 = 3 3 mod 1 = 0 -3 7

ดังนั้นตัวผกผันการคูณของ 3 mod 7 = -2 หรือ 5

87
ใหสังเกตวา ในกรณีที่ตองการหาตัวผกผันการคูณที่มีคานอยๆ เราอาจทําการคํานวณโดยใช
อัลกอริทึมยุคลิคแบบขยายในรูปแบบที่งายกวารูปแบบที่แสดงไวขางตนก็ได เชน การคํานวณหาตัวผกผันการ
คูณของ 3 mod 7 เราสามารถจัดใหอยูในรูปสมการ

ax = nk + 1 (6.6)
หรือ 3x = 7k + 1

แลวทําการแทนคา k ดวยเลขจํานวนเต็มคาตางๆ ตั้งแต 1, 2, 3, ... ไปเรื่อยๆ จนทําใหคําตอบของ


สมการที่ไดเปนจริง โดยคา x ที่ไดนั้นจะตองเปนเลขจํานวนเต็มเชนเดียวกัน ยกตัวอยางเชน

โดยการสมมุติให k = 1 จะได x = 8/3 = 2.666… ซึ่งไมเปนตัวเลขจํานวนเต็ม


โดยการสมมุติให k = 2 จะได x = 153/3 = 5 ซึ่งเปนตัวเลขจํานวนเต็ม
เพราะฉะนั้นตัวผกผันการคูณของ 3 mod 7 ก็คือ 5

อีกวิธีการหนึ่งที่สามารถนํามาใชในการคํานวณหาตัวผกผันการคูณในมอดุโล n ไดก็คือ การใช


ฟงกชันทอเทียนตออยเลอร (Euler Totient Function) หรือฟงกชันฟายออยเลอร (Euler Phi Function) ที่ใช
กันมากในอัลกอริทึมกุญแจสาธารณะ โดยปกติฟงกชันฟายออยเลอรจะใชสัญลักษณ ∅(n) ซึ่งจะหมายถึง
จํานวน (Number) ของตัวเลขที่เปนบวกที่มีคานอยกวา n และเปนจํานวนเฉพาะสัมพันธรวมกับ n จํานวนของ
ตัวเลขเหลานี้มีชื่อเรียกทั่วๆ ไปวา เซตลดรูปของสวนตกคาง (Reduced Set of Residues) มอดุโล n
ยกตัวอยางเชน เซตลดรูปของสวนตกคางมอดุโล 12 มีจํานวนเทากับ 4 ซึ่งก็คือ เซตตัวเลข {1, 5, 7, 11} ให
สังเกตวาถา n เปนจํานวนเฉพาะ เซตลดรูปของสวนตกคางมอดุโล n ก็คือเซตของตัวเลขจํานวนเต็มตั้งแต 1 ถึง
n-1 ใหสังเกตดวยวาตัวเลข 0 จะไมจัดอยูในเซตลดรูปของสวนตกคางมอดุโล n ใดๆ ที่ไมเทากับ 1 ดังนั้นถา n
เปนจํานวนเฉพาะใดๆ ∅(n) จะมีคาเทากับ n-1 เสมอ ในทํานองเดียวกันถา n = pq โดยที่ p และ q เปน
จํานวนเฉพาะใดๆ ∅(n) ที่ไดจะมีคาเทากับ (p-1)(q-1) ยกตัวอยางเชน ถา p = 3 และ q = 5, ∅(15) จะมีคา
เทากับ 8 (2×4) ซึ่งหมายความวา เซตลดรูปสวนตกคางมอดุโล 15 มีจํานวนเทากับ 8 ซึ่งก็คือ เซตตัวเลข {1, 2,
4, 7, 8, 11, 13, 14}
ในการคํานวณหาตัวผกผันการคูณในมอดุโล n เราจะนําฟงกชันฟายออยเลอรมาใชรวมกับทฤษฎีบท
ของแฟรมา (Fermat’s Theorem) ซึ่งกลาวไววา

ap-1 ≡ 1 (mod p) (6.7)

และทฤษฎีบททั่วๆไปของออยเลอร (Euler’s Generalization Theorem) ซึ่งกลาวไววา

88
ถา gcd (a,n) = 1, a∅(n) mod n = 1 (6.8)

จากทฤษฎีบททั้งสองขางตน เราสามารถคํานวณหาตัวผกผันการคูณในมอดุโล n ไดจากสมการ

x = a∅(n)-1 mod n (6.9)

ตัวอยางที่ 6.5 จงคํานวณหาตัวผกผันการคูณของ 5 mod 7 โดยใชฟงกชันฟายออยเลอร

วิธีทํา เนื่องจาก 7 เปนจํานวนเฉพาะ ฉะนั้น ∅(7) = 7-1 = 6 และ


x = 56-1 mod 7
= ((52 mod 7) . (52 mod 7) . 5) mod 7
= (4 . 4 . 5) mod 7
= 3
ดังนั้นตัวผกผันการคูณของ 5 mod 7 คือ 3

ตัวอยางที่ 6.6 กําหนดให p = 3 และ q = 5 จงคํานวณหาตัวผกผันการคูณของ 7 mod pq โดยใชฟงกชัน


ฟายออยเลอร

วิธีทํา เนื่องจาก p และ q เปนจํานวนเฉพาะ ฉะนั้น ∅(pq) = (p-1)(q-1)


∅(15) = (3-1)(5-1) = 8
x = 78-1 mod 15
= ((72 mod 15) . (72 mod 15) . (72 mod 15) . 7) mod 15
= (((4 . 4 . 4) mod 15) . 7) mod 15
= (4 . 7) mod 15
= 13
ดังนั้นตัวผกผันการคูณของ 7 mod 15 คือ 13

89
6.2.4 ทฤษฎีบทเศษเหลือของชาวจีน
ในกรณีที่ n = p1 × p2 × …. pt เราสามารถใชทฤษฎีบทเศษเหลือของชาวจีน (Chinese Remainder
Theorem) ในการคํานวณหาคําตอบของระบบสมการ

x mod pi = ai (6.10)
โดยที่ i = 1, 2, … t และ x < n

ยกตัวอยางเชน กําหนดให p1 = 3 , p2 =5 และ x = 14 ดังนั้น

14 mod 3 = 2
และ 14 mod 5 = 4

ใหสังเกตวาจํานวนเฉพาะ pt อาจมีคาซ้ํากันก็ได ในทํานองเดียวกัน สําหรับตัวเลข a และ b ใดๆ ที่ a


< p และ b < q โดย p และ q เปนตัวเลขจํานวนเฉพาะ จะมีจํานวนเต็ม x ที่มีคานอยกวา pq ซึ่งทําใหสมการ
ตอไปนี้เปนจริง

x ≡ a (mod p) (6.11)
x ≡ b (mod q) (6.12)

ในการหาคา x เราจะใชอัลกอริทึมยุคลิค (Euclid’ s Algorithm) คํานวณหาคา u กอน โดยที่

uq ≡ 1 mod p (6.13)

จากนั้นจึงทําการคํานวณหาคา x จากสมการ

x ≡ (((a-b) . u) mod p) . q + b (6.14)

90
ตัวอยางที่ 6.7 กําหนดให p = 7, q = 13, a = 3 และ b = 5 จงคํานวณหาคา x โดยที่ x ≡ a (mod p) และ x
≡ b (mod q) โดยใชทฤษฎีบทเศษเหลือของชาวจีน

วิธีทํา เริ่มตนเราจะคํานวณหาคา u โดยที่


uq ≡ 1 mod p
u13 ≡ 1 mod 7
ซึ่งเทียบไดกับการหาคา u ที่ทําใหสมการ u13 ≡ 7k + 1 เปนจริง โดยคา u และ k ที่ไดตอง
เปนเลขจํานวนเต็ม
โดยการสมมุติให k = 0 จะได u = 1/13 = 0.076 ซึ่งไมเปนเลขจํานวนเต็ม
โดยการสมมุติให k = 1 จะได u = 8/13 = 0.615 ซึ่งไมเปนเลขจํานวนเต็ม
โดยการสมมุติให k = 2 จะได u = 15/13 = 1.154 ซึ่งไมเปนเลขจํานวนเต็ม
โดยการสมมุติให k = 3 จะได u = 22/13 = 1.692 ซึ่งไมเปนเลขจํานวนเต็ม
......................................
......................................
โดยการสมมุติให k = 11 จะได u = 78/13 = 6 ซึ่งเปนเลขจํานวนเต็ม

เพราะฉะนั้น u ที่ไดมีคาเทากับ 6 ตอมาเราจะคํานวณหาคา x จากสมการ


x = (((a-b) . u) mod p) . q + b
= (((3-5) . 6) mod 7) . 13 + 5
= (-12 mod 7) . 13 + 5
= (2 . 13) + 5
= 31
ดังนั้น x ที่ไดมีคาเทากับ 31

พิสูจน 31 mod 7 = 3 และ 31 mod 13 = 5

91
6.3 ความซับซอนในการแกปญหาเชิงคณิตศาสตร
กอนที่จะศึกษาขั้นตอนการเขาและถอดรหัสลับรวมทั้งความปลอดภัยของอัลกอริทึมกุญแจสาธารณะ
แบบตางๆ เราจําเปนตองมีการนิยาม (Define) ความยากในการแกปญหาเชิงคณิตศาสตร หรือความซับซอนใน
เชิงคํานวณ (Computational Complexity) เสียกอน ซึ่งเนื้อหาที่จะกลาวถึงดังตอไปนี้ จัดเปนสวนหนึ่งของ
ทฤษฎีความซับซอน (Complexity Theory) เบื้องตน
โดยปกติ ปญหาในเชิงคณิตศาสตรใดๆ จะพิจารณาวามีความยาก ถาอัลกอริทึมที่เร็วที่สุดที่ใชในการ
แกปญหานั้นๆ ใชเวลานานมาก เมื่อเทียบกับขนาดของขอมูลนําเขา (Size of Input) เพื่อที่จะวิเคราะหวา
อัลกอริทึมหนึ่งๆ จะใชเวลาแกปญหานานแคไหน นักคณิตศาสตรจึงกําหนดแนวคิดของการคํานวณแบบเวลา
พหุนาม (Polynomial Time) และการคํานวณแบบเวลาชี้กําลัง (Exponential Time) ขึ้นมา ซึ่งโดยพื้นฐาน
อัลกอริทึมหนึ่งๆ จะมีการทํางานที่เร็วมากเมื่อเทียบกับขนาดของขอมูลนําเขา ถาอัลกอริทึมนั้นมีการคํานวณ
แบบเวลาพหุนาม และจะมีการทํางานที่ชามาก ถาอัลกอริทึมนั้นมีการคํานวณเวลาแบบชี้กําลัง จากที่นิยามไว
ขางตน เราอาจสรุปไดวา ปญหาเชิงคณิตศาสตรที่งาย จะตองการการคํานวณแบบเวลาพหุนาม ขณะที่ปญหา
เชิงคณิตศาสตรที่ยากจะตองการการคํานวณแบบเวลาชี้กําลัง
ใหสังเกตการใชประโยคที่วา “เมื่อเทียบกับขนาดของขอมูลนําเขา” ขางตน เนื่องจากทุกๆ ปญหา
สามารถคํานวณหาคําตอบไดแบบไมซับซอน ถาขนาดของขอมูลนําเขามีขนาดเล็ก เชน การบวกตัวเลข 4 กับ
14 จะไดผลลัพธเทากับ 18 ถือวาเปนการคํานวณที่ไมซับซอน เชนเดียวกันกับการแยกตัวประกอบตัวเลข 21
จะไดผลลัพธเทากับ 3×7 อยางไรก็ตาม การบวกถือเปนตัวอยางปญหาที่งาย เพราะอัลกอริทึมที่ใชในการบวก
จะมีการคํานวณแบบเวลาพหุนาม ซึ่งก็หมายความวา การบวกเลขสองจํานวนที่มีขนาดใหญมากๆ จะใชเวลาใน
การคํานวณไมนาน ในทางตรงขามกัน การแยกตัวประกอบถือเปนตัวอยางของปญหาที่ยาก เนื่องจากโดยปกติ
การแยกตัวประกอบตัวเลขที่มีขนาดใหญมากๆ จะใชเวลาในการคํานวณนานมาก ดังนั้นเมื่อมีการคนหาปญหา
ในเชิงคณิตศาสตรที่มีความยากมากๆ เพื่อนํามาสรางตัวแปลงรหัส นักสรางรหัสลับสวนใหญจึงมองไปที่
ปญหาในเชิงคณิตศาสตรที่อัลกอริทึมที่เร็วที่สุดที่มีอยูในปจจุบันยังตองใชเวลาในการคํานวณหาคําตอบเปน
แบบเวลาชี้กําลัง กลาวในเทอมกวางๆ ก็คือเวลาที่ใชในการคํานวณหาคําตอบ ยิ่งนานเทาไร ตัวแปลงรหัสที่อยู
บนพื้นฐานของปญหาในเชิงคณิตศาสตรนั้นๆ ก็จะมีความปลอดภัยมากยิ่งขึ้นเทานั้น
ในชวงหลายปที่ผานมา มีการคนพบจุดออนของอัลกอริทึมกุญแจสาธารณะหลายๆ แบบที่ไดนําเสนอ
ไวในอดีต และยังไดมีการพิสูจนอีกวา อัลกอริทึมกุญแจสาธารณะหลายๆ แบบไมเหมาะสมที่จะนํามาใชงาน
ในทางปฏิบัติ ทุกวันนี้ปญหาในเชิงคณิตศาสตรที่นํามาใชในอัลกอริทึมกุญแจสาธารณะที่คนทั่วไปพิจารณาวา
มีประสิทธิภาพ มีความปลอดภัยสูง และสามารถนํามาใชงานไดจริงในทางปฏิบัติมีอยู 2 รูปแบบ ระบบการ
เขารหัสลับที่อยูบนพื้นฐานของปญหาทั้ง 2 รูปแบบนั้นคือ ระบบลอการิทึมแบบไมตอเนื่อง (Discrete
Logarithm System) และระบบการแยกตัวประกอบจํานวนเต็ม (Integer Factorization System) ตัวอยางของ

92
อัลกอริทึมที่อยูบนพื้นฐานของปญหาในรูปแบบแรกคือ อัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman
(Diffie-Hellman Key Agreement) และอัลกอริทึม El Gamal ตัวอยางของอัลกอริทึมที่อยูบนพื้นฐานของ
ปญหาในรูปแบบที่สองคือ อัลกอริทึม RSA (Ron Rivest, Adi Shamir and Leonard Adleman)

6.4 คําถามทายบท
1. จงบอกขอจํากัดพรอมคําอธิบายสั้นๆ ในการนําอัลกอริทึมกุญแจสาธารณะไปประยุกตใชงานจริงในทาง
ปฏิบัติ
2. จงคํานวณหาคา x โดยที่ x = 1215 mod 67
3. จงคํานวณหาตัวผกผันการคูณของ 5 mod 270
4. กําหนดให p = 7 และ q = 13 จงคํานวณหาตัวผกผันการคูณของ 11 mod pq โดยใชฟงกชันฟายออยเลอร

93
บทที่ 7
อัลกอริทึมอสมมาตร ตอนสอง

7.1 ขอตกลงกุญแจของ Diffie-Hellman


อัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman มีการนําเสนอครั้งแรกในปคริสตศักราช 1976
[DIFF76] ความปลอดภัยของตัวอัลกอริทึมขึ้นอยูกับความยากในการคํานวณลอการิทึมแบบไมตอเนื่องภายใน
ฟลดจํากัด เมื่อเทียบกับความงายในการคํานวณตัวเลขชี้กําลังภายในฟลดจํากัดเดียวกัน ขอตกลงกุญแจของ
Diffie-Hellman จะชวยใหคนสองคนที่อยูตางสถานที่กันสามารถสรางกุญแจที่ใชในการเขาและถอดรหัส
รวมกันไดโดยผานชองทางสื่อสารที่ไมปลอดภัย (Insecure Communication Channel) อยางไรก็ตามตัว
อัลกอริทึมไมสามารถนํามาใชในการเขาหรือถอดรหัสลับขอความใดๆ โดยตรงได ขั้นตอนในการสรางกุญแจ
ที่ใชรวมกันระหวางผูใชงานสองคนมีดังนี้
สมมติวาในเครือขายสื่อสารใดๆ นายดํากับนายแดงตองการจะสรางกุญแจตัวหนึ่งขึ้นมาเพื่อใชในการ
แลกเปลี่ยนความลับระหวางกัน
1. นายดํากับนายแดงเห็นชอบรวมกันที่จะใชตัวเลขจํานวนเฉพาะคามากๆ p หนึ่งคา และตัวเลขจํานวน
ใดๆ g ที่เปนคาปฐมฐานของมอดุโล p (Primitive mod p) อีกหนึ่งคา ตัวเลขทั้งสองนี้ไมจําเปนตอง
เก็บรักษาเปนความลับ เนื่องจากเราจะนํามาใชในการคํานวณหากุญแจที่ใชรวมกันผานชองทาง
สื่อสารที่ไมปลอดภัย
2. นายดําเลือกตัวเลขสุม x ซึ่งมีคามากๆ มาหนึ่งคา ตัวเลขนี้จําเปนตองเก็บเปนความลับ จากนั้นทําการ
คํานวณหาคา
A = gx mod p (7.1)
นายดําสงผลลัพธจากการคํานวณที่ไดใหกับนายแดง
3. นายแดงเลือกตัวเลขสุม y ซึ่งมีคามากๆ มาหนึ่งคา ตัวเลขนี้จําเปนตองเก็บเปนความลับเชนเดียวกัน
จากนั้นทําการคํานวณหาคา

B = gy mod p (7.2)
นายแดงสงผลลัพธการคํานวณที่ไดใหกับนายดํา

94
4. นายดําคํานวณหาคาตัวเลขที่จะใชเปนกุญแจจากผลลัพธที่นายแดงมา

Sk = Bx mod p (7.3)
ซึ่งมีคาเทากับ gxy mod p
5. นายแดงคํานวณหาคาตัวเลขที่จะใชเปนกุญแจจากผลลัพธที่นายดําสงมา

Sk = Ay mod p (7.4)
ซึ่งมีคาเทากับ gxy mod p

รูปที่ 7.1 ขั้นตอนการสรางกุญแจรวมกันระหวางผูใชงานสองคน

ในอัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman ตัวเลข p และ g จะพิจารณาวาเปนกุญแจสาธารณะ


ขณะที่ตัวเลข x และ y จะพิจารณาวาเปนกุญแจสวนตัวของนายดําและนายแดงตามลําดับ เหตุผลที่เลือกตัวเลข
p เปนจํานวนเฉพาะเนื่องมาจาก การคํานวณลอกอริทึมแบบไมตอเนื่องภายในฟลดจํากัดของเลขจํานวนเฉพาะ
จะมีความซับซอนสูงกวาในกรณีของตัวเลขทั่วๆ ไปมาก ความยากในการคํานวณนี้จะเพิ่มสูงขึ้น ถาตัวเลข p ที่
ใชเปนจํานวนเฉพาะที่มีคามากๆ เชน เปนตัวเลขขนาด 512 บิตหรือ 1024 บิต
ในการนําไปใชงาน ขณะที่อยูในขั้นตอนการสรางกุญแจ ถามีใครบางคนดักฟงตัวเลข 3 ตัว p, g และ
A ที่นายดําสงใหนายแดง และตัวเลข B ที่นายแดงสงใหนายดํา คนๆ นั้นจะไมสามารถคํานวณหาคากุญแจ Sk
ได เวนแตเพียงวา เขาจะสามารถคํานวณหาคาลอกอริทึมแบบไมตอเนื่องภายในฟลดจํากัดได ดังนั้นคา Sk ที่
สรางขึ้นรวมกันโดยการคํานวณอยางอิสระตอกันของนายดํากับนายแดง จะนํามาใชเปนกุญแจเขาและ
ถอดรหัสลับขอความตนฉบับที่สงไปมาระหวางบุคคลทั้งสอง ตัวอยางที่ 7.1 แสดงการสรางกุญแจโดยใช
อัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman แบบงายๆ

95
ตัวอยางที่ 7.1 กําหนดให ตัวเลขจํานวนเฉพาะ p มีคาเทากับ 31 ตัวเลข g ซึ่งเปนคาปฐมฐานมอดุโล p มีคา
เทากับ 5 จงแสดงขั้นตอนการสรางกุญแจที่ใชรวมกันระหวางนายดํากับนายแดงโดยใช
อัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman สมมติใหนายดําและนายแดงเลือกตัวเลขที่
เปนความลับ x = 5 และ y = 4 ตามลําดับ

วิธีทํา 1. เริ่มตนนายดําทําการคํานวณหาคา
A = gx mod p
= 55 mod 31
= (53 mod 31) . (52 mod 31) mod 31
= (1 . 25) mod 31
= 25
จากนั้นนายดําสงตัวเลขทั้งสาม p =31, g =5 และ A = 25 ใหกับนายแดง
2. นายแดงทําการคํานวณหาคา
B = gy mod p
= 54 mod 31
= (53 mod 31) . (51 mod 31) mod 31
= (1 . 5) mod 31
= 5
จากนั้นนายแดงสงตัวเลข B = 5 ใหกับนายดํา
3. นายดําคํานวณหาคากุญแจ
Sk = Bx mod p
= 55 mod 31
= (53 mod 31) . (52 mod 31) mod 31
= (1 . 25) mod 31
= 25
4. นายแดงคํานวณหาคากุญแจ
Sk = Ay mod p
= 254 mod 31
= (252 mod 31) . (252 mod 31) mod 31

96
= (625 mod 31) . (625 mod 31) mod 31
= (5 . 5) mod 31
= 25

ถานายขาวดักฟงขอมูลที่สงไปมาระหวางนายดํากับนายแดง นายขาวจะไดรับตัวเลข 4 ตัวคือ p = 31,


g = 5, A = 25 และ B = 5 นายขาวจําเปนตองแกสมการ

x = loggA mod p (7.5)

เพื่อหาคา x หรือแกสมการ

y = loggB mod p (7.6)

เพื่อหาคา y ถานายขาวหาคําตอบของสมการได เขาจะสามารถคํานวณหาคากุญแจ Sk ไดเชนเดียวกัน


ในตัวอยางที่แสดงขางตน การคํานวณหาคากุญแจ Sk อาจทําไดไมยาก แตในทางปฏิบัติเมื่อตัวเลข p เปน
จํานวนเฉพาะคามากๆ การคํานวณหาคากุญแจ Sk จะมีความซับซอนสูงและตองใชระยะเวลานานมากๆ ในการ
หาคําตอบ
อัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman สามารถนําไปประยุกตใชสรางกุญแจระหวางคนสาม
คนก็ไดเชน ในกรณีที่นายดํา นายแดงและนายเขียวตองการสรางกุญแจที่จะใชรวมกันขึ้น พวกเขาสามารถทํา
ได โดยดําเนินการตามขั้นตอนดังตอไปนี้
1. นายดําเลือกตัวเลขสุม x คามากๆ และคํานวณหา A = gx mod p ผลลัพธที่ไดสงใหนายแดง
2. นายแดงเลือกตัวเลขสุม y คามากๆ และคํานวณหา B = gy mod p ผลลัพธที่ไดสงใหนายเขียว
3. นายเขียวเลือกตัวเลขสุม z คามากๆ และคํานวณหา C = gz mod p ผลลัพธที่ไดสงใหนายดํา
4. นายดําคํานวณหาคา A’ = Cx mod p ผลลัพธที่ไดสงใหนายแดง
5. นายแดงคํานวณหาคา B’ = Ay mod p ผลลัพธที่ไดสงใหนายเขียว
6. นายเขียวคํานวณหาคา C’ = Bz mod p ผลลัพธที่ไดสงใหนายดํา
7. นายดําคํานวณหาคากุญแจ Sk = C’ x mod p ซึ่งมีคาเทากับ gxyz mod p
8. นายแดงคํานวณหาคากุญแจ Sk = A’ y mod p ซึ่งมีคาเทากับ gxyz mod p
9. นายเขียวคํานวณหาคากุญแจ Sk = B’ z mod p ซึ่งมีคาเทากับ gxyz mod p

97
รูปที่ 7.2 ขั้นตอนการสรางกุญแจรวมกันระหวางคนสามคน

โดยใชหลักการเดียวกัน อัลกอริทึมขางตนสามารถนําไปใชสรางกุญแจรวมกันระหวางกลุมคนที่มี
มากกวา 3 คนก็ได เพียงแตเพิ่มรอบและการคํานวณในขั้นตอนการแลกเปลี่ยนขอมูลเทานั้นเอง

7.2 อัลกอริทึม El Gamal


อัลกอริทึม El Gamal ไดมีการนําเสนอครั้งแรกในปคริสตศักราช 1988 [ELGA85a,b] ความ
ปลอดภัยของตัวอัลกอริทึมขึ้นอยูกับความยากในการคํานวณลอการิทึมแบบไมตอเนื่องภายในฟลดจํากัด
เหมือนอัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman อยางไรก็ตาม อัลกอริทึม El Gamal ไดรับการออกแบบ
มาเพื่อใชในการเขารหัสลับขอความ ซึ่งมีขั้นตอนดังตอไปนี้
1. นายดําเลือกตัวเลขจํานวนเฉพาะที่มีคามากๆ p มาหนึ่งคา และเลือกตัวเลขสุมใดๆ g และ x ที่มีคา
นอยกวา p จากนั้นทําการคํานวณ

y = gx mod p (7.7)

ตัวเลข y, g และ p จะใชเปนกุญแจสาธารณะ ขณะที่ตัวเลข x จะใชเปนกุญแจสวนตัว


2. ในกรณีที่นายแดงตองการสงขอความ m ใหนายดํา นายแดงตองเลือกตัวเลขสุม k ที่เปนจํานวนเฉพาะ
สัมพันธกับ p-1 แลวทําการคํานวณ

a = gk mod p (7.8)
b = yk m mod p (7.9)

ตัวเลข a และ b ทั้งคูก็คือขอความรหัสของ m ใหสังเกตวาขอความรหัสจะมีขนาดเปนสองเทาของ


ขอความตนฉบับ m

98
3. เมื่อนายดําไดรับขอความรหัส a และ b ที่สงมาจากนายแดงแลว จะทําการถอดรหัสลับโดยการ
คํานวณหาคา m ดังนี้

m = b/ax mod p (7.10)

เนื่องจาก ax ≡ gk x (mod p) ดังนั้น b/ax ≡ ykm/ax ≡ gx km/gx k ≡ m (mod p)

รูปที่ 7.3 การเขาและถอดรหัสลับดวยอัลกอริทึม El Gamal

ตัวอยางที่ 7.2 กําหนดให p = 31, g = 5 จงแสดงขั้นตอนการสรางกุญแจสาธารณะและกุญแจสวนตัว โดยใช


อัลกอริทึม El Gamal สมมุติใหขอความตนฉบับที่จะทําการเขารหัสลับมีคาเทากับ 19 ใหแสดง
ขั้นตอนการเขาและถอดรหัสลับโดยใชกุญแจทั้งสองที่สรางขึ้นมาดวย

วิธีทํา เริ่มตนเราจะเลือกตัวเลขสุม x ที่มีคานอยกวา p ในที่นี้ เราเลือกคา x = 7 จากนั้นทําการ


คํานวณหาคา
y = gx mod p
= 57 mod 31
= ((53 mod 31) . (53 mod 31) . 5) mod 31
= (1 . 1 . 5) mod 31
= 5
เพราะฉะนั้นกุญแจสาธารณะคือ {p = 31, g = 5, y = 5} และกุญแจสวนตัวคือ {x = 7}
ในการเขารหัสลับขอความตนฉบับ m = 19 เราจะเลือกตัวเลขสุม k ที่เปนจํานวนเฉพาะ
สัมพันธกับ p-1 ในที่นี้เราเลือกคา k = 7 (พิจารณาจาก 30 = 2 × 3 × 5) แลวทําการ
คํานวณหาขอความรหัส a และ b ดังตอไปนี้

99
a = gk (mod p)
= 57 mod 31
= 5
b = ykm (mod p)
= (57 . 19) mod 31
= (5 . 19) mod 31
= 2
ดังนั้นขอความรหัสของ m คือ {a = 5, b = 2} ในการถอดรหัสลับ เราจะคํานวณหาคา m
ดังตอไปนี้
m = b/ax mod p
= 2/57 mod 31
ซึ่งมีคาเทากับ 2 × ตัวผกผันของการคูณ 57 มอดุโล 31 หรือ

m = 2 . (57)-1 mod 31

ในการคํานวณหาตัวผกผันการคูณ x ของ 57 mod 31 โดยใชฟงกชันฟายออยเลอร จะได


∅(31) = 30 และ

x = a∅(n)-1 mod n
= (57)30-1 mod 31
= (57 mod 31)29 mod 31
= 529 mod 31
= ((57 mod 31) .(57 mod 31) . (57 mod 31) .
(57 mod 31) . 5) mod 31
= (5 . 5 . 5 . 5 . 5) mod 31
= 3125 mod 31
= 25

ดังนั้นตัวผกผันการคูณของ 57 mod 31 คือ 25


จากนั้นนําคาที่ไดไปแทนในสมการเพื่อหาคา m โดยที่
m = (2 . 25) mod 31
= 50 mod 31
= 19

100
7.3 คําถามทายบท
1. จงแสดงขั้นตอนการสรางกุญแจที่จะใชรวมกันระหวางคนสี่คน โดยใชอัลกอริทึมขอตกลงกุญแจของ
Diffie-Hellman
2. จงยกตัวอยางการประยุกตใชงานอัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman และอัลกอริทึม El
Gamal ในการเขาและถอดรหัสลับสําหรับขอความตนฉบับใดๆ ใหนักศึกษาเลือกคาตัวเลขที่เหมาะสม
ในการคํานวณ
3. จงอธิบายความแตกตางระหวางการคํานวณแบบเวลาพหุนามและการคํานวณแบบเวลาชี้กําลัง

101
บทที่ 8
อัลกอริทึมอสมมาตร ตอนสาม

8.1 อัลกอริทึม RSA


อัลกอริทึม RSA (Ron Rivest, Adi Shamir and Leonard Adleman) มีการนําเสนอครั้งแรกในป
คริสตศักราช 1978 [RIVE78] ความปลอดภัยของตัวอัลกอริทึมขึ้นอยูกับความยากในการแยกตัวประกอบ
ตัวเลขที่มีขนาดใหญ โดยเฉพาะผลคูณของจํานวนเฉพาะขนาดใหญ 2 จํานวนที่มีจํานวนหลัก 100 ถึง 200 หลัก
หรือมากกวานั้น ในอัลกอริทึม RSA กุญแจสาธารณะและกุญแจสวนตัวที่สรางขึ้น จะมีความเกี่ยวของในเชิง
ของฟงกชันจํานวนเฉพาะขนาดใหญคูหนึ่ง
เพื่อที่จะสรางกุญแจทั้งสองขึ้นมานั้น ในตอนแรกสุด ผูใชงานจะตองเลือกตัวเลขจํานวนเฉพาะแบบ
สุม p และ q ที่มีคามากๆ ขึ้นมา 2 คา วิธีการเลือกคา p และ q ที่เหมาะสมนั้นมีการแนะนําอยางละเอียดใน
[RIVE78] จากนั้นทําการคํานวณหาผลคูณ n = pq เพื่อใหระบบมีความปลอดภัยสูงสุด คา p และ q ควรมี
ขนาดเทากัน จากนั้นผูใชงานจะเลือกตัวเลขจํานวนเฉพาะแบบสุมขึ้นมาอีกหนึ่งคา เพื่อใชเปนกุญแจเขารหัส
ลับ e โดย e และ (p-1)(q-1) ตองเปนจํานวนเฉพาะสัมพันธรวมกัน (Relatively Prime) หลังจากนั้น ทําการ
คํานวณหาคากุญแจถอดรหัสลับ d จากสมการ

ed = 1 mod (p-1)(q-1) (8.1)


โดยที่ d = e-1 mod (p-1)(q-1)

ใหสังเกตวา d และ n จะเปนจํานวนเฉพาะสัมพันธรวมกันดวย โดยปกติถา e มีคามากๆ เราจะใช


อัลกอริทึมยุคลิคแบบขยายในการคํานวณหาคําตอบของสมการ เมื่อไดคาที่ตองการครบทุกตัวแลว ตัวเลข e
และ n จะใชเปนกุญแจสาธารณะ ขณะที่ตัวเลข d จะเก็บเปนความลับในฐานะกุญแจสวนตัว ในขั้นตอนนี้
ตัวเลข p และ q ไมมีความจําเปนตองใชอีก ซึ่งเราอาจลบคาทั้งสองทิ้งไปก็ได แตไมควรเปดเผยตอสาธารณะ
ชนหรือบุคคลใดบุคคลหนึ่ง
ในการเขารหัสลับขอความตนฉบับใดๆ กอนอื่นจะตองแบงขอความตนฉบับนั้นออกเปนสวนๆ หรือ
เปนกลุมๆ เรียงตอกัน แตละกลุม mi สามารถแสดงในรูปของตัวเลขที่มีคาไมเกิน n ขอความรหัส ci ที่สรางขึ้น
จะมีขนาดและมีคาสูงสุดไมเกิน n เชนเดียวกัน อัลกอริทึมที่ใชในการเขารหัสลับแสดงในรูปของสมการได
ดังนี้
ci = mie mod n (8.2)

102
อัลกอริทึมที่ใชในการถอดรหัสลับแสดงในรูปของสมการไดคือ

mi = cid mod n (8.3)

รูปที่ 8.1 การเขาและถอดรหัสลับดวยอัลกอริทึม RSA

เนื่องจากฟงกชันการเขาและถอดรหัสลับเปนสวนผกผันรวม (Mutual Inverse) ซึ่งกันและกัน เรา


สามารถนําอัลกอริทึม RSA มาใชสําหรับการรักษาความลับของขอมูล หรือการพิสูจนตัวจริงก็ได ในการใช
งานที่เกี่ยวของกับการพิสูจนตัวจริง เราจะทําการเขารหัสลับขอความตนฉบับดวยกุญแจสวนตัว d และทําการ
ถอดรหัสลับขอความรหัสดวยกุญแจสาธารณะ e แทน ตัวอยางที่ 8.1 แสดงขั้นตอนการสรางกุญแจทั้งสอง
ชนิด รวมทั้งการเขาและถอดรหัสลับโดยใชอัลกอริทึม RSA แบบงายๆ

ตัวอยางที่ 8.1 กําหนดให p และ q มีคาเทากับ 7 และ 17 ตามลําดับ จงแสดงขั้นตอนการสรางกุญแจ


สาธารณะและกุญแจสวนตัวโดยใชอัลกอริทึม RSA สมมติใหขอความตนฉบับที่จะทําการ
เขารหัสลับมีคาเทากับ 19 ใหแสดงขั้นตอนการเขาและถอดรหัสลับโดยใชกุญแจทั้งสองที่
สรางขึ้นมาดวย

วิธีทํา ทําการคํานวณหาคา n = pq = 7 . 17 = 119


เนื่องจากกุญแจสาธารณะ e ตองเปนจํานวนเฉพาะสัมพันธรวมกับ (p-1)(q-1)

(p-1)(q-1) = 6 . 16
= 96 (2 . 2 . 2 . 2 . 2 . 3)

ในตัวอยางนี้เราจะเลือกคา e ที่มีขนาดเล็กที่สุดเทาที่เปนไปไดคือ e = 5 แลวจึงทําการ


คํานวณหาคากุญแจสวนตัว d จากสมการ

103
ed = 1 mod (p-1)(q-1)
5d = 1 mod 96

ซึ่งเทียบไดกับการหาคา d ที่ทําใหสมการ 5d = 96i + 1 เปนจริงโดยคา d และ i ตองเปนเลข


จํานวนเต็ม
โดยการสมมติให i = 0 จะได d = 1/5 = 0.2 ซึ่งไมเปนเลขจํานวนเต็ม
โดยการสมมติให i = 1 จะได d = 97/5 = 19.4 ซึ่งไมเปนเลขจํานวนเต็ม
โดยการสมมติให i = 2 จะได d = 195/5 = 38.6 ซึ่งไมเปนเลขจํานวนเต็ม
โดยการสมมติให i = 3 จะได d = 289/5 = 57.8 ซึ่งไมเปนเลขจํานวนเต็ม
โดยการสมมติให i = 4 จะได d = 385/5 = 77 ซึ่งเปนเลขจํานวนเต็ม
เพราะฉะนั้นกุญแจสวนตัว d มีคาเทากับ 77 ดังนั้นกุญแจสาธารณะที่ใชในตัวอยางนี้คือ {e =
5, n = 119} และกุญแจสวนตัวคือ {d = 5 , n = 119}
ในการเขารหัสลับขอความตนฉบับ m = 19 เราจะคํานวณหาคาขอความรหัส c ไดดังนี้
c = me mod n
= 195 mod 119
= (192 . 192 . 19) mod 119
= (4 . 4 . 19) mod 119
= 66

ในการถอดรหัสลับขอความรหัส c = 66 เราจะคํานวณหาคา m ดังตอไปนี้


m = cd mod n
= 6677 mod 119
= (663 . 664 mod 119)11 mod 119
= (111 . 67)11 mod 119
= 5911 mod 119
= (595 . 595 . 59) mod 119
= (26 . 26 . 59) mod 119
= 19

104
8.2 ระบบการเขารหัสลับเสนโคงเชิงวงรี
ในอดีตที่ผานมา ไดมีการศึกษาถึงความเปนไปไดในการนําเสนโคงเชิงวงรี (Elliptic Curve) แบบ
ตางๆ มาประยุกตใชในวิทยาการรหัสลับอยางมากมาย จนในปคริสตศักราช 1985 และ 1996 นักสรางรหัสลับ
Knblitz [KNBL85] และ Miller [MILL96] ไดนําเสนอถึงความเปนไปไดในการสรางระบบการเขารหัสลับเสน
โคงเชิงวงรี (Elliptic Curve Cryptosystem, ECC) ที่เปนรูปธรรม ถึงแมวานักวิจัยทั้งสองไมไดคิดคนพัฒนา
อัลกอริทึมใหมที่ใชเสนโคงเชิงวงรีเปนสวนประกอบ แตพวกเขาไดนําอัลกอริทึมกุญแจสาธารณะที่มีใชอยูใน
ปจจุบัน เชน อัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman มาประยุกตใชรวมกับเสนโคงเชิงวงรี แนวคิดหรือ
วิธีการที่ไดนําเสนอไวก็คือ ใหทําการแทนที่จํานวนเต็มที่ใชในการคํานวณภายในมอดุโลจํานวนเฉพาะ ดวย
พิกัดจุดตางๆ ที่อยูบนเสนโคงเชิงวงรีแทน มากกวานั้น เราอาจเพิ่มความแข็งแกรงหรือความทนทานตอการ
โจมตีของระบบการเขารหัสลับเสนโคงเชิงวงรีได โดยทําการคํานวณตางๆ ภายในฟลดจํากัด หรือ GF(P)
เสนโคงเชิงวงรีสามารถแสดงในรูปของสมการ y2 + axy + by = x3 + cx2 + dx + e โดยที่ a, b, c, d
และ e เปนเลขจํานวนจริงที่ทําใหสมการเปนไปตามเงื่อนไข (Condition) ที่กําหนด เชน y2 = x3 - x หรือ y2 =
x3 + x + 1 [STAL98] ซึ่งเงื่อนไขที่กําหนดไวสําหรับการนําเสนโคงเชิงวงรีมาใชในวิทยาการรหัสลับก็คือ ถา
เราลากเสนตรงระหวางจุดพิกัด 2 จุดที่อยูบนเสนโคงเชิงวงรี เสนตรงนี้จะลากไปตัดกับเสนโคงเชิงวงรีอีกจุด
หนึ่ง ซึ่งเปนจุดพิกัดที่สามบนเสนโคงเชิงวงรีเสนเดียวกัน ทั้งนี้ในการคํานวณหาจุดพิกัดทั้ง 2 จุดแรกนั้น
จะตองทําภายในฟลดจํากัดที่เปนจํานวนเฉพาะ โดยปกติสมการเสนโคงเชิงวงรีที่มีคุณสมบัติขางตนสามารถ
แสดงในรูปของสมการไดคือ

y2 = x3 + ax + b (mop p) (8.4)
โดยที่ 4a3 + 27b2 (mod p) ≠ 0

ยกตัวอยางเชน กําหนดให p = 23 และสมการเสนโคงเชิงวงรีคือ y2 = x3 + x + 1 ในกรณีนี้ a = b =


1 และ 4(1)3 + 27(1)2 (mod 23) = 8 ซึ่งเปนไปตามเงื่อนไขที่กําหนด เราจะแทนสมการเสนโคงเชิงวงรีนี้ดวย
Ep(a, b) ในการนําสมการเสนโคงเชิงวงรีขางตนมาใชแทนอัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman เพื่อ
สรางกุญแจที่ใชรวมกันระหวางผูใชงานสองคน ผูใชงานคนใดคนหนึ่งจะตองเลือกจุดพิกัด G = (x1, y1) ที่อยู
บนเสนโคงเชิงวงรีนั้นๆ มา 1 จุดโดยมีคุณสมบัติที่วา คาที่เล็กที่สุด n ที่ทําใหสมการ nG = O เปนจริง ควร
เปนจํานวนเฉพาะที่มีคามากๆ คา โดยที่ O คือจุด ณ อนันต (Point at Infinity) ขอมูลทั้งสองนี้ (Ep(a, b) และ
G) ไมจําเปนตองเก็บรักษาเปนความลับ และจะนํามาใชในการคํานวณหากุญแจที่ใชรวมกันผานชองทาง
สื่อสารที่ไมปลอดภัย ขั้นตอนการสรางกุญแจที่ใชรวมกันมีดังนี้

105
1. นายดําเลือกตัวเลขสุม nA ซึ่งมีคานอยกวา n มาหนึ่งคา ตัวเลขนี้คือกุญแจสวนตัวของนายดําและตอง
เก็บเปนความลับ จากนั้นนายดําทําการคํานวณหาคากุญแจสาธารณะ PA = nA . G แลวสงผลลัพธที่
ไดใหกับนายแดง
2. นายแดงทําเหมือนนายดํา โดยเลือกตัวเลขสุม nB เพื่อใชเปนกุญแจสวนตัว ทําการคํานวณหาคากุญแจ
สาธารณะ PB = nB . G แลวสงผลลัพธที่ไดใหกับนายดํา
3. นายดําคํานวณหาคากุญแจที่ใชรวมกัน Sk = nA . PB ขณะที่นายแดงก็คํานวณหา Sk = nB . PA

ใหสังเกตวา การคํานวณในขั้นตอนที่ 3 จะไดคําตอบเหมือนกัน เนื่องจาก

nA . PB = nA . ( nB . G) = nB . ( nA . G) = nB . PA (8.5)

จุดเดนของการนําเสนโคงเชิงวงรีมาประยุกตใชงานก็คือ การแกปญหาลอการิทึมแบบไมตอเนื่องบน
เสนโคงเชิงวงรีในปจจุบันนั้น ถึงจะใชวิธีการที่ดีที่สุดที่มีอยู ก็ยังคงตองใชเวลาในการแกปญหานานกวาเวลาที่
ใชในการแกปญหาแบบเดียวกันภายในมอดุโลจํานวนเฉพาะเปนอันมาก หรือพูดอีกนัยหนึ่งก็คือ ระบบการ
เขารหัสลับที่ใชการคํานวณดวยพิกัดจุดตางๆ ที่อยูบนเสนโคงเชิงวงรีภายในฟลดจํากัด จะใหคาความ
แข็งแกรงตอจํานวนบิตที่ใช สูงกวาการคํานวณดวยเลขจํานวนเต็ม มอดุโลจํานวนเฉพาะภายในฟลดเดียวกัน
ยกตัวอยางเชน ระดับความแข็งแกรงของระบบการเขารหัสลับเสนโคงเชิงวงรีที่มีกุญแจขนาด 163 บิตจะมีคา
เทียบเทากับอัลกอริทึม RSA ที่ใชกุญแจขนาด 1024 บิต [ELLI70] นอกจากความปลอดภัยที่เพิ่มขึ้นจากการ
ใชระบบการเขารหัสลับเสนโคงเชิงวงรีแลว ความซับซอนเชิงคํานวณของระบบยังมีคาต่ํามากๆ เมื่อเทียบกับ
อัลกอริทึมกุญแจสาธารณะแบบอื่นๆ ตารางที่ 8.1 แสดงขนาดของกุญแจที่ใหความทนทานตอการโจมตี
เทียบเทากันระหวางระบบการเขารหัสลับเสนโคงเชิงวงรี (ECC) และอัลกอริทึม RSA

ตารางที่ 8.1 ขนาดของกุญแจที่เทียบเทากันระหวาง ECC และ RSA


ขนาดกุญแจของ ขนาดกุญแจของ อัตราสวน
ECC (บิต) RSA (บิต) ECC/RSA
163 1024 1:6
256 3072 1:12
384 7680 1:20
512 15360 1:30

106
8.3 คําถามทายบท
1. จงยกตัวอยางการประยุกตใชงานอัลกอริทึม RSA ในการเขาและถอดรหัสลับสําหรับขอความตนฉบับ
ใดๆ ใหนักศึกษาเลือกคาตัวเลขที่เหมาะสมในการคํานวณ
2. จงอธิบายถึงแนวคิดในการนําปญหาเชิงคณิตศาสตรมาประยุกตใชเพื่อสรางอัลกอริทึมกุญแจสาธารณะ
แบบตางๆ นักศึกษาคิดวาแนวคิดดังกลาวสามารถนํามาประยุกตใชเพื่อสรางอัลกอริทึมสมมาตรได
หรือไม อยางไร ใหยกตัวอยางประกอบ
3. จงอภิปรายถึงจุดเดน และจุดดอยในการนําปญหาเชิงคณิตศาสตรที่มีความยากมากๆ มาประยุกตใชเพื่อ
สรางอัลกอริทึมกุญแจสาธารณะ นักศึกษาคิดวาจะแกไขจุดดอยเหลานั้นไดอยางไร

107
บทที่ 9
ฟงกชันแฮชและลายมือชื่อดิจิทัล ตอนหนึ่ง

9.1 ฟงกชันแฮชทางเดียว
ฟงกชันทางเดียว (One-way Function) คือฟงกชันพื้นฐานที่สําคัญที่สุดที่นํามาใชในการออกแบบ
ระบบการเขารหัสลับกุญแจสาธารณะ ฟงกชันทางเดียวก็คือ ฟงกชันใดๆ ที่มีความงายในการคํานวณหา
คําตอบไปในทิศทางเดียว และมีความยากมากๆ ในการคํานวณหาคําตอบในทิศทางกลับกัน ยกตัวอยางเชน ถา
กําหนดคา x มา เราจะคํานวณหาคา f(x) ไดอยางงายดาย แตถากําหนด f(x) มาแทน จะเปนการยากมากๆ ที่จะ
คํานวณหาคา x คําวา “ยาก” ในที่นี้หมายถึง เราตองใชเวลานานและทรัพยากรจํานวนมากในการคํานวณหา
คําตอบ การทําแกวน้ําใหแตกก็เปรียบเสมือนกับฟงกชันทางเดียว เพราะการทําแกวน้ําใหแตกนั้นงายมาก เพียง
แคขวางไปที่พื้นก็ไดผลลัพธคือแกวที่แตกแลว แตจากเศษแกวที่แตก ถาจะนํามาประกอบกันใหมใหกลับมา
เปนแกวน้ําเหมือนเดิมนั้นยากมากๆ จากคุณลักษณะของฟงกชันทางเดียวที่กลาวมาขางตน จึงไดมีการนําเอา
แนวคิดของฟงกชันทางเดียวมาประยุกตใชในระบบการเขารหัสลับกุญแจสาธารณะ กลาวคือ ถากําหนดกุญแจ
สาธารณะมาให เราสามารถทําการเขารหัสลับขอความตนฉบับใดๆ ไดอยางงายดาย แตถากําหนดขอความ
รหัสมาให จะเปนการยากมากๆ ที่จะคํานวณหาขอความตนฉบับหรือกุญแจสวนตัวเพื่อใชในการถอดรหัสลับ
ในดานวิทยาการคอมพิวเตอร ไดมีการนําเอาฟงกชันแฮช (Hash Function) มาประยุกตใช อยาง
กวางขวางตั้งแตยุคแรกๆ ฟงกชันแฮช คือฟงกชันใดๆ ที่จะแปลงผัน (Convert) กลุมบิตนําเขาที่มีขนาดความ
ยาวแปรเปลี่ยนได (Variable Length) ไปเปนกลุมบิตสงออกที่มีขนาดความยาวคงที่ (Fixed-length) เรียกวา
คาแฮช (Hash Value) ตัวอยางของฟงกชันแฮชแบบงายๆ ก็คือ ฟงกชนั ที่รับกลุมบิตนําเขาขนาดใดๆ เขาไป
และใหผลลัพธขนาด 1 ไบตที่เกิดจากการออรเฉพาะของทุกๆ ไบตในกลุมบิตนําเขานั้นๆ จุดประสงคในการ
คํานวณหาคาแฮชในที่นี้ก็เพื่อเปนตัวบงชี้วา กลุมบิตนําเขาที่กําลังพิจารณาอยู มีโอกาสที่จะเปนกลุมบิตนําเขา
ตัวเดียวกันกับที่ใหผลลัพธเปนคาแฮชที่กําหนดไวหรือไม เนื่องจากฟงกชันแฮชเปนฟงกชันหลายตอหนึ่ง
(Many-to-one) เราจึงไมสามารถบอกไดวากลุมบิตนําเขาทั้งสองเปนกลุมบิตกลุมเดียวกัน แมวากลุมบิตนําเขา
ที่กําลังพิจารณาอยูจะใหผลลัพธเปนคาแฮชที่เหมือนกัน แตอยางนอยเราก็สามารถเชื่อมั่นไดในระดับหนึ่งวา
กลุมบิตนําเขาทั้งสองนาจะเปนตัวเดียวกัน
ฟงกชันแฮชทางเดียว (One-way Hash Function) ก็คือฟงกชันแฮชใดๆ ที่มีความงายในการ
คํานวณหาคาแฮชจากกลุมบิตนําเขาใดๆ แตมีความยากในการคํานวณหากลุมบิตนําเขาใดๆ ที่จะใหผลลัพธ
เปนคาแฮชตามที่กําหนดไว ฟงกชันแฮชทีย่ กตัวอยางไวขางตนไมถือเปนฟงกชันแฮชทางเดียว เนือ่ งจากการ
หากลุมบิตนําเขาใดๆ ที่ใหผลลัพธเปนคาแฮชที่กําหนดไว สามารถทําไดอยางงายดาย ฟงกชันแฮชทางเดียว

108
ที่ดีจะมีคณ
ุ สมบัติที่เรียกวา ปลอดการชน (Collision-free) กลาวคือ จะเปนการยากมากๆ ที่จะหากลุม บิต
นําเขา 2 กลุมบิตที่จะใหผลลัพธเปนคาแฮชตัวเดียวกันได

รูปที่ 9.1 แนวคิดการสรางฟงกชันแฮชทางเดียว

โดยปกติกลไกการทํางานภายในฟงกชันแฮชทางเดียวจะมีการเปดเผยตอคนทั่วๆ ไป ความปลอดภัย
ของตัวฟงกชนั แฮชทางเดียวจึงขึ้นอยูกับความเปนทางเดียว (One-wayness) ของตัวฟงกชนั เอง ฟงกชัน
แฮชทางเดียวที่ดีควรมีลักษณะที่วา กลุมบิตสงออกจะไมขนึ้ อยูกับกลุมบิตนําเขาในลักษณะที่สามารถ
สังเกตเห็นได นอกจากนี้การเปลี่ยนแปลงบิตใดๆ ในกลุมบิตนําเขาเพียง 1 บิต จะสงผลตอการเปลี่ยนแปลง
จํานวนบิตในคาแฮชโดยเฉลี่ยครึ่งหนึ่ง ฉะนั้นในทางอุดมคติ ถากําหนดคาแฮชมาให จึงแทบเปนไปไมได
ในทางคํานวณเลยที่จะคนหากลุมบิตนําเขาใดๆ ที่ใหผลลัพธเปนคาแฮชนั้นๆ ฟงกชันแฮชทางเดียวสามารถ
เขียนแสดงใหอยูในรูปของสมการไดดังนี้

h = H(M) (9.1)
โดยที่ H(.) คือฟงกชันแฮชทางเดียว
M คือขอความตนฉบับที่มีขนาดความยาวแปรเปลี่ยนได
h คือคาแฮชที่มีขนาดความยาวคงที่
ลักษณะของฟงกชันแฮชทางเดียวที่แตกตางจากฟงกชันแบบอื่นๆ สามารถสรุปไดดังนี้
1. ถากําหนดคา M มา จะมีความงายในการคํานวณหาคา h
2. ถากําหนดคา h มา จะมีความยากมากๆ ในการคํานวณหาคา M ที่ทําให H(M) = h
3. ถากําหนดคา M มา จะมีความยากมากๆ ในการคํานวณหาคา M’ ที่ทําให H(M) = H(M’)
จากคุณลักษณะของฟงกชันแฮชทางเดียวที่กลาวมาขางตน เราสามารถนําฟงกชันแฮชทางเดียวไป
ประยุกตใชในการสื่อสารขอมูล โดยเฉพาะการนําไปใชในการตรวจสอบความเปนบูรณภาพของขอมูล
(Data Integrity) ยกตัวอยางเชน ในกรณีที่เราตองการจะพิสูจนวาใครคนหนึ่งมีไฟลขอมูลเหมือนกับที่เรามี
หรือไม โดยไมตองการใหคนๆ นั้นสงไฟลดังกลาวมาใหเราผานทางชองทางสื่อสารที่ไมปลอดภัย เราอาจ
ทําไดโดยใหคนๆ นั้นสงคาแฮชของไฟลขอมูลมาให จากนั้นจึงทําการเปรียบเทียบคาแฮชของไฟลขอมูล
นั้นๆ กับคาแฮชของไฟลขอมูลที่เรามี ถาคาทั้งสองตรงกัน เราอาจสรุปในเบื้องตนไดวา คนๆ นั้นจะมี
ไฟลขอมูลตัวเดียวกับที่เรามีอยูจริง

109
ในการนําฟงกชันแฮชทางเดียวไปประยุกตใชกับขอความตนฉบับที่มีความยาวมากกวาคาแฮช เรา
จําเปนตองแบงขอความตนฉบับนั้นๆ (M) ออกเปนกลุมบิต (Block of Bits) ขนาดคงที่หลายๆ กลุมบิต (Mi, i
= 1, 2, …) แลวทําการคํานวณหาคาแฮชผลลัพธ โดยใชแนวคิดที่วา ผลลัพธของคาแฮช (hi) ที่ไดจะคํานวณ
มาจากกลุมบิตนําเขา (Mi) และผลลัพธของคาแฮชกอนหนานั้น (hi-1) ดูรูปที่ 9.2 ประกอบซึ่งเขียนในรูปของ
สมการไดดังนี้

hi = f(Mi,hi-1) (9.2)
โดยที่ i คือ เลขจํานวนเต็มใดๆ มีคา เทากับ 1, 2, 3, .....

รูปที่ 9.2 แนวคิดการคํานวณหาคาแฮชโดยใชฟงกชันแฮชทางเดียว

ในปจจุบนั ไดมีผูคิดคนอัลกอริทึมที่มีคุณลักษณะเหมือนกับฟงกชันแฮชทางเดียวขึ้นอยางมากมาย
ตัวอยางของอัลกอริทึมที่คนทั่วโลกยอมรับ และไดมีการนําไปประยุกตใชงานกันอยางแพรหลายก็คือ MD5
และ SHA-1 อัลกอริทึม MD5 ไดรับการปรับปรุงและพัฒนามาจากอัลกอริทึม MD4 ในปคริสตศักราช 1991
โดย Ron Rivest [RIVE98] ซึ่งจะใหผลลัพธเปนคาแฮชขนาด 128 บิตจากกลุมบิตนําเขาขนาดใดๆ คําวา
MD ยอมาจาก Message Digest ซึ่งหมายถึง “ขอความยอย” ขณะที่อัลกอริทึม SHA-1 ไดรับการคิดคน
พัฒนาขึ้นในปคริสตศักราช 1993 โดย NIST (National Institute of Standards and Technology) และ
NSA (National Security Agency) ซึ่งจะใหผลลัพธเปนคาแฮชขนาด 160 บิตจากกลุมบิตนําเขาขนาดใดๆ
ใหสังเกตวา SHA-1 เปนเพียงอัลกอริทึมหนึ่งในชุดอัลกอรึทึมแฮชที่ประกอบไปดวย 4 อัลกอริทึม SHA
(Secure Hash Algorithms) คือ SHA-1, SHA-256, SHA-384 และ SHA-512 ลักษณะเฉพาะ
(Characteristics) ของอัลกอริทึมทั้ง 4 ไดสรุปไวในตารางที่ 9.1

ตารางที่ 9.1 ลักษณะเฉพาะของชุดอัลกอริทึม SHA


Algorithm Message Block Size Word Size Hash Size Security
Size (bits) (bits) (bits) (bits) (bits)
SHA-1 < 264 512 32 160 80
SHA-256 < 264 512 32 256 128
SHA-384 < 2128 1024 64 384 196

ที่มา Secure Hash Signature Standard (SHS), FIPS PUB 180-2, 2002 [FIPS02]

110
9.2 อัลกอริทึม MD5
ในการทํางานของอัลกอริทึม MD5 จะมีการแบงขอความตนฉบับขนาดใดๆ ออกเปนกลุมบิต
หลายๆ กลุมบิตที่มีขนาด 512 บิตตามลําดับ แตละกลุมบิตนี้จะถูกแบงยอยออกเปน 16 กลุมยอย (Sub-
block) กลุมบิตยอยละ 32 บิต และเมื่อผานการดําเนินการตามที่กําหนดไวในอัลกอริทึม MD5 จนครบแลว
จะใหผลลัพธเปนเซตของกลุมบิตยอยขนาด 32 บิต จํานวน 4 กลุม เพือ่ นํามารวมกันเปนคาแฮชผลลัพธ
ขนาด 128 บิต รูปที่ 9.3 แสดงขั้นตอนการจัดเตรียมกลุมบิตนําเขาสําหรับอัลกอริทึม MD5
จากรูป ขอความตนฉบับที่จะนํามาคํานวณหาคาแฮชจะถูกเสริมเต็ม (Padding) ใหมจี ํานวนบิต
เทากับ 448 mod 512 บิต การเสริมเต็มนี้จะกระทํากับกลุม บิตนําเขากลุม สุดทายเสมอ โดยการเติมบิต 1 ตอ
เขาไปที่ตอนทายจํานวน 1 บิต จากนัน้ ก็เติมบิต 0 ตอเขาไปเรื่อยๆ จนทําใหกลุมบิตนําเขากลุมสุดทายมี
ขนาด 448 บิต ทั้งนี้เพื่อทําใหกลุมบิตนําเขากลุมสุดทายนี้มีขนาด 512 บิต เราจะเติมขอมูลที่เปนตัวเลขขนาด
64 บิตที่แสดงถึงความยาว (Length) ของขอความตนฉบับในหนวยของบิตลงไป การเสริมเต็มทั้งสอง
ขั้นตอนนี้จะทําใหขอความตนฉบับมีจํานวนบิตโดยรวมเปนจํานวนเทาของ 512 ในกรณีที่ขอความตนฉบับ
เดิมมีจํานวนบิตเปนจํานวนเทาของ 512 อยูแลว กลุมบิตนําเขากลุมสุดทายจะประกอบไปดวย 10, 01, 02, 03,
..... 0448 ตามดวยตัวเลขขนาด 64 บิต ที่แสดงคาของจํานวนบิตที่มีอยูในขอความตนฉบับ เมื่อมีการแบง
ขอความตนฉบับออกเปนกลุมๆ ละ 512 บิตแลว อัลกอริทึม MD5 จะเริ่มคํานวณหาคาแฮช ตามขั้นตอนที่
แสดงในรูปที่ 9.4

รูปที่ 9.3 ขั้นตอนการจัดเตรียมกลุมบิตนําเขาสําหรับอัลกอริทึม MD5

111
รูปที่ 9.4 ขั้นตอนการคํานวณหาคาแฮชของอัลกอริทึม MD5

ในตอนเริ่มตนของการคํานวณ จะมีการสรางตัวแปร A, B, C และ D ขนาด 32 บิตขึน้ และทําการ


กําหนดคาเบื้องตนในรูปของเลขฐานสิบหกดังนี้

A = 01 23 45 6716
B = 89 AB CD EF16
C = FE DC BA 9816
D = 76 54 32 1016
คาที่เก็บอยูในตัวแปรทั้งสี่นจี้ ะถูกคัดลอกลงในตัวแปรใหมอีก 4 ตัวคือ a, b, c และ d เพื่อใชในการ
คํานวณ โดยที่ a = A, b = B, c = C และ d = D จากรูป ขั้นตอนการคํานวณหาคาแฮชสําหรับกลุมบิต
นําเขาขนาด 512 บิตจะประกอบไปดวย รอบการทํางาน (Round) ที่เหมือนกัน 4 รอบ โดยแตละรอบจะมี
การดําเนินการที่แตกตางกัน 16 ครั้ง การดําเนินการแตละครั้งจะกระทําในรูปของฟงกชันที่ไมเปนเชิงเสน
ของตัวแปร 3 ตัวที่เลือกมาจากตัวแปรที่มีอยู 4 ตัว คือ a, b, c และ d ผลลัพธที่ไดจะนําไปบวกกับ
(1) ตัวแปรอีกตัวที่ไมถูกเลือก
(2) กลุมบิตยอยของขอความตนฉบับ Mj และ
(3) คาคงที่ ti

จากนั้นผลลัพธจากการบวกจะถูกเลื่อนบิตเปนวงไปทางซาย (Left Circular Shift) ตามจํานวนบิตที่


กําหนดไว ผลลัพธที่ไดจากการเลื่อนบิตจะถูกบวกกับตัวแปร 1 ใน 4 ตัวที่เลือกมาจากตัวแปรที่มีอยูทั้ง 4 คือ
a, b, c และ d อีกครั้ง ผลลัพธสุดทายที่ไดจะนํากลับไปแทนคาลงในตัวแปรทั้ง 4 คือ a, b, c และ d เพื่อใช
ในการคํานวณในรอบการทํางานตอไป เมื่อมีการดําเนินการดังที่กลาวมาขางตนจนครบ จะถือวาเปนการ
ดําเนินการครบ 1 รอบการทํางาน

112
ฟงกชันที่ไมเปนเชิงเสนของตัวแปร 3 ตัวที่ใชในการคํานวณหาคาแฮชจะมีอยู 4 รูปแบบคือ

F (X, Y, Z) = (X AND Y) OR ((NOT X) AND Z)


G (X, Y, Z) = (X AND Y) OR (Y AND (NOT Z))
H (X, Y, Z) = X XOR Y XOR Z
I (X, Y, Z) = Y XOR (X OR (NOT Z))

กําหนดให Mj คือกลุมบิตยอยขนาด 32 บิตกลุมที่ j โดย j จะมีคาตั้งแต 0 ถึง 15 และ <<<S คือการ


เลื่อนบิตเปนวงไปทางซายเปนจํานวน S บิต การดําเนินการที่เกิดจากฟงกชันที่ไมเปนเชิงเสนทั้ง 4 รูปแบบ
สามารถเขียนแสดงใหอยูในรูปของความสัมพันธไดดังนี้ ดูรูปที่ 9.5 ประกอบ

FF (a, b, c, d, Mj, S, ti) หมายถึง a = b + ((a + F (b, c, d) + Mj + ti) <<<S)


GG (a, b, c, d, Mj, S, ti) หมายถึง a = b + ((a + G (b, c, d) + Mj + ti) <<<S)
HH (a, b, c, d, Mj, S, ti) หมายถึง a = b + ((a + H (b, c, d) + Mj + ti) <<<S)
II (a, b, c, d, Mj, S, ti) หมายถึง a = b + ((a + I (b, c, d) + Mj + ti) <<<S)

รูปที่ 9.5 แผนผังการดําเนินการ 1 รอบการทํางานของอัลกอริทึม MD5

113
จากที่กลาวมาขางตน อัลกอริทึม MD5 จะมีรอบการทํางาน 4 รอบ แตละรอบจะมีการดําเนินการที่
แตกตางกัน 16 ครั้ง ซึ่งการดําเนินการทั้ง 16×4 ครั้งนั้น สามารถแสดงในรูปของความสัมพันธไดดังนี้

รอบที่ 1 รอบที่ 2
FF (a, b, c, d, M0, 7, D76AA47816) GG (a, b, c, d, M1, 5, F61E256216)
FF (d, a, b, c, M1,12, E8C7B75616) GG (d, a, b, c, M6, 9, C040B34016)
FF (c, d, a, b, M2,17, 242070DB16) GG (c, d, a, b, M11, 14, 265E5A5116)
FF (b, c, d, a, M3,22, C1BDCEEE16) GG (b, c, d, a, M0, 20, E9B6C7AA16)
FF (a, b, c, d, M4, 7, F57C0FAF16) GG (a, b, c, d, M5, 5, D62F105D16)
FF (d, a, b, c, M5, 12, 4787C62A16) GG (d, a, b, c, M10, 9, 0244145316)
FF (c, d, a, b,M6, 17, A830461316) GG (c, d, a, b, M15, 14,D8A1E68116)
FF (b, c, d, a, M7, 22, FD46950116) GG (b, c, d, a, M4, 20, E7D3FBC816)
FF (a, b, c, d, M8, 7, 698098D816) GG (a, b, c, d, M9, 5, 21E1CDE616)
FF (d, a, b, c, M9,12, 8B44F7AF16) GG (d, a, b, c, M14, 9, C33707D616)
FF (c, d, a, b, M10,17, FFFF5BB116) GG (c, d, a, b, M3, 14, F4D50D8716)
FF (b, c, d, a, M11,22, 895CD7BE16) GG (b, c, d, a, M8, 20, 455A14ED16)
FF (a, b, c, d, M12, 7, 6B90112216) GG (a, b, c, d, M13, 5, A9E3E90516)
FF (d, a, b, c, M13,12, FD98719316) GG (d, a, b, c, M2, 9, FCEFA3F816)
FF (c, d, a, b, M14,17, A679438E16) GG (c, d, a, b, M7, 14, 676F02D916)
FF (b, c, d, a, M15,22, 49B4082116) GG (b, c, d, a, M12, 20, 8D2A4C8A16)

รอบที่ 3 รอบที่ 4
HH (a, b, c, d, M5, 4, FFFA394216) II (a, b, c, d, M0, 6, F429224416)
HH (d, a, b, c, M8, 11, 8771F68116) II (d, a, b, c, M7, 10, 423AFF9716)
HH (c, d, a, b, M11, 16, 6D9D612216) II (c, d, a, b, M14, 15, AB9423A716)
HH (b, c, d, a, M14, 23, FDE5380C16) II (b, c, d, a, M5, 21, FC93A03916)
HH (a, b, c, d, M1, 4, A4BEEA4416) II (a, b, c, d, M12, 6, 655B59C316)
HH (d, a, b, c, M4, 11, 4BDECFA916) II (d, a, b, c, M3, 10, 8F0CCC9216)
HH (c, d, a, b, M7, 16, F6BB4B6016) II (c, d, a, b, M10,15, FFEFF47D16)
HH (b, c, d, a, M10, 23, BEBFBC7016) II (b, c, d, a, M1, 21, 85845DD116)
HH (a, b, c, d, M13, 4, 289B7EC616) II (a, b, c, d, M8, 6, 6FA87E4F16)
HH (d, a, b, c, M0, 11, EAA127FA16) II (d, a, b, c, M15, 10, FE2CE6E016)
HH (c, d, a, b, M3, 16, D4EF308516) II (c, d, a, b, M6, 15, A301431416)
HH (b, c, d, a, M6, 23, 04881D0516) II (b, c, d, a, M13, 21, 4E0811A116)
HH (a, b, c, d, M9, 4, D9D4D03916) II (a, b, c, d, M4, 6, F7537E8216)
HH (d, a, b, c, M12, 11, E6DB99E516) II (d, a, b, c, M11,10, BD3AF23516)
HH (c, d, a, b, M15, 16, 1FA27CF816) II (c, d, a, b, M2, 15, 2AD7D2BB16)
HH (b, c, d, a, M2, 23, C4AC566516) II (b, c, d, a, M9, 21, EB86D39116)

114
เมื่อดําเนินการครบ 16 ครั้งแลว คาที่อยูในตัวแปร a, b, c และ d จะนํามาบวกรวมกับคาที่เก็บไวใน
ตัวแปร A, B, C และ D ตามลําดับ ดูรูปที่ 9.4 ประกอบ จากนั้นอัลกอริทึม MD5 จะเริ่มการคํานวณหาคา
แฮชสําหรับกลุมบิตนําเขาขนาด 512 บิตกลุมที่สองตอไป ขั้นตอนการทํางานจะดําเนินไปในลักษณะนี้จน
กระทั้งครบทุกกลุมบิตนําเขา คาที่เก็บไวในตัวแปร A, B, C และ D ที่ไดเปนครั้งสุดทาย จะนํามาตอรวมกัน
(Concatenation) เพื่อสรางคาแฮชผลลัพธขนาด 128 บิต
ตัวอยางการคํานวณหาคาแฮชโดยใชอัลกอริทึม MD5 และขอความตนฉบับแบบตางๆ สามารถ
แสดงไดดังนี้ [RIVE98]
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b

9.3 อัลกอริทึม SHA-1


ในการทํางานของอัลกอริทึม SHA-1 จะแบงขอความตนฉบับขนาดใดๆ ออกเปนกลุมบิตหลายๆ
กลุมบิตที่มีขนาด 512 บิตเชนเดียวกัน ในสวนของการเสริมเต็มเพื่อใหมีจํานวนบิตของขอความตนฉบับ
โดยรวมเปนจํานวนเทาของ 512 จะมีวิธกี ารและขั้นตอนเหมือนกับอัลกอริทึม MD5 ทุกประการ เนื่องจาก
อัลกอริทึม SHA-1 จะสรางคาแฮชผลลัพธขนาด 160 บิต ตัวแปรขนาด 32 บิตที่ใชในการคํานวณจึงมี 5 ตัว
แปร คือ a, b, c, d และ f โดยในตอนเริ่มตนของการคํานวณ จะมีการสรางตัวแปร A, B, C, D และ E
ขนาด 32 บิตขึน้ และมีการกําหนดคาเบื้องตนในรูปของเลขฐานสิบหกดังนี้

A = 67 45 23 0116
B = EF CD AB 8916
C = 98 BA DC FE16
D = 10 32 54 7616
E = C3 D2 E1 F016

ขั้นตอนในการคํานวณหาคาแฮชในแตละกลุมบิตของอัลกอริทึม SHA-1 จะคลายกับอัลกอริทึม


MD5 โดยอัลกอริทึม SHA-1 จะประกอบไปดวยรอบการทํางาน 4 รอบ แตละรอบจะมีการดําเนินการที่
แตกตางกัน 20 ครั้ง ซึ่งแตละรอบของการดําเนินการจะใชหลักการเดียวกันกับที่ใชในอัลกอริทึม MD5
กลาวคือ ฟงกชันที่ไมเปนเชิงเสนของตัวแปร 3 ตัวที่ใชในการคํานวณหาคาแฮชจะมีอยู 4 รูปแบบคือ

115
ft (X ,Y, Z) = (X AND Y) OR ((NOT X) AND Z), สําหรับ t = 0 ถึง 19
ft (X ,Y, Z) = X XOR Y XOR Z , สําหรับ t = 20 ถึง 39
ft (X ,Y, Z) = (X AND Y) OR (X AND Z) OR (Y AND Z), สําหรับ t = 40 ถึง 59
ft (X ,Y, Z) = X XOR Y XOR Z , สําหรับ t = 60 ถึง 79

คาคงที่ Kt ในรูปแบบของเลขฐานสิบหกทีใ่ ชในการคํานวณหาคาแฮชจะมี 4 รูปแบบคือ

Kt = 5A 82 79 9916, สําหรับ t = 0 ถึง 19


Kt = 6E D9 EB A116, สําหรับ t = 20 ถึง 39
Kt = 8F 1B BC DC16, สําหรับ t = 40 ถึง 59
Kt = CA 62 C1 D616, สําหรับ t = 60 ถึง 79
ในตอนเริ่มตนของการดําเนินการในแตละรอบ กลุมบิตนําเขาขนาด 512 บิตที่ถูกแบงออกเปนกลุม
บิตยอยขนาด 32 บิต จํานวน 16 กลุม (M0 ถึง M15) จะนําไปสรางเปนกลุมบิตยอยขนาด 32 บิตจํานวน 80
กลุม (W0 ถึง W79) ไดดังนี้

Wt = Mt , สําหรับ t = 0 ถึง 15
Wt = (Wt-3 XOR Wt-8 XOR Wt-14 XOR Wt-16) <<< 1, สําหรับ t =16 ถึง 79

กําหนดให t คือรอบของการดําเนินการซึ่งมีคาตั้งแต 1 ถึง 80 Wt คือกลุมบิตยอยขนาด 32 บิตกลุมที่


t และ <<< S คือ การเลื่อนบิตเปนวงไปทางซายจํานวน S บิต การดําเนินการในแตละรอบของการทํางาน
ภายในอัลกอริทึม SHA-1 สามารถแสดงโดยใชรหัสเทียม (Pseudo-code) ไดดังนี้ ดูรูปที่ 9.6 ประกอบ

For t = 0 to 79
TEMP = (a <<< 5) + ft (b, c, d) + e + Wt + Kt
e=d
d=c
c = b <<< 30
b=a
a = TEMP

116
รูปที่ 9.6 แผนผังการดําเนินการ 1 รอบการทํางานของอัลกอริทึม SHA-1

เมื่อดําเนินการครบ 20 รอบการทํางานแลว คาที่อยูในตัวแปร a, b, c, d และ e จะถูกบวกรวมกับ


คาที่เก็บไวในตัวแปร A, B, C, D และ E ตามลําดับ ดูรูปที่ 9.6 ประกอบ จากนั้นอัลกอริทึม SHA-1 จะเริ่ม
การคํานวณหาคาแฮชสําหรับกลุมบิตนําเขาขนาด 512 บิตกลุมที่สองตอไป ขั้นตอนการทํางานจะดําเนินไป
ในลักษณะนี้จนกระทั่งครบทุกกลุมบิตนําเขา คาที่เก็บไวในตัวแปร A, B, C, D และ E ที่ไดเปนครัง้ สุดทาย
จะนํามาตอรวมกันเพื่อสรางคาแฮชผลลัพธขนาด 160 บิต

9.4 การโจมตีแบบวันเกิด
การโจมตีเพื่อทําใหฟงกชันแฮชมีจุดออน อาจทําไดโดยใชการคนหาอยางละเอียด หรือการโจมตี
แบบตะลุย ซึ่งสามารถแบงออกเปนสองลักษณะ ในลักษณะแรก จะเปนการกําหนดคาแฮชของขอความ
ตนฉบับ H(M) มา ผูโจมตีจะตองหาหรือสรางขอความตนฉบับใหม M’ ที่ใหผลลัพธเปนคาแฮชที่เหมือนกับ
คาแฮชของขอความตนฉบับเดิม, H(M) = H(M’), สําหรับการโจมตีในลักษณะที่สอง ผูโจมตีจะตองคนหา
ขอความตนฉบับแบบสุมขึ้นมา 2 ขอความ, M และ M’, ซึ่งใหผลลัพธเปนคาแฮชที่เหมือนกัน เนื่องจากคา
แฮชมีขนาดความยาวที่จํากัด เชน 128 บิตหรือ 160 บิต ขณะที่ขอความตนฉบับสวนใหญมักจะมีขนาดความ
ยาวมากกวาคาแฮช จึงมีความเปนไปไดทขี่ อความตนฉบับ 2 ขอความที่เลือกขึ้นมาแบบสุมจะใหคาแฮช
ผลลัพธที่ตรงกัน ซึ่งเปรียบเสมือนกับการหาบุคคล 2 คนที่เกิดวันเดียวกันจากกลุมคนจํานวนมาก
ปริทัศนวันเกิด (Birthday Paradox) จัดเปนปญหามาตรฐานทางดานสถิติศาสตร (Statistics)
ปญหาหนึ่ง ยกตัวอยางเชน จะตองมีคนอยูภ ายในหองๆ หนึ่งเปนจํานวนเทาใดทีจ่ ะทําใหการเลือกคนแบบ
สุมคนหนึ่งออกมาแลวมีวันเกิดตามที่กําหนดไว มีความนาจะเปนมากกวาครึ่งหนึ่งหรือมากกวา 0.5 หรืออีก
หนึ่งตัวอยางเชน จะตองมีคนอยูภายในหองๆ หนึ่งเปนจํานวนเทาใดที่ทําใหการเลือกคนแบบสุมสองคน

117
ออกมาแลวสองคนนั้นมีวันเกิดตรงกัน มีความนาจะเปนมากกวาครึ่งหนึ่งหรือมากกวา 0.5 ตัวอยางแรกจะ
เปรียบเสมือนกับการโจมตีฟงกชันแฮชทางเดียวในลักษณะที่หนึ่ง ขณะที่ตวั อยางหลังจะเปรียบเสมือนการ
โจมตีฟงกชันแฮชทางเดียวในลักษณะที่สอง ซึ่งการโจมตีในลักษณะทีส่ องนี้จะเปนที่รูจักกันในชือ่ การ
โจมตีแบบวันเกิด (Birthday Attack)
ในการหาคําตอบของตัวอยางแรก เราจะสมมติใหคาแฮชที่เกิดจากขอความตนฉบับใดๆ มีรปู แบบ
ของบิตที่เปนไปไดทั้งสิ้น n รูปแบบ เราตองการหาจํานวนขอความตนฉบับในฐานขอมูลที่นอยที่สุดที่ทําให
การเลือกขอความตนฉบับแบบสุมขึ้นมาหนึ่งขอความจากฐานขอมูล เพื่อคํานวณหาคาแฮช แลวใหผลลัพธ
เปนคาแฮชตามที่กําหนด มีคาความนาจะเปนมากกวา 0.5
โดยการกําหนดใหคาแฮชทีต่ องการหาคือ H(x) คาแฮชที่ไดจากขอความตนฉบับที่เลือกมาแบบสุม
จากฐานขอมูลคือ H(y) ถาภายในฐานขอมูลประกอบไปดวยขอความเพียง 1 ขอความเทานั้น ความนาจะเปน
ที่ H(x) = H(y) จะมีคาเทากับ 1/n ในทางกลับกันความนาจะเปนที่ H(x) ≠ H(y) จะเทากับ 1-1/n ในทํานอง
เดียวกัน ถาฐานขอมูลประกอบไปดวยขอความตนฉบับจํานวน k ขอความ ความนาจะเปนที่คาแฮชของ
ขอความตนฉบับทั้งหมดไมตรงกับ H(x) ก็คือ ผลคูณของความนาจะเปนที่คาแฮชของขอความตนฉบับแต
ละขอความไมตรงกับ H(x) นั่นเอง ซึ่งจะมีคาเทากับ (1-1/n)k ดังนั้นความนาจะเปนที่คาแฮชของขอความ
ตนฉบับใดขอความหนึ่งจะตรงกับ H(x) จึงมีคาเทากับ 1 - (1-1/n)k
จากทฤษฎีบททวินาม (Binomial Theorem) ที่กลาวไววา

k (k - 1 ) 2 k (k - 1 )( k - 2 ) 3
(1 − a ) k = 1 - ka +
2!
a −
3!
a ...... (9.3)

เมื่อ a มีคานอยๆ คาของ (1-a)k สามารถประมาณคาไดเทียบเทากับ (1-ka) ฉะนั้นความนาจะเปน


ของ H(y) ที่คํานวณมาจากขอความตนฉบับจํานวน k ขอความจะตรงกับ H(x) จะมีคาโดยประมาณเทากับ 1
- (1- k/n) = k/n ซึ่งถาเรากําหนดใหความนาจะเปนมีคาเทากับ 0.5 แลว k จะมีคาเทากับ n/2 เพราะฉะนั้นใน
กรณีที่คาแฮชมีขนาด 128 บิต ซึ่งมีรูปแบบของบิตทั้งสิ้น 2128 รูปแบบ โอกาสที่จะคํานวณหาคาแฮชจาก
ขอความตนฉบับใดๆ จนพบคาแฮชตามที่กําหนด ที่มคี วามนาจะเปนมากกวาครึ่งหนึ่งหรือมากกวา 0.5 ก็คือ

k = 2m/2 (9.4)
= 2m-1
= 2128-1
= 2127

ซึ่งหมายความวา ภายในฐานขอมูลจะตองประกอบไปดวยขอความตนฉบับเปนจํานวนอยางนอย
2127 ขอความนั่นเอง การคํานวณหาคําตอบในลักษณะนี้ จะนําไปใชในการหาจํานวนครั้งโดยเฉลี่ยของการ
โจมตีแบบตะลุยที่จะทําใหการโจมตีประสบความสําเร็จ ยกตัวอยางเชน ในการคนหากุญแจถอดรหัสลับซึ่ง

118
มีขนาด 64 บิตโดยใชวิธีคนหาอยางละเอียด หรือการโจมตีแบบตะลุย โอกาสที่จะพบกุญแจถอดรหัสลับ
ดอกที่ถูกตองโดยเฉลี่ย หรือมีความนาจะเปนเกินครึ่งหนึ่ง จะเกิดขึ้นเมื่อมีการทดลองถอดรหัสลับดวยกุญแจ
คาตางๆ ที่เปนไปไดทั้งสิ้นจํานวน 263 กุญแจ
ในการหาคําตอบของตัวอยางที่สองหรือการโจมตีแบบวันเกิด เราตองการที่จะหาจํานวนขอความ
ตนฉบับที่มีอยูภ ายในฐานขอมูลที่นอยที่สุด ที่ทําใหการเลือกขอความตนฉบับใดๆ แบบสุมขึ้นมาสอง
ขอความจากฐานขอมูล เพื่อคํานวณหาคาแฮชแลวใหผลลัพธเปนคาแฮชที่ตรงกัน มีคา ความนาจะเปน
มากกวา 0.5 สามารถทําไดดงั นี้
โดยการกําหนดให P(n, k) คือ ความนาจะเปนที่คาแฮชของขอความตนฉบับใดๆ สองขอความที่
เลือกมาจาก k ขอความในฐานขอมูลมีคาตรงกัน โดยที่ขอ ความตนฉบับแตละขอความมีรูปแบบที่เปนไปได
ทั้งหมด n รูปแบบ ฉะนัน้ สิ่งที่เราตองการหาคือคา k ที่ทําให P(n, k) ≥ 0.5 โดยการคํานวณทางสถิติ เราจะ
หาคาความเปนไปไดที่คาแฮชของขอความตนฉบับตัวทีส่ องที่เลือกขึ้นมาแบบสุมจากจํานวน k ขอความใน
ฐานขอมูลจะไมตรงกับคาแฮชของขอความแรกที่เลือกขึ้นมากอน ซึ่งจํานวนเหตุการณ (N) ในกรณีนี้
สามารถคํานวณไดจาก

n!
N = n × (n - 1) × (n - 2) .... (n - k + 1) =
(n - k )!
(9.5)

ในขณะที่จํานวนของการเลือกขอความตนฉบับขึ้นมาทีละตัว โดยไมสนใจวาจะมีคา แฮชผลลัพธซ้ํา


กันหรือไม จะเทากับ nk ดังนั้นความนาจะเปนที่การเลือกขอความตนฉบับขึ้นมา 2 ขอความตามลําดับจาก k
ขอความที่มีคาแฮชผลลัพธไมตรงกัน จะคํานวณไดจาก
n!

ความนาจะเปน = (n - k )!
=
n!
(9.6)
nk ( n - k )! n k

ในทางกลับกัน ความนาจะเปนที่คาแฮชผลลัพธของขอความตนฉบับทั้งสองจะตรงกันคือ
n!
P ( n, k ) = 1 - (9.7)
(n - k )! n k

การคํานวณหาคาความนาจะเปนของสมการขางตนไดกลาวถึงไวในภาคผนวก 8A ของ [STAL98]


ซึ่งแสดงไดดังตอไปนี้

119
n!
P ( n, k ) = 1 - (9.8)
(n - k )! n k

n × (n - 1) × ... × (n - k + 1)
= 1-
nk

⎡n - 1 n - 2 n - k +1⎤
= 1- ⎢ × × ... × ⎥
⎣ n n n ⎦

⎡⎛ 1⎞ ⎛ 2⎞ ⎛ k − 1 ⎞⎤
= 1 - ⎢⎜1 − ⎟ × ⎜1 − ⎟ × ... × ⎜1 − ⎟⎥
⎣⎝ n⎠ ⎝ n⎠ ⎝ n ⎠⎦

จากทฤษฎีอสมการ (Inequality) ที่กลาวไววา (1-x) ≤ e-x , สําหรับทุกคาที่ x ≥ 0 จะไดวา

P (n, k ) > 1- [ ( e )× ( e )× ... × ( e


-1 /n -2 /n - ( k −1) /n
)] (9.9)
> 1 - e - [ (1 /n )+ (2 /n )+... + (k −1 )/n ]

> 1 - e -k (k - 1 ) / 2 n

ในกรณีที่ความนาจะเปนที่เราตองการหามีคามากกวา 0.5 เราจะแทนคา 0.5 ลงในสมการเพื่อหาคา


คําตอบไดดังนี้

0.5 = 1 - e -k (k - 1 ) / 2 n (9.10)
2 = e k (k - 1 ) / 2 n

k (k - 1)
ln 2 =
2n

สําหรับคา k สูงๆ เราสามารถแทนคา k(k -1) ดวย k2 ได ดังนั้น

k = 2n (ln 2 ) (9.11)
= 1.18 n ≈ n

เพราะฉะนั้น จํานวนขอความตนฉบับที่มีอยูในฐานขอมูลที่จะทําใหการโจมตีแบบวันเกิดประสบ
ความสําเร็จคือ 1.18 n หรือประมาณ n ขอความ โดยที่ n คือรูปแบบที่เปนไปไดทั้งหมดของขอความ
ตนฉบับ ในทํานองเดียวกัน ถาเราตองการโจมตีฟงกชันแฮชทางเดียวที่ใหคาแฮชผลลัพธขนาด 128 บิตโดย
ใชการโจมตีแบบวันเกิด โอกาสที่จะประสบความสําเร็จหรือโอกาสที่จะเจอขอความตนฉบับใดๆ 2 ขอความ
ที่ใหคาแฮชเหมือนกัน ที่มีความนาจะเปนมากกวาครึ่งหนึ่งหรือมากกวา 0.5 คือ k ≈ 2128 = 2128/2 = 264

120
นั่นเอง ใหสังเกตวา การโจมตีแบบวันเกิดจะแตกตางกับการโจมตีแบบตะลุย เนื่องจากในการโจมตีแบบ
ตะลุยนัน้ ตัวแปรที่เราตองการหา เชน กุญแจถอดรหัสลับ จะมีเพียงตัวเดียวจากรูปแบบที่เปนไปไดทั้งหมด
ของกุญแจเทานั้น ในขณะทีก่ ารโจมตีแบบวันเกิด เราสามารถดัดแปลงแกไขขอความตนฉบับไปเรือ่ ยๆ
จนกวาจะไดคา แฮชผลลัพธที่ตรงกันกับขอความตนฉบับเดิม ซึ่งในทางปฏิบัติสามารถทําไดงายๆ โดยที่ไม
ทําใหความหมายของขอความตนฉบับเปลี่ยนแปลงไปจากเดิม ยกตัวอยางเชน โดยการเติมชองวาง (Space)
ระหวางคํากอนเริ่มตนประโยคหรือยอหนา เติมชองวางในตอนทายประโยคหรือยอหนา หรือเติมชองวาง
บริเวณทีว่ างใดๆ ในขอความตนฉบับ เปนตน

9.5 คําถามทายบท
1. จงอธิบายการทํางานพรอมทั้งคุณสมบัติของฟงกชันแฮชทางเดียว เมือ่ นํามาประยุกตใชในวิทยาการรหัสลับ
2. นักศึกษาคิดวาขนาดของคาแฮชซึ่งบอกเปนจํานวนบิตมีผลตอความแข็งแกรงของฟงกชันแฮชทางเดียว
หรือไม เพราะเหตุใด ในกรณีของอัลกอริทึม MD5 และ SHA-1 ซึ่งใหคาแฮชผลลัพธที่มี ขนาดตางกัน
นักศึกษาคิดวาอัลกอริทึมใดมีความแข็งแกรงมากกวากัน เพราะเหตุใด
3. จงอธิบายหลักการโจมตีแบบวันเกิด พรอมทั้งยกตัวอยางวิธีการโจมตีแบบวันเกิดตอฟงกชันแฮชทาง
เดียวแบบงายๆ มา 2 ตัวอยาง
4. จงอธิบายความแตกตางระหวางการโจมตีแบบวันเกิดและการโจมตีแบบตะลุย

121
บทที่ 10
ฟงกชันแฮชและลายมือชื่อดิจิทัล ตอนสอง

10.1 รหัสพิสูจนตัวจริงของขอความ
รหัสพิสูจนตัวจริงของขอความ (Message Authentication Codes) หรือเรียกสั้นๆ วา MAC ก็คือ
ฟงกชันแฮชทางเดียวที่ใชกญ ุ แจลับในการคํานวณหาคาแฮชผลลัพธ อัลกอริทึม MAC จะมีคณ ุ สมบัติ
เหมือนกับฟงกชันแฮชทางเดียวดังที่กลาวไปขางตน ตางกันเพียงแค MAC จะใชกุญแจลับเปนสวนประกอบ
ในการทํางาน ในการนําไปใชงาน จะมีเพียงคนที่รูกุญแจลับนี้เทานั้นทีจ่ ะสามารถคํานวณหาคาแฮชได
อัลกอริทึม MAC จะมีประโยชนมากในการพิสูจนตัวจริงของเอกสารหรือไฟลขอมูลใดๆ ยกตัวอยางเชน
ผูใชงานอาจใช MAC ในการพิสูจนวาไฟลที่เก็บไวในเครื่องคอมพิวเตอรไมไดถูกแกไขเปลี่ยนแปลงไป ซึ่ง
ในการใชฟงกชันแฮชทางเดียวนัน้ จะมีจุดออนคือ ผูโจมตีอาจเขามาเปลี่ยนแปลงไฟลขอมูลตนฉบับ แลวทํา
การคํานวณหาคาแฮชคาใหม นําคาแฮชใหมที่ไดไปแทนที่คาแฮชเดิมทีเ่ ก็บไวในฐานขอมูล เมื่อผูใชงาน
กลับมาตรวจสอบไฟลขอมูลนั้นๆ โดยการเปรียบเทียบกับคาแฮชตัวใหมที่อยูในฐานขอมูลเดิม ก็จะไมพบ
ความแตกตางใดๆ แตในกรณีของ MAC นั้น ผูโจมตีจะไมสามารถเปลี่ยนแปลงแกไขใดๆ กับตัวไฟลขอมูล
ได เนื่องจากผูโ จมตีไมทราบกุญแจลับที่ใชในการคํานวณหาคาแฮชผลลัพธ ตัวอยางของการนําฟงกชันแฮช
ทางเดียวมาประยุกตใชเปน MAC แบบงายๆ ก็คือ โดยการเขารหัสลับคาแฮชผลลัพธที่ไดดว ยอัลกอริทึม
สมมาตร ดูรูปที่ 10.1 ประกอบ ในทํานองเดียวกัน เราสามารถนําอัลกอริทึม MAC ใดๆ มาประยุกตใชเปน
ฟงกชันแฮชทางเดียวไดงายๆ โดยการเปดเผยกุญแจที่ใชในการเขารหัสลับ

รูปที่ 10.1 การนําฟงกชันแฮชทางเดียวมาประยุกตใชเปน MAC

122
10.1.1 อัลกอริทึม HMAC
ชื่อ HMAC ยอมาจาก รหัสพิสูจนตัวจริงของขอความโดยใชคาแฮชเปนหลัก (Hash-based
Message Authentication Code) อัลกอริทึม HMAC ไดรับการพัฒนาขึ้นในปคริสตศักราช 1996
[BELL96a,b] โดยมีแนวคิดในการนําฟงกชนั แฮชทางเดียวที่มีอยูใ นปจจุบันเชน MD5 หรือ SHA-1 มาใช
ประโยชนใหมากที่สุด ในปจจุบันไดมีการนําเอาอัลกอริทึม HMAC มาใชเปนมาตรฐานในการรักษาความ
ปลอดภัยของขอมูลที่สงผานเครือขายอินเทอรเน็ต โดยจะอยูในสวนของโพรโทคอลอินเทอรเน็ต (Internet
Protocol, IP) และโพรโทคอล SSL (Secure Socket Layer) เปนตน แผนผังการทํางานของอัลกอริทึม
HMAC ไดแสดงไวในรูปที่ 10.2
จากรูป ถาฟงกชันแฮชทางเดียวที่ใช แบงขอความตนฉบับออกเปนกลุมบิตขนาด n บิต กุญแจที่ใช
จะตองมีขนาด n บิตดวย กรณีที่กุญแจมีขนาดเล็กกวา n บิต เราจะเติมบิต 0 ลงไปทางซายของตัวกุญแจ
เรื่อยๆ จนมีจํานวนบิตเทากับ n ในกรณีทกี่ ุญแจมีขนาดใหญกวา n บิต กุญแจจะถูกสงผานฟงกชันแฮชทาง
เดียว เพื่อใหผลลัพธมีขนาด n บิต สําหรับคา ipad ที่แสดงในรูปก็คือ กลุมบิตเลขฐานสอง 001101102 ซึ่ง
เปนคาคงที่ที่นาํ มาใชวนไปเรือ่ ยๆ เปนจํานวน n/8 ครั้ง ขณะที่คา opad ก็คือกลุมบิตเลขฐานสอง 010110102
ที่นํามาใชวนไปเรื่อยๆ เปนจํานวน n/8 ครั้งเชนเดียวกัน คา si คือผลลัพธที่เกิดจากการออรเฉพาะกัน
ระหวางกุญแจและ ipad ขณะที่ s0 คือผลลัพธที่เกิดจากการออรเฉพาะกันระหวางกุญแจและ opad ผลลัพธ
ของคา HMAC สามารถแสดงในรูปของสมการไดดังนี้

HMACK = H ((K XOR opad) ll H (K XOR ipad) ll M)) (10.1)


โดยที่ ll คือสัญลักษณของการนําผลลัพธที่ไดมาตอรวมกัน

รูปที่ 10.2 แผนผังการทํางานของอัลกอริทึม HMAC

123
10.1.2 อัลกอริทึม MAC โดยใชตัวแปลงรหัสแบบกระแส
เราอาจคํานวณหาคา MAC โดยนําตัวแปลงรหัสแบบกระแสมาประยุกตใชก็ได อัลกอริทึมสําหรับ
คํานวณหาคา MAC ที่ใชแนวคิดขางตนนี้ไดมีการนําเสนอในการประชุมวิชาการระดับนานาชาติ
AUSCRYPT’92 [LAI93] โดยแผนผังการทํางานของอัลกอริทึมดังกลาวไดแสดงไวดงั ในรูปที่ 10.3

รูปที่ 10.3 แผนผังการทํางานของอัลกอริทึม MAC โดยใชตัวแปลงรหัสแบบกระแสเปนหลัก

จากรูป ตัวสรางบิต (0 หรือ 1) แบบสุมเทียมที่มีความปลอดภัยทางดานวิทยาการรหัสลับ


(Cryptographically Secure Pseudo Random Number Generator, CSPRNG) จะนํามาใชในการควบคุม
ทิศทาง (Direction) ของกระแสบิตนําเขาที่มาจากขอความตนฉบับ (Message Stream) เพื่อสงตอไปให เรจิ
สเตอรแบบเลื่อนปอนกลับเชิงเสน (Linear Feedback Shift Register, LFSR) สองตัว A หรือ B ที่แตกตาง
กัน ยกตัวอยางเชน ถาบิตที่สรางขึ้นจากตัวสรางบิตแบบสุมเทียมมีคาเปน 0 กระแสบิตนําเขาที่มาจากขอความ
ตนฉบับจะถูกปอนไปที่ LFSR A แตถาบิตที่สรางขึ้นมีคาเปน 1 กระแสบิตนําเขาก็จะถูกปอนไปที่ LFSR B
แทน ขั้นตอนการทํางานจะเปนไปในลักษณะนี้เรื่อยๆ จนถึงบิตสุดทายของขอความตนฉบับ คา MAC
ผลลัพธที่ไดก็คือคาสถานภาพ (Status) สุดทายของเรจิสเตอรที่อยูใน LFSR A และ B ทั้งสองตัว อยางไรก็
ตาม วิธีการสรางคา MAC ดังที่อธิบายไวขางตนก็ยังมีจุดออน กลาวคือ วิธีการนี้จะไมทนทานตอการโจมตีที่มี
การเปลี่ยนแปลงคาเพียงเล็กนอยที่ตัวขอความตนฉบับ ยกตัวอยางเชน ถามีการเปลี่ยนแปลงบิตสุดทายของ
ขอความตนฉบับเพียง 1 บิต คา MAC ผลลัพธที่ไดจะมีการเปลี่ยนแปลงเพียงแค 2 บิตเทานั้น คือบิตสุดทายที่
อยูใน LFSR ทั้งสอง ดังนั้นผูโจมตีสามารถสรางคา MAC ปลอมๆ ขึ้นมาไดโดยไมยาก และมีโอกาสประสบ
ความสําเร็จคอนขางสูง

124
10.2 ลายมือชื่อดิจิทัล
โดยปกติลายมือชื่อ (Signature) ของบุคคลใดบุคคลหนึ่ง สามารถนํามาใชเปนหลักฐานเพื่ออางอิง
ถึงบุคคลนั้นๆ ในการเห็นชอบตอการทําธุรกรรมใดๆ ที่เกิดขึ้น สาเหตุที่คนทั่วไปเชือ่ ถือลายมือชื่อ และ
ยอมรับใหใชเปนหลักฐานในการทําธุรกรรมใดๆ นั้น เนือ่ งมาจากความเชื่อที่วา
1. ลายมือชื่อสามารถใชในการพิสูจนตัวจริง เนื่องจากลายมือชื่อที่ปรากฏอยูบนเอกสารใดๆ จะทํา
ใหผูที่มีเอกสารนั้นมั่นใจไดวา ผูที่เปนเจาของลายมือชื่อดังกลาวไดเซ็นชื่อ (Sign) ตนเองลงใน
เอกสารโดยเจตนา ซึ่งลักษณะของลายมือชือ่ ที่ปรากฏอยูนั้นจะมีความเปนเอกลักษณที่สามารถ
ใชในการพิสูจนตัวจริงของเจาของลายมือชื่อได
2. ลายมือชื่อไมสามารถปลอมแปลงได ทําใหลายมือชื่อสามารถนํามาใชเปนหลักฐานทีแ่ สดงวา ผู
ที่เซ็นชื่อลงในเอกสารนั้นเปนเจาของลายมือชื่อจริงๆ ไมใชคนอื่น
3. ลายมือชื่อที่เซ็นไปแลวไมสามารถนํามาใชไดอีก เนื่องจากลายมือชื่อทีไ่ ดเซ็นลงไปในเอกสาร
หนึ่งๆ แลว ถือเปนสวนหนึง่ ของเอกสารนั้น ซึ่งคนทั่วไปจะไมสามารถเคลื่อนยายลายมือชื่อ
ดังกลาวไปไวในเอกสารอื่นได
4. ลายมือชื่อที่มีการเซ็นชื่อกํากับไปแลวไมสามารถเปลี่ยนแปลงได
5. ลายมือชื่อที่เซ็นไปแลวจะไมสามารถปฏิเสธความรับผิดชอบได เนื่องจากเอกสารและลายมือ
ชื่อประกอบกันถือเปนหลักฐานที่พิสูจนทราบได ทําใหเจาของลายมือชื่อที่ปรากฏอยูบน
เอกสาร ไมสามารถปฏิเสธในภายหลังได วาตนเองไมไดเปนคนเซ็น
อยางไรก็ตามในความเปนจริง ความเชื่อที่กลาวถึงขางตนไมมีขอใดเปนจริง เนื่องจากลายมือชื่อ
สามารถทําปลอมแปลงขึ้นมาได สามารถเคลื่อนยายจากที่หนึ่งไปยังอีกที่หนึ่งก็ได นอกจากนี้ เอกสารที่มี
การเซ็นชื่อกํากับไปแลวก็ยังสามารถทําการเปลี่ยนแปลงแกไขไดอีก แตถึงกระนั้น ลายมือชื่อที่เซ็นโดย
บุคคลจริงๆ ก็ยังไดรับความนิยม เชื่อถือ และเปนที่ยอมรับกันอยางกวางขวาง ซึ่งสาเหตุที่เปนเชนนั้นอาจ
เปนเพราะ คนทั่วไปยังคงเชือ่ วาการปลอมแปลงลายมือชื่อทําไดอยางยากลําบาก
ในโลกของการสื่อสารขอมูลในปจจุบนั ไดมีความพยายามที่จะนําเอาลายมือชื่อมาใชในการทําธุรก
รรมใดๆ ในรูปแบบของขอมูลดิจิทัล ซึ่งถานําลายมือชื่อมาประยุกตใชตรงๆ จะเกิดปญหาตามมาอยาง
มากมาย ยกตัวอยางเชน ขอมูลในรูปของเลขฐานสองที่ใชในระบบคอมพิวเตอร สามารถทําซ้ําขึ้นใหมได
อยางงายดาย คนบางคนอาจใชวิธีตัดปะ (Cut & Paste) ลายมือชื่อที่เก็บอยูในรูปแบบของภาพกราฟกจาก
เอกสารหนึ่งไปยังอีกเอกสารหนึ่ง โดยไมมีความผิดเพีย้ นใดๆ เลย นอกจากนี้ขอมูลในรูปแบบดิจิทลั ยัง
สามารถทําการเปลี่ยนแปลงแกไขได หลังจากที่มีการเซ็นชื่อไปแลวโดยไมทิ้งรองรอยจากการเปลี่ยนแปลง
แกไขใดๆ ไวเลย ดวยเหตุนี้ จึงมีการคิดคนพัฒนาวิธีการสรางลายมือชื่อที่เปนระบบและมีความเชือ่ ถือได
เพื่อใชในการเซ็นเอกสารที่อยูในรูปของขอมูลดิจิทัลขึ้น ซึ่งเรียกในชื่อทั่วๆ ไปวา ลายมือชื่อดิจิทัล (Digital

125
Signatures) โดยปกติหนาที่ของลายมือชื่อดิจิทัลจะครอบคลุมหนาที่การทํางานของลายมือชื่อแบบปกติที่
ใชงานกันอยูทวั่ ไป ซึ่งสามารถสรุปไดดังนี้
1. พิสูจนตัวจริง (Authentication) ผูที่ทําการสงขอมูล - ผูที่รับขอมูลจะตองมั่นใจไดวา ผูที่สง
ขอมูลใหนั้น คือคนที่ตนตองการติดตอดวยอยางแทจริง ไมใชคนหนึ่งคนใดทีแ่ กลงปลอม
แปลงตนเองเพื่อจะสงขอมูลมาให
2. รักษาบูรณภาพ (Integrity) หรือความถูกตองของขอมูล - ขอมูลที่สงมายังผูรับจะตองไมมีการ
เปลี่ยนแปลงแกไขใดๆ ไมวาจะเกิดขึ้นโดยตั้งใจหรือไม กลาวอีกนัยหนึ่งก็คือ ขอมูลที่ผูรับ
ไดรับมาจะตองเหมือนกันกับขอมูลที่ผูสงไดสงมาทุกประการ
3. ปองกันการบอกปดหรือบอกปฏิเสธ (Non-repudiation) - ผูรับขอมูลจะตองสามารถพิสูจนได
วา ขอมูลที่ไดรับมานั้นไดสง มาจากผูสงที่อางไวจริงๆ โดยที่ผูสงขอมูลจะไมสามารถบอกปด
หรือบอกปฏิเสธขอมูลที่ตนเองเคยสงออกไปได
ใหสังเกตวา หนาที่ทั้งสามของลายมือชื่อดิจิทัลจะครอบคลุมไปถึงความเชื่อขางตนทัง้ 5 ซึ่งเปน
สาเหตุที่ทําใหการใชลายมือชื่อเปนที่เชื่อถือและยอมรับจากคนทั่วไป ขั้นตอนการใชงานลายมือชื่อดิจิทัลจะ
แบงเปน 2 สวนคือ
1. ขั้นตอนการเซ็น (Signing) เอกสาร หรือการสรางลายมือชื่อดิจิทัล และ
2. ขั้นตอนการพิสูจนยืนยัน (Verifying) เอกสารที่เซ็น หรือการพิสูจนยนื ยันลายมือชือ่ ดิจิทัล

โดยทั่วไปเราสามารถนําอัลกอริทึมกุญแจสาธารณะมาใชในการสรางลายมือชื่อดิจทิ ัลได โดยการ


นํากุญแจสวนตัวมาใชในการเขารหัสลับขอความตนฉบับ ซึ่งเปรียบเสมือนการทํางานในขั้นตอนการเซ็น
เอกสาร และนํากุญแจสาธารณะมาใชในการถอดรหัสลับขอความรหัส ซึ่งเปรียบเสมือนการทํางานใน
ขั้นตอนการพิสูจนยืนยันเอกสารที่เซ็น

10.2.1 การนําอัลกอริทึม RSA มาใชในการสรางลายมือชือ่ ดิจิทัล


เราสามารถนําอัลกอริทึม RSA มาประยุกตใชในการสรางลายมือชื่อดิจิทัลไดโดยตรง กลาวคือ เมือ่
ทําการคํานวณหาคากุญแจสาธารณะ {e, n} และกุญแจสวนตัว {d, n} ตามวิธีปกติแลว การเซ็นขอความ
ตนฉบับ M ใดๆ จะทําไดโดยดําเนินการตามสมการดังตอไปนี้

ลายมือชื่อดิจทิ ัล = Md mod n (10.2)

126
จากนั้น จะสงขอความตนฉบับ M และลายมือชื่อดิจิทัล (Md mod n) ไปยังผูรับ ทางฝงผูรับก็จะทํา
การพิสูจนยนื ยันขอความตนฉบับที่เซ็นมา โดยการพิสูจนวาสมการตอไปนี้เปนจริงหรือไม

M = Mde mod n (10.3)

ถาเปนจริง แสดงวาขอความตนฉบับที่รับมานี้เปนของจริง ไมมีการเปลี่ยนแปลงแกไขใดๆ เกิดขึ้น


รูปที่ 10.4 แสดงการนําอัลกอริทึม RSA มาประยุกตการใชในการสรางลายมือชื่อดิจทิ ัล

รูปที่ 10.4 การประยุกตใชอัลกอริทึม RSA เพื่อสรางลายมือชื่อดิจิทัล

เนื่องจากกระบวนการเขาและถอดรหัสลับของอัลกอริทึมกุญแจสาธารณะมีความซับซอนสูงและใช
เวลาประมวลผลชามาก ถาขอความตนฉบับที่ตองการเซ็นมีขนาดใหญ จะทําใหขั้นตอนในการเซ็นเอกสาร
หรือขั้นตอนการสรางลายมือชื่อดิจิทัลใชเวลานาน ซึ่งทําใหเกิดความไมสะดวกในการนําไปใชงานจริง
ในทางปฏิบัติ แนวทางแกปญ  หาหนึ่งที่นยิ มนํามาใชกนั โดยทัว่ ไปคือ แทนที่จะสรางลายมือชื่อดิจทิ ัลจากตัว
ขอความตนฉบับโดยตรง ก็เปลี่ยนมาสรางลายมือชื่อดิจทิ ัลจากขอความยอยหรือคาแฮชของขอความ
ตนฉบับแทน ดูรูปที่ 10.5 ประกอบ ซึ่งเขียนในรูปของสมการไดดังนี้

ลายมือชื่อดิจทิ ัล = E K private (H (M ) ) (10.4)

รูปที่ 10.5 การสรางลายมือชื่อดิจิทัลจากคาแฮช

127
ใหสังเกตวา ถาคาแฮชที่ใชสรางลายมือชื่อดิจิทัลไดมาจากฟงกชันแฮชทางเดียว วิธีการแกปญหา
แบบนี้จะไมสง ผลกระทบใดๆ กับคุณสมบัติของลายมือชื่อดิจิทัลดังที่กลาวไวขางตน ในสวนของการพิสูจน
ยืนยันลายมือชื่อดิจิทัล ทางฝงผูรับเมื่อไดรับขอความตนฉบับ M และ E K (H (M ) ) แลว จะทําการพิสูจน
private

ยืนยันคาแฮชที่ถูกเซ็น โดยการเปรียบเทียบวาสมการดังตอไปนี้เปนจริงหรือไม ดูรูปที่ 10.6 ประกอบ

H (M ) = D K public E K private (H (M ) ) (10.5)

รูปที่ 10.6 การพิสูจนยนื ยันคาแฮชที่ถูกเซ็น

10.2.2 การนําอัลกอริทึม El Gamal มาใชในการสรางลายมือชื่อดิจิทัล


เราสามารถนําอัลกอริทึม El Gamal มาใชในการสรางลายมือชื่อดิจิทัลไดเชนเดียวกัน แตจะมีความ
แตกตางไปจากอัลกอริทึม RSA ซึ่งขั้นตอนการสรางลายมือชื่อดิจิทัลโดยใชอัลกอริทึม El Gamal สามารถ
แสดงไดดังนี้
1. เริ่มตน นายดําจะเลือกตัวเลขจํานวนเฉพาะคามากๆ p มาหนึ่งคา และเลือกตัวเลขสุมใดๆ g
และ x ที่มีคานอยกวา p จากนั้นทําการคํานวณ

y = gx mod p (10.6)

ตัวเลข y, g และ p จะใชเปนกุญแจสาธารณะ ตัวเลข x จะใชเปนกุญแจสวนตัว


2. ในขั้นตอนการเซ็นเอกสารหรือขอความตนฉบับ M นายดําตองเลือกตัวเลขสุม k ที่เปนจํานวน
เฉพาะสัมพันธกับ p-1 แลวทําการคํานวณ

a = gk mod p (10.7)

128
และใชอัลกอริทึมยุคลิคแบบขยายทําการคํานวณหาคา b ในสมการตอไปนี้

M = (xa + kb) mod (p-1) (10.8)


ลายมือชื่อดิจทิ ัลที่ไดจากการเซ็นขอความตนฉบับ M คือ ตัวเลข a และ b ขณะที่ตัวเลข k จะ
เก็บรักษาเปนความลับ
3. ในขั้นตอนการพิสูจนยืนยันขอความตนฉบับที่เซ็น เมื่อนายแดงไดรับขอความตนฉบับ M และ
ลายมือชื่อดิจทิ ัล {a, b} มาแลว นายแดงตองพิสูจนสมการตอไปนี้วา เปนจริงหรือไม

yaab mod p = gM mod p (10.9)

ถาเปนจริง แสดงวาขอความตนฉบับนี้เปนของนายดําจริงๆ ถาไมเปนจริง อาจเปนไปไดวา นาย


ดําไมไดเปนคนเซ็นขอความตนฉบับ หรือขอความตนฉบับที่สงมามีการเปลี่ยนแปลงแกไข
เกิดขึ้นระหวางทาง
ในการนําไปใชงาน คา k จะถูกเลือกแบบสุมขึ้นมาใหมทุกครั้งที่มีการเซ็นขอความตนฉบับ
ขอความใหม ถานายขาวรูคา k ที่ใช นายขาวก็จะสามารถคํานวณหากุญแจสวนตัว x ของนายดําได และถา
นายขาวแอบดักฟงขอความตนฉบับที่ถูกเซ็นมาแลวสองฉบับโดยใชคา k ตัวเดียวกัน ถึงแมนายขาวจะไมรู
วาคา k คืออะไร นายขาวก็ยงั สามารถคํานวณหากุญแจสวนตัว x ของนายดําได

ตัวอยางที่ 10.1 กําหนดให p = 11, g = 2 จงแสดงขั้นตอนการสรางกุญแจสาธารณะและกุญแจสวนตัว


โดยใชอัลกอริทึม El Gamal สมมุติใหขอความตนฉบับทีจ่ ะทําการเซ็นมีคาเทากับ 5 ให
แสดงขั้นตอนการเซ็นขอความตนฉบับ และขั้นตอนการพิสูจนยนื ยันขอความตนฉบับที่
เซ็นดวย

วิธีทํา เริ่มตนเราจะเลือกตัวเลขสุม x ที่มีคานอยกวา p ในที่นี้ เราเลือกคา x = 8 จากนั้นทําการ


คํานวณหา
y = gx mod p
= 28 mod 11
= ((24mod 11) . (24mod 11)) mod 11
= (5 . 5) mod 11
= 3

129
เพราะฉะนั้นกุญแจสาธารณะคือ {p = 11, g = 2, y = 3} และกุญแจสวนตัวก็คือ {x = 8}
ในการเซ็นขอความตนฉบับ M = 5 เราจะเลือกตัวเลขสุม k ที่เปนจํานวนเฉพาะสัมพันธกับ
p-1 ในที่นี้เราเลือกคา k = 9 (พิจารณาจาก 10 = 2 × 5) แลวทําการคํานวณหาลายมือชื่อดิ
จิทัล a และ b ดังตอไปนี้

a = gk mod p
= 29 mod 11
= ((24 mod 11) . (24 mod 11)) . 2 mod 11
= (5 . 5 . 2) mod 11
= 6
จากนั้นใชอัลกอริทึมยุคลิคแบบขยายเพื่อคํานวณหาคา b ดังนี้

M = (xa + kb) mod (p-1)


5 = (8.6 + 9b) mod 10

คําตอบที่ไดคือ b = 3 ดังนั้นลายมือชื่อดิจทิ ัลคือ {a = 6, b = 3}


ในการพิสูจนยืนยันขอความตนฉบับที่เซ็น เมื่อเราไดรบั ขอความตนฉบับ M = 5 และ
ลายมือชื่อดิจทิ ัล {a = 6, b = 3} มาแลว เราจะทําการพิสูจนวา สมการตอไปนี้เปนจริง
หรือไม
yaab mod p = gM mod p
6 3
3 6 mod 11 = 25 mod 11
3 3 2
((3 mod 11).(3 mod 11).(6 mod 11).6) mod 11 = ((24 mod 11) . 2) mod 11
(((5.5) mod 11) . ((3.6) mod 11)) mod 11 = (5.2) mod 11
(3.7) mod 11 = 10 mod 11
10 = 10
ดังนั้นขอความตนฉบับที่ไดมาเปนของจริง ไมไดถูกเปลีย่ นแปลงแกไขใดๆ

130
10.2.3 การเซ็นเอกสารพรอมตราเวลา
ในบางสถานการณ เอกสารที่ถูกเซ็นไปแลวพรอมลายมือชื่อดิจิทัล อาจถูกนํามาใชในการฉอโกงได
ดังเชนตัวอยางของการเซ็นเช็คดิจิทัล กลาวคือ ในกรณีทนี่ ายดําใหนายแดงนําเช็คดิจทิ ัลที่ตนเองไดเซ็นไว
แลวไปเบิกเงินที่ธนาคาร เมื่อธนาคารทําการพิสูจนยืนยันลายมือชื่อดิจิทัลแลวพบวาเช็คดิจิทัลเปนของจริง
ธนาคารก็จะเบิกเงินใหกับนายแดงไป นายขาวผูเปนเจาหนาที่คนหนึง่ ของธนาคารไดแอบบันทึกหรือ
คัดลอกเช็คดิจทิ ัลพรอมลายมือชื่อดิจิทัลฉบับนั้นเอาไว ในอีก 2 วันตอมา นายขาวนําเช็คดิจิทัลฉบับดังกลาว
มาขึ้นเงินใหม ธนาคารก็ทําการพิสูจนยนื ยันลายมือชื่อดิจิทัลเทียบกับเช็คดิจิทัลนัน้ อีกครั้ง ซึ่งผลปรากฏ
ออกมาวาเช็คดิจิทัลเปนของจริง ธนาคารก็จะเบิกเงินใหกับนายขาวไป นายขาวสามารถทําเชนนี้ไปเรื่อยๆ
โดยที่นายดําไมสงสัยใดๆ จนกวานายดําจะทําการตรวจสอบบัญชีธนาคารของตนเอง
เพื่อปองกันปญหาขางตน การเซ็นเอกสารโดยวิธีการสรางลายมือชื่อดิจิทัลจะรวมขัน้ ตอนการ
ประทับตราเวลา (Time Stamping) ลงไปดวย ตราเวลาที่ประทับจะประกอบดวย วัน เดือน ป และเวลา ณ
ขณะที่ทําการเซ็นเอกสาร ซึ่งจะถูกแนบติดไปกับตัวเอกสาร กอนที่จะทําการเซ็นเอกสารและตราเวลาไป
พรอมๆ กันทั้งหมด ดูรูปที่ 10.7 ประกอบ ในกรณีนี้ธนาคารจะทําการเก็บตราเวลาของเอกสารนั้นๆ ลงใน
ฐานขอมูล ถานายขาวนําเช็คดิจิทัลที่เคยขึน้ เงินไปแลวมาขึ้นเงินอีก ธนาคารจะทําการตรวจสอบตราเวลาที่
อยูในเช็คดิจิทลั ฉบับนั้นเทียบกับตราเวลาที่เก็บอยูใ นฐานขอมูล เนื่องจากธนาคารเคยจายเงินสําหรับเช็คดิ
จิทัลฉบับนั้นไปแลว ธนาคารสามารถตรวจสอบไดอยางงายดายวานายขาวกําลังทําการฉอโกงอยู

รูปที่ 10.7 การเซ็นเอกสารพรอมตราเวลา

131
10.3 คําถามทายบท
1. จงอธิบายความแตกตางระหวางรหัสพิสูจนตัวจริงของขอความและฟงกชันแฮชทางเดียว นักศึกษาคิดวา
อัลกอริทึมใดมีประโยชนมากกวากัน เพราะเหตุใด
2. จงใหคําจํากัดความพรอมหนาที่การทํางานของลายมือชื่อดิจิทัล
3. นักศึกษาคิดวาอัลกอริทึมสมมาตรสามารถนํามาใชสรางลายมือชื่อดิจทิ ัลไดหรือไม เพราะเหตุใด จง
อธิบายถึงเหตุผลที่ตอบมาพอสังเขป
4. จงบรรยายถึงประโยชนของการนําตราเวลามาประยุกตใชรวมกับลายมือชื่อดิจิทัล พรอมยกตัวอยาง
ประกอบคําบรรยาย

132
บทที่ 11
เทคนิคทางวิทยาการรหัสลับ

11.1 การเลือกใชงานตัวแปลงรหัส
เปนที่รูกันดีแลววา ตัวแปลงรหัสที่นํามาใชงานทางดานวิทยาการรหัสลับสามารถแบงยอยออกเปน
2 ชนิด คือ ตัวแปลงรหัสแบบกระแส และตัวแปลงรหัสแบบกลุม ในการเขารหัสลับแตละครั้ง ตัวแปลงรหัส
แบบกระแสจะมีการดําเนินการแบบบิตตอบิต (Bit-by-bit) หรือแบบไบตตอไบต (Byte-by-byte) ระหวาง
กระแสบิตที่มาจากตัวสรางกระแสบิต (Bit-stream Generator) และกระแสบิตที่มาจากขอความตนฉบับ
เพื่อที่จะสรางกระแสบิตขอความรหัสขึ้นมา ขณะที่ตวั แปลงรหัสแบบกลุมจะมีการดําเนินการแบบกลุมบิต
(Block of Bits) กับขอความตนฉบับ เพื่อสรางกลุมบิตขอความรหัสขึ้นมา ซึ่งโดยทั่วไปกลุมบิตที่ใชจะมี
ขนาด 64 หรือ 128 บิต จากลักษณะการเขาและถอดรหัสลับขอมูลที่แตกตางกันของตัวแปลงรหัสทัง้ 2 ชนิด
ทําใหตวั แปลงรหัสทั้งสองมีความเหมาะสมตอการนําไปใชงานที่แตกตางกัน กลาวคือ ตัวแปลงรหัสแบบ
กระแสจะมีความเหมาะสมกับการใชงานทีม่ ีการแปลงขอมูลเปนแบบแปรผันกับเวลา (Time-varying
Transformation) โดยขอมูลที่จะทําการแปลงนั้นควรมีลักษณะที่เปนเลขโดด (Digits) ที่เปนอิสระตอกัน
ยกตัวอยางเชน ในการสื่อสารเชิงปฏิสัมพันธ (Interactive) แบบเวลาจริงระหวางคนสองคนหนาเครื่อง
คอมพิวเตอรทอี่ ยูตางสถานที่กัน แตละครั้งที่มีการพิมพตวั อักษรหนาเครื่องคอมพิวเตอรจากสถานที่หนึ่ง
ขอมูลดิจิทัลของตัวอักษรนัน้ ๆ จะสงผานเครือขายสื่อสารไปแสดงยังหนาจอแสดงผลของเครื่อง
คอมพิวเตอรทตี่ ั้งอยูอีกสถานที่หนึ่งในเวลาที่ใกลเคียงกัน ขอมูลในลักษณะนี้จะเหมาะกับการเขารหัสลับ
แบบกระแส ในขณะทีต่ ัวแปลงรหัสแบบกลุมจะมีความเหมาะสมกับการใชงานที่มีการแปลงขอมูลเปนกลุม
ใหญๆ โดยแตละกลุมขอมูลที่จะทําการแปลงมักจะมีขนาดคงที่ ยกตัวอยางเชน การเขารหัสลับไฟลขอมูลดิ
จิทัลที่เก็บอยูใ นเครื่องคอมพิวเตอร เปนตน
จากที่กลาวมาขางตน จะเห็นไดวาตัวแปลงรหัสแบบกระแสเหมาะทีจ่ ะนําไปประยุกตใชงานในรูป
ของฮารดแวร เนื่องจากการประมวลผลแบบบิตตอบิตที่ดําเนินการอยูในรูปของชิฟ (Chip) จะมี
ประสิทธิภาพสูงมากๆ นอกจากนี้อุปกรณเขาและถอดรหัสลับในระบบสื่อสารมักจะอยูในรูปฮารดแวรเปน
หลัก สงผลใหการเขารหัสลับแบบกระแสมีความเหมาะสมกับการใชงานในลักษณะที่วา เราสามารถเขารหัส
ลับบิตขอมูลไดทันที แลวสงออกไปยังผูรับโดยไมตองรอใหบิตขอมูลมารวมกันเปนกลุมขนาด 64 บิตกอน
ใหสังเกตวาถึงแมเราจะใชวธิ ีการเสริมเต็ม (Padding) มาชวยทําใหกลุม บิตที่จะทําการเขารหัสลับมีขนาด
ครบ 64 บิต แตการทําเชนนัน้ ก็จะเปนการลดประสิทธิภาพของการเขารหัสลับทั้งระบบ ยกตัวอยางเชน ถา
เราตองการเขารหัสลับตัวอักษรขนาด 8 บิต 1 ตัวอักษรโดยใชกลุมบิตขนาด 64 บิต เราจําเปนตองเพิม่ บิต

133
เสริมเต็มเขาไปอีก 56 บิต ทําใหประสิทธิภาพในการเขารหัสลับกลุมบิตนั้นๆ มีเพียง (8/56) × 100 =
14.29% เทานัน้
ในทางกลับกัน ตัวแปลงรหัสแบบกลุมจะมีความเหมาะสมกวาตัวแปลงรหัสแบบกระแส ในดาน
การประยุกตใชงานในรูปของซอฟตแวร ทัง้ นี้ก็เพื่อทีจ่ ะหลีกเลี่ยงการดําเนินการทีก่ ระทําตอบิตขอมูลทีละ
บิต ซึ่งคอนขางจะเสียเวลา นอกจากนีก้ ารนําอุปกรณเขารหัสลับในรูปของซอฟตแวรมาใชเขารหัสสลับ
ขอมูลทีละบิต ยังถือเปนการทํางานที่ไมมปี ระสิทธิภาพอีกดวย ดังตัวอยางที่แสดงไปขางตน จะเห็นไดวา
อุปกรณเขารหัสลับในรูปของฮารดแวรจะไมมีปญหาใดๆ เมื่อนํามาใชเขารหัสลับขอมูลที่มีลักษณะเปนกลุม
บิต ฉะนั้นเราอาจสรุปไดวา ในกรณีของการนําตัวแปลงรหัสไปใชกับอุปกรณเขารหัสลับที่อยูในรูปของ
ฮารดแวร ตัวแปลงรหัสแบบกระแสจะมีความเหมาะสมมากกวา แตถาจะนําตัวแปลงรหัสไปใชกับอุปกรณ
เขารหัสลับที่อยูในรูปของซอฟตแวร การเลือกใชตัวแปลงรหัสที่เหมาะสมจะขึ้นอยูก ับลักษณะของการ
นําไปใชงานเปนหลัก อยางไรก็ตาม ในการนําไปใชงานจริงในทางปฏิบัติ เราสามารถดัดแปร (Modify) ตัว
แปลงรหัสแบบกระแส เพื่อนํามาใชงานแทนตัวแปลงรหัสแบบกลุมได ในทํานองเดียวกัน เราก็สามารถดัด
แปรตัวแปลงรหัสแบบกลุม เพื่อนํามาใชงานแทนตัวแปลงรหัสแบบกระแสไดเชนกัน ในโลกของความเปน
จริง ตัวแปลงรหัสแบบกลุมดูเหมือนจะไดรับความนิยมในการนําไปประยุกตใชงานจากคนทั่วไปมากกวา
สาเหตุที่เปนเชนนั้นอาจเปนเพราะ การสรางอุปกรณการเขารหัสลับที่อยูในรูปแบบของซอฟทแวร มีความ
สะดวกกวา มีราคาถูกกวา และมีความซับซอนนอยกวาการสรางอุปกรณเขารหัสลับที่อยูในรูปของฮารดแวร
นอกจากนี้การนําตัวแปลงรหัสไปใชงานมักจะอยูในรูปของการเขารหัสลับไฟลขอมูลเปนสวนใหญ

11.2 โหมดการทํางานทางวิทยาการรหัสลับ
ในการทํางานของตัวแปลงรหัสแบบกลุม ขนาดของขอความตนฉบับโดยปกติจะมีขนาดใหญกวา
ขนาดของกลุม บิตที่จะใชในการเขารหัสลับ ดังนั้นเราจําเปนตองแบงขอความตนฉบับออกเปนกลุมบิต
หลายๆ กลุมบิตที่มีขนาดเทากันตามลําดับ โดยกลุมบิตกลุมสุดทายที่มักจะมีขนาดเล็กกวาขนาดที่กาํ หนด จะ
ถูกเพิ่มบิตเสริมเต็มเขาไป เพื่อทําใหกลุมบิตนั้นๆ มีขนาดเทากับกลุมบิตอื่นๆ จากนัน้ จึงทําการเขารหัสลับ
กลุมบิตแตละกลุมตามลําดับโดยใชกุญแจตัวเดียวกัน ในขั้นตอนนีจ้ ะมีการประยุกตใช โหมดการทํางานทาง
วิทยาการรหัสลับ (Cryptographic Modes) ซึ่งโดยทั่วไปโหมดการทํางานทางดานวิทยาการรหัสลับจะ
ประกอบไปดวย ตัวแปลงรหัส กลไกการปอนกลับ (Feedback) และตัวดําเนินการแบบงายๆ บางชนิด การ
ที่เราสามารถเลือกใชตัวดําเนินการแบบงายๆ ได เนื่องมาจากเหตุผลที่วา ความปลอดภัยของระบบจะขึ้นอยู
กับความแข็งแกรงหรือความทนทานตอการโจมตีของตัวแปลงรหัสเปนหลัก ไมใชโหมดการทํางานที่ใช
นอกจากนี้ โหมดการทํางานทางดานวิทยาการรหัสลับที่นํามาใช ตองไมทําใหความปลอดภัยของตัวแปลง
รหัสที่ใชในระบบ หรือความปลอดภัยของทั้งระบบเกิดจุดออน

134
ในปจจุบนั โหมดการทํางานทางดานวิทยาการรหัสลับสามารถแบงออกเปน 4 โหมดหลักๆ ซึ่งจะ
ครอบคลุมการนําไปประยุกตใชงานทางปฏิบัติแทบทั้งหมด โหมดการทํางานในแบบอืน่ ๆ ที่เหลือนัน้ สวน
ใหญมักจะมีการปรับปรุงหรือดัดแปรมาจากโหมดการทํางานหลักทั้ง 4 ขางตน เพื่อใหมีความเหมาะสมตอ
การนําไปใชงานที่เฉพาะเจาะจง โดยทั่วไปเราจะเรียกชือ่ โหมดการทํางานทางดานวิทยาการรหัสลับโดยใช
ชื่อยอ ที่มาจากตัวอักษรแรกของคําแตละคํา ซึ่งโหมดการทํางานทั้ง 4 ที่กลาวถึงขางตนคือ
• โหมด ECB (Electronic Code Book)
• โหมด CBC (Cipher Block Chaining)
• โหมด CFB (Cipher FeedBack)
• โหมด OFB (Output FeedBack)
ซึ่งแตละโหมดการทํางานจะมีจุดเดนจุดดอยที่แตกตางกันออกไป การเลือกใชโหมดการทํางานให
เหมาะสมนัน้ จึงขึ้นอยูกับลักษณะของการนําไปใชงานเปนหลัก ยกตัวอยางเชน เพื่อใชในการสงขอความ
ตนฉบับผานชองทางสื่อสารที่มีสัญญาณรบกวนสูง หรือ เพื่อใชในการถอดรหัสลับไฟลขอมูลเพียงบางสวน
เปนตน รายละเอียดของโหมดการทํางานทัง้ 4 สามารถสรุปไดโดยยอดังนี้

11.2.1 การทํางานในโหมด ECB (Electronic Code Book)


ในโหมด ECB จะเปนการเขารหัสลับแตละกลุมบิตของขอความตนฉบับทีละกลุมบิต อยางเปน
อิสระตอกัน ดูรูปที่ 11.1 ประกอบ

รูปที่ 11.1 การทํางานในโหมด ECB

การทํางานในลักษณะนี้จะทําใหการเขาถึง (Access) สวนใดสวนหนึ่งของไฟลขอมูลที่ผานการ


เขารหัสลับมาแลวสามารถทําไดเสมือนกับการเขาถึงขอมูลแบบสุม กลาวอีกนัยหนึ่งก็คือ ในการเขาถึงสวน
ใดสวนหนึ่งของไฟลขอมูล เราไมจําเปนตองทําการถอดรหัสลับไฟลขอมูลนั้นๆ ทั้งหมดเสียกอน เรา
สามารถเลือกเฉพาะสวนที่ตอ งการของไฟลขอมูล มาทําการถอดรหัสลับโดยตรงได สาเหตุที่เรียกวิธีการ
เขาถึงแบบนี้วา การเขาถึงแบบสุม (Random Access) เนื่องมาจากระยะเวลาที่ใชในการเขาถึงไฟลขอมูลแต
ละสวนมีความแตกตางกันนอยมาก ไมวา ไฟลขอมูลนั้นจะมีขนาดเล็กหรือใหญ

135
ถาฐานขอมูลใดๆ มีการเขารหัสลับโดยใชโหมดการทํางานแบบ ECB เราจะสามารถเพิ่ม ลบ
เปลี่ยนแปลงแกไข ระเบียบ (Record) ใดๆ ที่อยูในรูปของขอมูลที่ถูกเขารหัสลับในฐานขอมูลนั้นไดโดย
อิสระ ไมจําเปนตองเกีย่ วของกับระเบียบอื่นๆ อยางไรก็ตาม จุดออนของโหมดการทํางานในลักษณะนี้ก็คือ
เราจะไมสามารถบอกไดวา สวนใดของขอความตนฉบับหรือขอความรหัสมีการสอดแทรก ลบออก หรือมี
การเปลี่ยนแปลงแกไข นอกจากนี้ ถากลุมบิตใดกลุมบิตหนึ่งของขอความรหัสมีความผิดพลาดเกิดขึ้นแม
เพียง 1 บิต (One Bit Error) จะสงผลใหผลลัพธจากการถอดรหัสลับกลุมบิตนั้นๆ ผิดพลาดไปทั้งกลุมบิต
ซึ่งความผิดพลาดที่เกิดขึ้นในลักษณะนีจ้ ะเรียกวา การขยายความผิดพลาด (Error Extension) ยกตัวอยาง
เชน ถากลุมบิตที่ใชในการเขาและถอดรหัสลับมีขนาด 64 บิต ความผิดพลาดเพียง 1 บิตที่เกิดขึ้นในกลุมบิต
ใดๆ ของขอความรหัส จะทําใหขอความตนฉบับทั้ง 64 บิตที่เปนผลลัพธจากการถอดรหัสลับกลุมบิตนั้นๆ
เกิดความผิดพลาดทั้งหมด ใหสังเกตวาการขยายความผิดพลาดจะจํากัดอยูเพียงภายในกลุมบิต 1 กลุมบิต
เทานั้น แตถาขอความรหัสเกิดมีบิตใดๆ สอดแทรกเขามา หรือถูกตัดออกไปแมเพียง 1 บิต กลุมบิตของ
ขอความตนฉบับผลลัพธที่มีบิตแทรกอยูห รือมีบิตถูกตัดออกไป รวมทัง้ กลุมบิตที่เหลือทั้งหมดที่อยูถัดจาก
กลุมบิตขอมูลนั้นๆ จะเกิดความผิดพลาดขึน้ ภายหลังจากการถอดรหัสลับ โดยทั่วไปเราเรียกการเกิดความ
ผิดพลาดในลักษณะนีว้ า การประสานเวลาผิดพลาด (Synchronization Error) โหมดการทํางานแบบ ECB
สามารถแสดงในรูปของสมการไดดังนี้

การเขารหัสลับ Ci = EK (Mi) (11.1)


การถอดรหัสลับ Mi = DK (Ci) (11.2)
โดยที่ i คือ เลขจํานวนเต็มใดๆ มีคา เทากับ 1, 2, 3, .....
Mi คือกลุมบิตของขอความตนฉบับที่อยูในลําดับ i
Ci คือกลุมบิตของขอความรหัสที่อยูในลําดับ i

11.2.2 การทํางานในโหมด CBC (Cipher Block Chaining)


ในโหมด CBC จะทําการออรเฉพาะกลุมบิตแตละกลุมบิตจากขอความตนฉบับกับกลุมบิตผลลัพธที่
ไดจากการเขารหัสลับกลุมบิตนําเขากอนหนานั้น จากนัน้ จะทําการเขารหัสลับกลุมบิตผลลัพธที่ไดจากการ
ออรเฉพาะ เรียกวา กลุมบิตนําเขา โดยใชตัวแปลงรหัสแบบกลุม ผลลัพธสุดทายที่ไดก็คือกลุมบิตขอความ
รหัส ซึ่งใชเปนกลุมบิตสงออกและเปนกลุม บิตที่จะนําไปออรเฉพาะกับกลุมบิตขอความตนฉบับทีจ่ ะทําการ
เขารหัสลับกลุมตอไป ดูรูปที่ 11.2 ประกอบ ใหสังเกตวา ผลลัพธจากการออรเฉพาะ และผลลัพธจากการ
เขารหัสลับ จะเก็บไวในเรจิสเตอร A และ B ขนาด n บิตตามลําดับ โดย n คือขนาดของกลุมบิตที่ตัวแปลง
รหัสใชในการเขาและถอดรหัสลับ ขั้นตอนการทํางานทีก่ ลาวมานี้จะดําเนินวนไปเรือ่ ยๆ จนถึงกลุม บิต
สุดทายของขอความตนฉบับ

136
รูปที่ 11.2 การทํางานในโหมด CBC

ในตอนเริ่มตนของการเขารหัสลับ เราจะสรางกลุมบิตขอมูลที่เลือกขึ้นมาแบบสุม เรียกวา เวกเตอร


เริ่มตน (Initialization Vector, IV) ขึ้นมากอน และจะใชกลุมบิตเหลานัน้ เพื่อทําการออรเฉพาะกับกลุมบิต
กลุมแรกสุดของขอความตนฉบับ ซึ่งคาเวกเตอรเริ่มตนที่ใชในการเขารหัสลับขอความตนฉบับแตละครั้ง ไม
จําเปนตองเก็บรักษาเปนความลับ แตจาํ เปนตองมีความแตกตางกัน เพือ่ ที่จะทําใหขอ ความรหัสผลลัพธที่ได
มีความแตกตางกัน ถึงแมจะเปนการเขารหัสลับขอความตนฉบับขอความเดียวกันทั้ง 2 ครั้ง การทํางานใน
ลักษณะนี้จะทําให รูปแบบของบิต (Bit Pattern) ที่ซ้ําๆ กันที่เกิดจากตัวอักษรหรือสัญลักษณที่เกิดขึ้นซ้ําๆ
กันภายในขอความตนฉบับ เชน ขอความที่อยูในสวนหัวของจดหมาย ไดรับการปกปดหรืออําพรางจากการ
เขารหัสลับ
การทํางานในโหมด CBC ถามีความผิดพลาดเพียง 1 บิตเกิดขึ้นในกลุมบิตใดๆ ของขอความรหัส
จะสงผลใหผลลัพธจากการถอดรหัสลับกลุมบิตนั้นๆ ผิดพลาดไปทั้งกลุมบิต รวมไปถึงบิตขอมูลใน
ตําแหนงเดียวกันกับบิตที่ผิดพลาดในกลุมบิตขอความตนฉบับผลลัพธกลุมถัดไป ยกตัวอยางเชน ในการสง
ขอความรหัสผานชองทางสื่อสารหนึ่งๆ ถามีบิตผิดพลาดเกิดขึน้ 1 บิตในตําแหนงที่ 9 ของกลุมบิตขอความ
รหัสกลุมที่ 3 ซึ่งมีขนาด 64 บิต เมื่อทําการถอดรหัสลับขอความรหัสดังกลาวแลว จะสงผลใหกลุมบิตกลุมที่
3 ของขอความตนฉบับผลลัพธที่ได เกิดความผิดพลาดขึน้ ทั้งหมด รวมไปถึงบิตขอมูลในตําแหนงที่ 9 ของ
กลุมบิตขอความตนฉบับผลลัพธกลุมที่ 4 ใหสังเกตวา ถึงแมการทํางานในโหมด CBC จะเปนการเชื่อมโยง
ระหวางกลุมบิตที่จะทําการเขารหัสลับกับกลุมบิตที่ผานการเขารหัสลับมาแลว ความผิดพลาดของบิตขอมูล
ที่เกิดขึ้นในขอความรหัส ก็จะไมทําใหขอความตนฉบับผลลัพธที่ไดจากการถอดรหัสลับในครั้งนั้นเกิด
ความผิดพลาดขึ้นทั้งหมด ซึ่งในระหวางการถอดรหัสลับนั้น ความผิดพลาดจะเกิดขึ้นเพียง 1 กลุมบิตบวก
กับอีก 1 บิตของขอมูลในกลุมบิตถัดไปเทานั้น หลังจากนั้นระบบจะทําการกูคืน (Recover) โดยอัตโนมัติ
เพื่อไมใหเกิดความผิดพลาดในการถอดรหัสลับกลุมบิตที่เหลือถัดไป ลักษณะการกูคนื ความผิดพลาดแบบ
อัตโนมัตินี้เรียกวา การกูคืนตัวเอง (Self-recovering) อยางไรก็ตาม ในกรณีที่เกิดการประสานเวลาผิดพลาด
ขึ้นที่ขอความรหัส กลุมบิตของขอความตนฉบับผลลัพธที่มีบิตแทรกอยูหรือมีบิตถูกตัดออกไป รวมทั้งกลุม

137
บิตที่เหลือทั้งหมดที่อยูถัดจากกลุมบิตขอมูลนั้นๆ จะเกิดความผิดพลาดขึ้นภายหลังจากการถอดรหัสลับ
โหมดการทํางานแบบ CBC สามารถแสดงในรูปของสมการไดดังนี้

การเขารหัสลับ Ci = EK (Mi ⊕ Ci-1) (11.3)


การถอดรหัสลับ Mi = Ci-1 ⊕ DK (Ci) (11.4)

11.2.3 การทํางานในโหมด CFB (Cipher FeedBack)


ในโหมด CFB กลุมบิตจากขอความตนฉบับที่จะทําการเขารหัสลับ อาจมีขนาดเล็กกวากลุมบิตที่ได
ทําการแบงไวในตอนแรกก็ได กลาวคือ อาจมีขนาดเล็กกวา n โดย n คือขนาดของกลุมบิตที่ตัวแปลงรหัส
ใชในการเขาและถอดรหัสลับ เพราะฉะนัน้ ในโหมดการทํางาน CFB เราสามารถเขารหัสลับขอความ
ตนฉบับทีละกลุมบิตที่มีขนาดเทาใดก็ได ยกตัวอยางเชน เราอาจทําการเขารหัสลับขอความตนฉบับโดยใช
โหมด CFB ขนาด 8 บิต รวมกับตัวแปลงรหัสแบบกลุมขนาด 64 บิต ซึ่งมีขั้นตอนการทํางานดังนี้
ในตอนเริ่มตนของการเขารหัสลับ เราจะเก็บคาเวกเตอรเริ่มตนในเรจิสเตอรแบบเลื่อน A ขนาด 64
บิต ดูรูปที่ 11.3 ประกอบ ซึ่งลักษณะของการนําคาเวกเตอรเริ่มตนมาใชเปนกลุมบิตกลุมแรกสุดทีจ่ ะทําการ
เขารหัสลับ จะเหมือนกับการทํางานในโหมด CBC ทุกประการ จากนั้นจึงทําการเขารหัสลับกลุมบิตที่เก็บ
อยูในเรจิสเตอรแบบเลื่อน A ตามปกติ ขอความรหัสผลลัพธที่ไดจะนํามาเก็บไวในเรจิสเตอรแบบเลื่อน B
ขนาด 64 บิต โดย 8 บิตแรกขวาสุดที่อยูในเรจิสเตอรแบบเลื่อน B จะนํามาออรเฉพาะกับ 8 บิตแรกของ
ขอความตนฉบับ เพื่อสรางขอความรหัสขนาด 8 บิตขึน้ มา ในการทํางานรอบตอไป ขอความรหัสขนาด 8
บิตนี้ จะถูกปอนกลับมาแทนที่ 8 บิตแรกขวาสุดของเรจิสเตอรแบบเลื่อน A โดยบิตขอมูลเดิมที่อยูในตัวเรจิ
สเตอรแบบเลื่อน A จะถูกเลือ่ นไปทางซายเปนจํานวน 8 บิต ใหสังเกตวา ขอมูลขนาด 8 บิตในตําแหนงซาย
สุดของเรจิสเตอรแบบเลื่อน A จะถูกตัดทิ้งไป จากนัน้ ก็จะทําการเขารหัสลับกลุมบิตชุดใหมทเี่ ก็บอยูใ นเรจิ
สเตอรแบบเลื่อน A ขั้นตอนการทํางานที่กลาวมานี้จะดําเนินวนไปเรื่อยๆ จนถึงกลุมบิตสุดทายของขอความ
ตนฉบับ

รูปที่ 11.3 การทํางานในโหมด CFB

138
เมื่อพิจารณาลักษณะของการทํางานในโหมด CFB จากตัวอยางขางตนอยางละเอียด ในเบื้องตนจะ
พบวา ความผิดพลาดของขอมูลขนาด 1 บิตที่เกิดขึ้นในขอความรหัส จะสงผลใหเกิดบิตผิดพลาดขนาด 1
บิตในขอความตนฉบับผลลัพธที่ไดจากการถอดรหัสลับในครั้งนั้น โดยตําแหนงของบิตผิดพลาดที่เกิดขึ้น
ในขอความตนฉบับผลลัพธจะตรงกับตําแหนงของบิตผิดพลาดที่เกิดขึน้ ในขอความรหัส หลังจากนัน้ บิตที่
ผิดพลาดนี้จะถูกปอนลงในเรจิสเตอรแบบเลื่อน A ซึ่งจะสงผลใหการถอดรหัสลับกลุมบิตขอความรหัสกลุม
ตอไปเกิดความผิดพลาดขึ้นทั้งหมด และความผิดพลาดที่เกิดขึ้นนี้ก็จะวนกลับไปยังเรจิสเตอรแบบเลื่อน A
อีก สงผลใหเกิดความผิดพลาดในกลุมบิตขอความตนฉบับผลลัพธตอเนื่องไปเรื่อยๆ ซึ่งความผิดพลาดที่
เกิดขึ้นทั้งหมดนี้ จะมีการกูค ืนตัวเองโดยอัตโนมัติ เมื่อบิตผิดพลาดที่เก็บอยูในตัวเรจิสเตอรแบบเลื่อน A ถูก
เลื่อนไปทางซายทีละ 8 บิตเรื่อยๆ จนหลุดออกไปจากตัวเรจิสเตอร หลังจากนั้นผลกระทบจากบิตทีผ่ ิดพลาด
จะหมดไป ใหสังเกตวา บิตผิดพลาดที่เกิดขึน้ ในขอความรหัสเพียง 1 บิตจะสงผลใหเกิดความผิดพลาดขึ้นที่
ขอความตนฉบับผลลัพธภายหลังการถอดรหัสลับเปนจํานวน 9 กลุมบิต โดยในกลุมบิตแรกจะเกิดบิต
ผิดพลาดเพียง 1 บิตในตําแหนงเดียวกันกับบิตผิดพลาดที่เกิดขึ้นในขอความรหัส ขณะที่อีก 8 กลุมบิตที่เหลือ
ตอมา จะเกิดความผิดพลาดทั้งหมด จากตัวอยางทีย่ กมา เมื่อใชตัวแปลงรหัสแบบกลุม ขนาด 64 บิตทํางานใน
โหมด CFB ขนาด 8 บิต บิตผิดพลาดขนาด 1 บิตที่เกิดขึน้ ในขอความรหัส จะสงผลใหเกิดบิตผิดพลาด
จํานวน 65 บิตภายในขอความตนฉบับผลลัพธ
สําหรับกรณีของการประสานเวลาผิดพลาด การทํางานในโหมด CFB จะทําการกูคืนตัวเองโดย
อัตโนมัติเชนเดียวกัน กลาวคือ เมื่อความผิดพลาดที่เกิดขึน้ ถูกปอนลงในเรจิสเตอรแบบเลื่อน A แลว จะทํา
ใหเกิดการขยายความผิดพลาดขึ้น จนกวาความผิดพลาดดังกลาวจะถูกเลือ่ นหลุดออกไปจากตัวเรจิสเตอรอีก
ดานหนึ่ง ยกตัวอยางเชน เมือ่ เกิดการประสานเวลาผิดพลาดขึ้นที่ขอความรหัส สมมุติใหขอความรหัสที่ฝง
ผูรับมีบิตสอดแทรกมา 1 บิตหรือมีบิตถูกตัดออกไป 1 บิต กลุมบิตของขอความตนฉบับผลลัพธภายหลังการ
ถอดรหัสลับจะเกิดความผิดพลาดขึ้นเปนจํานวน n/m กลุมบิต โดย m คือจํานวนบิตในเรจิสเตอรแบบเลื่อน
ที่นํามาออรเฉพาะกับขอความตนฉบับ โหมดการทํางานแบบ CFB สามารถแสดงในรูปของสมการไดดังนี้

การเขารหัสลับ Ci = Mi ⊕ EK (Ci-1) (11.5)


การถอดรหัสลับ Mi = Ci-1 ⊕ EK (Ci-1) (11.6)

139
11.2.4 การทํางานในโหมด OFB (Output FeedBack)
การนําตัวแปลงรหัสแบบกลุม มาทํางานในโหมด OFB ก็เปรียบเสมือนกับการเขารหัสลับโดยใชตัว
แปลงรหัสแบบกระแสที่มีการประสานเวลา (Synchronous Stream Cipher) กลาวคือ การทํางานของ
ตัวแปลงรหัสแบบกลุมในโหมดนี้ จะเปนการสรางกระแสบิต (Bit-stream) ทางวิทยาการรหัสลับขึ้นมาโดย
ไมมีความเกีย่ วของใดๆ กับขอความตนฉบับเลย ขั้นตอนการทํางานในโหมด OFB จะเหมือนกับโหมด
CFB ยกเวนเพียงแต m บิตแรกขวาสุดที่อยูในเรจิสเตอรแบบเลื่อน B จะถูกปอนกลับมาแทนที่ 8 บิตแรก
ขวาสุดของเรจิสเตอรแบบเลื่อน A โดยตรง กอนที่จะนําไปออรเฉพาะกับ 8 บิตแรกของขอความตนฉบับ
เพื่อสรางขอความรหัสขนาด 8 บิตขึ้นมา ขั้นตอนการทํางานในลักษณะนี้จะดําเนินวนไปเรื่อยๆ จนถึงกลุม
บิตสุดทายของขอความตนฉบับ ดูรูปที่ 11.4 ประกอบ ใหสังเกตวา ขัน้ ตอนการถอดรหัสลับจะดําเนินการ
เชนเดียวกันกับขั้นตอนการเขารหัสลับ เนื่องจากกลไกในการปอนกลับที่เกิดขึ้นนี้เปนอิสระจากขอความ
ตนฉบับและขอความรหัสที่สรางขึ้น บางครั้งจึงเรียกกลไกการปอนกลับแบบนี้วา การปอนกลับภายใน
(Internal Feedback)

รูปที่ 11.4 การทํางานในโหมด OFB

จากลักษณะการทํางานในโหมด OFB ที่กลาวมา จะเห็นไดวา ความผิดพลาดของขอมูลขนาด 1 บิต


ที่เกิดขึ้นในขอความรหัส จะสงผลใหเกิดความผิดพลาดขึน้ ที่ขอความตนฉบับผลลัพธเพียง 1 บิตเทานั้น โดย
ตําแหนงของบิตผิดพลาดที่เกิดขึ้นในขอความตนฉบับผลลัพธ จะตรงกับตําแหนงของบิตผิดพลาดที่เกิดขึน้
ในขอความรหัส คุณลักษณะเดนของโหมดการทํางานนี้ จะมีประโยชนอยางมากเมื่อนําไปประยุกตใชงาน
ในสภาพแวดลอมที่ไมตองการใหเกิดการขยายความผิดพลาดในขอความตนฉบับภายหลังจากการถอดรหัส
ลับ อยางไรก็ตามในกรณีของการประสานเวลาผิดพลาด ขอความตนฉบับที่ไดจากการถอดรหัสลับ ตั้งแต
ตําแหนงของบิตที่ถูกสอดแทรกเขาไปในขอความรหัส หรือตําแหนงของบิตที่ถูกตัดออกไปจากขอความ
รหัส จะเกิดความผิดพลาดขึน้ ทั้งหมด นอกจากนี้ถาบิตขอมูลหรือตําแหนงของบิตทีอ่ ยูในเรจิสเตอรแบบ
เลื่อนทางฝงผูรับมีความแตกตางจากคาหรือตําแหนงทีอ่ ยูในเรจิสเตอรแบบเลื่อนทางฝงผูสง ขอความ

140
ตนฉบับผลลัพธที่ไดจากการถอดรหัสลับในครั้งนั้น จะเกิดความผิดพลาดขึ้นทั้งหมดเชนเดียวกัน โหมดการ
ทํางานแบบ OFB สามารถแสดงในรูปของสมการไดดังนี้

การเขารหัสลับ Ci = Mi ⊕ Si , Si = EK (Ci-1) (11.7)


การถอดรหัสลับ Mi = Ci ⊕ Si , Si = EK (Ci-1) (11.8)
โดยที่ Si คือ สถานะ (State) ของ m บิตแรกขวาสุดในเรจิสเตอร
แบบเลื่อน B ที่อยูในลําดับ i

ขอดีอีกอยางหนึ่งของการทํางานในโหมด OFB ก็คือ การเตรียมกระแสบิตเพื่อใชในการเขาหรือ


ถอดรหัสลับสามารถทําไดแบบนอกสายหรือแบบไมเชื่อมตรง (Offline) กลาวคือ เราสามารถสรางกระแส
บิตเตรียมพรอมเอาไวสําหรับใชในการเขารหัสลับ ถึงแมจะยังไมมีขอความตนฉบับใดๆ อยูในมือ เพื่อที่วา
เมื่อใดก็ตามทีม่ ีขอความตนฉบับพรอมสําหรับการเขารหัสลับ เราสามารถนําขอความตนฉบับเหลานั้นมา
ออรเฉพาะกับกระแสบิตที่เตรียมไว เพื่อสรางขอความรหัสไดทันที ขั้นตอนการดําเนินการในลักษณะนี้จะมี
ความเร็วในการเขารหัสลับขอมูลสูงมาก เนื่องจากการดําเนินการออรเฉพาะมีความซับซอนนอยและใช
ความเร็วในการประมวลผลต่ํามาก เมื่อเทียบกับการเขารหัสลับขอความตนฉบับที่มีขนาดเทากันโดยใชตวั
แปลงรหัสแบบกลุม

11.2.5 จุดออนในการใชงานตัวแปลงรหัสแบบกลุม
จากลักษณะการทํางานของตัวแปลงรหัสแบบกลุมพบวา ถากลุมบิตที่ประกอบอยูใ นขอความ
ตนฉบับหลายๆ กลุมบิตมีรูปแบบที่เหมือนกัน เมื่อทําการเขารหัสลับกลุมบิตเหลานัน้ ดวยตัวแปลงรหัสแบบ
กลุมในโหมด ECB จะสงผลใหกลุมบิตขอความรหัสผลลัพธที่ไดมีรูปแบบที่เหมือนกันดวย ขอสังเกตนี้ไดมี
การนําเสนออยางเปนรูปธรรมโดย [SAMA97] ซึ่งไดพิสูจนใหเห็นวา การนําตัวแปลงรหัสแบบกลุมไป
ประยุกตใชงานอยางไมเหมาะสม โดยเฉพาะกับขอมูลสื่อผสมบางประเภท เชน ภาพกราฟก อาจสงผลให
ขอมูลขาวสารที่ซอนอยูภายในขอความรหัสนั้นๆ เกิดการรั่วไหลโดยไมไดตั้งใจก็ได เพื่อแสดงใหเห็น
จุดออนในการใชงานตัวแปลงรหัสแบบกลุม ที่ไมเหมาะสมดังที่กลาวมาขางตน เราไดสรางภาพกราฟก
“Test” ชนิด 2 โทนสี (Bi-tonal) หรือภาพขาวดําที่ไมซับซอนขึ้น จากนัน้ จึงทําการเขารหัสลับภาพกราฟก
ดังกลาวโดยใชอักอริทึม DES ในโหมด ECB ผลลัพธจากการเขารหัสลับไดแสดงไวดังรูปที่ 11.5

141
(ก) (ข)
รูปที่ 11.5 การเขารหัสลับภาพกราฟก “Test” โดยใชอัลกอริทึม DES ในโหมด ECB
(ก) ภาพตนฉบับ (ข) ภาพทีผ่ านการเขารหัสลับมาแลว

จากรูปที่แสดงจะเห็นวา เนื้อหาที่อยูภ ายในภาพกราฟก “Test” จะไมถูกปกปดหรือซอนเรนอยาง


สมบูรณ เนื่องจากคนทัว่ ๆ ไปสามารถมองเห็นและรับรูไดทันทีจากภาพที่ผานการเขารหัสลับมาแลววา
ภาพกราฟกดังกลาวมีขอมูลขาวสารอะไรอยูภายใน โดยไมจําเปนตองทําการถอดรหัสลับหรือทําการ
วิเคราะหรหัสลับใดๆ เลย ผลลัพธที่ไดนี้ในทางปฏิบัติถือเปนสิ่งที่ ยอมรับไมได (Unacceptable)
เพื่อปองกันไมใหจดุ ออนในลักษณะนี้เกิดขึ้น เราจําเปนตองหลีกเลี่ยงรูปแบบของบิตที่มีลักษณะ
เหมือนหรือใกลเคียงกัน และเกิดขึ้นซ้ําๆ กันอยางตอเนื่องภายในขอความตนฉบับ เพือ่ แสดงใหเห็นวา ถา
ภายในขอมูลหนึ่งๆ ไมมีรูปแบบของกลุมบิตที่เหมือนหรือใกลเคียงกันซ้ําๆ กันเปนจํานวนมาก ขอความ
รหัสที่ไดจากการเขารหัสลับขอมูลนั้นๆ จะไมเกิดการรั่วไหลของขอมูลขาวสารที่อยูภายใน เราไดทําการ
เขารหัสลับรูปภาพ “Lena” ชนิดโทนสีตอเนื่อง (Continuous Tone) แบบระดับเทา (Gray Scale) โดยใช
อักอริทึม DES ในโหมด ECB เชนเดียวกัน ผลลัพธที่ไดแสดงไวดังรูปที่ 11.6

(ก) (ข)
รูปที่ 11.6 การเขารหัสลับรูปภาพ “Lena” โดยใชอัลกอริทมึ DES ในโหมด ECB
(ก) รูปภาพตนฉบับ (ข) รูปภาพที่ผานการเขารหัสลับมาแลว

142
จากรูปเราสามารถสรุปไดวา ขอมูลขาวสารที่อยูภายในรูปภาพ “Lena” ไดถูกปกปดซอนเรนอยาง
สมบูรณ เพราะฉะนัน้ เมื่อตองการประยุกตใชงานตัวแปลงรหัสแบบกลุม เราจึงควรเพิ่มความระมัดระวังให
มากขึ้น ยกตัวอยางเชน เราควรจะพิจารณาอยารอบคอบถึงลักษณะของขอมูลที่จะทําการเขารหัสลับ โหมด
การทํางานที่ใช หรือลักษณะของการนําไปใชงาน เปนตน ในกรณีทมี่ ีความจําเปนตองเขารหัสลับ
ภาพกราฟก “Test” หรือขอมูลที่มีลักษณะเดียวกันโดยใชตัวแปลงรหัสแบบกลุม เราอาจใชวิธีการดังตอไปนี้
เพื่อแกไขหรือหลีกเลี่ยงรูปแบบของกลุมบิตที่เกิดขึ้นซ้ําๆ ภายในตัวขอมูลได
1. โดยการบีบอัดขอมูล (Data Compression) กอนทําการเขารหัสลับ เพื่อลดความซ้ําซอน
(Redundancy) ของรูปแบบของกลุมบิตที่มีอยูภายในตัวขอมูลใหนอยที่สุด ขอดีในการนํา
วิธีการบีบอัดขอมูลมาใชอีกอยางหนึ่งก็คือ จะชวยลดปริมาณของขอมูลที่จะทําการเขารหัสลับ
ซึ่งถือเปนการลดความซับซอนในแงของเวลาที่ใชในการเขารหัสลับ นอกจากนี้ ขนาดของ
ขอมูลที่เล็กลงยังชวยใหประหยัดแบนดวดิ ทที่ใชในการสื่อสาร และประหยัดพื้นที่ทใี่ ชในการ
จัดเก็บขอมูลไดอีกดวย
2. โดยการเปลี่ยนไปใชโหมดการทํางานแบบอื่นๆ เชน โหมด CBC เพือ่ ที่จะทําใหรปู แบบของ
กลุมบิตที่เกิดขึ้นซ้ําๆ กันภายในตัวขอมูลเกิดการเปลี่ยนแปลง โดยกลไกการปอนกลับที่เกิดขึ้น
ในโหมดการทํางานนั้นๆ กลาวคือ รูปแบบของกลุมบิตในขอความรหัส ณ เวลาปจจุบันจะ
เปลี่ยนแปลงไปตามรูปแบบของกลุมบิตผลลัพธที่ไดจากการเขารหัสลับขอความตนฉบับกอน
หนานัน้ รูปที่ 11.7 แสดงผลลัพธที่ไดจากการเขารหัสลับภาพกราฟก “Test” โดยใชอัลกอริทึม
DES ในโหมดการทํางานตางๆ

(ก) (ข)

(ค) (ง)
รูปที่ 11.7 (ก) ภาพตนฉบับ “Test” (ข) ภาพผลลัพธที่ไดจากการเขารหัสลับดวย DES ในโหมด CBC
(ค) โหมด CFB ขนาด 64 บิต (ง) โหมด OFB ขนาด 64 บิต

143
11.3 การเขารหัสลับในระบบสื่อสารขอมูล
โดยปกติเราจะใชวิธีการเขารหัสลับเพื่อปกปองขอมูลที่สงไปมาในระบบสื่อสารระหวางคนสองคน
หรือระหวางกลุมคน ในทางทฤษฎีการเขารหัสลับอาจกระทําไดในทุกๆ ระดับชั้น (Layer) ของแบบจําลอง
ระบบสื่อสารที่มีโครงสรางเปนแบบ การเชื่อมตอระหวางระบบเปด (Open Systems Interface, OSI)
หรือเรียกสั้นๆ วา แบบจําลองโอเอสไอ (OSI Model) ซึ่งในทางปฏิบัติ เรามักจะประยุกตใชเทคนิคการ
เขารหัสลับใน 2 ระดับชั้น คือ ระดับชั้นที่อยูลางสุด (ระดับ 1 หรือ 2) เรียกวา การเขารหัสลับแบบจุด
เชื่อมโยงถึงจุดเชื่อมโยง (Link-by-link) และระดับชั้นทีอ่ ยูสูงกวาระดับ 3 ขึ้นไป เรียกวา การเขารหัสลับ
แบบขั้นปลายถึงขั้นปลาย (End-to-end) ความรูพื้นฐานในเรื่องระบบชั้นของการสื่อสารขอมูลใน
แบบจําลองโอเอสไอ สามารถหาอานเพิ่มเติมไดจากหนังสือทางดานการสื่อสารขอมูลและเครือขาย
คอมพิวเตอรทวั่ ๆ ไปซึ่งจะไมนํามากลาวถึงในที่นี้

11.3.1 การเขารหัสลับแบบจุดเชื่อมโยงถึงจุดเชื่อมโยง
ตําแหนงทีจ่ ะทําการเขารหัสลับขอมูลที่งายที่สุดกอนทีส่ งเขาไปในระบบสื่อสารใดๆ ก็คือ ที่จุดตอ
หรือสถานีเชื่อมโยง (Node) ที่อยูในระดับชั้นที่ 1 หรือชัน้ กายภาพ (Physical Layer) ดูรูปที่ 11.8 ประกอบ

รูปที่ 11.8 การเขารหัสลับที่ชั้นกายภาพ

เนื่องจากการเชื่อมตอระหวางชั้นกายภาพเปนการเชื่อมตอระบบสื่อสารที่เปนมาตรฐาน จึงเปนการ
สะดวกที่จะเชือ่ มตออุปกรณเขารหัสลับในรูปของฮารดแวร ณ ระดับชัน้ นี้ ในการทํางาน อุปกรณเขารหัสลับ
ที่ติดตั้งอยูในแตละสถานีเชือ่ มโยง จะทําการเขารหัสลับขอมูลทั้งหมด รวมถึงขอมูลการจัดเสนทาง
(Routing Information) และขอมูลโพรโทคอลที่ใช กอนที่จะสงขอมูลเหลานั้นไปยังจุดหมายปลายทาง การ
เขารหัสลับในลักษณะนี้จะมีประสิทธิภาพดีมาก เนื่องจากขอมูลทุกๆ สวนจะถูกเขารหัสลับทั้งหมด
นักวิเคราะหรหัสลับจะไมพบขอมูลใดๆ ที่สามารถนํามาใชเปนประโยชนไดเลย ไมวา จะเปนรูปแบบ
โครงสรางขอมูล บุคคลที่กําลังติดตอสื่อสารกันอยู ความยาวของขอความตนฉบับ วันเวลาที่ทําการสื่อสาร
เปนตน ความปลอดภัยของการเขารหัสลับที่สถานีเชื่อมโยงนี้ จะไมขึ้นอยูกบั เทคนิคการจัดการการใชวงจร
สื่อสาร (Traffic Management Techniques) นอกจากนี้ ขั้นตอนการจัดการกุญแจ (Key Management) ก็

144
มีความสะดวก เนื่องจากที่ตอนปลายของสถานีเชื่อมโยงสองสถานี จําเปนตองใชกุญแจรวม (Common
Key) เพียงดอกเดียวเทานั้น และกุญแจรวมที่ใชนั้นก็เปนอิสระ (Independent) จากกุญแจรวมดอกอื่นๆ ที่
เหลือระบบเครือขายสื่อสาร อยางไรก็ตาม จุดออนของการเขารหัสลับแบบจุดเชื่อมโยงถึงจุดเชื่อมโยง ก็คือ
ขอมูลใดๆ ที่สงมาถึงสถานีเชื่อมโยง จําเปนตองมีการถอดรหัสลับ และทําการเขารหัสลับใหมอีกครั้งดวย
กุญแจรวมดอกใหม ซึ่งขอมูลที่อยูในรูปของขอความตนฉบับที่ถูกเปดเผยในแตละสถานีเชื่อมโยงนั้น จะมี
ความเสี่ยงตอการถูกโจมตีจากผูไมประสงคดีที่อยู ในเครือขาย ยิ่งเครือขายมีขนาดใหญเทาใด การปองกัน
จุดออนดังกลาวที่แตละสถานีเชื่อมโยงจะมีตนทุนที่สูงขึ้นเทานั้น มากกวานัน้ ในแตละสถานีเชื่อมโยงที่อยู
ตางสถานที่กัน หรือดูแลควบคุมโดยองคกรตางกัน จําเปนตองมีความไววางใจซึ่งกันและกัน ซึ่งเปนไปได
ยากในทางปฏิบัติ

11.3.2 การเขารหัสลับแบบขั้นปลายถึงขัน้ ปลาย


การเขารหัสลับแบบขั้นปลายถึงขั้นปลาย อาจกระทําไดในการสื่อสารระหวางระดับชั้นที่ 3 และ 4
หรือระหวางชัน้ เครือขาย (Network Layer) และชั้นขนสง (Transport Layer) ในกรณีนี้อุปกรณเขารหัส
ลับจะทําการเขารหัสลับเฉพาะตัวขอมูลทีส่ งไปมาระหวางผูใชงานในเครือขายเทานัน้ ขอมูลการจัดเสนทาง
และขอมูลที่ใชในการสงผานในระดับชั้นที่ 1 และ 2 จะไมถูกเขารหัสลับ กลาวคือ ตัวขอมูลจะถูกเขารหัส
ลับโดยผูใชงานดานหนึ่ง และถูกถอดรหัสลับโดยผูใชงานอีกดานหนึ่งเทานั้น ตั้งแตตน ทางจนถึงปลายทาง
ของเครือขายสื่อสาร ขอมูลที่สงผานไปมาจะอยูใ นรูปของขอความรหัสตลอดเวลา ดูรูปที่ 11.9 ประกอบ

รูปที่ 11.9 การเขารหัสลับแบบขั้นปลายถึงขั้นปลาย

การเขารหัสลับในลักษณะนีอ้ อกแบบมาเพือ่ หลีกเลี่ยงปญหาตางๆ ที่อาจเกิดขึน้ กับการเขารหัสลับที่


ชั้นกายภาพ ยกตัวอยางเชน เมื่อมีการสงขอมูลที่ผานการเขารหัสลับแบบจุดเชื่อมโยงถึงจุดเชื่อมโยงระหวาง
สถานีเชื่อมโยงที่ดูแลควบคุมโดยองคกรตางกัน ผูมีอํานาจหรือเจาหนาที่ (Authority) ในแตละองคกรจะ
สามารถมองดูขอมูลที่ถูกเปดเผยที่สถานีเชื่อมโยงที่องคกรนั้นดูแลควบคุมอยูได อยางไรก็ตาม จุดออนของ
การเขารหัสลับแบบขั้นปลายถึงขั้นปลายทีเ่ ห็นไดชัดก็คือ ขอมูลการจัดเสนทางจะไมถกู เขารหัสลับ สงผล
ใหเกิดการรั่วไหลของขอมูลที่อาจเปนประโยชนตอนักวิเคราะหรหัสลับได ในกรณีนี้นักวิเคราะหรหัสลับ
สามารถตรวจสอบไดวา ใครกําลังติดตอสื่อสารอยูกับใคร ณ วันเวลาใด ขอความตนฉบับมีความยาวแคไหน

145
โดยไมจําเปนตองรูเนื้อหาภายในขอความรหัสนั้นๆ เลย นอกจากนี้ระบบการจัดการกุญแจของการเขารหัส
ลับแบบขั้นปลายถึงขั้นปลายจะมีความซับซอนมากกวา เนื่องจากผูใชงานแตละคนจําเปนตองตกลง (Agree)
และเห็นชอบที่จะใชกุญแจดอกเดียวกันกับบุคคลที่ตนตองการจะติดตอสื่อสาร มากกวานัน้ การสรางอุปกรณ
เขารหัสลับแบบขั้นปลายถึงขั้นปลายจะมีความซับซอนมากกวาอุปกรณเขารหัสลับแบบจุดเชื่อมโยงถึงจุด
เชื่อมโยง เนื่องจากระบบเครือขายสื่อสารแตละเครือขายที่เชื่อมตอถึงกัน อาจใชโพรโทคอลในการสื่อสาร
ขอมูลที่แตกตางกัน ทําใหอปุ กรณการเขารหัสลับที่ใชในระบบที่ตางกันใชรว มกันไมได แตถาการเขารหัส
ลับในระบบสือ่ สารเกิดขึ้นในระดับชั้นสูงๆ เชน ชั้นการประยุกต (Application Layer) หรือชั้นนําเสนอ
(Presentation Layer) ปญหาในเรื่องของระบบเครือขายที่ตางชนิดกันอาจหมดไป ซึ่งโดยปกติอปุ กรณการ
เขารหัสลับที่ใชในระดับชั้นเหลานี้จะอยูในรูปของซอฟตแวรเปนสวนใหญ

11.3.3 การประยุกตใชงานสองระบบรวมกัน
เมื่อมีการนําเอาวิธีการเขารหัสลับมาใชในระบบสื่อสารขอมูล การรวม (Combine) วิธีการเขารหัส
ลับทั้งแบบจุดเชื่อมโยงถึงจุดเชื่อมโยงและแบบขั้นปลายถึงขั้นปลายมาประยุกตใชงานรวมกัน ถือเปนวิธีการ
เขารหัสลับที่มีประสิทธิภาพมากที่สุด ถึงแมวิธีการนี้จะมีตนทุนในการดําเนินการสูงสุดก็ตาม ทั้งนีก้ าร
เขารหัสลับแบบจุดเชื่อมโยงถึงจุดเชื่อมโยงจะชวยแกปญ  หาจากการโจมตีโดยการวิเคราะหขอมูลการจัด
เสนทาง ขณะที่การเขารหัสลับแบบขั้นปลายถึงขั้นปลายจะชวยแกปญหาจากการที่ตอ งเปดเผยขอมูลที่สถานี
เชื่อมโยงแตละสถานีในระบบเครือขาย ในสวนของการจัดการกุญแจและหนาที่ความรับผิดชอบ อาจแยกกัน
ระหวางผูด ูแลระบบและผูใชงานโดยไมนํามาเกี่ยวของกัน กลาวคือ ผูดแู ลระบบเครือขายจะรับผิดชอบใน
สวนของการเขารหัสลับแบบจุดเชื่อมโยงถึงจุดเชื่อมโยง ขณะที่ผูใชงานจะรับผิดชอบในสวนของการเขารหัส
ลับแบบขั้นปลายถึงขั้นปลาย

11.4 การเขารหัสลับในหนวยเก็บขอมูล
การเขารหัสลับในหนวยเก็บขอมูล (Data Storage) และการคนคืน (Retrieval) ขอมูลเหลานั้นใน
ภายหลัง ก็เปรียบเสมือนแบบจําลองการสงขอความรหัสระหวางนายดํากับนายแดง กลาวคือ นายดําก็ยังคง
สงขอความรหัสใหกับนายแดงเหมือนเดิม เพียงแตนายแดงในตอนนี้ จริงๆ แลวก็คือตัวนายดําในอนาคต
นั่นเอง อยางไรก็ตาม ปญหาที่เกิดขึ้นในการเขารหัสลับในหนวยเก็บขอมูลจะแตกตางไปจากการเขารหัสลับ
ในระบบสื่อสารขอมูลคอนขางมาก ในชองทาง (Channel) ที่ใชสื่อสารขอมูล ตัวขอความรหัสที่มกี าร
สงผานไปมาจะถือวาไมมีมูลคาในตัว (Intrinsic Value) เนื่องจากวา ถานายแดงไมไดรับขอความรหัสจาก
นายดํา นายดําสามารถสงขอความรหัสนั้นไปใหนายแดงใหมได ซึ่งกรณีนี้จะไมเกิดขึน้ กับการเขารหัสลับ
ในหนวยเก็บขอมูล เนื่องจากถานายดําไมสามารถถอดรหัสลับขอความรหัสที่เก็บอยูในหนวยเก็บขอมูลได

146
นายดําจะสูญเสียขอมูลนั้นๆ ตลอดไป ดังนั้นในการใชงานการเขารหัสลับในหนวยเก็บขอมูล เราควรจะมี
กลไก (Mechanisms) บางชนิดที่ใชปองกันไมใหขอความรหัสเกิดความผิดพลาดจนไมสามารถกู
คืนกลับมาได
โดยทั่วไป ปญหาที่มักจะพบในการเขารหัสลับหนวยเก็บขอมูลก็คือ ผูใชงานมักจะลืมกุญแจทีใ่ ช
สําหรับการถอดรหัสลับ หรือกุญแจที่ใชเกิดสูญหายไป ซึ่งในความเปนจริงกุญแจทีใ่ ชถอดรหัสลับจะมี
คุณคา (Value) เทียบเทากับตัวขอความตนฉบับ เพียงแตมีขนาดเล็กกวาเทานัน้ หรือมองในอีกมุมหนึ่ง
วิทยาการรหัสลับจะแปลงความลับที่มีขนาดใหญใหเปนความลับที่มีขนาดเล็ก และการที่ความลับนั้นมี
ขนาดเล็ก ก็จะทําใหมีโอกาสสูญหายไดงาย ในกระบวนการจัดการกุญแจของระบบการเขารหัสลับในหนวย
เก็บขอมูล จะสมมุติใหกุญแจตัวเดิมที่ใชในการเขารหัสลับถูกนํามาใชในการถอดรหัสลับขอความรหัสที่
เก็บรักษาไวในหนวยเก็บขอมูล โดยที่ขอความรหัสนั้นอาจเก็บอยูใ นหนวยเก็บขอมูลเปนระยะเวลาหลายๆ
ปกอนจะนํามาถอดรหัสลับ ซึ่งกุญแจที่ใชนั้นจะตองทําการเก็บรักษาไวเปนอยางดีและเปนความลับควบคู
ไปกับขอความรหัสนั้นๆ ดวย สภาพแวดลอม (Environment) แบบนีจ้ ะไมเกิดขึ้นกับการเขารหัสลับใน
ระบบสื่อสารขอมูล เนื่องจากกุญแจทีใ่ ชในการเขารหัสลับจะมีประโยชนในชวงเวลาที่มีการสื่อสารขอมูล
เทานั้น เมื่อการสื่อสารเสร็จสิ้นลง เราก็ไมจําเปนตองเก็บรักษากุญแจนั้นตอไปอีก ใหสังเกตวา การที่เราไม
เก็บรักษากุญแจนั้นเอาไว ไมไดหมายความวา เราจะเปดเผยกุญแจนั้นใหกับบุคคลอื่น นอกจากปญหาใน
เรื่องของการจัดการกุญแจแลว ปญหาอื่นๆ ที่มักจะพบในการเขารหัสลับในหนวยเก็บขอมูลมีดังนี้
[CHRI98]
- ขอมูลที่อยูในรูปของขอความรหัสที่เก็บในหนวยเก็บขอมูลหนึ่ง อาจเก็บรักษาในรูปของขอความ
ตนฉบับในหนวยเก็บขอมูลอื่นๆ ก็ได เชน ในหนวยเก็บขอมูลที่อยูในจานบันทึกแบบแข็ง (Hard
Disk) ของเครื่องคอมพิวเตอรสวนบุคคล ซึ่งกรณีนี้จะเปนการเพิ่มโอกาสใหกับนักวิเคราะหรหัสลับ
ที่จะโจมตีระบบโดยใชวิธีการโจมตีที่รูขอความตนฉบับ (Known Plaintext Attack)
- ในการใชงานระบบฐานขอมูล บอยครั้งที่ขอ มูลที่จะทําการเขารหัสลับมีขนาดเล็กกวาขนาดกลุมบิต
ที่ใชในอัลกอริทึมการเขารหัสลับ เชน เมือ่ มีการใชอัลกอริทึม DES เขารหัสลับขอมูลที่มีขนาดเล็ก
กวา 64 บิตกอนที่จะเก็บลงในระบบฐานขอมูล ซึ่งกรณีนี้จะทําใหขอความรหัสมีขนาดใหญกวา
ขอความตนฉบับ ปญหานี้จะมีผลกระทบอยางมีนัยสําคัญ ถาระบบฐานขอมูลที่ใชมีขนาดใหญ
มากๆ เนื่องจากความตองการในการเก็บขอมูลในรูปของขอความรหัสจะเพิ่มสูงขึ้นมากเชนเดียวกัน
- ความตองการในดานความเร็วของการเขาและถอดรหัสลับ ในทางปฏิบัติอาจมีความจําเปนตองใช
อุปกรณประเภทฮารดแวรในการเขารหัสลับ เพื่อใหไดความเร็วในการทํางานที่สูงขึ้น นอกจากนี้
ในการใชงานบางประเภทอาจมีความจําเปนตองใชอัลกอริทึมการเขารหัสลับความเร็วสูงที่
ออกแบบมาอยางเฉพาะเจาะจงประกอบการเขารหัสลับดวย

147
- ความตองการทางดานระบบการเก็บรักษากุญแจที่ปลอดภัยในระยะเวลานาน
- ระบบการจัดการกุญแจมีความซับซอนสูง เนื่องจากผูใชงานแตละคนอาจตองการเขาถึงไฟลขอมูลที่
แตกตางกันจากหนวยเก็บขอมูลตัวเดียวกัน หรืออาจตองการเขาถึงสวนที่ตางกันของไฟลขอมูลตัว
เดียวกันก็ได เปนตน
การเขารหัสลับขอมูลที่เก็บอยูในหนวยเก็บขอมูล โดยปกติสามารถทําไดสองแนวทาง กลาวคือ
แนวทางที่หนึง่ เราอาจทําการเขารหัสลับขอมูลทั้งหมดดวยกุญแจเพียงตัวเดียว ซึ่งถือเปนการสรางขอความ
รหัสจํานวนมากใหกับนักวิเคราะหลับเพื่อใชในการโจมตีระบบ นอกจากนี้ ผูใชงานคนอื่นจะไมสามารถ
เขาถึงขอมูลเพียงบางสวนจากหนวยเก็บขอมูลนั้นได เนื่องจากถาเราใหกุญแจถอดรหัสลับกับผูใชงานคน
นั้นไป เขาก็จะสามารถถอดรหัสลับขอมูลสวนอื่นๆ ที่เหลือได แนวทางที่สอง เราอาจทําการเขารหัสลับ
ไฟลขอมูลแตละไฟลโดยใชกุญแจทีแ่ ตกตางกัน ซึ่งจะมีขอเสียคือ จะเปนการบังคับใหผูใชงานตองจดจํา
กุญแจทีแ่ ตกตางกันเหลานั้นสําหรับใชในการถอดรหัสลับไฟลขอมูลแตละไฟลดว ย
ในทางปฏิบัติ การนําแนวทางทั้งสองขางตนมาประยุกตใชงานรวมกัน จะเปนแนวทางที่ดีที่สุด
สําหรับการเขารหัสในหนวยเก็บขอมูล กลาวคือ โดยการเขารหัสลับไฟลขอมูลแตละไฟลของผูใชงานแตละ
คนดวยกุญแจที่แตกตางกัน และทําการเขารหัสลับกุญแจที่แตกตางกันเหลานั้นดวยกุญแจอีกดอกหนึ่งที่
ผูใชงานเลือกขึ้นมา ซึ่งผูใชงานแตละคนจําเปนตองจดจํากุญแจที่ตนเลือกไวเพียงดอกเดียวเทานั้น ในกรณีนี้
ผูใชงานแตละคนสามารถเขาถึงสวนใดสวนหนึ่งของขอมูลทั้งหมดที่เก็บอยูในหนวยเก็บขอมูลที่ตนเอง
รับผิดชอบหรือตนเองเปนเจาของไดโดยใชกุญแจของตนเอง กุญแจทีใ่ ชในการเขารหัสลับกุญแจอืน่ ๆ ที่
แตกตางกันของผูใชงานแตละคนจะเปนที่รจู ักกันในชื่อ กุญแจอางอิง (Dereferencing Key) มากกวานั้นเรา
อาจทําการเขารหัสลับกุญแจทุกๆ ดอกที่ใชเขารหัสลับไฟลขอมูลทุกๆ ไฟลดวยกุญแจหลัก (Master Key)
แลวเก็บรักษากุญแจนัน้ ไวเพื่อเปนกุญแจสํารองสําหรับการถอดรหัสลับไฟลขอมูลใดๆ ในหนวยเก็บขอมูล
ทั้งนี้การนํากุญแจหลักมาใชก็มีขอเสียเชนเดียวกัน ยกตัวอยางเชน ถากุญแจหลักเกิดสูญหายหรือถูกขโมยไป
เราจะไมสามารถทําการคนคืนไฟลขอมูลทั้งหมดที่เก็บอยูใ นหนวยเก็บขอมูลนั้นๆ ได และบุคคลที่ไดกุญแจ
หลักนั้นไปก็สามารถเขาถึงไฟลขอมูลตางๆ ที่เก็บอยูในหนวยเก็บขอมูลนั้นไดทั้งหมดดวย

148
11.5 การเลือกใชอุปกรณเขารหัสลับ
ในอดีตที่ผานมา ผลิตภัณฑ (Product) หรืออุปกรณที่ใชในการเขาและถอดรหัสลับมักจะอยูในรูป
ของฮารดแวรที่ออกแบบมาเปนพิเศษเปนหลัก อุปกรณเหลานั้นสวนใหญจะมีลักษณะเปนกลอง (Box) ที่ใช
เสียบ (Plug) ตรงเขากับสายสัญญาณสื่อสาร (Communication Line) และจะทําหนาที่เขารหัสลับขอมูล
ทั้งหมดที่เชื่อมตอผานสายสัญญาณเหลานั้น ซึ่งขอดีของการใชอุปกรณเขารหัสลับที่เปนฮารดแวรมีอยู 3
ประการหลักๆ คือ
1. ความเร็ว โดยทั่วไป อัลกอริทึมการเขารหัสลับที่มีประสิทธิภาพจะประกอบดวยขัน้ ตอนการ
ดําเนินการที่กระทํากับขอมูลที่ซับซอนเปนจํานวนมาก ไมวาจะอยูใ นรูปบิตหรือตัวเลข ซึ่งการ
ดําเนินการเหลานั้นไมเหมาะสมที่จะนํามาประยุกตใชกบั เครื่องคอมพิวเตอรที่ออกแบบมา
สําหรับการใชงานทั่วๆ ไป ยกตัวอยางเชน อัลกอริทึม DES และ RSA จะมีการทํางานที่ชามาก
เมื่อนํามาใชกบั หนวยประมวลผลที่ใชสําหรับงานทั่วๆ ไป (General-purpose Processors)
ถึงแมนักสรางรหัสลับหลายๆ คนพยายามที่จะออกแบบใหอัลกอริทึมการเขารหัสลับของตนมี
ความเหมาะสมตอการใชงานกับอุปกรณเขารหัสลับที่เปนซอฟทแวรก็ตาม แตเมื่อนํามา
เปรียบเทียบกับความเร็วในการเขารหัสลับของอุปกรณฮารดแวรที่ออกแบบมาเปนพิเศษแลว
มักจะชากวาเสมอ
2. ความปลอดภัย อัลกอริทึมการเขารหัสลับที่ทํางานกับเครื่องคอมพิวเตอรทั่วๆ ไปในรูปของ
ซอฟทแวรจะไมมีการปองกันทางกายภาพ (Physical Protection) ซึ่งทําใหผูโจมตีสามารถ
แอบใชโปรแกรมตรวจแกจดุ บกพรอง (Debugger) ชนิดตางๆ เพื่อแกไขเปลี่ยนแปลงตัว
อัลกอริทึมที่ใชงานอยูเปนประจําอยางลับๆ โดยที่ผูใชงานไมตระหนัก (Realize) ถึงเลยก็
เปนได เพื่อปองกันปญหาทีก่ ลาวมาขางตน เราอาจเปลี่ยนมาใชอุปกรณเขารหัสลับที่อยูในรูป
ของฮารดแวรที่ไดรับการหอหุม (Encapsulate) มาอยางปลอดภัย เชน การใชกลองที่ทนตอ
การปรับปรุงแกไข (Tamper-proof Box) สามารถปองกันผูที่ไมประสงคดีแอบทําการ
ปรับเปลี่ยนอุปกรณเขารหัสลับในรูปของฮารดแวรที่เก็บรักษาอยูภ ายในกลองนั้นได หรือตัว
ชิป VLSI ที่ออกแบบมาสําหรับงานเฉพาะทาง อาจมีการเคลือบดวยวัสดุทางเคมี เชน เรซิน
(Resin) หรืออีพ็อกซี (Epoxy) กอนนําไปใชงานจริง เพื่อที่วาถามีใครพยายามแกะหรือแงะดู
สวนประกอบ (Component) หรือลายวงจร (Circuit) ที่อยูภายใน จะสงผลใหชิปตัวนัน้
เสียหายจนไมสามารถนํามาใชงานไดอกี

149
3. ความสะดวกในการติดตั้งใชงาน การใชงานอุปกรณเขารหัสลับสวนใหญมักจะไมมีความ
เกี่ยวของกับเครื่องคอมพิวเตอรที่ออกแบบมาสําหรับการใชงานทั่วๆ ไป เชน ในการเขารหัส
ลับสัญญาณเสียงจากการสนทนาผานสายโทรศัพท หรือการเขารหัสลับขอมูลที่สงผาน
เครื่องโทรสาร (Facsimile, FAX) หรืออุปกรณสื่อสารเฉพาะทาง คนสวนใหญมักตองการนํา
อุปกรณเขารหัสลับในรูปที่เปนฮารดแวรมาเชื่อมตอกับตัวโทรศัพทหรือโทรสารโดยตรง เพื่อ
ทําการเขารหัสลับสัญญาณเสียงหรือขอมูลใดๆ กอนที่จะสงผานออกไปยังเครือขายภายนอก
ซึ่งวิธีการเชนนี้จะมีความสะดวกสบายตอผูใชงานมากกวาการนําซอฟทแวรสําหรับการ
เขารหัสลับมาติดตั้งลงในเครื่องคอมพิวเตอร และถึงแมวาขอความรหัสจะถูกสรางมาจากเครื่อง
คอมพิวเตอร การนําอุปกรณเขารหัสลับในรูปของฮารดแวรมาใชจะมีความสะดวกมากกวาการ
ที่ตองเขาไปเปลี่ยนแปลงระบบภายในของเครื่องคอมพิวเตอรนั้นๆ ทุกวันนีแ้ มแตเครื่อง
คอมพิวเตอรสวนบุคคลก็ยังมีอุปกรณเสริมที่ออกแบบมาสําหรับใชในการเขารหัสลับขอมูล ซึ่ง
สามารถซื้อและนํามาใชงานไดทันทีโดยการเชื่อมตอโดยตรงระหวางเครื่องคอมพิวเตอรและ
โมเด็มภายนอกหรือตัวกล้ําและแยกสัญญาณภายนอก (External Modem)
ในทํานองเดียวกัน อุปกรณเขารหัสลับในรูปของซอฟทแวรจะมีจดุ ออนในเรื่อง ความเร็วของการ
ประมวลผล ตนทุนในการนํามาใชงาน และความงายในการปรับเปลี่ยนแกไข แตจะมีจุดแข็งในเรือ่ ง ความ
ยืดหยุนในการนําไปใช (Flexibility) ความสะดวกในการพกพา (Portability) ความงายในการใชงาน (Ease
of Use) และความสะดวกในการปรับใหเปนปจจุบัน (Update) ซึ่งทุกๆ อัลกอริทึมที่ออกแบบมาสําหรับใช
ในการเขาและถอดรหัสลับ สามารถนํามาประยุกตใชงานในรูปของซอฟทแวรได นอกจากนี้ เราสามารถ
คัดลอกตัวซอฟทแวรเพื่อนําไปใชกับเครื่องคอมพิวเตอรอื่นๆ ไดโดยไมตองเสียคาใชจายเพิ่มเติม และอาจ
ทําการปรับปรุงแกไขตัวซอฟทแวรเพื่อใหทํางานรวมกับโปรแกรมอื่นๆ ได เชน โปรแกรมสําหรับสื่อสาร
ขอมูล โปรแกรมประมวลคํา (Word Processor) เปนตน
ในปจจุบนั อุปกรณเขารหัสลับในรูปซอฟทแวรเปนทีน่ ิยมใชกันอยางกวางขวาง เนื่องมาจากการ
เพิ่มขึ้นของการใชงานเครื่องคอมพิวเตอรสวนบุคคลเปนหลัก ซึ่งสวนใหญผูใชงานมักจะเขารหัสลับ
ไฟลขอมูลตางๆ ที่เก็บไวในจานบันทึกแบบแข็งดวยตนเอง ในทางปฏิบัติ ผูใชงานอาจไมรูเลยวา ใครคน
หนึ่งไดแอบเปลี่ยนแปลงแกไขตัวอัลกอริทึมการเขารหัสลับที่ติดตั้งอยูในเครื่องคอมพิวเตอรใหเปนไป
ในทางที่เอื้อประโยชนตอคนๆ นั้น เชน การแทนที่ไฟลโปรแกรมที่ใชในการเขารหัสลับตัวเดิมใหเปนตัว
ใหมที่มีความปลอดภัยนอยลง เปนตน

150
11.6 การประยุกตใชงานตัวแปลงรหัสแบบกลุม
โดยปกติ เราสามารถนําตัวแปลงรหัสแบบกลุม (Block Cipher) หลายๆ ชนิดมาใชรวมกันเพื่อสราง
ตัวแปลงรหัสแบบกลุมชนิดใหมขึ้นมาได ถาตัวแปลงรหัสแบบกลุมที่นาํ มาใชรวมกันเปนตัวแปลงรหัสชนิด
เดียวกันจะเรียกวา การเขารหัสลับแบบหลายครั้ง (Multiple Encryption) แตถาตัวแปลงรหัสแบบกลุมที่
นํามาใชรวมกันเปนคนละชนิดจะเรียกวา การเขารหัสลับแบบตอเรียง (Cascading Encryption)
จุดประสงคหลักที่นําตัวแปลงรหัสแบบกลุมมาประยุกตใชงานในรูปแบบขางตนนั้น ก็เพื่อที่เพิ่มระดับความ
ปลอดภัยของระบบการเขารหัสลับที่ใช โดยไมจําเปนตองไปเกี่ยวของกับขั้นตอนการออกแบบตัวแปลง
รหัสแบบกลุมชนิดใหมอีก ยกตัวอยางเชน อัลกอริทึม DES ที่เปนทีย่ อมรับจากนักสรางรหัสลับทั่วโลกวา มี
ความปลอดภัยตอการวิเคราะหรหัสลับแบบตางๆ ในปจจุบัน วิธีการโจมตีที่มีประสิทธิผลในทางปฏิบัติตอ
อัลกอริทึม DES ก็มีเพียงการโจมตีแบบตะลุยเทานัน้ อยางไรก็ตาม กุญแจที่ใชเขาและถอดรหัสลับใน
อัลกอริทึม DES มีขนาดแค 56 บิต ซึ่งถือวานอยเกินไปสําหรับการนําไปใชงานในดานความปลอดภัยของ
ขอมูลในยุคปจจุบัน ดังนั้นเราอาจนําอัลกอริทึม DES มาประยุกตใชงานโดยการเขารหัสลับแบบหลายครั้ง
เพื่อสรางอัลกอริทึมการเขารหัสลับชนิดใหมที่มีขนาดกุญแจที่ใหญขึ้นก็ได และสิ่งที่เราไดรับจากการทํา
เชนนั้นก็คือ อัลกอริทึมชนิดใหมที่มีการยอมรับวายังมีความปลอดภัยและมีขนาดกุญแจที่ใหญขึ้นมาใชงาน

11.6.1 การเขารหัสลับสองครั้ง (Double Encryption)

วิธีการเพิ่มความปลอดภัยใหกับตัวแปลงรหัสแบบกลุมใดๆ ที่งายที่สดุ ก็คือ การเขารหัสลับสองครั้ง


ซึ่งทําไดโดยการเขารหัสลับกลุมบิตนําเขาจากขอความตนฉบับสองครั้งติดตอกันดวยกุญแจคนละดอก
กลาวคือ เราจะทําการเขารหัสลับกลุมบิตนําเขากลุมแรกกอนดวยกุญแจดอกทีห่ นึ่ง จากนั้นจึงเขารหัสลับ
ขอความรหัสที่ไดอีกครั้งดวยกุญแจดอกทีส่ องทันที การถอดรหัสลับสามารถทําไดโดยการดําเนินการแบบ
ผันกลับ กลาวคือ โดยทําการถอดรหัสลับกลุมบิตขอความรหัสดวยกุญแจดอกที่สอง แลวถอดรหัสลับกลุม
บิตผลลัพธที่ไดดวยกุญแจดอกที่หนึ่งอีกครั้งเพื่อใหไดกลุมบิตขอความตนฉบับกลับคืนมา ฟงกชนั การเขา
และถอดรหัสลับขางตนสามารถเขียนในรูปของสมการไดดังนี้ ดูรปู ที่ 11.10 ประกอบ

C = EK2 (EK1 (M)) (11.9)


M = DK1 (DK2 (C)) (11.10)

151
ใหสังเกตวา มีความเปนไปไดที่จะพบกุญแจ K3 ที่ใหผลลัพธเหมือนกับการเขารหัสลับสองครั้ง ดัง
สมการตอไปนี้

C = EK2 (EK1 (M)) = EK3 (M) (11.11)

รูปที่ 11.10 การเขาและถอดรหัสลับสองครั้ง

11.6.2 การโจมตีแบบพบกันตรงกลาง (Meet-in-the-middle Attack)


จากการเขารหัสลับสองครั้งดวยกุญแจคนละดอกที่แตกตางกัน และกุญแจทั้งสองมีความเปนอิสระ
ตอกันอยางสมบูรณ ผลลัพธที่ไดจะมีความทนทานตอการโจมตีแบบตะลุยเพิ่มมากขึน้ เทียบเทากับจํานวน
บิตของกุญแจทั้งสองรวมกัน ยกตัวอยางเชน กําหนดใหกุญแจที่ใชในตัวแปลงรหัสแบบกลุมหนึ่งๆ มีขนาด
n บิต ในการโจมตีตัวแปลงรหัสนี้โดยใชการโจมตีแบบตะลุย ผูโจมตีอาจตองลองทําการถอดรหัสลับดวย
รูปแบบกุญแจทั้งหมดที่เปนไปไดเปนจํานวนสูงสุด 2n ครั้ง แตถาเราใชการเขารหัสลับสองครั้ง รูปแบบ
กุญแจทั้งหมดที่ผูโจมตีตองลองจะเพิ่มขึ้นเปนจํานวนสูงสุด 22n ครั้งแทน ถาอัลกอริทึมการเขารหัสลับที่ใชมี
ขนาดกุญแจเทากับ 64 บิต การเขารหัสลับสองครั้งจะเปรียบเสมือนกับการเพิ่มขนาดของกุญแจที่ใชเปน 128
บิต อยางไรก็ตาม ความทนทานตอการโจมตีที่เพิ่มขึ้นนีจ้ ะไมเพิ่มเปนสองเทาถาผูโจมตีใชการโจมตีที่รู
ขอความตนฉบับ ซึ่งในกรณีนี้ผูโจมตีหรือนักวิเคราะหรหัสลับสามารถเขาถึงขอความตนฉบับและขอความ
รหัสผลลัพธหลายๆ ขอความได เชน ถานักวิเคราะหรหัสลับรูคา M1, C1, M2, C2 ซึ่งมีความสัมพันธดังนี้

C1 = EK2 (EK1 (M1)) (11.12)


C2 = EK2 (EK1 (M2)) (11.13)

152
นักวิเคราะหรหัสลับสามารถคํานวณหา EK1(M1) โดยใชกุญแจที่เปนไปไดทั้งหมดของ K1 แลวเก็บ
ผลลัพธที่ไดไวในหนวยความจํา (Memory) ซึ่งตองการพื้นที่หนวยความจําขนาด 2n กลุมบิต จากนัน้ ทําการ
คํานวณหา DK2(C1) โดยใชกญ ุ แจที่เปนไปไดทั้งหมดของ K2 ทีละดอก ผลลัพธที่ไดจะนําไปเปรียบเทียบกับ
ผลลัพธที่เก็บไวในหนวยความจํา ถาตรงกัน แสดงวามีความเปนไปไดที่กุญแจดอกทีเ่ ขาใชถอดรหัสลับอยู
คือ K2 และกุญแจที่ใชเขารหัสลับดอกที่ใหผลลัพธในหนวยความจําตรงกับผลลัพธที่นํามาเปรียบเทียบคือ K1
กลาวคือ EK1(M1) = DK2(C1) ถานักวิเคราะหรหัสลับไมแนใจ เขาอาจทําการคํานวณ EK1(M2) และนําผลลัพธ
ที่ไดมาเปรียบเทียบกับ DK2(C2) ถาตรงกัน ยิ่งมีความเปนไปไดสูงมากที่กุญแจที่เขาทดลองใชในรอบที่สองนี้
คือ K1 และ K2 นักวิเคราะหรหัสลับอาจทดลองอีกครั้งกับ M3 และ C3 จนกวาจะมัน่ ใจวา เขาไดคน พบ
กุญแจ K1 และ K2 จริงๆ
ใหสังเกตวา ขัน้ ตอนที่นักวิเคราะหรหัสลับคํานวณหา EK1(M1) แลวเก็บผลลัพธที่ไดไวใน
หนวยความจําจะมีจํานวน 2n ครั้ง ขณะที่ขั้นตอนการเปรียบเทียบผลลัพธที่ไดจากการคํานวณ DK2(C1) กับ
ผลลัพธที่เก็บไวในหนวยความจําจะมีจํานวน 2n ครั้งเชนกัน ดังนัน้ ความพยายามทีน่ กั วิเคราะหรหัสลับตอง
ใชในการหากุญแจทั้งสองดอกจึงไมใช 22n แตเปน 2x2n = 2n+1 เทานั้น การโจมตีในลักษณะนี้เปนที่รูจักกัน
ในชื่อ การโจมตีแบบพบกันตรงกลาง ทั้งนี้เนื่องมาจากวิธีการที่ใชในการวิเคราะหรหัสลับมีการทํางานใน
ลักษณะที่วา ผูโ จมตีสามารถทําการเขารหัสลับดานหนึ่ง และทําการถอดรหัสลับอีกดานหนึ่ง ผลลัพธที่ไดทั้ง
สองจะนํามาจับคูกันตรงกลาง อยางไรก็ตาม ในทางปฏิบตั ิการโจมตีแบบพบกันตรงกลางตองการพื้นที่
หนวยความจําเปนจํานวนมาก นักวิเคราะหรหัสลับจําเปนตองใชหนวยความจําขนาด 2n กลุมบิตในการเก็บ
ผลลัพธที่ไดจากการโจมตีแบบตะลุย ยกตัวอยางในกรณีของอัลกอริทึม DES ที่ใชกญ ุ แจขนาด 56 บิต
56
นักวิเคราะหรหัสลับจําเปนตองใชหนวยความจําขนาด 64 บิตจํานวน 2 หนวยเปนเครื่องมือในการโจมตี
แบบพบกันตรงกลาง หรือเทียบเทากับหนวยความจําทีใ่ ชเก็บขอมูลขนาด 1017 ไบต ซึ่งความตองการ
หนวยความจําที่สูงมากนี่เองที่ทําใหการโจมตีแบบพบกันตรงกลาง ณ เวลาปจจุบนั เกิดขึ้นไดยากในทาง
ปฏิบัติ

11.6.3 การเขารหัสลับสามครั้ง (Triple Encryption)


วิธีการเขารหัสลับที่พัฒนาขึ้นตอจากการเขารหัสลับสองครั้งก็คือ การเขารหัสลับสามครั้ง ซึ่งมี
รูปแบบการนําไปประยุกตใชไดหลากหลาย ในที่นี้จะกลาวถึงการเขารหัสลับสามครั้งใน 2 รูปแบบที่เปนที่
รูจักกันโดยทัว่ ไปคือ
• การเขารหัสลับสามครั้งดวยกุญแจสองดอก (Triple Encryption with Two Keys)
• การเขารหัสลับสามครั้งดวยกุญแจสามดอก (Triple Encryption with Three Keys)

153
11.6.3.1 การเขารหัสลับสามครั้งดวยกุญแจสองดอก
การเขารหัสลับสามครั้งดวยกุญแจสองดอก ทําไดโดยการเขารหัสลับกลุมบิตนําเขาจากขอความ
ตนฉบับสามครั้งติดตอกันดวยกุญแจสองดอกที่ตางกัน ครั้งแรกดวยกุญแจดอกทีห่ นึง่ ครั้งที่สองดวยกุญแจ
ดอกที่สอง และครั้งที่สามดวยกุญแจดอกทีห่ นึ่งตัวเดิม [TUCH79] ในการนําไปใชในทางปฏิบัติ ผูใชงาน
ควรเขารหัสลับครั้งแรกดวยกุญแจดอกที่หนึ่ง จากนัน้ ทําการถอดรหัสลับผลลัพธที่ไดดวยกุญแจดอกที่ 2
แลวจึงทําการเขารหัสลับผลลัพธที่ไดอีกครั้งดวยกุญแจดอกที่หนึ่ง ขั้นตอนการถอดรหัสลับสามารถทําได
โดยการดําเนินการแบบผันกลับ ฟงกชันในการเขาและถอดรหัสลับของวิธีการขางตนสามารถแสดงใหอยู
ในรูปของสมการไดดังนี้ ดูรูปที่ 11.11 ประกอบ

C = EK1 (DK2 (EK1 (M))) (11.14)


M = DK1 (EK2 (DK2 (C))) (11.15)

รูปที่ 11.11 การเขารหัสลับสามครั้งดวยกุญแจสองดอก

วิธีการเขารหัสลับในลักษณะนี้บางครั้งจะเรียกวา การเขารหัสลับในโหมด EDE (Encrypt-


Decrypt-Encrypt) ถาตัวแปลงรหัสแบบกลุมที่ใชมีกุญแจขนาด n บิต ระบบการเขารหัสลับสามครั้งดวย
กุญแจสองดอกจะใชกุญแจในการเขารหัสลับขนาด 2n บิต

154
ถึงแมวาการเขารหัสลับสามครั้งจะทนตอการโจมตีแบบพบกันตรงกลางได ซึ่งสงผลใหความ
ปลอดภัยของระบบโดยรวมเพิ่มสูงขึ้น แตวิธีการเขารหัสลับในลักษณะนี้จะมีจดุ ออนตอการโจมตีขอความ
ตนฉบับแบบเลือกได ซึ่งในกรณีนี้ ผูโจมตีหรือนักวิเคราะหรหัสลับไมเพียงแตจะสามารถเขาถึงขอความ
ตนฉบับและขอความรหัสผลลัพธหลายๆ ขอความได แตเขายังสามารถเลือกขอความตนฉบับในรูปแบบที่
ตองการเพื่อใชในการเขารหัสลับไดอีกดวย ยกตัวอยางเชน นักวิเคราะหรหัสลับสามารถคํานวณหา DK2(0)
โดยใชกุญแจที่เปนไปไดทั้งหมดของ K2 แลวเก็บผลลัพธที่ไดไวในหนวยความจํา จากนั้นทําการคํานวณหา
DK1(0) โดยใชกุญแจที่เปนไปไดทั้งหมดของ K1 ผลลัพธที่ไดจะพิจารณาเปนขอความตนฉบับ M ตอมาให
เขารหัสลับสามครั้งขอความตนฉบับ M แลวทําการถอดรหัสลับขอความรหัสที่ไดดว ย K1 ทันที ผลลัพธที่ได
ในขั้นตอนนี้จะนําไปเปรียบเทียบกับผลลัพธที่เก็บไวในหนวยความจํา คําอธิบายขางตนสามารถเขียนใหอยู
ในของสมการไดดังนี้

DK2(0) = DK1 (EK1 (DK2 (EK1 (DK1 (0))))) (11.16)


= DK1 (EK1 (DK2 (EK1 (M)))
= DK1 (C)
โดยที่ M = DK1 (0) และ
C = EK1 (DK2 (EK1 (M)))

เนื่องจาก DK1 (EK1 (DK2 (EK1 (DK1(0))))) = DK2(EK1(DK1(0))) = DK2(0) ถาผลลัพธที่ไดจากทางขวา


ของสมการ 11.16 ตรงกันกับ DK2(0) ที่เก็บไวในหนวยความจํา แสดงวามีความเปนไปไดที่กุญแจทัง้ สองที่
เลือกไวจะเปน K1 และ K2 เพื่อใหแนใจ นักวิเคราะหรหัสลับอาจทําการทดลองอีกครั้งดวยขอความตนฉบับ
ใดๆ ที่ไมใช 0 ถาปรากฏวา K1 และ K2 ที่เลือกไวในตอนแรกไมใชกญ ุ แจที่ถูกตอง ก็ใหทําการคนหาตอไป
เรื่อยๆ ถึงแมวา วิธีการโจมตีที่กลาวมาขางตนตองการพืน้ ที่หนวยความจําขนาด 2n กลุมบิต รวมทัง้ ผูโจมตี
ตองทําการถอดรหัสลับเปนจํานวนสูงสุด 2n ครั้ง ซึ่งแทบจะไปไมไดในทางปฏิบัติ โดยเฉพาะเมื่อ n มีคา
มากๆ หรือเมือ่ ขนาดของกุญแจที่ใชในการเขารหัสลับมีขนาดใหญ แตวิธีการโจมตีนี้ก็ถือวาเปนการทําให
การเขารหัสลับสามครั้งดวยกุญแจสองดอกเกิดจุดออน

155
11.6.3.2 การเขารหัสลับสามครั้งดวยกุญแจสามดอก
เพื่อใหการเขารหัสลับสามครั้งมีความปลอดภัยเพิ่มมากขึน้ เราอาจเขารหัสลับกลุมบิตของขอความ
ตนฉบับทั้งสามครั้งดวยกุญแจสามดอกทีแ่ ตกตางกันทั้งหมด ฟงกชันการเขาและถอดรหัสลับดวยกุญแจสาม
ดอกที่แตกตางกันสามารถเขียนในรูปของสมการไดดังนี้ ดูรูปที่ 11.12 ประกอบ

C = EK3 (DK2 (EK1 (M))) (11.17)


M = DK1 (EK2 (DK3 (M))) (11.18)
หรือ C = EK3 (EK2 (EK1 (M))) (11.19)
M = DK1 (DK2 (DK3 (C))) (11.20)

รูปที่ 11.12 การเขารหัสลับสามครั้งดวยกุญแจสามดอกทั้ง 2 แบบ

จากรูป ใหสังเกตวาการเขารหัสลับสามครั้งในแบบแรก (Type 1) จะเปนการเขารหัสลับในโหมด


EDE ขณะทีแ่ บบหลัง (Type 2) จะเปนการเขารหัสลับในโหมด EEE (Encrypt-Encrypt-Encrypt) สําหรับ
ขั้นตอนการถอดรหัสลับนั้นสามารถทําไดโดยการดําเนินการแบบผันกลับตามปกติ การโจมตีการเขารหัส
ลับสามครั้งดวยกุญแจสามดอกที่มีประสิทธิภาพสูงสุด ณ เวลาปจจุบนั คือ การโจมตีแบบพบกันตรงกลาง
ซึ่งไดมีการอภิปรายไวใน [MERK81] สรุปใจความไดวา ความปลอดภัยของการเขารหัสลับสามครั้งดวย
กุญแจสามดอกจะเทียบเทากับการเขารหัสลับสองครั้ง เนื่องจากความพยายามทีน่ ักวิเคราะหรหัสลับ
จําเปนตองใชในการโจมตีใหประสบความสําเร็จ จะเทียบเทากับการโจมตีแบบตะลุยเปนจํานวน 22n ครั้งดวย
พื้นที่หนวยความจําขนาด 2n กลุมบิต โดย n คือขนาดของกุญแจทีใ่ ชแตละดอกทั้งสามดอก ตารางที่ 11.1
แสดงการเปรียบเทียบความปลอดภัยของการนําอัลกอริทึม DES มาประยุกตใชในการเขารหัสลับแบบหลาย
ครั้ง

156
ตารางที่ 11.1 การเปรียบเทียบการเขารหัสลับแบบหลายครั้งของ DES ในรูปแบบตางๆ
No. of
No. of Keys Computation Storage Type of Attack
Encryptions
Single 1 256 - Known plaintext
Single 1 238 238 Chosen plaintext
Single 1 - 256 Chosen plaintext
112
Double 2 2 - Known plaintext
Double 2 256 256 Known plaintext
Double 2 - 2112 Chosen plaintext
112
Triple 2 2 - Known plaintext
Triple 2 256 256 56
2 Chosen plaintext
Triple 2 2120-t 2t 2t Known plaintext
Triple 2 - 256 Chosen plaintext
112
Triple 3 2 256 Known plaintext
Triple 3 256 2112 Chosen plaintext
ที่มา FAQ about today’s cryptography, version 3.0, RSA Data Security, Inc., 1996 [FAQ96]

11.6.4 การเขารหัสลับแบบตอเรียง
สําหรับการเขารหัสลับแบบตอเรียงนั้น ในการเขารหัสลับครั้งที่สองขึ้นไป นอกจากจะใชกุญแจที่
แตกตางกันแลว ตัวแปลงรหัสที่ใชยังแตกตางกันดวย ยกตัวอยางเชน โดยการเขารหัสลับกลุมบิตนําเขาของ
ขอความตนฉบับดวยตัวแปลงรหัส A และกุญแจ KA กอน จากนัน้ จึงทําการเขารหัสลับขอความรหัสที่ไดอีก
ครั้งดวยตัวแปลงรหัส B และกุญแจ KB ผูใชงานอาจทําการเขารหัสลับอีกโดยใชตัวแปลงรหัส C และกุญแจ
KC ตอไปเรื่อยๆ ก็ได การถอดรหัสลับทําไดโดยการดําเนินการแบบผันกลับเชนเดียวกัน ในเรื่องความ
ปลอดภัยของการเขารหัสลับแบบตอเรียงนั้น ถากุญแจที่ใชทั้งหมดมีความเปนอิสระตอกัน ไมมีความ
เกี่ยวของใดๆ ตอกัน ความทนทานตอการโจมตีของระบบการเขารหัสลับแบบตอเรียง จะเทียบเทากับความ
ทนทานตอการโจมตีของตัวแปลงรหัสตัวแรกสุดที่นํามาตอเรียงกัน [MAUR93] นอกจากนี้ ถาตัวแปลงรหัส
ตัวที่สองที่นํามาตอเรียงไมทนทานตอการโจมตีขอความตนฉบับแบบเลือกได ตัวแปลงรหัสตัวแรกสุดที่
นํามาตอเรียงจะชวยอํานวยความสะดวกตอการโจมตีนั้นๆ และยังทําใหตัวแปลงรหัสตัวที่สองมีจุดออน
เพิ่มขึ้น กลาวคือ ทําใหตัวแปลงรหัสตัวที่สองไมทนทานตอการโจมตีที่รูขอความตนฉบับ ซึ่งจุดออนที่กลาว
มานี้จะเกิดขึน้ กับการเขารหัสลับแบบตอเรียงเสมอ ไมวา จะนําตัวแปลงรหัสชนิดใดมาใชในการตอเรียง
กลาวอีกนัยหนึ่งก็คือ โดยการใชการโจมตีขอความตนฉบับแบบเลือกได ความแข็งแกรงของการเขารหัสลับ
แบบตอเรียง จะเทียบเทากับความแข็งแกรงของตัวแปลงรหัสใดๆ ที่นํามาใชในการตอเรียงนั้น [KNUD94]
ซึ่งก็หมายความวา ความปลอดภัยของระบบการเขารหัสลับแบบตอเรียงทั้งระบบ จะขึ้นอยูกับความ

157
ปลอดภัยของตัวแปลงรหัสตัวที่แข็งแกรงมากที่สุดในระบบนั่นเอง รูปที่ 11.13 แสดงการเขารหัสลับแบบตอ
เรียงโดยใชอัลกอริทึม A และ B

รูปที่ 11.13 การเขารหัสลับแบบตอเรียงโดยใช 2 อัลกอริทึม

ในกรณีที่นายดํากับนายแดงตองการแลกเปลี่ยนความลับระหวางกัน แตไมเชื่อใจในตัวแปลงรหัสที่
ตางฝายตางเลือกใช พวกเขาทั้งสองสามารถนําวิธีการเขารหัสลับแบบตอเรียงมาประยุกตใชได โดยนายดํา
จะเขารหัสลับขอความตนฉบับของตนโดยใชตวั แปลงรหัส A กอน แลวตามดวยตัวแปลงรหัส B ขณะที่นาย
แดงซึ่งไวใจตัวแปลงรหัส B มากกวา ก็สามารถเขารหัสลับขอความตนฉบับของตนโดยใชตวั แปลงรหัส B
กอนแลวตามดวยตัวแปลงรหัส A ก็ได ใหสังเกตวา กุญแจที่ใชในแตละตัวแปลงรหัสจะตองเปนอิสระตอ
กัน ถาตัวแปลงรหัส A ใชกุญแจขนาด 64 บิต และตัวแปลงรหัส B ใชกญ ุ แจขนาด 128 บิต ระบบการ
เขารหัสลับแบบตอเรียงที่ไดจะมีความทนทานตอการโจมตีเทียบเทากับการใชกุญแจขนาด 192 บิต
วิธีการหนึ่งทีน่ ํามาใชเพื่อเพิม่ ความแข็งแกรงของระบบการเขารหัสลับแบบตอเรียง ใหเทียบเทากับ
ความแข็งแกรงของตัวแปลงรหัสทั้งหมดทีน่ ํามาตอเรียงกัน มีดังนี้ [SCHN96]
1. กรณีที่ใชตวั แปลงรหัสสองตัวและกุญแจที่เปนอิสระตอกัน ใหสรางกระแสบิตแบบสุม R ซึ่งมี
ขนาดหรือความยาวเทากับขอความตนฉบับ M
2. ทําการเขารหัสลับ R ดวยตัวแปลงรหัสตัวแรก
3. ทําการเขารหัสลับ M ⊕ R ดวยตัวแปลงรหัสตัวที่สอง
4. ขอความรหัสคือผลลัพธที่ไดจากขั้นตอนที่ 2 และ 3
สมมุติวากระแสบิตแบบสุมที่สรางขึ้นเปนแบบสุมจริง วิธีการเขารหัสลับในลักษณะนี้จะเปนการ
เขารหัสลับขอความตนฉบับ M ดวยอัลกอริทึม One-time Pad กอนที่จะมีการเขารหัสลับผลลัพธของ M ⊕
R และ R ดวยตัวแปลงรหัสแตละตัวที่แตกตางกัน เนื่องจากในการกูคนื ขอความตนฉบับ M จําเปนตองมีทั้ง
M ⊕ R และ R นักวิเคราะหรหัสลับจึงถูกบังคับใหตองโจมตีตัวแปลงรหัสทั้งสองตัว ดังนัน้ ความปลอดภัย
ของระบบทั้งระบบ จึงเทียบเทากับความแข็งแกรงของตัวแปลงรหัสแตละตัวนํามารวมกัน อยางไรก็ตาม
ขอดอยของวิธกี ารเขารหัสลับในลักษณะนีก้ ็คือ ขอความรหัสที่ไดจะมีขนาดเปน 2 เทาของขอความตนฉบับ
วิธีการนี้สามารถนําไปใชกับระบบที่มีตัวแปลงรหัสมากกวา 2 ตัวก็ได แตขนาดของขอความรหัสที่ได ก็จะ
เพิ่มขึ้นเปนจํานวนเทาตามจํานวนของตัวแปลงรหัสที่ใช

158
11.7 คําถามทายบท
1. จงอภิปรายถึงขอดี ขอเสียของการใชงานตัวแปลงรหัสแบบกระแสและตัวแปลงรหัสแบบกลุม
2. จงบรรยายโหมดการทํางานหลักๆ ของตัวแปลงรหัสแบบกลุม พรอมอธิบายขั้นตอนการทํางานในแตละ
โหมดมาพอสังเขป
3. นักศึกษาคิดวาโหมดการทํางานของตัวแปลงรหัสแบบกลุม โหมดใดมีประสิทธิภาพมากที่สุด เพราะเหตุ
ใด จงบรรยายพรอมยกตัวอยางประกอบ
4. จงอภิปรายจุดออนในการใชงานตัวแปลงรหัสแบบกลุม พรอมทั้งบรรยายถึงสาเหตุและแนวทางแกไขที่
เปนไปได
5. จงเปรียบเทียบความแตกตางระหวางการเขารหัสลับในระบบสื่อสารขอมูลและในหนวยเก็บขอมูล
6. จงอภิปรายถึงขอดี ขอเสียของการเขารหัสลับแบบจุดเชือ่ มโยงถึงจุดเชื่อมโยงและแบบขั้นปลายถึงขั้นปลาย
7. จงอภิปรายถึงแนวทางการเขารหัสลับ 2 แนวทางที่นํามาใชในหนวยเก็บขอมูล นักศึกษาคิดวาแนวทาง
ใดมีประสิทธิภาพมากกวากัน เพราะเหตุใด
8. จงเปรียบเทียบความแตกตางระหวางกุญแจอางอิงและกุญแจหลัก
9. จงอภิปรายถึงขอดี ขอเสียของการใชอุปกรณการเขารหัสลับฮารดแวรและซอฟทแวร นักศึกษาคิดวาการ
เขารหัสลับแบบหลายครั้งเปนจํานวน n ครั้งจะทําใหระบบมีความแข็งแกรงเพิ่มขึ้น n เทาหรือไม เพราะ
เหตุใด จงอธิบายถึงเหตุผลที่ตอบมาพอสังเขป
10. จงอธิบายความแตกตางระหวางการเขารหัสลับแบบหลายครั้งและการเขารหัสลับแบบตอเรียง นักศึกษา
คิดวาการเขารหัสลับแบบใดมีความแข็งแกรงทนทานตอการโจมตีมากกวากัน เพราะเหตุใด จงอธิบาย
ถึงเหตุผลที่ตอบมาพอสังเขป
11. จงบรรยายลักษณะการโจมตีแบบพบกันครึ่งทาง พรอมทั้งอภิปรายถึงแนวทางปองกันที่เปนไปได

159
บทที่ 12
วิทยาการรหัสลับประยุกต ตอนหนึ่ง

12.1 การกระจายกุญแจ
ปญหาหนึ่งที่มผี ลกระทบตอการนําวิทยาการรหัสลับไปใชงานในทางปฏิบัติ ไมวาจะใชอัลกอริทึม
สมมาตรหรืออสมมาตรก็คือ ปญหาการกระจายกุญแจ ซึ่งโดยปกติ ระบบการเขารหัสลับที่ใชอัลกอริทึม
สมมาตรเปนหลัก มักจะเกิดปญหาในดานการจัดเตรียม (Set Up) กุญแจที่ใชระหวางผูใชงานในระบบ
ยกตัวอยางเชน ในกรณีที่นายดําตองการติดตอสื่อสารกับนายแดงอยางเปนความลับโดยใชการเขารหัสลับ
แบบสมมาตร แตนายดําอยูคนละประเทศกับนายแดง พวกเขาทั้งสองจะจัดเตรียมกุญแจที่ใชในการเขาและ
ถอดรหัสลับ ในตอนแรกสุดกอนที่จะมีการสื่อสารที่เปนความลับไดอยางไร เนื่องจากชองทางการสื่อสารที่
มีอยูในปจจุบนั ไมวาจะเปนทางอินเทอรเน็ต หรือทางโทรศัพท ถือวาเปนชองทางสาธารณะและไมมีความ
ปลอดภัยใดๆ เลย สําหรับระบบการเขารหัสลับที่ใชอัลกอริทึมอสมมาตรเปนหลัก หรือระบบการเขารหัส
ลับลูกผสม ก็มีปญหาในดานการกระจายกุญแจเชนเดียวกัน ยกตัวอยางเชน การที่นายดําไดรับกุญแจ
สาธารณะของนายแดงมาโดยที่ไมไดรับมากับมือจากนายแดง นายดําจะรูไดอยางไรวากุญแจสาธารณะที่
ไดมานี้เปนของนายแดงจริงๆ ไมใชของคนอื่นที่แอบอางมา การแกปญ  หาการกระจายกุญแจในระบบแรก
นั้น จะอยูบนแนวคิดของการนําศูนยกลางกระจายกุญแจ (Key Distribution Center, KDC) มาประยุกตใช
งานเปนหลัก ขณะที่การแกปญหาในระบบหลังนั้น จะอยูบนแนวคิดของการนําใบรับรอง (Certificate) และ
โครงสรางพื้นฐานกุญแจสาธารณะ (Public Key Infrastructure, PKI) มาประยุกตใชงานเปนหลัก

12.2 ระบบการกระจายกุญแจสมมาตร
ในระบบการกระจายกุญแจสมมาตร จําเปนตองมีกลุมผูใชงานที่ไวใจได (Trusted Party) ทําหนาที่
เปนศูนยกลางกระจายกุญแจ หรือ KDC การใช KDC นอกจากจะชวยในเรื่องของการกระจายกุญแจแลว ยัง
ชวยลดจํานวนกุญแจที่มหี รือใชงานอยูใ นระบบได ซึ่งโดยปกติ ถามีผูใชงานในระบบ n คน จะมีจํานวน
กุญแจในระบบทั้งสิ้น n(n-1)/2 ดอก แตเมือ่ นํา KDC มาใชแลว จํานวนกุญแจในระบบจะลดลงเหลือ n ดอก
เทานั้น กลาวคือ ผูใชงานแตละคนจะเก็บรักษาแตกุญแจที่ใชในการติดตอกับ KDC เพียง 1 ดอกเทานั้น เวลา
ที่ตองการติดตอกับผูใชงานคนอื่นๆ ก็จะติดตอกับ KDC เพื่อให KDC สรางกุญแจชวงเวลา (Session Key)
สําหรับการติดตอกับผูใชงานคนนั้นขึ้นมาใหม ขั้นตอนการทํางานของ KDC สามารถสรุปไดดังนี้ ดูรูปที่
12.1 ประกอบ

160
1. นายดํา (User A) สงขอความไปให KDC ในขอความประกอบดวย เอกลักษณ (Identity) ของ
นายดํา (A) และชื่อของบุคคลที่นายดําตองการจะติดตอดวย ในที่นี้คือนายแดง (User B’s
Identity) ขอความนี้ไมจําเปนตองเขารหัสลับใดๆ ทั้งสิ้น
2. เมื่อ KDC ไดรบั ขอความจากนายดําแลว จะสรางสิ่งที่เรียกวาตั๋ว (Ticket) ขึ้นมา ซึ่งตั๋วในที่นี้
ประกอบดวย เอกลักษณของนายดํา เอกลักษณของนายแดง (B) และกุญแจชวงเวลาสําหรับการ
ติดตอระหวางนายดํากับนายแดง (KA_B) ในรูปของขอความรหัสที่ผานการเขารหัสลับดวย
กุญแจของนายแดง (KB) ตั๋วที่ออกใหนี้จะนํามารวมกับ KA_B แลวเขารหัสลับดวยกุญแจของ
นายดํา (KA) ผลลัพธที่ไดจะสงใหนายดํา เมื่อนายดําไดรบั ขอความรหัสจาก KDC แลวจะทําการ
ถอดรหัสลับเพื่อใหได KA_B และตั๋วสําหรับติดตอกับนายแดง
3. นายดําสงตัว๋ ทีม่ ีอยูใหนายแดง เมื่อนายแดงถอดรหัสลับตั๋วที่สงมาแลวก็จะทราบวา นายดํา
ตองการติดตอกับตนเองโดยใช KA_B เปนกุญแจชวงเวลา

รูปที่ 12.1 การทํางานของ KDC ในระบบการกระจายกุญแจสมมาตร

หลังจากขั้นตอนที่ 3 ไปแลว นายดํากับนายแดงจะสามารถติดตอสื่อสารถึงกันอยางเปนความลับได


โดยใช KA_B เปนกุญแจชวงเวลา ใหสังเกตวา นายขาวผูทไี่ มประสงคดสี ามารถดักฟงการสื่อสารระหวาง
นายดํากับนานแดง นายขาวอาจคัดลอก (Copy) ตั๋วที่นายดําสงใหนายแดงในขั้นตอนที่ 3 และสงใหนายแดง
ใหมในภายหลังก็ได ซึ่งในกรณีนี้ ถึงแมนายขาวจะไมสามารถถอดรหัสลับเพื่อใหไดมาซึ่ง KA_B ได แตนาย
ขาวก็สามารถทําใหนายแดงเขาใจผิดคิดวานายดําสงตัว๋ กลับมาใหมได การโจมตีในลักษณะของการสง
ขอความซ้ําๆ ไปยังผูรับนั้นจะรูจักกันในชือ่ การโจมตีแบบเลนซ้ํา (Replay Attack) เพื่อแกปญหาการโจมตี
แบบเลนซ้ํา นักสรางรหัสลับ Needham และ Schroeder จึงไดพัฒนาโพรโทคอลเพื่อใชในการกระจาย
กุญแจสมมาตรขึ้นเรียกวา โพรโทคอล Needham-Schroeder ซึ่งเปนรากฐานของอีกหลายๆ โพรโทคอลที่
มีการใชงานกันอยูในปจจุบนั การทํางานของโพรโทคอลที่กลาวมานีจ้ ะอยูบนพื้นฐานของการปฏิสัมพันธ
แบบทาทาย-ตอบสนอง (Challenge-response Interaction) ระหวางผูใ ชงานในระบบ ในโพรโทคอล
Needham-Schroeder รุนลาสุด (Latest Version) ไดมกี ารใชนอนซ (Nonce) ที่แตกตางกันถึง 4 ตัว

161
นอนซในที่นี้ หมายถึงตัวเลขสุมที่มีคามากๆ ที่นํามาใชงานเพียงครั้งเดียวเทานั้น ขัน้ ตอนการทํางานของโพร
โทคอล Needham-Schroeder สามารถสรุปไดดังนี้ ดูรูปที่ 12.2 ประกอบ
1. นายดําสงขอความที่แสดงเอกลักษณของตนใหนายแดง เพื่อแจงใหนายแดงทราบวาตนเอง
ตองการติดตอดวย
2. เมื่อนายแดงไดรับขอความแลวจะสรางนอนซ RB ขึ้นมา ทําการเขารหัสลับ RB ดวยกุญแจของ
ตน (KB) แลวสงขอความรหัสผลลัพธที่ไดใหนายดํา นายดําจะใชขอความรหัสนี้เพื่อพิสูจนกับ
KDC วา ตนเองไดติดตอกับนายแดงมาแลว
3. นายดําสงขอความให KDC ในขอความประกอบดวย คานอนซของตนเอง (RA) เอกลักษณของ
นายดํา (A) เอกลักษณของนายแดง (B) และขอความรหัสที่ไดรับมาจากนายแดง
4. KDC สงขอความที่เขารหัสลับดวยกุญแจของนายดํา (KA) ใหกับนายดํา ในขอความ
ประกอบดวย คานอนซของนายดํา (RA) เอกลักษณของนายแดง (B) กุญแจชวงเวลาสําหรับนาย
ดํากับนายแดง (KA_B) และตัว๋ สําหรับติดตอกับนายแดง ซึ่งตั๋วในทีน่ ี้ประกอบดวย กุญแจ
ชวงเวลา (KA_B) เอกลักษณของนายดํา (A) และคานอนซของนายแดง (RB) ในรูปของขอความ
รหัสที่ผานการเขารหัสลับดวยกุญแจของนายแดง (KB)
5. เมื่อนายดําทําการถอดรหัสลับขอความรหัสที่สงมาจาก KDC แลว จะสงตั๋วที่ไดรับมาใหนาย
แดงพรอมกับคานอนซตัวใหม (R1) ที่เขารหัสลับดวย KA_B ในฐานะคําทาทาย (Challenge)
ใหกับนายแดง
6. นายแดงตอบสนอง (Response) คําทาทายของนายดําโดยการลบหนึ่งออกจาก R1 และสง
ผลลัพธที่ได (R1-1) พรอมกับคานอนซตัวใหม (R2) ในฐานะคําทาทายใหกับนายดํา โดยขอมูล
ทั้งสองที่สงไปจะถูกเขารหัสลับดวย KA_B กอน
7. นายดําตอบสนองคําทาทายของนายแดง โดยการลบหนึง่ ออกจาก R2 และสงผลลัพธที่ไดให
นายแดง โดยขอมูลที่สงไปนี้จะถูกเขารหัสลับดวย KA_B กอน

162
รูปที่ 12.2 การทํางานของโพรโทคอล Needham-Schroeder

12.3 โพรโทคอล Kerberos


ปญหาหนึ่งที่มักพบเมื่อมีการใชงานทรัพยากร (Resources) ในระบบเครือขายก็คือ บุคคลที่ไมไดรับ
อนุญาต (Unauthorized Person) แอบลักลอบเขามาใชงาน หรือเปลี่ยนแปลงแกไขทรัพยากรเหลานั้นไดงายๆ
ยกตัวอยางเชน เมื่อนายดําทําการลงบันทึกเขาใช (Login) สถานีงาน (Workstation) เครื่องหนึ่ง โดยปกตินาย
ดําจะตองปอนชื่อผูใช (User Name) และรหัสผาน (Password) ของตนเองลงในสถานีงาน จากนั้นสถานีงาน
นั้นก็จะทําการตรวจสอบสิทธิการใหอํานาจเขาถึง (Access Authorization) ของนายดํา ซึ่งเมื่อผานชวงเวลา
ของการลงบันทึกเขาใช (Login Session) ไปแลว นายดําจะสามารถใชทรัพยากรตางๆ ที่เชื่อมตอเปนเครือขาย
กับสถานีงานตัวนั้นได เชน เครื่องแมขายแฟมขอมูล (File Server) เปนตน ในชวงที่นายดํากําลังใชงานเครื่อง
แมขายแฟมขอมูล การสื่อสารระหวางนายดํากับเครื่องแมขายนั้นๆ จะไมไดรับการปองกันใดๆ ทั้งสิ้น
ผูใชงานคนอื่นในระบบสามารถแอบลักลอบดักฟงการสื่อสารระหวางนายดํากับเครื่องแมขาย และนําขอมูล
เหลานั้นมาใชใหเกิดประโยชนกับตนเองในภายหลังได กลาวโดยสรุปก็คือ การสื่อสารที่เกิดขึ้นในระหวางที่มี
การใชงานทรัพยากรในเครือขายไมมีความปลอดภัยและมีโอกาสถูกลักลอบดักฟงจากผูที่ไมประสงคดีได
ตลอดเวลา
เพื่อปองกันปญหาที่กลาวมาขางตน โพรโทคอล Kerberos จึงไดรับการคิดคนพัฒนาขึ้นเพื่อใชใน
การพิสูจนตัวจริงผูใชงานในระบบเครือขาย ใหสังเกตวา โพรโทคอล Kerberos จะชวยเพิ่มความปลอดภัยใน
ดานการพิสูจนตัวจริงของระบบสื่อสารผานเครือขายอินเทอรเน็ตในระดับชั้นการประยุกต ในปจจุบัน โพร
โทคอล Kerberos ไดพัฒนามาจนถึงรุนที่ 4 และ 5 แลว โดยรุนที่ 4 จะมีการใชงานกันอยางแพรหลาย
มากกวารุนที่ 5 ในที่นี้เราจะศึกษาการทํางานของโพรโทคอล Kerberos รุนที่ 4 เปนหลัก โดยในตอนทายจะ
กลาวถึงความแตกตางระหวางโพรโทคอล Kerberos รุนที่ 4 และ 5

163
ในสวนของการทํางาน จะมีเครื่องแมขายที่เกี่ยวของกับโพรโทคอล Kerberos อยู 3 ตัว คือ เครื่องแม
ขายพิสูจนตัวจริง (Authentication Server, AS) เครื่องแมขายออกตั๋ว (Ticket Granting Server, TGS) และ
เครื่องแมขายจริง (Real Server, RS) ดูรูปที่ 12.3 ประกอบ
1. เครื่องแมขายพิสูจนตัวจริง (AS) ทําหนาที่เปนศูนยกระจายกุญแจ (Key Distribution Center,
KDC) ในขั้นตอนการดําเนินงาน จะสมมติใหผูใชงานแตละคนไดทําการลงทะเบียน
(Register) กับ AS และไดรับชื่อผูใชและรหัสผานของตนเองไปเก็บไวแลว ซึ่ง AS ในตอนนี้
จะเปนเสมือนฐานขอมูลที่เก็บชื่อผูใชและรหัสผานของผูใชงานทุกๆ คนในระบบไว
2. เครื่องแมขายออกตั๋ว (TGS) ทําหนาที่ออกตั๋วสําหรับการนําไปใชงานกับเครื่องแมขายจริง โพร
โทคอล Kerberos จะแยกระบบการพิสูจนยืนยันบุคคล (User Verification) จากระบบการ
ออกตั๋ว ทําใหผูใชงานจําเปนตองพิสูจนยนื ยันตนเองกับ AS เพียงครัง้ เดียว หลังจากนั้นก็
สามารถติดตั้งกับ TGS มากกวา 1 ครั้งเพื่อขอออกตั๋วสําหรับนําไปใชงานกับเครื่องแมขายจริง
เครื่องอื่นๆ ไดโดยไมตองทําการพิสูจนยนื ยันบุคคลอีก
3. เครื่องแมขายจริง (RS) จะทําหนาที่ใหบริการผูใชงานในเครือขายที่ถือตั๋วอยู โพรโทคอล
Kerberos ไดรับการออกแบบมาสําหรับโปรแกรมใชงานประเภทเครื่องลูกขาย-แมขาย
(Client-server) เชน โปรแกรม FTP (File Transfer Protocol) เปนตน เพื่อใหผูใชงานได
เขาถึงและใชงานทรัพยากรของระบบเครือขายไดสะดวกและปลอดภัย

รูปที่ 12.3 การติดตอสื่อสารระหวางที่เกิดขึ้นในโพรโทคอล Kerberos

โดยการสมมติใหนายดํา (User A) คือผูใชงานในระบบที่ตองการใชทรัพยากรที่อยูในเครื่องแมขาย


จริง (Real Server, RS) โดยผานโพรโทคอล Kerberos นายดําจะตองดําเนินการตามขั้นตอนดังตอไปนี้ ดูรูป
ที่ 12.4 ประกอบ
1. หลังจากที่นายดําทําการลงบันทึกเขาใชสถานีงานแลว นายดําจะสงคํารองขอ (Request) ไปที่
AS โดยคํารองขอที่จะสงจะไมมีการเขารหัสลับใดๆ

164
2. AS จะสงขอความรหัสที่เขารหัสลับดวยกุญแจของนายดํา (KA) ซึ่งจัดเตรียมไวตอนที่นายดํา
ลงทะเบียนครัง้ แรกกับ AS ขอความรหัสที่สงมานี้ภายในจะประกอบดวย กุญแจชวงเวลา
สําหรับการติดตอระหวางนายดํากับ TGS (KA_TGS) และตัว๋ ใบหนึ่งสําหรับใชติดตอกับ TGS
ตั๋วใบหนึ่งในที่นี้ก็คือ เอกลักษณของนายดํา (A) กับกุญแจชวงเวลา(KS) ที่ผานการเขารหัสลับ
ดวยกุญแจสมมาตรของ TGS (KTGS) เมื่อนายดําไดรับขอความรหัสแลวจะทําการถอดรหัสลับ
เพื่อใหได KA_TGS และตัว๋ ที่ใชติดตอกับ TGS
3. นายดําสงขอความให TGS ในขอความประกอบดวยขอมูล 3 สวนคือ ตั๋วที่ใชตดิ ตอกับ TGS
เครื่องแมขายจริง (RS) ที่นายดําตองการใชบริการ และตราเวลา (Time Stamp, T) เขารหัสลับ
ดวยกุญแจชวงเวลา KA_TGS
4. TGS สงตั๋วใหนายดํา 2 ใบ แตละใบจะประกอบดวยกุญแจชวงเวลาสําหรับการติดตอกับ RS
(KA_RS) ตั๋วสําหรับนายดําจะถูกเขารหัสลับดวย KA_TGS ตัว๋ สําหรับ RS จะถูกเขารหัสลับดวย
กุญแจสมมาตรของ RS (KRS) ใหสังเกตวาคนที่แอบดักฟงการสื่อสารอยูจะไมสามารถหาคา
KA_RS ได เนื่องจากไมรูคา KA_TGS และ KRS
5. นายดําสงตัว๋ ทีใ่ ชติดตอกับ RS พรอมกับตราเวลา (T) ที่เขารหัสลับดวยกุญแจชวงเวลา KA_RS
ให RS
6. RS ทําการตอบรับโดยการบวกหนึ่งที่ตราเวลา (T+1) จากนั้นทําการเขารหัสลับผลลัพธที่ได
ดวย KA_RS แลวสงใหนายดํา

รูปที่ 12.4 ขั้นตอนการทํางานของโพรโทคอล Kerberos

หลังจากขั้นตอนที่ 6 นายดําสามารถรองขอและรับบริการจาก RS ไดโดยผานการสื่อสารที่เขารหัส


ลับดวย KA_RS ใหสังเกตวาในกรณีที่นายดําตองการใชบริการจากเครื่องแมขายจริงเครื่องอื่นๆ นายดําเพียงแต
ดําเนินการขั้นตอนที่ 3-6 เทานั้น เนื่องจากใน 2 ขั้นตอนแรกนายดําไดพิสูจนตนเองกับ TGS ไปแลว

165
12.3.1 ความแตกตางระหวาง Kerberos รุนที่ 4 และ 5
โพรโทคอล Kerberos รุนที่ 5 ไดรับการปรับปรุงมาจากรุนที่ 4 โดยที่ความแตกตางระหวางโพรโท
คอลทั้ง 2 รุนสามารถสรุปอยางยอๆ ไดดังนี้
1. รุนที่ 5 มีอายุใชงาน (Lifetime) ของตั๋วที่ยาวนานกวา
2. รุนที่ 5 อนุญาตใหทําการตออายุ (Renewed) ตั๋วที่ออกมาแลวได
3. รุนที่ 5 รองรับอัลกอริทึมสมมาตรไดทุกอัลกอริทึม ขณะที่รุนที่ 4 รองรับเพียง DES
4. รุนที่ 5 สามารถใชงานกับโพรโทคอลในเครือขายไดหลากหลายกวา ขณะที่รุนที่ 4 จะรองรับ
การใชงานเฉพาะโพรโทคอล IP เทานั้น
5. รุนที่ 5 ลดความซับซอนในขั้นตอนการพิสจู นตัวจริงระหวาง AS และ TGS ที่อยูตางพื้นที่กัน

12.4 คําถามทายบท
1. จงอภิปรายถึงขอดี ขอเสียของศูนยกลางกระจายกุญแจ หรือ KDC ที่ใชในระบบการกระจายกุญแจ
สมมาตร
2. จงใหคําจํากัดความของโพรโทคอล Kerberos และวัตถุประสงคในการนํามาใชงาน
3. จงอธิบายหลักการทํางานของโพรโทคอล Kerberos อยางยอๆ มีอุปกรณใดบางที่เกี่ยวของกับการทํางาน
ของโพรโทคอล Kerberos และมีความเกี่ยวของในสวนใด

166
บทที่ 13
วิทยาการรหัสลับประยุกต ตอนสอง

13.1 การกระจายกุญแจอสมมาตรและโครงสรางพื้นฐานกุญแจสาธารณะ
ในระบบการกระจายกุญแจอสมมาตรหรือกุญแจสาธารณะ จําเปนตองมีผูมีอํานาจออกใบรับรอง
(Certification Authority, CA) ซึ่งเปนกลุมคนที่ผูใชงานทุกคนในระบบไววางใจ เชน เมื่อมีการรองขอ
กุญแจสาธารณะของบุคคลใดบุคคลหนึ่งจากผูใชงานในระบบ ตัว CA ซึ่งมีกุญแจสาธารณะของผูใชงาน
ทุกๆ คนในระบบเก็บอยู อาจทําการเซ็นชื่อ (Sign) กุญแจสาธารณะของบุคคลคนนั้นพรอมกับตราเวลาดวย
กุญแจสวนตัวของตนเอง แลวสงผลลัพธที่ไดใหผูใชงานคนนั้น ดูรูปที่ 13.1 ประกอบ ซึ่งแนวคิดในการ
แกปญหาแบบนี้จะตั้งอยูบนสมมุติฐานที่วา ผูใชงานในระบบทุกคนรูคากุญแจสาธารณะของ CA อยางไรก็
ตาม จุดออนของระบบการกระจายกุญแจสาธารณะขางตนก็คือ เมื่อมีผูใชงานในระบบมากขึ้นปริมาณงาน
ของ CA ก็จะเพิ่มมากขึ้นดวยเชนกัน เพื่อแกปญหานี้ CA อาจทําการออกใบรับรองกุญแจสาธารณะ (Public
Key Certificate) ใหกับผูใชงานในระบบ เพื่อที่วาเมื่อผูใชงานมีการติดตอสื่อสารระหวางกัน ผูใชงานทั้ง
สองสามารถใชใบรับรองกุญแจสาธารณะที่ไดรับมาจาก CA เพื่อยืนยันกับอีกฝายหนึ่งไดโดยไมตองติดตอ
กับ CA ยกตัวอยางเชน เมื่อนายดําตองการขอให CA ออกใบรับรองกุญแจสาธารณะให CA ก็จะทําการ
ตรวจสอบเอกลักษณของนายดํากอน ซึ่งในที่นี้ อาจเปนรูปถายพรอมกับบัญชีธนาคารของนายดําก็ได เปน
ตน เมื่อนายดําผานการตรวจสอบ CA ก็จะใสกุญแจสาธารณะของนายดําลงไปในใบรับรอง (ซึ่งอาจเปน
ไฟลขอมูลขนาดเล็กๆ) พรอมกับขอมูลตางๆ ที่เกี่ยวของ เชน ตราเวลา หรือ สถานที่ที่ออกใบรับรอง เปนตน
CA สามารถปองกันการเปลี่ยนแปลงแกไขใบรับรองที่ออกใหกับนายดําได โดยทําการคํานวณหาคาแฮช
จากใบรับรองพรอมทั้งเซ็นชื่อคาแฮชผลลัพธดวยกุญแจสวนตัวของตนเอง ขั้นตอนนี้ก็คือขั้นตอนการสราง
ลายมือชื่อดิจิทัลนั่นเอง ดูรูปที่ 13.2 ประกอบ เมื่อนายดําไดรับใบรับรองกุญแจสาธารณะจาก CA มาแลว
นายดําอาจเก็บใบรับรองพรอมลายมือชื่อดิจิทัลไวที่ฐานขอมูลกุญแจสาธารณะ เพื่อที่วาเมื่อนายแดงหรือ
ผูใชงานคนอื่นๆ ตองการติดตอกับนายดํา นายแดงจะสามารถหยิบเอาใบรับรองกุญแจสาธารณะของนายดํา
พรอมลายมือชื่อดิจิทัลที่อยูในฐานขอมูลนั้นไปใชไดทันที ทั้งนี้นายแดงสามารถพิสูจนยืนยันความถูกตอง
ขอมูลไดจากลายมือชื่อดิจิทัลที่มาพรอมกับใบรับรอง

167
รูปที่ 13.1 การรองขอกุญแจสาธารณะจาก CA

รูปที่ 13.2 การรองขอใบรับรองจาก CA

ถึงแมการใชใบรับรองกุญแจสาธารณะจะชวยปองกันปญหาการฉอฉล (Fraud) ที่อาจเกิดขึ้นใน


ระบบการกระจายกุญแจ แตวิธีการนี้ก็สรางผลกระทบขางเคียงตามมาเชนกัน กลาวคือ ใบรับรองที่ออกโดย
CA ที่ตางกันอาจมีรูปแบบ (Format) ที่แตกตางกัน สงผลใหผูใชงานที่ตองการติดตอกับคนอื่นๆ ที่อยูนอก
ระบบหรือนอกเครือขาย และใชใบรับรองกุญแจสาธารณะที่มีรูปแบบตางกัน เกิดอุปสรรคในการ
ติดตอสื่อสารกันได เพื่อแกปญหาของความเขากันไมได (Incompatibility) ระหวางใบรับรองที่ออกโดย
CA ที่ตางกัน สหภาพโทรคมนาคมระหวางประเทศ (International Telecommunication Union, ITU) จึง
ไดพัฒนาโพรโทคอลใชสําหรับออกใบรับรองกุญแจสาธารณะขึ้นมาเรียกวา โพรโทคอล X.509 โดยมี
จุดประสงคที่จะสรางมาตรฐานสําหรับการประยุกตใชงานใบรับรองกุญแจสาธารณะใหเหมือนกันและเขา
กันไดทุกระบบทั่วโลก รายละเอียดของโพรโทคอล X.509 สามารถศึกษาเพิ่มเติมไดจาก [STAL98]
ในทางปฏิบัติ เมื่อมีผูใชงานในระบบจํานวนมากเกิดขึ้น การมี CA เพียงจุดเดียวจะไมสามารถ
รองรับผูใชงานในระบบไดทั้งหมด ฉะนั้นการมี CA หลายๆ จุดตั้งกระจายอยูในพื้นที่ตางๆ คอยดูแล
รับผิดชอบ และใหบริการผูใชงานในระบบอยางเหมาะสม จึงเปนทางออกสําหรับปญหานี้ อยางไรก็ตาม
การเชื่อมตอ CA หลายๆ จุดเขาดวยกัน เพื่อใหมีการทํางานประสานกันและควบคุมดูแลซึ่งกันและกันได
จําเปนตองมีโครงสรางการเชื่อมตอในลักษณะที่เปนโครงสรางเชิงลําดับชั้น (Hierarchical Structure) ซึ่ง
เรียกโดยทั่วไปวา โครงสรางพื้นฐานกุญแจสาธารณะ ดูรูปที่ 13.3 ประกอบ จุดเดนของโครงสรางการเชื่อม

168
CA ในลักษณะนี้ก็คือ ผูใชงานในระบบสามารถเลือกที่จะไววางใจ CA ที่อยูในลําดับชั้นตางๆ อยางไมเทา
เทียมกันได

รูปที่ 13.3 โครงสรางพื้นฐานกุญแจสาธารณะ

จากรูปโครงสรางในระดับที่หนึ่งจะประกอบดวย CA ราก (Root CA) เพียงจุดเดียวเทานั้น CA ราก


นี้จะทําหนาที่หลักคือ รับรองการทํางานของ CA ที่อยูในระดับที่สอง ซึ่งอาจตั้งกระจายอยูในพื้นที่ที่
รับผิดชอบเปนบริเวณกวาง เชน ในระดับประเทศ โดย CA แตละจุดที่อยูในระดับที่สองก็จะทําหนาที่หลัก
คือ รับรองการทํางานของ CA ที่อยูในระดับที่สาม ซึ่งอาจตั้งกระจายอยูในพื้นที่รับผิดชอบที่มีขนาดเล็กลง
มา เชน ในระดับจังหวัด ซึ่งในโครงสรางลําดับชั้นแบบนี้ ผูใชงานในระบบทุกคนจะไววางใจ CA ราก แต
ผูใชงานบางคนอาจไมไววางใจ CA ที่อยูระดับอื่นๆ ได ยกตัวอยางเชน เมื่อนายดําตองการใบรับรองของ
นายแดง นายดําอาจไปติดตอที่ CA ในระดับที่สามเพื่อขอรับขอมูลนั้นๆ ถานายดําไมไววางใจใบรับรองที่
ไดมาจาก CA ระดับที่สาม นายดําอาจติดตอไปที่ CA ที่อยูเหนือขึ้นไปในระดับที่สอง เพื่อตรวจสอบและขอ
คํารับรองวา CA ที่ตนเองติดตออยูเปน CA ตัวจริง ถายังไมมั่นใจ นายดําสามารถตรวจสอบและขอคํารับรอง
จาก CAที่อยูในระดับเหนือขึ้นไปเรื่อยๆ จนถึง CA รากก็ได

13.2 การประยุกตใชงานในระบบเครือขายคอมพิวเตอร
ในระบบเครือขายคอมพิวเตอร เชน อินเทอรเน็ต ขอมูลที่มีการสงผานเครือขายมักจะอยูในรูปของ
ขอความตนฉบับ ไมมีการปองกันทางดานวิทยาการรหัสลับใดๆ ทั้งสิ้น สงผลใหผูที่มีความรูทางดานการ
สื่อสารผานเครือขายอินเทอรเน็ตเพียงเล็กนอย ก็สามารถโจมตีระบบโดยการลักลอบดักฟง เปลี่ยนแปลง
แกไขขอมูลตางๆ ที่สงผานไปมาภายในเครือขายอินเทอรเน็ตได จึงไดมีการนําวิทยาการรหัสลับมา
ประยุกตใชในระบบสื่อสารคอมพิวเตอร
ปจจุบันการสื่อสารในเครือขายคอมพิวเตอรจะมีโครงสรางเปนแบบระดับชั้น (Layer) และมีการ
เชื่อมตอระหวางอุปกรณที่ใชสื่อสารถึงกันเปนแบบ การเชื่อมตอระหวางระบบเปด (Open Systems
Interface, OSI) หรือเรียกสั้นๆ วาแบบจําลองโอเอสไอ (OSI Model) ซึ่งแบบจําลองโอเอสไอนี้จะ

169
ประกอบไปดวยระดับชั้นการสงขอมูล 7 ระดับชั้น ดูรูปที่ 13.4 ประกอบ แตละระดับชั้นจะมีหนาที่ดูแล
รับผิดชอบการสื่อสารขอมูลภายในเครือขายคอมพิวเตอรที่แตกตางและเปนอิสระตอกัน การทํางานในแตละ
ระดับชั้นจะควบคุมโดยโพรโทคอลที่ออกแบบมาเฉพาะทางเพื่อทําภารกิจที่กําหนดไวสําหรับระดับชั้นนั้นๆ
ใหสําเร็จ โพรโทคอลที่นํามาใชในเครือขายคอมพิวเตอรอยางแพรหลายในปจจุบัน โดยเฉพาะเครือขาย
อินเทอรเน็ต ก็คือ กลุมโพรโทคอล TCP/IP เนื่องจากกลุมโพรโทคอล TCP/IP (TCP/IP Suite) ไดรับการ
พัฒนามากอนแบบจําลองโอเอสไอจึงทําใหจํานวนระดับชั้นการทํางานที่กลุมโพรโทคอล TCP/IP ควบคุม
ซึ่งมีอยู 4 ระดับชั้นไมตรงกับจํานวนระดับชั้นการทํางานที่มีอยูในแบบจําลองโอเอสไอ [FORO07] อยางไร
ก็ตามการทํางานในกลุมโพรโทคอล TCP/IP ไดครอบคลุมถึงการสื่อสารขอมูลภายในเครือขายคอมพิวเตอร
ทั้งหมด ดังนั้นเราสามารถนําระดับชั้นการทํางานที่กลุมโพรโทคอล TCP/IP รับผิดชอบมาเทียบกับ
ระดับชั้นการทํางานที่มีอยูในแบบจําลองโอเอสไอได ดังแสดงในรูปที่ 13.4 ใหสังเกตวา ที่อยู (Address) ที่
ใชในการสื่อสารขอมูลในแตละระดับชั้นจะมีชื่อเรียกแตกตางกันไป รายละเอียดของโพรโทคอลยอยตางๆ
เชน SMTP, FTP, SCTP, TCP, UTP, IP และอื่นๆ ที่ประกอบอยูในกลุมโพรโทคอล TCP/IP สามารถหา
อานเพิ่มเติมไดจากหนังสือทางดานการสื่อสารขอมูลผานเครือขายคอมพิวเตอรหรือเครือขายอินเทอรเน็ต
ทั่วๆ ไป

รูปที่ 13.4 กลุมโพรโทคอล TCP/IP เทียบกับแบบจําลองโอเอสไอ

เนื้อหาที่เหลือในบทนี้รวมทั้งในบทถัดไปจะครอบคลุมในสวนของการนําวิทยาการรหัสลับมา
ประยุกตใชในระบบสื่อสารคอมพิวเตอรที่ระดับชั้นการทํางานตางๆ ในครึ่งแรกของบท เราจะศึกษาการ
ทํางานของ 3 โพรโทคอลหลักประกอบดวย PGP, IPSec และ SSL ที่ออกแบบมาเพื่อสนับสนุนฟงกชัน
การทํางานที่เกี่ยวของกับระบบความปลอดภัยของขอมูลที่สงผานระบบเครือขายคอมพิวเตอร ซึ่งจะเนนไป
ที่เครือขายอินเทอรเน็ตเปนหลัก

170
13.3 โพรโทคอล PGP
PGP หรือ Pretty Good Privacy คือ โพรโทคอลหนึ่งที่ใชสําหรับเพิ่มความปลอดภัยใหกับการ
สื่อสารขอมูลที่สงผานเครือขายอินเทอรเน็ตในระดับชั้นการประยุกต ซึ่งเปนการสื่อสารขอมูลระหวาง
กระบวนการถึงกระบวนการ (Process-to-process) โพรโทคอล PGP ไดมีการคิดคนและพัฒนาขึ้นโดย
นักสรางรหัสลับ Phil Zimmerman [ZIMM95] เพื่อใชในการรักษาความลับ การพิสูจนตัวจริง และบูรณ
ภาพของไปรษณียอิเล็กทรอนิกสหรืออีเมล (Electronic mail, E-mail) ที่สงถึงกันระหวางผูใชงานภายใน
เครือขายอินเทอรเน็ต รูปที่ 13.5 แสดงตําแหนงการประยุกตใชโพรโทคอล PGP ในระดับชั้นการประยุกต
ใหสังเกตวาชุดโพรโทคอล PGP จะทํางานรวมกันกลุมโพรโทคอล TCP/IP ในระดับชั้นที่ 5

รูปที่ 13.5 PGP เมื่อเทียบกับการทํางานของกลุมโพรโทคอล TCP/IP

การใชงาน PGP อยางปลอดภัยในเครือขายอินเทอรเน็ตจะตั้งอยูบนสมมติฐานที่วา ผูใชงาน PGP


ในกลุมจะรูและมีกุญแจสาธารณะของผูใชงานคนอื่นๆ ที่เหลือ เมื่อมีการสงอีเมลถึงกัน เชน นายดําตองการ
สงอีเมลถึงนายแดง นายดําจะตองดําเนินการตามขั้นตอนดังตอไปนี้ ดูรูปที่ 13.6 ประกอบ
1. นายดํา (User A) สรางกุญแจชวงเวลาแบบสุมขึ้นมา 1 ดอกเพื่อใชในการเขาและถอดรหัสลับ
แบบสมมาตร จากนั้นนําไปรวมกับขอมูลที่ใชบงบอกถึงอัลกอริทึมสมมาตรที่จะใชรวมกับ
กุญแจดอกนี้ (Symmetric Algorithm Identification, SA) ตอมาใหทําการเขารหัสลับผลลัพธที่
ไดดวยกุญแจสาธารณะของนายแดง (B’s public key) จากนั้นจึงนําผลลัพธที่ไดไปรวมกับ
ขอมูลที่ใชบงบอกถึงอัลกอริทึมกุญแจสาธารณะตัวที่หนึ่ง (Public Key Algorithm 1, PA1)
ผลลัพธที่ไดจากขั้นตอนที่ 1 เขียนแสดงในรูปของสมการไดดังนี้
Output 1 = PA1 // (B’s public key (SA // Ksession)

2. ทําการคํานวณหาคาแฮชจากอีเมลตนฉบับ (M) และใชอัลกอริทึมกุญแจสาธารณะตัวที่ 2 ใน


การสรางลายมือชื่อดิจิทัล กลาวคือ โดยการเขารหัสลับคาแฮชผลลัพธที่ไดดวยกุญแจสวนตัว
ของตนเอง (A’s private key) ลายมือชื่อดิจิทัลที่ไดจะนําไปรวมกับขอมูลที่ใชบงบอกถึง
อัลกอริทึมกุญแจสาธารณะตัวที่สอง (PA2) และอัลกอริทึมแฮช (Hash Algorithm

171
Identification, HA) ที่ใชในการสรางลายมือชื่อดิจิทัล ผลลัพธที่ไดจากขั้นตอนที่ 2 เขียนแสดง
ในรูปของสมการไดดังนี้
Output 2 = HA // PA2 // EA’s private key (H (M))

3. รวมผลลัพธที่ไดจากขั้นตอนที่ 2 เขากับอีเมลตนฉบับแลวทําการเขารหัสลับขอมูลทั้งหมดโดย
ใชอัลกอริทึมสมมาตรและกุญแจชวงเวลาที่สรางขึ้นในขั้นตอนที่ 1
Output 3 = Esession key (M // Output2)

4. รวมผลลัพธที่ไดจากขั้นตอนที่ 1 และ 3 เขากับกลุมขอมูลสวนหัวของ PGP (PGP Header)


แลวสงผลลัพธที่ได ซึ่งก็คือขอความ PGP ใหนายแดง

รูปที่ 13.6 ขั้นตอนการสงอีเมลโดยใชโพรโทคอล PGP

ที่ฝงผูรับ เมื่อนายแดงไดรับขอความ PGP จากนายดําแลว จะดําเนินการตามขั้นตอนดังนี้


1. นายแดงใชกุญแจสวนตัวของตนเพื่อถอดรหัสลับ Output 1 โดยใชอัลกอริทึมกุญแจสาธารณะ
ตามที่บอกไวใน PA1
2. ใชกุญแจชวงเวลาและอัลกอริทึมสมมาตรที่ไดจากขั้นตอนที่1 เพื่อถอดรหัสลับสวนที่เหลือของ
ขอความ PGP ในขั้นตอนนี้นายแดงจะไดรับผลลัพธเปนอีเมลตนฉบับ ลายมือชื่อดิจิทัล ขอมูล
ที่ใชบงบอกถึงอัลกอริทึมกุญแจสาธารณะตัวที่สอง และอัลกอริทึมแฮชที่ใชในการสรางลายมือ
ชื่อดิจิทัล
3. ทําการคํานวณหาคาแฮชจากอีเมลตนฉบับ โดยใชอัลกอริทึมแฮชตามที่บอกไวใน HA
4. ทําการพิสูจนยืนยันลายมือชื่อดิจิทัล โดยการถอดรหัสลับลายมือชื่อดิจิทัลนั้นดวยกุญแจ
สาธารณะของนายดําและอัลกอริทึมกุญแจสาธารณะที่บอกไวใน PA2
5. เปรียบเทียบผลลัพธที่ไดจากขั้นตอนที่ 3 และ 4 ถาผลลัพธที่ไดเหมือนกัน จะเปนการยืนยัน
ความถูกตองของขอความที่อยูในอีเมล ถาผลลัพธที่ไดแตกตางกัน PGP จะตัดอีเมลนั้นทิ้งไป
พรอมทั้งแจงเตือนใหนายแดงทราบ

172
แผนผังการทํางานของ PGP ทั้งทางฝงผูสงและผูรับ แสดงไวในรูปที่ 13.7 และ 13.8 ตามลําดับ

รูปที่ 13.7 แผนผังการทํางานของ PGP ทางฝงผูสง

รูปที่ 13.8 แผนผังการทํางานของ PGP ทางฝงผูรับ

สําหรับอัลกอริทึมกุญแจสาธารณะที่ใชในโพรโทคอล PGP จะประกอบดวยอัลกอริทึม RSA และ


DSA (Digital Signature Algorithm) เปนหลัก สวนอัลกอริทึมสมมาตรที่ใชจะประกอบดวย IDEA, Triple
DES และ AES ขณะที่อัลกอริทึมแฮชจะใช MD5, SHA-1 และ RIPE-MD เปนหลัก

13.4 คําถามทายบท
1. จงใหคําจํากัดความของโพรโทคอล PGP และวัตถุประสงคในการนํามาใชงาน
2. จงอธิบายหลักการทํางานของโพรโทคอล PGP มีอัลกอริทึมชนิดใดบางที่นํามาใชใน PGP
3. จงอธิบายขั้นตอนการเขาและถอดรหัสลับขอมูลในโพรโทคอล PGP
4. จงอธิบายขั้นตอนการพิสูจนตัวจริงและการตรวจสอบบูรณภาพของขอมูลในโพรโทคอล PGP

173
บทที่ 14
วิทยาการรหัสลับประยุกต ตอนสาม

14.1 ชุดโพรโทคอล IPSec


IPSec หรือ IP Security คือ ชุดโพรโทคอลทางดานวิทยาการรหัสลับที่ออกแบบโดย IETF
(Internet Engineering Task Force) โดยมีวัตถุประสงคหลักในการรักษาปลอดภัยของกลุมขอมูล (Data
Packet) ที่สงผานเครือขายอินเทอรเน็ตในระดับชั้นเครือขาย กลาวอีกนัยหนึ่งก็คือ เพื่อเพิ่มความปลอดภัย
ในดานการรักษาความลับและ/หรือการพิสูจนตัวจริงของการสื่อสารอินเทอรเน็ตในระดับชั้นเครือขาย ซึ่ง
เปนการสื่อสารขอมูลระหวางคอมพิวเตอรแมงานถึงแมงาน (Host-to-host) รูปที่ 14.1 แสดงตําแหนงการ
ประยุกตใชชุดโพรโทคอล IPSec ในระดับชั้นเครือขาย ใหสังเกตวาชุดโพรโทคอล IPSec จะแทรกอยู
ระหวางการทํางานกลุมโพรโทคอล TCP/IP ในระดับชั้นที่ 3 และ 4

รูปที่ 14.1 IPSec เมื่อเทียบกับการทํางานของกลุมโพรโทคอล TCP/IP

14.1.1 โหมดการทํางานใน IPSec


ชุดโพรโทคอล IPSec จะประกอบดวยโหมดการทํางาน 2 โหมดคือ โหมดขนสง (Transport
Mode) และโหมดอุโมงค (Tunnel Mode) ในโหมดขนสง IPSec จะทําหนาที่ปดบังเนื้อหาขอมูลที่สงมา
จากระดับชั้นขนสงหรือระดับชั้นที่ 4 ไปยังระดับชั้นเครือขายหรือระดับชั้นที่ 3 กลาวคือ สวนที่ใชบรรจุ
ขอมูล (Payload) ในระดับชั้นเครือขายจะไดรับการปกปดใหเปนความลับโดยขั้นตอนการหอหุม
(Encapsulation) จากชุดโพรโทคอล IPSec ดูรูปที่ 14.2 ประกอบ

174
รูปที่ 14.2 รายละเอียดของ IPSec ในโหมดขนสง

จากรูปใหสังเกตวา สวนหัว (Header) ของกลุมขอมูล IP (IP Packet) ไมไดรับการปกปดจาก


ขั้นตอนการหอหุม มีเพียงสวนที่ใชบรรจุขอมูลที่สงมาจากระดับชั้นขนสงเทานั้นที่ไดรับการปกปดใหเปน
ความลับ การทํางานในโหมดขนสงนี้ สวนหัวและสวนทายของ IPSec (IPSec Header and Trailer) จะ
ถูกเพิ่มเขาไปยังตอนตนและตอนปลายของกลุมขอมูลที่สงมาจากระดับชั้นขนสง โดยปกติ IPSec ในโหมด
ขนสงจะนํามาใชเพื่อปกปดขอมูลที่สงระหวางเครื่องคอมพิวเตอรแมงานถึงแมงานในระดับชั้นเครือขาย
โดยเครื่องแมงานที่ตนทางจะใช IPSec เพื่อเขารหัสลับสวนที่ใชบรรจุขอมูล และ/หรือจัดเตรียมการพิสูจน
ตัวจริงของสวนที่ใชบรรจุขอมูลที่รับมาจากระดับชั้นขนสง ขณะที่เครื่องแมงานที่ปลายทางก็จะใช IPSec
ในการถอดรหัสลับสวนที่ใชบรรจุขอมูล และ/หรือพิสูจนตัวจริงของสวนที่ใชบรรจุขอมูลกอนที่จะสงตอไป
ยังระดับชั้นขนสง รูปที่ 14.3 แสดงการทํางานของ IPSec ในโหมดขนสง

รูปที่ 14.3 การทํางานของ IPSec ในโหมดขนสง

175
ในโหมดอุโมงค IPSec จะทําหนาที่ปดบังกลุมขอมูล IP ทั้งหมด ซึ่งรวมไปถึงสวนหัวของกลุมขอมูล
IP ดวย จากนั้นจึงทําการเพิ่มสวนหัวของ IP ตัวใหมเขาไปยังตอนตนของกลุมขอมูลผลลัพธ ดูรูปที่ 14.4
ประกอบ

รูปที่ 14.4 รายละเอียดของ IPSec ในโหมดอุโมงค

โดยปกติ IPSec ในโหมดอุโมงคจะใชในการปกปดขอมูลที่สงถึงกันระหวาง อุปกรณจัดเสนทาง


(Routers) 2 ตัว หรือระหวางอุปกรณจัดเสนทางและเครื่องแมงาน อาจกลาวโดยสรุปไดวา IPSec ในโหมด
อุโมงคจะนํามาใชเมื่อผูสงหรือผูรับไมใชเครื่องแมงาน ดูรูปที่ 14.5 ประกอบ เหตุผลหลักที่เรียกการทํางาน
ในโหมดนี้วาโหมดอุโมงค เนื่องจากกลุมขอมูลตนฉบับทั้งหมดที่รับมาจากระดับชั้นขนสง จะไดรับการ
ปองกันจากการโจมตีในระหวางสงผานชองทางสื่อสารซึ่งเปรียบเสมือนกับอุโมงคที่สรางขึ้นจากจินตภาพ
(Imaginary Tunnel)

รูปที่ 14.5 การทํางานของ IPSec ในโหมดอุโมงค

176
14.1.2 โพรโทคอลยอยใน IPSec
ชุดโพรโทคอล IPSec จะประกอบดวยโพรโทคอลยอย 2 โพรโทคอลคือ โพรโทคอลการพิสูจนตัว
จริงสวนหัว (Authentication Header, AH) และโพรโทคอลความปลอดภัยของสวนบรรจุขอมูลที่ถูก
หอหุม (Encapsulating Security Payload, ESP) โพรโทคอลยอยทั้งสองนี้จะใชสําหรับการพิสูจนตัวจริง
กลุมขอมูล IP ที่ไดรับมา และ/หรือการเขาและถอดรหัสลับกลุมขอมูล

14.1.2.1 โพรโทคอลยอย AH
โพรโทคอลยอย AH ไดรับการออกแบบมาสําหรับการพิสูจนตัวจริงเครื่องแมงานตนทาง (Source
Host) และบูรณภาพของสวนที่ใชบรรจุขอมูลในกลุมขอมูล IP ในสวนของขั้นตอนการทํางาน โพรโทคอ
ลยอย AH จะใชฟงกชันแฮชและอัลกอริทึมสมมาตร เพื่อสรางขอมูลยอย (Massage Digest) โดยขอมูล
ยอยนี้จะนํามาบรรจุไวในสวนหัวของกลุมขอมูล AH ซึ่งจะเพิ่มเขาไปในตอนตนของสวนที่ใชบรรจุขอมูล
ดูรูปที่ 14.6 ประกอบ

รูปที่ 14.6 โพรโทคอลยอย AH ในโหมดขนสงของ IPSec

ขั้นตอนการทํางานของโพรโทคอลยอย AH สามารถสรุปไดดังนี้
1. เมื่อไดรับขอมูลมาจากระดับชั้นขนสง จะทําการเสริมเต็ม (Padding) ขอมูลเหลานั้นใหมี
จํานวนบิตที่เหมาะสมกับอัลกอริทึมแฮชที่ใช
2. ทําการสรางกลุมขอมูล AH ขึ้นมาแลวเติมคาลักษณะเฉพาะ (Characteristic) ของขอมูลที่
รับมาจากระดับชั้นขนสง พารามิเตอรที่ใชในการพิสจู นตัวจริงของขอมูลนั้นๆ และอื่นๆ ซึ่ง
คาที่เติมลงไปกลุมขอมูล AH นี้จะไมมีการเปลี่ยนแปลงใดๆ ในระหวางการสงขอมูล

177
3. ทําการคํานวณหาคาแฮชจากกลุมขอมูลทั้งหมด ซึ่งประกอบไปดวยสวนหัวของกลุมขอมูล IP
สวนที่ใชบรรจุขอมูลจากระดับชั้นขนสง สวนเสริมเต็ม และกลุมขอมูล AH ในขั้นตอนที่ 3
ผลลัพธของคาแฮชที่ไดหรือขอมูลยอยจะถูกใสไวในกลุมขอมูล AH ในสวนของขอมูลการ
พิสูจนตัวจริง (Authentication Data)
4. ทําการเติมสวนหัวของ IP ที่ตอนตนของกลุมขอมูลผลลัพธ

ขอมูลในกลุมขอมูล AH ที่ไมมีการเปลี่ยนแปลงใดๆ ในระหวางการสงขอมูลมีรายละเอียดดังนี้


• Next Header - ขอมูลขนาด 8 บิต ใชบอกชนิด (Type) ของสวนที่ใชบรรจุขอมูลในกลุม
ขอมูล IP เชน TCP, UDP, ICMP หรือ OSPF
• Payload Length - ขอมูลขนาด 8 บิต ใชบอกความยาวของกลุมขอมูล AH เปนจํานวนเทาของ
4 ไบต โดยไมนับขอมูลใน 8 ไบตแรก ใหสังเกตวา ชื่อที่ตั้งขึ้นมานี้ไมไดสื่อถึงความยาวของ
สวนที่ใชบรรจุขอมูล
• Reserved - ขอมูลขนาด16 บิต สงวนไวสําหรับการใชงานในอนาคต
• Security Parameter Index - ขอมูลขนาด 32 บิต ใชในการกําหนดพารามิเตอรตางๆ ที่ใชใน
การเขารหัสลับ การพิสูจนตัวจริง และบูรณภาพของสวนที่ใชบรรจุขอมูลระหวางผูสงและผูรับ
• Sequence Number - ขอมูลขนาด 32 บิต ใชในการจัดอันดับ (Order) ของลําดับกลุมขอมูลที่
สงระหวางผูสงและผูรับ ใหสังเกตวา เมื่อมีการสงกลุมขอมูลเปนจํานวน 232 กลุมแลว โพรโท
คอลจะตัดการเชื่อมตอทันที ถาการสงขอมูลในครั้งนั้นยังไมเสร็จสิ้น ผูสงและผูรับจําเปนตอง
ทําการเชื่อมตอใหมอีกครั้ง
• Authentication Data - ขอมูลยอยที่ไดจากอัลกอริทึมแฮช ซึ่งขนาดของขอมูลยอยจะขึ้นอยูกับ
อัลกอริทึมแฮชที่ใช ใหสังเกตวา ความยาวของขอมูลสวนนี้มีคาแปรผันได (Variable Length)

14.1.2.2 โพรโทคอลยอย ESP


โพรโทคอลยอย ESP ไดรับการออกแบบมาสําหรับเพิ่มความปลอดภัยในดานการรักษาความลับ
นอกเหนือไปจากการพิสูจนตัวจริงและบูรณภาพของขอมูลที่มีอยูในโพรโทคอลยอย AH ในสวนของ
ขั้นตอนการทํางาน โพรโทคอลยอย ESP จะเติมทั้งสวนหัวและสวนทายเพิ่มเขาไปในตอนตนและตอนทาย
ของขอมูลที่รับมาจากระดับชั้นขนสง ดูรูปที่ 14.7 ประกอบ ใหสังเกตวา ขอมูลที่ใชพิสูจนตัวจริงใน ESP
จะถูกเติมเขาไปที่ตอนทายของกลุมขอมูลที่ใชในการคํานวณหาคาแฮช

178
รูปที่ 14.7 โพรโทคอลยอย ESP ในโหมดขนสงของ IPSec

ขั้นตอนการทํางานของโพรโทคอลยอย ESP สามารถสรุปไดดังนี้


1. เมื่อไดรับขอมูลมาจากระดับชั้นขนสง จะทําการเสริมเต็มขอมูลเหลานั้น โดยสวนเสริมเต็มที่
เพิ่มเขาไปนี้จะบรรจุขอมูลที่บอกความยาวของสวนเติมเต็ม (Pad Length) และขอมูล Next
Header เขาไปดวย ขอมูลที่เพิ่มเขาไปในตอนทายของสวนที่ใชบรรจุขอมูลจะเรียกวา
สวนทายของ ESP (ESP Trailer)
2. ทําการเขารหัสลับสวนที่ใชบรรจุขอมูลและสวนทายของ ESP
3. ทําการเพิ่มสวนหัวของ ESP เขาไปยังตอนตนของขอความรหัสที่ได โดยสวนหัวของ ESP นี้
จะประกอบดวยขอมูล Security Parameter Index และ Sequence Number
4. ทําการคํานวณหาคาแฮชจากกลุมขอมูลทั้งหมด ซึ่งประกอบไปดวยสวนหัวของ ESP สวนที่ใช
บรรจุขอมูล และสวนทายของ ESP ผลลัพธของคาแฮชที่ไดหรือขอมูลยอยจะถูกเพิ่มเขาไปที่
ตอนทายของกลุมขอมูล
5. ทําการเติมสวนหัวของ IP ที่ตอนตนของกลุมขอมูลผลลัพธ

รูปที่ 14.8 (a, b) และ 14.8 (c, d) แสดงการเปรียบเทียบโพรโทคอลยอย AH ในโหมดขนสงและ


โหมดอุโมงค และโพรโทคอลยอย ESP ในโหมดขนสงและโหมดอุโมงคของ IPSec ตามลําดับ

179
รูปที่ 14.8 โพรโทคอลยอย AH และ ESP ในโหมดอุโมงคเทียบกับในโหมดขนสง

สําหรับอัลกอริทึมแฮชที่ใชในชุดโพรโทคอล IPSec จะประกอบดวยอัลกอริทึม MD5 และ SHA-1


เปนหลัก สวนอัลกอริทึมสมมาตรที่ใชจะประกอบไปดวย Three-key Triple DES, RC5 , IDES, Three-
key Triple IDES, CAST และ Blowfish ใหสังเกตวา เทคโนโลยีเครือขายสวนตัวเสมือน (Virtual Private
Network, VPN) ที่ใชงานกันอยางแพรหลายในปจจุบันจะใช IPSec ในโหมดอุโมงคทํางานเปนหลัก
[FORO07]

14.2 ชุดโพรโทคอล SSL/TLS


SSL หรือ Secure Socket Layer ไดรับการพัฒนาขึ้นเปนครั้งแรกโดย Netscape ตอมาไดมีการ
ปรับปรุงแกไขจากหลายๆ องคกรและหนวยงานที่เกี่ยวของกับการสื่อสารผานเครือขายอินเทอรเน็ต จน
มาถึง ชุดโพรโทคอล SSL รุนที่ 3 ซึ่งมีการใชงานกันอยางแพรหลายในเวิลดไวดเว็บ (World Wide Web,
www) เพื่อรักษาปลอดภัยของขอมูลที่มีการสงผานหรือแลกเปลี่ยนระหวางโปรแกรมคนดูเว็บ (Web
Browser) และเครื่องบริการเว็บ (Web Server)
โดยทั่วไปชุดโพรโทคอล SSL จะใชในการรักษาปลอดภัยของขอมูลที่สงผานเครือขายอินเทอรเน็ต
ในระดับชั้นขนสง ซึ่งเปนการสื่อสารขอมูลระหวางเครื่องคอมพิวเตอรขั้นปลายถึงขั้นปลาย (End-to-end)
ชุดโพรโทคอล SSL ไดรับการออกแบบมาเพื่อเพิ่มความปลอดภัยและฟงกชันการบีบอัด (Compression)
ใหกับขอมูลที่รับมาจากระดับชั้นการประยุกต ซึ่งสวนใหญจะมาจากโพรโทคอลเอชทีทีพี (Hyper Text
Transport Protocol, HTTP) รูปที่ 14.9 แสดงตําแหนงการประยุกตใชชุดโพรโทคอล SSL ในระดับชั้น

180
ขนสง ใหสังเกตวาชุดโพรโทคอล SSL จะแทรกอยูระหวางการทํางานของกลุมโพรโทคอล TCP/IP ใน
ระดับชั้นที่ 4 และ 5

รูปที่ 14.9 SSL เมื่อเทียบกับการทํางานของกลุมโพรโทคอล TCP/IP

14.2.1 โพรโทคอลยอยใน SSL


ชุดโพรโทคอล SSL จะประกอบดวยโพรโทคอลยอย 4 โพรโทคอลคือ โพรโทคอลยอย
Handshake, โพรโทคอลยอย Change Cipher Spec, โพรโทคอลยอย Alert และโพรโทคอลยอย Record
ซึ่งแตละโพรโทคอลยอยมีหนาที่การทํางานดังตอไปนี้ ดูรูปที่ 14.10 ประกอบ
1. โพรโทคอลยอย Handshake - ใชในการจัดเตรียมพารามิเตอรตางๆ ที่ใชในการรักษาความลับ
และการพิสูจนตัวจริงระหวางเครื่องแมขายและเครื่องลูกขาย รวมไปถึงการแลกเปลี่ยนขอมูล
ขาวสารตางๆ เพื่อใชในการสรางความลับทางดานวิทยาการรหัสลับ (Cryptographic Secret)
ยกตัวอยางเชน การจัดเตรียมกุญแจชวงเวลา เปนตน
2. โพรโทคอลยอย Change Cipher Spec - ใชในการกําหนดชวงเวลาเริ่มตนของการสื่อสารที่
เกี่ยวของกับวิทยาการรหัสลับ
3. โพรโทคอลยอย Alert - ใชในการแจงเตือนความผิดพลาด หรือสภาพผิดปกติตางๆ ที่ไดเกิดขึ้น
ในระหวางการสื่อสาร
4. โพรโทคอลยอย Record - ใชในการจัดเตรียมขอมูล กอนสงตอไปยังระดับชั้นขนสง

รูปที่ 14.10 โพรโทคอลยอยทั้ง 4 ในชุดโพรโทคอล SSL

181
รูปที่ 14.11 แสดงขั้นตอนการจัดเตรียมขอมูลในโพรโทคอลยอย Record ซึ่งสามารถสรุปไดดังนี้
1. Fragmentation - ทําการแบงขอมูลที่รับมาจากระดับชั้นกอนหนานี้ ซึ่งประกอบดวยกลุมบิต
สงออกจากโพรโทคอล Handshake, Change Cipher Spec, Alert และจากระดับชั้นการ
ประยุกต ออกเปนสวนๆ แตละสวนมีขนาด 214 ไบต หรือนอยกวา
2. Compression – ทําการบีบอัดขอมูลที่ถูกแบงออกเปนสวนๆ จากขั้นตอนที่ 1 โดยใชวิธีการ
บีบอัดคงรายละเอียด (Lossless Compression) ที่ตกลงรวมกันระหวางผูสงและผูรับ
3. MAC Addition - ทําการคํานวณหาคารหัสพิสูจนตัวจริงของขอความ (Message
Authentication Codes, MAC) จากขอมูลที่ไดรับการบีบอัดมาจากขั้นตอนที่ 2 โดยใช
อัลกอริทึม MAC ที่ตกลงรวมกันระหวางผูสงและผูรับ จากนั้นจะเติมคา MAC ผลลัพธที่ไดที่
ตอนปลายของขอมูลที่ผานการบีบอัดมาแลว
4. Encryption – ทําการเขารหัสลับขอมูลที่ผานการบีบอัดมาแลวและคา MAC ที่ตอทายโดย
อัลกอริทึมสมมาตรที่ตกลงรวมกันระหวางผูสงและผูรับ
5. Framing - ทําการเติมสวนหัวของ SSL (SSL Header) ที่ตอนตนของขอความรหัส จากนั้น
สงตอไปยังโพรโทคอลในระดับชั้นขนสง

รูปที่ 14.11 ขั้นตอนการทํางานของโพรโทคอลยอย Record ในชุดโพรโทคอล SSL

182
ขอมูลที่บรรจุอยูในสวนหัวของ SSL ประกอบดวย
1. Content Type - ขอมูลขนาด 8 บิต ใชบอกชนิดของขอมูลที่ถูกแบงออกเปนสวนๆ สําหรับ
การประมวลผลของโพรโทคอลในระดับชั้นที่สูงกวา
2. Major Version - ขอมูลขนาด 8 บิต ใชบอกรุนหลัก (Major Version) ของชุดโพรโทคอล
SSL ที่ใช โดยปกติจะตั้งคาไวที่ 3
3. Minor Version - ขอมูลขนาด 8 บิต ใชบอกรุนรอง (Minor Version) ของชุดโพรโทคอล SSL
ที่ใช โดยปกติจะตั้งคาไวที่ 0
4. Compressed Length - ขอมูลขนาด 16 บิต ใชบอกความยาวในหนวยไบตของขอมูลที่ถูก
แบงออกเปนสวนๆ กอนการบีบอัด หรือหลังการบีบอัดถามีการใชการบีบอัดขอมูล

สําหรับอัลกอริทึมอสมมาตรที่ใชสําหรับการจัดเตรียมกุญแจในชุดโพรโทคอล SSL จะ
ประกอบดวยอัลกอริทึม RSA, Diffie-Hellman Key Agreement, Fortezza เปนหลัก สวนอัลกอริทึม
สมมาตรที่ใชจะประกอบไปดวย RC4, RC2, DES, Triple DES, IDEA และ Fortezza ขณะที่อัลกอริทึม
แฮชจะใช MD5 และ SHA-1 เปนหลัก

14.2.2 โพรโทคอล TLS


TLS หรือ Transport Layer Security ก็คือชุดโพรโทคอล SSL รุนมาตรฐานที่ประกาศโดย IETF
ซึ่งมีความแตกตางเพียงเล็กนอยจาก SSL v3.0 ความแตกตางหลักๆ ระหวาง TLS v1.0 และ SSL v3.0
สามารถสรุปไดดังนี้
1. ชุดโพรโทคอล TLS ไมรองรับอัลกอริทึม Fortezza
2. การสรางความลับทางดานวิทยาการรหัสลับมีความแตกตางกัน ชุดโพรโทคอล TLS จะใช
ฟงกชันสุมเทียม (Pseudo-random Function, PRF) ในการสรางกุญแจหลัก (Master Key)
และกุญแจตางๆ ที่ใชในระบบ
3. ชุดโพรโทคอล TLS ตัดขอความเตือนในโพรโทคอลยอย Alert บางขอความออก และทําการ
เติมขอความใหมลงไปแทน
4. รายละเอียดของขอความบางสวนในโพรโทคอลยอย Handshake ไดรับเปลี่ยนแปลงแกไขใน
ชุดโพรโทคอล TLS
5. อัลกอริทึม MAC ที่ใชในโพรโทคอลยอย Record ถูกแทนที่ดวยอัลกอริทึม HMAC ในชุดโพร
โทคอล TLS

183
14.3 คําถามทายบท
1. จงใหคําจํากัดความของชุดโพรโทคอล IPSec และวัตถุประสงคในการนํามาใชงาน
2. จงอธิบายความแตกตางระหวางการทํางานในโหมดขนสงและโหมดอุโมงคของชุดโพรโทคอล IPSec
โหมดการทํางานใดมีความปลอดภัยมากกวา เพราะเหตุใด
3. จงอธิบายความแตกตางระหวางโพรโทคอลยอยทั้ง 2 ที่อยูในชุดโพรโทคอล IPSec โพรโทคอล ยอยใด
มีความซับซอนในการทํางานสูงกวา เพราะเหตุใด
4. จงอธิบายขั้นตอนการทํางานของโพรโทคอลยอย AH และ ESP ในโหมดขนสง
5. จงอธิบายขั้นตอนการทํางานของโพรโทคอลยอย AH และ ESP ในโหมดอุโมงค
6. จงใหคําจํากัดความของชุดโพรโทคอล SSL และวัตถุประสงคในการนํามาใชงาน
7. จงอธิบายความแตกตางระหวางและชุดโพรโทคอล SSL และชุดโพรโทคอล TLS

184
บรรณานุกรม
[AMOR01] Amornraksa, T., Data Security for Multimedia Communications, King Mongkut's Institute of
Technology Thonburi, 2001.
[AMOR99] Amornraksa, T., Burgess, D.R.B. and Sweeney, P., “Watermarking and secure distribution for
encrypted video”, Communications and Multimedia Security CMS’99, Belgium, Vol. 152,
September 1999.
[AMORN97] Amornraksa, T., Sweeney, P. and Honary, B., “Protecting the Integrity of a Sequence of
Images”, Electronics Letters, Vol. 33, No. 19, September 1997, pp. 1617-1618.
[AMORN98] Amornraksa, T. and Sweeney, P., “Key Distribution Scheme for One Way Broadcasting”, Proc. of
1st IMA Int. Con. on Mathematics in Communications, Loughborough, UK, December 1998.
[AMORN99] Amornraksa, T., Burgess, D. R. B. and Sweeney, P., “A Method for Hiding Ciphertext by
Cascading Algorithms’” Proc. of ISCTA’99, Ambleside, UK, July 1999, pp. 236-238.
[BELL96a] Bellare, M, Canetti, R. and krawczyk, H., “Keying hash functions for message authentication”,
Advances in Cryptology-CRYPTO’ 96 Proceedings, Springer-Verlag, 1996, pp. 417-426.
[BELL96b] Bellare, M, Canetti, R. and krawczyk, H., “The HMAC constraction”, CrytoBytes, Spring 1996.
[BEUT94] Beutelspacher, A., “Cryptology”, The Mathematical Association of America (MMA), Inc., 1994.
[CANE97] Canetti, R., Dwork, C., Naor, M. and Ostrovsky, R., “Deniable Encryption”, Proceedings of
Crypto’97, August 18-21, 1997.
[CASC93] Maurer, U. M. and Massey, J. L., “Cascade Ciphers: The Importance of Being First”, Journal of
Cryptology, Vol. 6, No. 1, 1993, pp. 55-61.
[CHAP00] Chapman, N. and Chapman, J., “Digital Multimedia”, John Wiley & Sons, 2000.
[CHIO89] Chiou, G. H. and Chen, W. T., “Secure Broadcasting Using the Secure Lock”, IEEE Transactions
on Software Engineering, Vol. 15, No. 8, August 1989, pp. 929-934.
[CHRI98] Christoffersson, P., Ekahll, S.A. Herda, V.F.S., Mattila, P., Price, W. and Widman, H.O., Crypto
Users’ Handbook: A Guide for Implementers of cryptographic Protection in Computer Systems,
North Holland: Elsevier Science Publishers, 1998.
[COX97] Cox, I.J., Killian, J., Leighton, F.T. and Shamoon, T., “Secure spread spectrum watermarking for
multimedia”, IEEE Transactions on Image Processing, Vol. 6, No. 12, Dec. 1997.
[DIFF76] Diffie, W. and Hellman, M., “New directions in cryptography”, IEEE Transactions on Information
Theory, Vol. IT-22, No. 6, November, 1976, pp. 644−654.
[ELGA85a] ElGamal, T.,”A public-key cryptosystem and a signature scheme based on discrete logarithms”,
Advances in Cryptology Proceedings, Springer-Verlag, 1985, pp. 10-18.
[ELGA85b] ElGamal, T.,”A public-key cryptosystem and a signature scheme based on discrete logarithms”,
IEEE Trans. on Information Theory, Vol. IT-31, No. 4, 1985, pp. 469-472.

185
[ELLI70] Ellis, J.H., “The possibility of secure non-secret digital encryption’”, CESG Report, January, 1970.
[FAQ96] FAQ about today’s cryptography, version 3.0, RSA Data Security, Inc., 1996.
[FEIS73] Feistel, H., “Cryptography and Computer Privacy”, Scientific American, May 1973.
[FIAT87] Fiat, A. and Shamir, A., “How to Prove Yourself: Practical Solutions to Identification and
Signature Problems”, Advances in Cryptology-CRYPTO’86 Proceedings, Springer-Verlag, 1987,
pp. 186-194.
[FIAT94] Fiat, A. and Naor, M., ”Broadcast Encryption”, Advances in Cryptology-CRYPTO93, Lecture
Notes in Computer Science 773, Springer-Verlag, 1994, pp. 480-491.
[FIPS01] U.S. Department of Commerce, National Institute of Standards and Technology, Specification for
the Advanced Encryption Standard (AED), FIPS PUB 197, November 2001.
[FIPS02] U.S. Department of Commerce, National Institute of Standards and Technology, Secure Hash
Signature Standard (SHS), FIPS PUB 180-2, August 2002.
[FIPS99] U.S. Department of Commerce, National Institute of Standards and Technology, Data Encryption
Standard (DES), FIPS PUB 46-3, October 1999.
[FLUC95] Fluckiger, F., Understanding Networked Multimedia: Applications and Technology, Prentice Hall
Inc., 1995.
[FORO07] Forouzan, B.A., “Data Communications and Networking”, 4th edition, McGraw-Hill, 2007.
[GEFF73] Geffe, P.R., “How to protect data with ciphers that are really hard to break”, Electronics, Vol. 46,
No. 1, Jan. 1973, pp. 99-101.
[GOLO67] Golomb, S.W., Shift Register Sequences, San Francisco: Holden-Day, 1967.
[GUIL92] Guillou, L. C., Ugon, M. and Quisquater, J-J., “The Smart Card, a Standardised Security Device
Dedicated to Public Cryptology”, Contemporary Cryptology. The Science of Information Integrity,
G. J. Simmons, Ed. New York: IEEE Press, 1992, pp. 561-613.
[HART96] Hartung, F. and Girod, B., “Digital watermarking for raw and compressed video”, Proc. of SPIE
2952: Digital Compression Technologies and Systems for Video Communication, October 1996,
pp. 205-213.
[HART99] Hartung, F., Su, J.K. and Girod, B., "Spread spectrum watermarking: malicious attacks and
counterattacks", Proc. of SPIE vol. 3657: Security and Watermarking of Multimedia Contents,
January 1999.
[HATU97] Hatung, F. and Girod, B., “Digital watermarking of MPEG-2 coded video in the bitstream domain”,
Proc. of Int. Con. on Acoustics, Speech and Signal Processing (ICASSP 97), vol. 4, pp. 2621-
2624, Munich, July 1997.
[KAHN67] Kahn, D., The codebreakers: the story of secret writing, New York: Macmillan publishing Co.,
1967.
[KNBL87] Knblitz, N., “Elliptic curve cryptosystems”, mathematics of computation, Vol. 48, n. 177, 1987, pp.
203-209.

186
[KNUD94] Knudsen, L.R., “Block ciphers-analysis, design, applications”, Ph.D. Dessertation, Aarhus
University, Nov. 1994.
[KUTT99] Kutter, M. and Peticolas, F.A.P., "A fair benchmark for image watermarking systems", Electronic
Imaging '99, Security and Watermark of Multimedia Contents, Vol. 3657, San Jose, CA, USA,
January 1999.
[LAI91] Lai, X. and Massey, J., “A Proposal for A New Block Encryption Standard”, Advances in
Cryptology- EUROCRYPT’90 Proceedings, Springer-Verlag, pp. 389-404, 1991.
[LAI92] Lai, X., “On the Design and Security of Block Ciphers”, ETH Series in Information Processing,
Vol. 1, Konstanz: Hartung-Gorre verlag, 1992.
[LAI93] Lai, X., Rueppel, R.A. and Woollven, J., “A Fast Cryptographic Checksum Algorithm Based on
Stream Ciphers”, Advances in Cryptology- AUSCRYPT’92 Proceedings, Springer-Verlag, pp.
339-348, 1993.
[LAMB96] Lambrecht, C.J.B. and Farrell, J.E., “Perceptual quality metric for digitally coded colour images”,
Proc. of EUSIPCO, Trieste, Italy; September 1996, pp. 1175-1178.
[MAUR93] Maurer, U.M. and Massey, J.L., “Cascade ciphers: the importance of being first”, Journal of
Cryptology, Vol. 6, No. 1, 1993, pp. 55-61.
[MENE97] Menezes, A.J., Oorschot, P.C.V. and Vanstone, S.A., “Handbook of Applied Cryptography”, CRC
Press LLC, New York, 1997, pp. 209-211.
[MERK81] Merkle, R.C. and Hellman, M., “On the security of multiple encryption”, Communications of the
ACM, Vol. 24, No. 7, 1981, pp. 465-467.
[MILL96] Miller, V. S., “Use of elliptic curves in cryptography”, Advances in Cryptology-CRYPTO’ 85
Proceedings, Springer-Verlag, 1996, pp. 417-426.
[MITC96] Mitchell, J., Pennebaker, W., Fogg, C. and LeGall, D., MPEG Video Compression Standard, ITP,
New York, 1996.
[NIU00] Niu, X., Lu, Z. and Sun, S., “Digital watermarking based on zerotrees of DCT coefficients”, Proc.
of the IASTED Int. Con. on Signal Processing and Communications, Marbella, Spain, Sept. 2000.
[OPPL05] Oppliger, R. "Contemporary cryptography", Artech House, Inc., 2005.
[PENN92] Pennebaker, W.B. and Mitchell, J.L., JPEG: Still Image Data Compression Standard, Kluwer
Academic Publishers, 1992.
[PERI99] Peticolas, F.A.P., Anderson, R.J. and Kuhn, M.G., “Information hiding - a survey”, Proc of the
IEEE, Special issue on protection of multimedia contents, Vol. 89, No. 7, pp. 1062-1078, July
1999.
[PETI98] Peticolas, F.A.P., Anderson, R.J. and Khun, M.G., "Attacks on copyright marking systems",
Second Workshop on Information Hiding, Portland, Oregon, USA, April 1998.
[PUER01] Puertpan, R. and Amornraksa, T., “Gaussian pixel weighting marks in amplitude modulation of
colour image watermarking”, Proc. of the IEEE ISSPA 2001, Kuala-Lampur, Malaysia, August 13-
16, 2001.

187
[RIVE78] Rivest, R. L., Shamir, A. and Adleman, L., “A method for obtaining digital signatures and public
key cryptosystems”, Communications of the ACM, Vol. 21, n. 2, February, 1978, pp. 120−126.
[RIVE98] Rivest, R. L., ‘The MD5 Message Digest Algorithm’, RFC 1321, April 1992.
[SAMA97] Samarakoon, M. I., Honary, B and Sweeney, P., “Secure File Transmission Over Multi-user
Networking Environments”, Proc. 4th Int. Sym. on Communications Theory and Applications,
Ambleside, July 1997, pp. 121-127.
[SARY90] Saryazdi, S., “An extension to ElGamal public key cryptosystem with a new signature scheme”,
Proc. of the 1990 Bilkent Int. Conf. on New Treads in Comm. Control and Signal processing,
North Holland: Elsevier Science publishers, 1990, pp. 195-198.
[SAYO00] Sayood, K., Introduction to Data Compression 2nd edition, Morgan Kaufmann Publishers, 2000.
[SCHN96] Schneier, B., Applied Cryptography: Protocol, Algorithms and Source Code in C 2nd edition, John
Wiley & Sons, Inc., 1996.
[SEBE88] Seberry, J. and Pieprzyk, J., “Cryptography: An Introduction to Computer Security” Prentice Hell,
1988.
[SHAN 49] Shannon, C., “Communication Theory of Secrecy Systems”, Bell Systems Technical Journal, No.
4, 1949.
[SIMM94] Simmons, G. J., “Subliminal Channels: Past and Present”, European Transactions on
Telecommunications, Vol. 4, No. 4, Jul/Aug, 1994, pp. 459-473.
[STAL00] Stallings, W., “Data and Computer Communications 6th edition”, Prentice Hall Inc., 2000.
[STAL98] Stallings, W., Cryptography and network Security: principles and practice 2nd edition, Prentice-Hall,
Inc., 1998.
[TUCH79] Tuchman, W., “Hellman presents no shortcut solutions to DES”, IEEE Spectrum, Vol. 16, No. 7,
July 1979, pp. 40-41.
[ZIER68] Zierler, N. and Brillhart, J. “On primitive trinomials (mod 2)”, Information and Control, Vol. 13, No.
6, Dec. 1968, pp.541-544.
[ZIMM95] Zimmermann, P.R., “The Official PGP User’s Guide”, Boston, MIT Press, 1995.

188
ดรรชนีทายเลม
กระบวนการขยายกุญแจ (Key Expansion) 73
กระบวนการเชิงกําหนด (Deterministic Process) 28
กระบวนคําสั่งที่เปนขั้นตอนวิธี (Algorithmic Procedure) 27
กระแสบิต (Bit-stream Generator) 26
กระแสบิตแบบขั้นสลับ (Alternative Step) 35
กระแสบิตแบบสุมจริง (True Random) 26
กลุมขอมูลในเชิงพีชคณิต (Algebraic Groups) 63
การกระจายแบบไมเรียบ (Non-flat Distribution) 52
การกระจายแบบเรียบ (Flat Distribution) 52
การกูคืนตัวเอง (Self-recovering) 137
การเขารหัสลับ (Encryption) 4
การเขารหัสลับกุญแจแบบสุม (Randomly Generate) 7
IDEA (International Data Encryption Algorithm) 63
การเขารหัสลับที่ไมเปนความลับ (Non-secret Encryption) 81
การเขารหัสลับในหนวยเก็บขอมูล (Data Storage) 146
EDE (Encrypt-Decrypt-Encrypt) 154
EEE (Encrypt-Encrypt-Encrypt) 156
การเขารหัสลับแบบตอเรียง (Cascading Encryption) 150
การเขารหัสลับแบบหลายครั้ง (Multiple Encryption) 150
การเขารหัสลับแบบหลายๆ ครั้ง (Multiple Encryptions) 50
การเขารหัสลับสองครั้ง (Double Encryption) 151
การเขารหัสลับสามครั้ง (Triple Encryption) 153
การเขารหัสลับสามครั้งดวยกุญแจสองดอก (Triple Encryption with Two Keys) 154
การเขารหัสลับสามครั้งดวยกุญแจสามดอก (Triple Encryption with Three Keys) 156
การคนหาอยางละเอียด (Exhaustive Search) 12
ฟลดจํากัด (Finite Field) 83
การคิดแบบกลับขาง (Lateral Thinking) 15
การจัดการกุญแจ (Key Management) 20
การโจมตีขอความตนฉบับแบบเลือกได (Chosen Plaintext Attack) 14
การโจมตีขอความรหัสเทานั้น (Ciphertext-only Attack) 12
การโจมตีขอความรหัสแบบเลือกได (Chosen Ciphertext Attack) 14
การโจมตีที่เลือกขอความตนฉบับแบบปรับตัวได (Adaptive Chosen Plaintext Attack) 14
การโจมตีแบบคนที่อยูตรงกลาง (Man-in-the-middle Attack) 23
การโจมตีแบบตะลุย (Brute-force Attack) 12

189
การโจมตีแบบพบกันตรงกลาง (Meet-in-the-middle Attack) 152
การโจมตีแบบแพสซิฟ (Passive Attack) 18
การโจมตีแบบเลนซ้ํา (Replay Attack) 161
การโจมตีแบบวันเกิด (Birthday Attack) 118
การโจมตีแบบแอ็กทิฟ (Active Attack) 19
OSI (Open Systems Interface) 144
การดําเนินการผสม (Mixing Operations) 69
การสื่อสารแบบเวลาจริง (Real-time Communication) 8
การถอดรหัสลับ (Decryption) 4
CBC (Cipher Block Chaining) 136
CFB (Cipher FeedBack) 138
ECB (Electronic Code Book) 135
OFB (Output FeedBack) 140
ศูนยกลางกระจายกุญแจ (Key Distribution Center, KDC) 160
การบีบอัดขอมูล (Data Compression) 143
การปฏิสัมพันธแบบทาทาย-ตอบสนอง (Challenge-response Interaction) 161
การปอนกลับภายใน (Internal Feedback) 140
การพิสูจนตัวจริง (Authentication) 2
การพิสจู นตัวตน (Identity Verification) 2
การยายคอลัมน (Columnar Transposition) 48
การเรียงสับเปลี่ยน (Substitution-Permutation) 51
การเรียงสับเปลี่ยนกุญแจ (Key Permutation) 58
การเรียงสับเปลี่ยนแบบขยาย (Expansion Permutation) 56
การเรียงสับเปลี่ยนแบบตรง (Straight Permutation) 56
การเรียงสับเปลี่ยนแบบบีบอัด (Compression Permutation) 56
การเรียงสับเปลี่ยนเริ่มตน (Initial Permutation) 56
การเรียงสับเปลี่ยนสุดทาย (Final Permutation) 56
การลดทอนสวนจําเพาะ (Modular Reduction) 82
การวิเคราะหรหัสลับ (Cryptanalysis) 4
การสรางกระแสเลขโดดฐานสอง (Binary Digits) 26
P-box (Permutation-box) 56
การหาตัวผกผันการคูณ (Multiplicative Inverse) 86
การออกใบรับรองกุญแจสาธารณะ (Public Key Certificate) 167
กุญแจชวงเวลา (Session Key) 22
กุญแจยอย (Sub-keys, Ki) 53
กุญแจสวนตัว (Private Key) 7
กุญแจอางอิง (Dereferencing Key) 148

190
การโจมตีขอความตนฉบับ (Known Plaintext Attack) 14
ขอความตนฉบับ (Plaintext) 4
ขอความรหัส (Ciphertext) 4
ความยาวแปรเปลี่ยนได (Variable Length) 108
คารหัสพิสูจนตัวจริงของขอความ (Message Authentication Codes, MAC) 182
คาแฮช (Hash Value) 108
เครื่องแมขายจริง (Real Server, RS) 164
เครื่องแมขายพิสูจนตัวจริง (Authentication Server, AS) 164
เครื่องแมขายออกตั๋ว (Ticket Granting Server, TGS) 164
MA (Multiplication/Addition Structure) 64
โครงสรางพื้นฐานกุญแจสาธารณะ (Public Key Infrastructure, PKI) 160
จํานวนเฉพาะสัมพันธ (Relatively Prime) 84
IPSec (IP Security) 174
เซตลดรูปของสวนตกคาง (Reduced Set of Residues) 88
ตัวแปลงรหัส (Cipher) 5
ตัวแปลงรหัส Feistel (Feistel Cipher) 50
ตัวแปลงรหัส Vernam (Vernam Cipher) 26
ตัวแปลงรหัสซีซาร (Caesar Cipher) 41
ตัวแปลงรหัสที่ไมมีจุดออน (Unbreakable Cipher) 26
ตัวแปลงรหัสแบบ Vigenère (Vigenère Cipher) 45
ตัวแปลงรหัสแบบกระแส (Stream Cipher) 6
ตัวแปลงรหัสแบบกลุม (Block Cipher) 6
ตัวแปลงรหัสแบบคูณ (Multiplicative Cipher) 44
ตัวแปลงรหัสแบบดั้งเดิมหรือแบบฉบับ (Traditional or Classical Cipher) 40
ตัวแปลงรหัสแบบแทนที่ (Substitution Cipher) 41
ตัวแปลงรหัสแบบบวก (Additive Cipher) 44
ตัวแปลงรหัสแบบสลับตําแหนง (Transposition Cipher) 41
ตัวแปลงรหัสผลคูณ (Product Cipher) 50
ตัวแปลงรหัสแผนใหม (Modern Cipher) 40
ตัวแปลงรหัสสัมพรรค (Affine Cipher) 41
ตัวเริ่มตน (Seed) 27
ตัวสราง (Generator) 26
ทฤษฎีความซับซอน (Complexity Theory) 92
ทฤษฎีจํานวน (Number Theory) 81
ทฤษฎีบทของแฟรมา (Fermat’s Theorem) 88
ทฤษฎีบทของออยเลอร (Euler’s Generalization Theorem) 88

191
ทฤษฎีบทเศษเหลือของชาวจีน (Chinese Remainder Theorem) 90
ทฤษฎีรหัส (Coding Theory) 29
ทฤษฎีอสมการ (Inequality) 120
เครือขายสวนตัวเสมือน (Virtual Private Network, VPN) 180
นักวิเคราะหรหัสลับ (Cryptanalyst) 4
นักสรางรหัสลับ (Cryptographer) 4
เรจิสเตอรแบบเลื่อนปอนกลับเชิงเสน (Linear Feedback Shift Registers) 29
แนวคิดของการนําใบรับรอง (Certificate) 160
บันทึกแบบแข็ง (Hard disk) 1
บิตนัยสําคัญนอยสุด (Least Significant Bit) 29
บูรณภาพ (Integrity) 2
บูรณภาพของขอมูล (Data Integrity) 109
แบบจําลองโอเอสไอ (OSI Model) 144
การแทนที่หลายอักษร (Poly-alphabetic Substitution) 41
การแทนที่อักษรเดี่ยว (Mono-alphabetic Substitution) 41
ปริทัศนวันเกิด (Birthday Paradox) 117
ผกผันเพียงคาเดียว (Unique Inverse) 86
ผกผันรวม (Mutual Inverse) 103
ผูขัดขวาง (Interloper) 11
ผูโจมตี (Attacker) 11
ผูฉอโกง (Cheater) 19
ผูดักจับ (Interceptor) 11
ผูดูแลระบบ (System Administrator) 19
ผูตัดสิน (Arbitrator) 17
ผูบุกรุก (Intruder) 11
ผูลอบฟง (Eavesdropper) 11
ฝายตรงขาม (Opponent) 11
ฝายปรปกษ (Adversary) 11
โพรโทคอล (Protocol) 16
โพรโทคอล Kerberos 163
โพรโทคอล PGP (Pretty Good Privacy) 171
โพรโทคอล SSL (Secure Socket Layer) 123
โพรโทคอลการพิสูจนตัวจริงสวนหัว (Authentication Header, AH) 177
โพรโทคอลควบโยง (Interlock Protocol) 26
โพรโทคอลทางดานวิทยาการรหัสลับ (Cryptographic Protocol) 17
โพรโทคอลที่มีการบังคับใชดวยตัวเอง (Self-enforcing Protocol) 18

192
โพรโทคอลอินเทอรเน็ต (Internet Protocol, IP) 123
โพรโทคอลเอชทีทีพี (Hyper Text Transport Protocol, HTTP) 180
ฟงกชันเชิงผสม (Combining Function) 34
ฟงกชันทอเทียนตออยเลอร (Euler Totient Function) 88
ฟงกชันทางเดียว (One-way Function) 108
ฟงกชันฟายออยเลอร (Euler Phi Function) 88
ฟงกชันสุมเทียม (Pseudo-random Function, PRF) 183
ฟงกชันหนึ่งตอหนึ่ง (One-to-one Function) 45
ฟงกชันหนึ่งตอหลาย (One-to-many Function) 45
ฟงกชันหลายตอหนึ่ง (Many-to-one) 108
ฟงกชันแฮช (Hash Function) 108
ฟงกชันแฮชทางเดียว (One-way Hash Function) 108
ฟลด Galois (Galois Field, GF) 83
ภาวะความเปนสวนตัว (Privacy) 1
มอดูลที่ตานทานตอการทําลาย (Tamper-resistant Module) 16
รหัสเทียม (Pseudo Code) 72
รหัสพิสูจนตัวจริงของขอความ (Message Authentication Codes) 122
รหัสลับเสนโคงเชิงวงรี (Elliptic Curve Cryptosystem, ECC) 105
ระบบการเขารหัสลับ (Cryptosystem) 5
ระบบการเขารหัสลับลูกผสม (Hybrid Cryptosystem) 7
ระบบการแยกตัวประกอบจํานวนเต็ม (Integer Factorization System) 92
ระบบเปด (Open Systems Interface, OSI) 169
ระบบลอการิทึมแบบไมตอเนื่อง (Discrete Logarithm System) 92
เรจิสเตอรแบบเลื่อนปอนกลับเชิงเสน (Linear Feedback Shift Register, LFSR) 124
ลายมือชื่อดิจิทัล (Digital Signature) 7
ลําดับเอ็ม (m-sequence) 31
เลขคณิตมอดุลาร (Modular Arithmetic) 82
วิทยาการรหัสลับ (Cryptography) 3
การเขารหัส (Coding) 4
การบีบอัดคงรายละเอียด (Lossless Compression) 182
การแปลงแบบผกผัน (Invertible Transformation) 8
เวกเตอรเริ่มตน (Initialization Vector) 27
เศษตกคาง (Residue) 82
สถานะภายใน (Internal State) 30
สมภาค (Congruence) 82
สหสัญญาณ (Multipiexer) 35

193
สิ่งคุกคาม (Threat) 15
หนวยเก็บ (Storage) 1
โหมดขนสง (Transport Mode) 174
โหมดอุโมงค (Tunnel Mode) 174
อนุกรม (Series) 16
อันดับผันกลับ (Reverse Order) 53
AES (Advanced Encryption Standard) 69
DES (Data Encryptions Standard) 50
PES (Proposed Encryption Standard) 63
RSA (Ron Rivest, Adi Shamir and Leonard Adleman) 102
SHA (Secure Hash Algorithms) 110
อัลกอริทึมกุญแจเดียว (Single Key Algorithm) 6
อัลกอริทึมกุญแจลับ (Secret Key Algorithm) 6
อัลกอริทึมกุญแจสาธารณะ (Public Key Algorithm) 7
อัลกอริทึมขอตกลงกุญแจของ Diffie-Hellman (Diffie-Hellman Key Agreement) 93
อัลกอริทึมทางดานวิทยาการรหัสลับ (Cryptographic Algorithm) 15
อัลกอริทึมแบบกลุม (Block Algorithm) 6
อัลกอริทึมยุคลิค (Euclid’ s Algorithm) 84
อัลกอริทึมยุคลิคแบบขยาย (Extended Euclid’s Algorithm) 67
อัลกอริทึมสมมาตร (Symmetric Algorithm) 6
อัลกอริทึมสัญนิยม (Conventional Algorithm) 6
อัลกอริทึมอสมมาตร (Asymmetric Algorithm) 6

194

Вам также может понравиться