Mật mã ứng dụng trong an toàn thông tin (3)

8 7 0
Mật mã ứng dụng trong an toàn thông tin (3)

Đang tải... (xem toàn văn)

Thông tin tài liệu

04.10.2019 Giới thiệu AES MẬT MÃ ỨNG DỤNG TRONG AN TỒN THƠNG TIN Cấu trúc AES Bài 03 Chuẩn mã khối tiên tiến chuẩn đệm Cài đặt AES Đệm cho mã khối Giới thiệu chung AES Giới thiệu AES Cấu trúc AES Cài đặt AES Đệm cho mã khối Lịch sử đời (1/2) • DES khơng cịn an tồn • Năm 1997: NIST phát động thi tìm kiếm hệ mật làm chuẩn • u cầu thuật tốn ứng viên: – mơ tả công khai – mã khối – hỗ trợ nhiều kích thước khóa khác – cài đặt tốt phần cứng phần mềm – miễn phí cho mục đích sử dụng Giới thiệu chung AES • • • • • Giới thiệu chung AES Lịch sử đời (2/2) Tổng cộng có 21 ứng viên Sau vịng (1998): có 15 đạt u cầu Sau vịng (1999): cịn thuật tốn, gồm MARC (IBM), RC6 (RSA), Rijndael (Daemon Rijmen), Serpent (Anderson) Twofish (Schneier) SauMARC, chung kết (2000): Rijndael thắng! RC6, Serpent, Twofish có thể2001: coi làBan tốt hành ngang ngửaAES với AES! Năm chuẩn Đặc điểm thuật tốn • Rijndael – Kích thước khối: 128, 160, 192, 224, 256 – Kích thước khóa: 128, 160, 192, 224, 256 – Số vịng lặp: 10, 11, 12, 13, 14 • AES – Kích thước khối: 128 – Kích thước khóa: 128, 192, 256 – Số vòng lặp: 10, 12, 14 04.10.2019 Giới thiệu chung AES Giới thiệu chung AES Độ an tồn AES • Chưa có cơng hiệu lên thuật tốn AES • Chỉ có cơng kênh kề (side channel) lên cài đặt thuật tốn • • • • • Phần mềm sử dụng AES 7z, WinRAR, WinZIP NTFS (EFS) BitLocker, VeraCrypt, DiskCryptor IPsec, KeePass WPA Giới thiệu chung AES • • • • • • Thư viện lập trình mật mã C: OpenSSL, CryptoAPI C++: Bortan, Crypto++ C#/.NET: NET Framework, Bouncy Castle Java: JCE, Bouncy Castle Python: PyCrypto JavaScript: SJCL, AES-JS Giới thiệu AES Cấu trúc AES Cài đặt AES Đệm cho mã khối Cấu trúc AES Cấu trúc AES • Dữ liệu (input, intermediate state, output, round keys) AES ma trận kích thước 4xNb = 4x4 • Nạp liệu x0x1x2 x15 vào ma trận: • Tiêu chuẩn FIPS 197: Advanced Encryption Standard • Tiêu chuẩn TCVN 7816-2007: Kỹ thuật mật mã – Các thuật toán mật mã – Thuật tốn mã hóa liệu AES 11 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 12 04.10.2019 Cấu trúc AES Cấu trúc AES • SubBytes KLen 128 192 256 Nr 10 12 14 13 14 Cấu trúc AES Cấu trúc AES y ൌ ‫ି ݔܣ‬ଵ ൅ ܾ SubBytes(0x53) = ? SubBytes(0xFA) = ? 15 Cấu trúc AES 16 Cấu trúc AES • SubBytes • ShiftRows 17 18 04.10.2019 Cấu trúc AES Cấu trúc AES • MixColumns sc′ = C ⋅ sc  s0′ c   02  s′    1c  =  01  s′2c   01     s3′ c   03 03 01 01   s0c    02 03 01   s1c  • 01 02 03   s2c     01 01 02   s3c  20 19 Cấu trúc AES Cấu trúc AES • AddRoundKey 21 22 Cấu trúc AES • Mỗi phép biến đổi AES có phép biến đổi ngược: InvSubBytes, InvShiftRows, InvMixColumns, AddRoundKey • Pha giải mã giống pha mã hóa, sử dụng phép biến đổi ngược trật tự đảo ngược khóa vịng • Có hai cấu trúc giải mã: giải mã xuôi giải mã ngược 23 24 04.10.2019 Cấu trúc AES • Mã hóa Add → (Nr-1)x{Sub,Shift,Mix,Add} → {Sub,Shift, Add} Giới thiệu AES • Giải mã xuôi Cấu trúc AES Cài đặt AES Đệm cho mã khối Add→(Nr-1)x{IShift,ISub,Add,IMix}→{IShift,ISub,Add} • Giải mã ngược Add→(Nr-1)x{ISub,IShift,IMix,Add}→{ISub,IShift,Add} RoundKey’ = Inv (RoundKey) 25 Cài ñặt AES Cài ñặt AES Test vector • Khi cài đặt thuật tốn mật mã, chương trình mã hóa được, giải mã chưa cài đặt đúng! • Cần kiểm tra tính đắn việc sử dụng test vector • Ví dụ với AES-128 K = 2b7e151628aed2a6abf7158809cf4f3c p = 6bc1bee22e409f96e93d7e117393172a c = 3ad77bb40d7a3660a89ecaf32466ef97 27 • • • • Cài đặt theo mô tả chuẩn Đa phần phép tính thực số bít, khơng khai thác tính vi xử lý 32 bít Tốn nhớ Phù hợp cho vi xử lý bít, hệ thống nhúng (embeded systems) Đối với hệ thống 32 bít cần có cài cách cài đặt hiệu 28 Cài đặt AES Cài đặt AES • Xét ej kết mã hóa cột thứ j Cài đặt cho hệ thống 32 bít • Xét vịng AES, ký hiệu T a – giá trị đầu vào vịng (round) b – trạng thái sau SubBytes c – trạng thái sau ShiftRows d – trạng thái sau MixColumns e – trạng thái sau AddRoundKey, tức đầu k – khóa vịng e j = ( e0, j , e1, j , e2, j , e3, j )  e0, j  02 e    1, j  =  01  e2, j   01     e3, j   03 03 02 01 01 01 03 02 01 01  c0, j   k0, j      01  c1, j   k1, j  + 03 c2, j   k2, j      02   c3, j   k3, j  • Ký hiệu sj cột thứ j ma trận s 29 30 04.10.2019 Cài ñặt AES c0, j   b0, j   S [a0, j ]  c   b     1, j  =  1, j +1mod Nb  =  S [a1, j +1 ]  ; c2, j  b2, j + mod Nb   S [a2, j + ]        c3, j   b3, j +3mod Nb   S [a3, j +3 ]  e0, j  02 e    1, j  =  01 e2, j   01     e3, j   03 j + k mod Nb Cài ñặt AES e0, j   S [a0, j ] • 02   S [a0, j +1 ] • 03  e   S [a ]   S [a ] •  0, j 0, j +1  1, j  =  ⊕  e2, j   S [a0, j ]   S [a0, j +1 ]         e3, j   S [a0, j ] • 03  S [a0, j +1 ]  j+k  S[a0, j + ]   S[a0, j +3 ]   k0, j   S [a   S[a  k  0, j + ] • 03  0, j + ]  1, j ⊕ ⊕ ⊕   S [a0, j + ] • 02   S [a0, j +3 ] • 03  k2, j         S[a0, j + ]   S [a0, j +3 ] • 02   k3, j  03 01 01  S[a0, j ]   k0, j      02 03 01  S [a1, j +1 ]   k1, j  + 01 02 03  S[a2, j + ]  k2, j      01 01 02   S [a3, j +3 ]   k3, j  31 Cài ñặt AES 32 Cài đặt AES  S [ x] • 02   S [ x] • 03  S [ x]     ; T [ x] =  S [ x] •  ; T0 [ x] =   S [ x]   S[ x]       S [ x] • 03  S[ x]  e j = T0 [a0, j ] ⊕ T1[a1, j +1 ] ⊕ T2 [a2, j + ] ⊕ T3 [a3, j + ] ⊕ k j  S [ x]   S [ x]   S[ x] • 03    ; T3[ x] =  S [ x]  ; x = 0x00 0xFF T2 [ x] =   S[ x] • 02   S[ x] • 03     S [ x ]    S[ x] • 02  Mỗi bảng Ti có 256 phần tử 32 bít ứng với 256 giá trị bít x Xây dựng bảng tra T0, T1, T2, T3 Toàn phép mã hóa chuyển thành phép tra bảng XOR số 32 bít! 33 Cài đặt AES 34 Cài đặt AES • Tốc độ cài đặt mềm Tập lệnh AES-NI • Các vi xử lý đời Intel (Core i5 trở lên) AMD hỗ trợ tập lệnh đặc biệt để cài đặt AES, gọi AES-NI • AES-NI gồm lệnh AESENC AESENCLAST: mã hóa vịng AESDEC AESDECLAST: giải mã vịng AESKEYGENASSIST: tạo khóa vịng AESIMC: tạo khóa vịng giải mã 35 36 04.10.2019 Cài đặt AES Cài đặt AES • Tốc độ cài đặt có AES-NI Kết luận Việc cài đặt thuật tốn mật mã địi hỏi phải nghiên cứu kỹ lưỡng để đảm bảo an toàn đạt hiệu thực thi cao! 38 37 Chuẩn ñệm cho mã khối Giới thiệu AES Cấu trúc AES Cài đặt AES Đệm cho mã khối Đệm (padding) gì? Tại cần đệm? 40 Chuẩn ñệm cho mã khối Chuẩn ñệm cho mã khối None None padding and Zero padding Zeros PKCS7 Đệm Why are they possible? ANSIX923 ISO10126 41 42 04.10.2019 Chuẩn ñệm cho mã khối Chuẩn ñệm cho mã khối ANSIX923 Padding - byte cuối: tổng số byte đệm - byte lại: ISO10126 Padding - byte cuối: tổng số byte đệm - byte lại: ngẫu nhiên 11 AA 11 22 33 44 55 66 77 88 99 AA AA 11 22 33 44 55 66 77 88 99 AA 4B 1F A2 11 2E 06 69 32 0A B9 F1 16 EA 08 22 33 44 55 66 77 88 99 11 22 33 44 55 66 77 88 11 22 33 44 55 66 77 88 11 22 33 44 55 66 77 88 88 11 22 33 44 55 66 77 88 11 22 33 44 55 66 77 99 00 00 00 00 00 00 00 00 00 00 00 00 06 08 43 44 Chuẩn ñệm cho mã khối PKCS7 Padding Mỗi byte đệm: tổng số byte đệm 11 22 33 44 55 66 77 88 99 AA 11 22 33 44 55 66 77 88 99 AA 11 22 33 44 55 66 77 88 11 22 33 44 55 66 77 88 08 08 06 08 06 08 06 08 06 08 06 08 Giới thiệu AES Cấu trúc AES Cài đặt AES Đệm cho mã khối 06 08 45 ... AddRoundKey • Pha giải mã giống pha mã hóa, sử dụng phép biến đổi ngược trật tự đảo ngược khóa vịng • Có hai cấu trúc giải mã: giải mã xuôi giải mã ngược 23 24 04.10.2019 Cấu trúc AES • Mã hóa Add → (Nr-1)x{Sub,Shift,Mix,Add}... cho mã khối Chuẩn ñệm cho mã khối None None padding and Zero padding Zeros PKCS7 Đệm Why are they possible? ANSIX923 ISO10126 41 42 04.10.2019 Chuẩn ñệm cho mã khối Chuẩn ñệm cho mã khối ANSIX923... cài đặt thuật tốn mật mã địi hỏi phải nghiên cứu kỹ lưỡng để đảm bảo an toàn đạt hiệu thực thi cao! 38 37 Chuẩn ñệm cho mã khối Giới thiệu AES Cấu trúc AES Cài đặt AES Đệm cho mã khối Đệm (padding)

Ngày đăng: 28/08/2022, 12:26