chủ đề 4: data encryption standard và advanced encryption standard
DESCRIPTION
Chủ đề 4: Data Encryption Standard và Advanced Encryption Standard. ThS. Trần Minh Triết. Nội dung. Data Encryption Standard Advanced Encryption Standard. Mã hóa tích (Product Cipher). - PowerPoint PPT PresentationTRANSCRIPT
Chủ đề 4:
Data Encryption Standard và Advanced Encryption Standard
Chủ đề 4:
Data Encryption Standard và Advanced Encryption Standard
ThS. Trần Minh TriếtThS. Trần Minh Triết
Nội dungNội dung
Data Encryption StandardData Encryption Standard
Advanced Encryption StandardAdvanced Encryption Standard
Mã hóa tích (Product Cipher)Mã hóa tích (Product Cipher)
Mã hóa chỉ sử dụng phép thay thế (Mã hóa chỉ sử dụng phép thay thế (substitutionsubstitution) ) hay phép đổi chỗ (hay phép đổi chỗ (transpositiontransposition) không an toàn (do ) không an toàn (do đặc tính của ngôn ngữ)đặc tính của ngôn ngữ)Sử dụng liên tiếp các thao tác mã hóa đơn giản sẽ tạo Sử dụng liên tiếp các thao tác mã hóa đơn giản sẽ tạo ra cách mã hóa thông tin an toàn hơnra cách mã hóa thông tin an toàn hơn
SubstitutionSubstitution kết hợp với kết hợp với SubstitutionSubstitution an toàn an toàn hơn 1 phép hơn 1 phép SubstitutionSubstitutionTranspositionTransposition kết hợp với kết hợp với TranspositionTransposition an an toàn hơn 1 phép toàn hơn 1 phép TranspositionTransposition
SubstitutionSubstitution kết hợp kết hợp TranspositionTransposition cho kết cho kết quả an toàn hơn nhiều so với việc chỉ dùng một quả an toàn hơn nhiều so với việc chỉ dùng một loại thao tác (thay thế hay đổi chỗ)loại thao tác (thay thế hay đổi chỗ)
Đây là ý tưởng mở đầu cho các phương pháp mã hóa Đây là ý tưởng mở đầu cho các phương pháp mã hóa hiện đạihiện đại
Quy trình mã hóa theo khốiQuy trình mã hóa theo khối
Key ScheduleKey ScheduleKey ScheduleKey Schedule
Data PathData PathData PathData Path
Secret KeySecret Key
PlainTextPlainText
Round Keys (Sub Keys)Round Keys (Sub Keys)
Quy trình mã hóa theo khốiQuy trình mã hóa theo khối
Data Path:Data Path:
Thông thường, quy trình mã hóa bao gồm nhiều Thông thường, quy trình mã hóa bao gồm nhiều chu kỳ mã hóa (round) liên tiếp nhau; mỗi chu kỳ chu kỳ mã hóa (round) liên tiếp nhau; mỗi chu kỳ gồm nhiều thao tác mã hóagồm nhiều thao tác mã hóa
Key Schedule:Key Schedule:
Từ khóa gốc (secret key), phát sinh (có quy luật) Từ khóa gốc (secret key), phát sinh (có quy luật) các giá trị khóa sẽ được sử dụng trong mỗi chu kỳ các giá trị khóa sẽ được sử dụng trong mỗi chu kỳ mã hóa (round key)mã hóa (round key)
Kiến trúc chu kỳ mã hóaKiến trúc chu kỳ mã hóa
Kiến trúc phổ biến của chu kỳ mã hóa:Kiến trúc phổ biến của chu kỳ mã hóa:
Kiến trúc FiestelKiến trúc FiestelVí dụ: Blowfish, Camellia, CAST-128, DES, FEAL, Ví dụ: Blowfish, Camellia, CAST-128, DES, FEAL, KASUMI, LOKI97, Lucifer, MARS, MAGENTA, KASUMI, LOKI97, Lucifer, MARS, MAGENTA, MISTY1, RC5, TEA, Triple DES, Twofish, XTEAMISTY1, RC5, TEA, Triple DES, Twofish, XTEA
Kiến trúc SPNKiến trúc SPNVí dụ: Rijndael – AES, Anubis…Ví dụ: Rijndael – AES, Anubis…
Data Encryption StandardData Encryption Standard
Data Encryption StandardData Encryption Standard
Mã hóa theo khối (block cipher)Mã hóa theo khối (block cipher)Ý tưởng: mã hóa tích (product cipher)Ý tưởng: mã hóa tích (product cipher)
Key: 56 bitKey: 56 bitBlock: 64 bitBlock: 64 bit
Được IBM phát triển từ phương pháp Được IBM phát triển từ phương pháp LuciferLuciferChính thức công bố năm Chính thức công bố năm 19751975Được chọn là Chuẩn xử lý thông tin liên bang Được chọn là Chuẩn xử lý thông tin liên bang (Federal Information Processing Standard - FIPS) (Federal Information Processing Standard - FIPS) năm năm 19761976Giải thuật mã hóa và giải mã được công bốGiải thuật mã hóa và giải mã được công bốCơ sở Toán học và mật mã của việc thiết kế DES: Cơ sở Toán học và mật mã của việc thiết kế DES: thông tin bí mậtthông tin bí mật
Chu kỳ mã hóa Chu kỳ mã hóa ii
Chu kỳ mã hóa Chu kỳ mã hóa NrNr
…
Quy trình Mã hóa theo kiến trúc FeistelQuy trình Mã hóa theo kiến trúc Feistel
Chu kỳ mã hóa 1Chu kỳ mã hóa 1
…
LLii-1-1 RRii-1-1
KKii-1-1
LLii RRii
ff ff
LLii = = RRii-1-1
RRii = = LLii-1-1 f f ((RRii-1-1, , KKii-1-1))
…
Chu kỳ giải mã Chu kỳ giải mã NrNr
…
Chu kỳ giải mã Chu kỳ giải mã ii
Chu kỳ giải mã Chu kỳ giải mã 11
Quy trình Giải mã theo kiến trúc FeistelQuy trình Giải mã theo kiến trúc Feistel
LLii RRii
KKii
LLii-1-1 RRii-1-1
ff ff
RRii-1-1 = = LLii
LLi-1i-1 = = RRii f f ((LLii, , KKii))
…
Chu kỳ mã hóa 1Chu kỳ mã hóa 1
…
Chu kỳ mã hóa Chu kỳ mã hóa ii
Chu kỳ mã hóa 16Chu kỳ mã hóa 16
Quy trình Mã hóa của giải thuật DESQuy trình Mã hóa của giải thuật DES
Initial Permutation Initial Permutation
Final Permutation (Final Permutation (RR1616,,LL1616) )
Plaintext Plaintext (64-bit)(64-bit)
Plaintext Plaintext (64-bit)(64-bit)
Ciphertext Ciphertext (64-bit)(64-bit)
Ciphertext Ciphertext (64-bit)(64-bit)
IP: Initial PermutationIP: Initial PermutationFP: Final PermutationFP: Final Permutation
FP = IPFP = IP-1-1
Ghi chú:Ghi chú:FP và IP không có ý nghĩa về FP và IP không có ý nghĩa về mặt mã hóa, chi có tác dụng mặt mã hóa, chi có tác dụng để nạp dữ liệu vào và ra các để nạp dữ liệu vào và ra các khối dữ liệu (theo cơ chế phần khối dữ liệu (theo cơ chế phần cứng giữa thập niên 1970!!!)cứng giữa thập niên 1970!!!)
Initial PermutationInitial PermutationInitial PermutationInitial Permutation
IPIP
5858 5050 4242 3434 2626 1818 1010 22
6060 5252 4444 3636 2828 2020 1212 44
6262 5454 4646 3838 3030 2222 1414 66
6464 5656 4848 4040 3232 2424 1616 88
5757 4949 4141 3333 2525 1717 99 11
5959 5151 4343 3535 2727 1919 1111 33
6161 5353 4545 3737 2929 2121 1313 55
6363 5555 4747 3939 3131 2323 1515 77
Ví dụ: Bit thứ 58 của Ví dụ: Bit thứ 58 của xx trở thành bit đầu tiên của trở thành bit đầu tiên của IP(IP(xx)) Bit thứ 50 của x trở thành bit thứ hai của Bit thứ 50 của x trở thành bit thứ hai của IP(IP(xx))
Final PermutationFinal PermutationFinal PermutationFinal Permutation
Ví dụ: Bit thứ 58 của Ví dụ: Bit thứ 58 của xx trở thành bit đầu tiên của trở thành bit đầu tiên của IP(IP(xx)) Bit thứ 50 của x trở thành bit thứ hai của Bit thứ 50 của x trở thành bit thứ hai của IP(IP(xx))
IPIP
4040 88 4848 1616 5656 2424 6464 3232
3939 77 4747 1515 5555 2323 6363 3131
3838 66 4646 1414 5454 2222 6262 3030
3737 55 4545 1313 5353 2121 6161 2929
3636 44 4444 1212 5252 2020 6060 2828
3535 33 4343 1111 5151 1919 5959 2727
3434 22 4242 1010 5050 1818 5858 2626
3333 11 4141 99 4949 1717 5757 2525
ExpansionExpansionExpansionExpansion
Bảng chọn lựa bit EBảng chọn lựa bit E
3232 11 22 33 44 55
44 55 66 77 88 99
88 99 1010 1111 1212 1313
1212 1313 1414 1515 1616 1717
1616 1717 1818 1919 2020 2121
2020 2121 2222 2323 2424 2525
2424 2525 2626 2727 2828 2929
2828 2929 3030 3131 3232 11
Bảng E: quy tắc mở rộng từ 32 bit thành 48 bitBảng E: quy tắc mở rộng từ 32 bit thành 48 bit
Hàm f trong DESHàm f trong DES
PPermutationermutation
SS11SS11 SS22
SS22 SS33SS33 SS44
SS44 SS55SS55 SS66
SS66 SS77SS77 SS88
SS88
EExpansion xpansion EExpansion xpansion
Nửa khốiNửa khối(32 bit)(32 bit)
Nửa khốiNửa khối(32 bit)(32 bit)
Sub KeySub Key(48 bit)(48 bit)
48 bit48 bit
S-boxS-box
SS11
1414 44 1313 11 22 1515 1111 88 33 1010 66 1212 55 99 00 77
00 1515 77 44 1414 22 1313 11 1010 66 1212 1111 99 55 33 88
44 11 1414 88 1313 66 22 1111 1515 1212 99 77 33 1010 55 00
1515 1212 88 22 44 99 11 77 55 1111 33 1414 1010 00 66 1313
SS22
1515 11 88 1414 66 1111 33 44 99 77 22 1313 1212 00 55 1010
33 1313 44 77 1515 22 88 1414 1212 00 11 1010 66 99 1111 55
00 1414 77 1111 1010 44 1313 11 55 88 1212 66 99 33 22 1515
1313 88 1010 11 33 1515 44 22 1111 66 77 1212 00 55 1414 99
Ví dụ: Bj = b1b2b3b4b5b6 thì Sj(Bi) = = SSjj[[bb11bb66][][bb22bb33bb44bb55]]
S-boxS-boxS-boxS-box
SS33
1010 00 99 1414 66 33 1515 55 11 1313 1212 77 1111 44 22 88
1313 77 00 99 33 44 66 1010 22 88 55 1414 1212 1111 1515 11
1313 66 44 99 88 1515 33 00 1111 11 22 1212 55 1010 1414 77
11 1010 1313 00 66 99 88 77 44 1515 1414 33 1111 55 22 1212
SS44
77 1313 1414 33 00 66 99 1010 11 22 88 55 1111 1212 44 1515
1313 88 1111 55 66 1515 00 33 44 77 22 1212 11 1010 1414 99
1010 66 99 00 1212 1111 77 1313 1515 11 33 1414 55 22 88 44
33 1515 00 66 1010 11 1313 88 99 44 55 1111 1212 77 22 1414
S-boxS-boxS-boxS-box
SS55
22 1212 44 11 77 1010 1111 66 88 55 33 1515 1313 00 1414 99
1414 1111 22 1212 44 77 1313 11 55 00 1515 1010 33 99 88 66
44 22 11 1111 1010 1313 77 88 1515 99 1212 55 66 33 00 1414
1111 88 1212 77 11 1414 22 1313 66 1515 00 99 1010 44 55 33
SS66
1212 11 1010 1515 99 22 66 88 00 1313 33 44 1414 77 55 1111
1010 1515 44 22 77 1212 99 55 66 11 1313 1414 00 1111 33 88
99 1414 1515 55 22 88 1212 33 77 00 44 1010 11 1313 1111 66
44 33 22 1212 99 55 1515 1010 1111 1414 11 77 66 00 88 1313
S-boxS-boxS-boxS-box
SS77
44 1111 22 1414 1515 00 88 1313 33 1212 99 77 55 1010 66 11
1313 00 1111 77 44 99 11 1010 1414 33 55 1212 22 1515 88 66
11 44 1111 1313 1212 33 77 1414 1010 1515 66 88 00 55 99 22
66 1111 1313 88 11 44 1010 77 99 55 00 1515 1414 22 33 1212
SS88
1313 22 88 44 66 1515 1111 11 1010 99 33 1414 55 00 1212 77
11 1515 1313 88 1010 33 77 44 1212 55 66 1111 00 1414 99 22
77 1111 44 11 99 1212 1414 22 00 66 1010 1313 1515 33 55 88
22 11 1414 77 44 1010 88 1313 1515 1212 99 00 33 55 66 1111
Bảng hoán vị PBảng hoán vị PBảng hoán vị PBảng hoán vị P
PP
1616 77 2020 2121
2929 1212 2828 1717
11 1515 2323 2626
55 1818 3131 1010
22 88 2424 1414
3232 2727 33 99
1919 1313 3030 66
2222 1111 44 2525
Key ScheduleKey Schedule
Thao tác xoay vòng bitThao tác xoay vòng bit
<<<: Xoay vòng sang trái<<<: Xoay vòng sang trái
>>>: Xoay vòng sang phải>>>: Xoay vòng sang phải
Với subkey thứ 1, 2, 9, 16: xoay Với subkey thứ 1, 2, 9, 16: xoay vòng 1 vị trívòng 1 vị trí
Với subkey còn lại: xoay vòng 2 vị Với subkey còn lại: xoay vòng 2 vị trítrí
Các hoán vị trong Key ScheduleCác hoán vị trong Key Schedule
PC-2
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
PC-1
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
Chọn 56 bitChọn 56 bit
(bỏ bit 8, 16, 24, 32, (bỏ bit 8, 16, 24, 32,
40, 48, 56, 6440, 48, 56, 64
Chọn 56 bitChọn 56 bit
(bỏ bit 8, 16, 24, 32, (bỏ bit 8, 16, 24, 32,
40, 48, 56, 6440, 48, 56, 64
Chọn 48 bitChọn 48 bit(bỏ bit 9, 18, 22, 25, (bỏ bit 9, 18, 22, 25,
35, 38, 43, 54)35, 38, 43, 54)
Chọn 48 bitChọn 48 bit(bỏ bit 9, 18, 22, 25, (bỏ bit 9, 18, 22, 25,
35, 38, 43, 54)35, 38, 43, 54)
Một số nhận xétMột số nhận xét
4 khóa yếu (weak key):4 khóa yếu (weak key):
Gồm toàn bit 0Gồm toàn bit 0
Gồm toàn bit 1Gồm toàn bit 1
Gồm ½ là bit 0 (liên tiếp), ½ là bit 1 (liên tiếp)Gồm ½ là bit 0 (liên tiếp), ½ là bit 1 (liên tiếp)
12 khóa “tương đối yếu” (semi-weak key)12 khóa “tương đối yếu” (semi-weak key)
Tính chất: EncryptTính chất: Encryptk k ((PP) = ) = PP
Khóa có dạng: 7 bit 0 (liên tiếp), 7 bit 1 (liên tiếp)Khóa có dạng: 7 bit 0 (liên tiếp), 7 bit 1 (liên tiếp)
Khóa bù (complement key)Khóa bù (complement key)
EncryptEncryptkk((PP) = ) = CC Encrypt Encryptk*k*((P*P*) = ) = C*C*
Với Với xx* được tạo bằng cách đảo ngược các bit của * được tạo bằng cách đảo ngược các bit của xx
Advanced Encryption StandardAdvanced Encryption Standard
Phương pháp mã hóa RijndaelPhương pháp mã hóa Rijndael
Phương pháp Rijndael do Vincent Rijmen và Joan Phương pháp Rijndael do Vincent Rijmen và Joan Daeman đề nghịDaeman đề nghị
Viện Tiêu chuẩn và Công nghệ Hoa Kỳ (National Viện Tiêu chuẩn và Công nghệ Hoa Kỳ (National Institute of Standards and Technology – NIST) chọn Institute of Standards and Technology – NIST) chọn làm chuẩn mã hóa nâng cao (Advanced Encryption làm chuẩn mã hóa nâng cao (Advanced Encryption Standard) từ 02 tháng 10 năm 2000 Standard) từ 02 tháng 10 năm 2000
Phương pháp mã hóa RijndaelPhương pháp mã hóa Rijndael
Phương pháp mã hóa theo khối (block cipher) có kích Phương pháp mã hóa theo khối (block cipher) có kích thước khối và mã khóa thay đổi linh hoạt với các giá thước khối và mã khóa thay đổi linh hoạt với các giá trị 128, 192 hay 256 bit. trị 128, 192 hay 256 bit.
Phương pháp này thích hợp ứng dụng trên nhiều hệ Phương pháp này thích hợp ứng dụng trên nhiều hệ thống khác nhau từ các thẻ thông minh cho đến các thống khác nhau từ các thẻ thông minh cho đến các máy tính cá nhân máy tính cá nhân
Một số khái niệm Toán họcMột số khái niệm Toán học
Đơn vị thông tin được xử lý trong thuật toán Rijndael Đơn vị thông tin được xử lý trong thuật toán Rijndael là byte là byte
Mỗi byte xem như một phần tử của trường Galois Mỗi byte xem như một phần tử của trường Galois GF(2GF(288) được trang bị phép cộng (ký hiệu ) được trang bị phép cộng (ký hiệu ) và phép ) và phép nhân (ký hiệu nhân (ký hiệu ) )
Mỗi byte được biểu diễn theo nhiều cách khác nhau: Mỗi byte được biểu diễn theo nhiều cách khác nhau:
Dạng nhị phân: Dạng nhị phân: {{bb77bb66bb55bb44bb33bb22bb11bb00} }
Dạng thập lục phân: Dạng thập lục phân: {{hh11hh00}}
Dạng đa thức có các hệ số nhị phân Dạng đa thức có các hệ số nhị phân
7
0i
ii xb
Phép toán trên GF (28)Phép toán trên GF (28)
Phép cộng trên GF(2Phép cộng trên GF(288))
{{aa77aa66aa55aa44aa33aa22aa11aa00}} {{bb77bb66bb55bb44bb33bb22bb11bb00}}
= = {{cc77cc66cc55cc44cc33cc22cc11cc00}}
với với ccii = = aaii bbii, 0, 0 i i 7 7
Phép nhân trên GF(2Phép nhân trên GF(288))
aa((xx) ) bb((xx) = ) = aa((xx) ) bb((xx) mod () mod (xx88 + + xx44 + + xx33 + + xx + 1) + 1)
Đa thức với hệ số trên GF(28) Đa thức với hệ số trên GF(28)
3
0
)(i
ii xaxa
3
0i
ii xbxb
3
0
)()()(i
iii xbaxbxa
)2(GF 8ia
)2(GF 8ib
Đa thức với hệ số trên GF(28)Đa thức với hệ số trên GF(28)
3
2
1
0
0123
3012
2301
1230
3
2
1
0
b
b
b
b
aaaa
aaaa
aaaa
aaaa
c
c
c
c
1mod 4 xxbxaxbxaxc
Phương pháp RijndaelPhương pháp Rijndael
Kết quả trung gian giữa các bước biến đổi được gọi là Kết quả trung gian giữa các bước biến đổi được gọi là trạng thái (state)trạng thái (state)
Một trạng thái được biểu diễn dưới dạng ma trận gồm Một trạng thái được biểu diễn dưới dạng ma trận gồm 4 dòng và 4 dòng và NbNb cột với cột với NbNb bằng độ dài khối chia cho 32 bằng độ dài khối chia cho 32
Mã khóa chính (Cipher Key) được biểu diễn dưới Mã khóa chính (Cipher Key) được biểu diễn dưới dạng ma trận gồm 4 dòng và dạng ma trận gồm 4 dòng và NkNk cột với cột với NkNk bằng độ bằng độ dài khóa chia cho 32dài khóa chia cho 32
Số lượng chu kỳ Số lượng chu kỳ NrNr = max{ = max{NbNb, , NkNk}+6 }+6
Biểu diễn khối dữ liệu và mã khóaBiểu diễn khối dữ liệu và mã khóa
Nb=4Nb=4Nb=6Nb=6Nb=8Nb=8SS2121
SS0000 SS0101 SS0202 SS0303
SS1010 SS1111 SS1212 SS1313
SS2020 SS2222 SS2323
SS3030 SS3131 SS3232 SS3333
SS0404 SS0505
SS1414 SS1515
SS2424 SS2525
SS3434 SS3535
SS0606 SS0707
SS1616 SS1717
SS2626 SS2727
SS3636 SS3737
Chu kỳ mã hóa bình thườngChu kỳ mã hóa bình thường
Chu kỳ 1
MixMixColumnsColumns
MixMixColumnsColumnsAddAdd
RoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows
Chu kỳ i
MixMixColumnsColumns
MixMixColumnsColumnsAddAdd
RoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows
Chu kỳ Nr-1
MixMixColumnsColumns
MixMixColumnsColumnsAddAdd
RoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows
Chu kỳ Nr
MixMixColumnsColumns
MixMixColumnsColumnsAddAdd
RoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows
AddAddRoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows
MixMixColumnsColumns
MixMixColumnsColumns
AddAddRoundRound
KeyKey
AddAddRoundRound
KeyKey
SubSubBytesBytes
SubSubBytesBytes
ShiftShiftRowsRows
ShiftShiftRowsRows
…
…
Chu kỳ mã hóa cuốiChu kỳ mã hóa cuối
Chu kỳ 1
MixMixColumnsColumns
MixMixColumnsColumnsAddAdd
RoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows
Chu kỳ i
MixMixColumnsColumns
MixMixColumnsColumnsAddAdd
RoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows
Chu kỳ Nr-1
MixMixColumnsColumns
MixMixColumnsColumnsAddAdd
RoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows
Chu kỳ NrAddAddRoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows
AddAddRoundRoundKeyKey
AddAddRoundRoundKeyKey
SubSubBytesBytes
SubSubBytesBytes ShiftShift
RowsRows
ShiftShiftRowsRows AddAdd
RoundRoundKeyKey
AddAddRoundRound
KeyKey
SubSubBytesBytes
SubSubBytesBytes
ShiftShiftRowsRows
ShiftShiftRowsRows
…
…
Kiến trúc Substitution-Permutation NetworkKiến trúc Substitution-Permutation Network
Add Round KeyAdd Round Key
32-bit LT32-bit LT 32-bit LT32-bit LT 32-bit LT32-bit LT 32-bit LT32-bit LT
MixMixColumnsColumns
MixMixColumnsColumns
AddAddRoundRound
KeyKey
AddAddRoundRound
KeyKey
SubSubBytesBytes
SubSubBytesBytes
ShiftShiftRowsRows
ShiftShiftRowsRows
Quy trình mã hóa của thuật toán RijndaelQuy trình mã hóa của thuật toán Rijndael
Cipher( byte in[4 * Nb], byte out[4 * Nb], word w[Nb*(Nr Cipher( byte in[4 * Nb], byte out[4 * Nb], word w[Nb*(Nr + 1)])+ 1)])
beginbeginbytebyte state[4,Nb]state[4,Nb]state =state = ininAddRoundKeyAddRoundKey(state, w)(state, w)for round = 1 to Nr – 1 for round = 1 to Nr – 1
SubBytesSubBytes(state)(state)ShiftRowsShiftRows(state)(state)MixColumnsMixColumns(state)(state)AddRoundKeyAddRoundKey(state, w + round * Nb)(state, w + round * Nb)
end forend forSubBytesSubBytes(state)(state)ShiftRowsShiftRows(state)(state)AddRoundKeyAddRoundKey(state, w + Nr * Nb)(state, w + Nr * Nb)out = stateout = state
endend
S'S'0000 S'S'0101 S'S'0202 S'S'0303
S'S'1010 S'S'1111 S'S'1212 S'S'1313
S'S'2020 S'S'2222 S'S'2323
S'S'3030 S'S'3131 S'S'3232 S'S'3333
Phép biến đổi SubBytesPhép biến đổi SubBytes
SubBytesSubBytes
SSijij
S-BoxS-Box
S’S’ijij
Phép biến đổi SubBytesPhép biến đổi SubBytes
Phép thay thế byte phi tuyến thông qua bảng thay thế Phép thay thế byte phi tuyến thông qua bảng thay thế (S-box)(S-box)
Tác động độc lập lên từng byte trong trạng thái hiện Tác động độc lập lên từng byte trong trạng thái hiện hành hành
Phép biến đổi SubBytesPhép biến đổi SubBytes
Quá trình thay thế byte Quá trình thay thế byte xx trong trong SubBytesSubBytes::
Xác định phần tử nghịch đảo Xác định phần tử nghịch đảo xx-1-1 (có biểu diễn nhị (có biểu diễn nhị phân {phân {xx77xx66xx55xx44xx33xx22xx11xx00}). Quy ước {00}}). Quy ước {00}-1-1 = {00} = {00}
Phép biến đổi affine: Phép biến đổi affine:
yyii==xxiixx((ii+4)mod8+4)mod8 xx((ii+5)mod8+5)mod8 xx((ii+6)mod8+6)mod8 xx((ii+7)mod8+7)mod8 ccii
với {với {cc77cc66cc55cc44cc33cc22cc11cc00}} = {63} = {63}
Phép biến đổi SubBytesPhép biến đổi SubBytes
0
1
1
0
0
0
1
1
11111000
01111100
00111110
00011111
10001111
11000111
11100011
11110001
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
x
x
x
x
x
x
x
x
y
y
y
y
y
y
y
y
Phép biến đổi ngược InvSubBytesPhép biến đổi ngược InvSubBytes
Quá trình thay thế byte Quá trình thay thế byte yy trong trong InvSubBytesInvSubBytes::
Phép biến đổi affinePhép biến đổi affine: :
xxii==yy((ii+2)mod8+2)mod8 yy((ii+5)mod8+5)mod8 yy((ii+7)mod8+7)mod8 ddii
với {với {dd77dd66dd55dd44dd33dd22dd11dd00}} = {05} = {05}
Xác định phần tử nghịch đảo Xác định phần tử nghịch đảo xx-1-1GF(2GF(288) của ) của xx. Q. Quy uy ước ước {00}{00}-1-1 = = {00}{00}
Phép biến đổi ngược InvSubBytesPhép biến đổi ngược InvSubBytes
0
0
0
0
0
1
0
1
01010010
00101001
10010100
01001010
00100101
10010010
01001001
10100100
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
y
y
y
y
y
y
y
y
x
x
x
x
x
x
x
x
Phép biến đổi ShiftRowsPhép biến đổi ShiftRows
ShiftRowsShiftRows
Phép biến đổi ShiftRowsPhép biến đổi ShiftRows
Mỗi dòng của trạng thái hiện hành được dịch chuyển Mỗi dòng của trạng thái hiện hành được dịch chuyển xoay vòng đi một số vị trí xoay vòng đi một số vị trí
Byte Byte ssrr,,cc tại dòng tại dòng rr cột cột cc sẽ dịch chuyển đến cột sẽ dịch chuyển đến cột ((cc + + shiftshift((rr, , NbNb)) mod )) mod NbNb
Phép biến đổi ngược Phép biến đổi ngược InvShiftRowsInvShiftRows: Byte : Byte ssrr,,cc tại tại dòng dòng rr cột cột cc sẽ dịch chuyển đến cột ( sẽ dịch chuyển đến cột (cc- - shiftshift((rr, , NbNb)) )) mod mod NbNb
shiftshift((rr, , NbNb)) rr
11 22 33
NbNb44 11 22 33
66 11 22 33
88 11 33 44
l l = = roundround**NbNb AddRoundKeyAddRoundKey
Phép biến đổi AddRoundKeyPhép biến đổi AddRoundKey
SS0000 SS0101 SS0202 SS0303
SS1010 SS1111 SS1212 SS1313
SS2020 SS2121 SS2222 SS2323
SS3030 SS3131 SS3232 SS3333
S'S'0000 S'S'0101 S'S'0202 S'S'0303
S'S'1010 S'S'1111 S'S'1212 S'S'1313
S'S'2020 S'S'2121 S'S'2222 S'S'2323
S'S'3030 S'S'3131 S'S'3232 S'S'3333
SS00cc
SS11cc
SS22cc
SS33cc
S’S’00cc
S’S’11cc
S’S’22cc
S’S’33cc
WWll WWll+1+1 WWll+2+2 WWll+3+3WWll++cc
Phép biến đổi AddRoundKeyPhép biến đổi AddRoundKey
Từng byte của trạng thái sẽ được XOR với byte tương Từng byte của trạng thái sẽ được XOR với byte tương ứng trong mã khóa của chu kỳ hiện hành.ứng trong mã khóa của chu kỳ hiện hành.
s’s’r,cr,c = = kkr,cr,cssr,cr,c , 0 , 0 << r r << 8,8, 00 c c << Nb Nb
Phép biến đổi ngược của Phép biến đổi ngược của AddRoundKeyAddRoundKey cũng chính cũng chính là là AddRoundKeyAddRoundKey..
MixColumnsMixColumns
Phép biến đổi MixColumnsPhép biến đổi MixColumns
SS2121
SS0000 SS0101 SS0202 SS0303
SS1010 SS1111 SS1212 SS1313
SS2020 SS2222 SS2323
SS3030 SS3131 SS3232 SS3333
SSii
S'S'0000 S'S'0101 S'S'0202 S'S'0303
S'S'1010 S'S'1111 S'S'1212 S'S'1313
S'S'2020 S'S'2222 S'S'2323
S'S'3030 S'S'3131 S'S'3232 S'S'3333
S'S'2121SS’’ii
aa((xx))
Phép biến đổi MixColumnsPhép biến đổi MixColumns
Mỗi cột của trạng thái hiện hành được biểu diễn dưới dạng đa thức s(x) có các hệ số trên GF(28).
Thực hiện phép nhân
s’(x) = a(x) s(x)
với
a(x) = {03}x3+{01}x2+{01}x+{02}
c
c
c
c
c
c
c
c
s
s
s
s
s
s
s
s
,3
,2
,1
,0
',3
',2
',1
',0
02010103
03020101
01030201
01010302
Phép biến đổi ngược InvMixColumnsPhép biến đổi ngược InvMixColumns
Mỗi cột của trạng thái hiện hành được biểu diễn dưới Mỗi cột của trạng thái hiện hành được biểu diễn dưới dạng đa thức dạng đa thức ss((xx) có các hệ số trên GF(2) có các hệ số trên GF(288). ).
Thực hiện phép nhân Thực hiện phép nhân
ss’(’(xx) = ) = aa-1-1((xx) ) ss((xx))
vớivới
aa-1-1((xx) = ) = {0b}{0b}xx33++{0d}{0d}xx22++{09}{09}xx++{0e}{0e}
c
c
c
c
c
c
c
c
s
s
s
s
s
s
s
s
,3
,2
,1
,0
',3
',2
',1
',0
0e090d0b
0b0e090d
0d0b0e09
090d0b0e
Phát sinh mã khóa mỗi chu kỳPhát sinh mã khóa mỗi chu kỳ
Bảng mã khóa mở rộng là mảng 1 chiều chứa các từ Bảng mã khóa mở rộng là mảng 1 chiều chứa các từ (có độ dài 4 byte) (có độ dài 4 byte)
Hàm phát sinh bảng mã khóa mở rộng phụ thuộc vào Hàm phát sinh bảng mã khóa mở rộng phụ thuộc vào giá trị giá trị NkNk, tức là phụ thuộc vào độ dài của mã khóa , tức là phụ thuộc vào độ dài của mã khóa chính chính
Phát sinh mã khóa mỗi chu kỳPhát sinh mã khóa mỗi chu kỳ
w 0 w 1 w 2 w 3 w 4 w 5 w 6 w 7 w 8 w 9 w 1 0 w 1 1 w 1 2 w 1 3 w 1 4 w 1 5 w 1 6 w 1 7 . . .
M aõ khoùa chu kyø 0 M aõ khoùa chu kyø 1 M aõ khoùa chu kyø 2 ...
Bảng mã khóa mở rộng và cách xác định Bảng mã khóa mở rộng và cách xác định mã khóa của chu kỳ (Nb=6, Nk=4)mã khóa của chu kỳ (Nb=6, Nk=4)
Phát sinh mã khóa mỗi chu kỳPhát sinh mã khóa mỗi chu kỳ
KeyExpansionKeyExpansion(byte key[4 * Nk], word w[Nb * (Nr + 1)], Nk)(byte key[4 * Nk], word w[Nb * (Nr + 1)], Nk)beginbegin
i=0i=0whilewhile (i < Nk) (i < Nk)
w[i] = word[key[4*i], key[4*i+1], w[i] = word[key[4*i], key[4*i+1], key[4*i+2],key[4*i+3]]key[4*i+2],key[4*i+3]] i = i + 1i = i + 1endend whilewhilei = Nki = Nkwhilewhile (i < Nb * (Nr + 1)) (i < Nb * (Nr + 1))
word temp = w[i - 1]word temp = w[i - 1]ifif (i mod Nk = 0) (i mod Nk = 0) thenthen
temp = temp = SubWordSubWord((RotWordRotWord(temp)) (temp)) xorxor Rcon[i / Rcon[i / Nk]Nk]
elseelse ifif (Nk = 8) (Nk = 8) andand (i mod Nk = 4) (i mod Nk = 4) thenthen
temp = temp = SubWordSubWord(temp)(temp)endend ififw[i] = w[i - Nk] w[i] = w[i - Nk] xorxor temp tempi = i + 1i = i + 1
endend whilewhileendend
Phát sinh mã khóa mỗi chu kỳPhát sinh mã khóa mỗi chu kỳ
Rcon[Rcon[ii] = (RC[] = (RC[ii], {00}, {00}, {00}) với RC[], {00}, {00}, {00}) với RC[ii] ] GF(2GF(288) )
RC[1]=1 ({01}) RC[1]=1 ({01})
RC[RC[ii] =] =xx ({02}) ({02})(RC[(RC[ii-1]) = -1]) = xx((ii–1)–1)
SboxSbox y
0 1 2 3 4 5 6 7 8 9 a b c d e f
x
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
7 51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2
8 cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 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
Sbox-1
y
0 1 2 3 4 5 6 7 8 9 a b c d e f
x
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
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