Báo cáo môn học an toàn bảo mật thông tin đề tài “tìm hiểu giải thuật mã hóa khóa bí mật aes” Báo cáo môn học an toàn bảo mật thông tin đề tài “tìm hiểu giải thuật mã hóa khóa bí mật aes” Báo cáo môn học an toàn bảo mật thông tin đề tài “tìm hiểu giải thuật mã hóa khóa bí mật aes” Báo cáo môn học an toàn bảo mật thông tin đề tài “tìm hiểu giải thuật mã hóa khóa bí mật aes”
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA: CƠNG NGHỆ THÔNG TIN - - BÁO CÁO MƠN HỌC AN TỒN BẢO MẬT THƠNG TIN Đề tài “TÌM HIỂU GIẢI THUẬT MÃ HĨA KHĨA BÍ MẬT AES” LỜI NÓI ĐẦU Vào ngày tháng năm 1997, viện tiêu chuẩn công nghệ ( NIST – National Institute of Standards and Technology) yêu cầu thuật tốn mã hóa chuẩn Thuật tốn mã hóa trước DES khơng cịn đảm bảo an tồn DES chuẩn mã hóa từ tháng 11 năm 1976 lộ rõ nhiều khuyết điểm Năm 1998 DES bị phá sau máy tính có tên gọi “DES Cracker “ Lựa chọn thay mã hóa chuẩn gọi Triple DES ( 3DES ) Internation Data Encryption Algorithm ( IDEA ) Triple DES thuật tốn mã hóa sử dụng lần mã hóa DES Tuy nhiên, vấn đề Triple DES IDEA chậm NIST muốn thuật tốn cung cấp tốt mã hóa, bảo thực thi nhanh, hiệu Sau năm NIST chọn thuật toán tạo nhà khoa học máy tính Vincent Rijmen Joan Daemen Thuật toán gọi Rijndael.Vào ngày 26 tháng 11 năm 2011, The Federal Information Processing Standard thơng báo thuật tốn Rijndael chuẩn mã hóa Và chuẩn gọi với tên Advanced Ecryption Standard ( AES ) Khơng giống q trình lựa chọn xử lý cho DES, thuận toán băm (SHA -1) chữ ký số (DSA), NIST đưa AES lựa chọn xử lý hệ mã mở Bất tạo mật mã Miễn đáp ứng yêu cầu, dựa xem xét giá trị Cùng với lợi ích mặt an ninh, chi phí cho việc thực AES chuẩn sử dụng để mã hóa MỤC LỤC LỜI NÓI ĐẦU MỤC LỤC .3 I Giới thiệu thuật tốn mã hóa AES Giới thiệu Quá trình phát triển .4 Cơ sở toán học II Nghiên cứu thuật toán AES Mơ tả thuật tốn Thuật toán mã hóa .7 2.1 Tạo round key: .7 2.2 Vòng lặp 11 2.3 Vòng lặp cuối .18 Thuật toán giải mã .18 Nghiên cứu độ an toàn 19 4.1 Khả bị công 19 4.2 Cách phòng chống loại công: 19 Ưu nhược điểm mật mã AES .19 5.1 Ưu điểm: .19 5.2 Nhược điểm: 20 KẾT LUẬN 21 TÀI LIỆU THAM KHẢO : 22 I Giới thiệu thuật tốn mã hóa AES Giới thiệu - AES ( Advanced Encryption Standard ) hay gọi tiêu chuẩn mã hóa nâng cao thuật tốn mã hóa khối phủ Hoa Kỳ áp dụng làm tiêu chuẩn mà hóa Giống tiêu chuẩn tiền nhiệm DES, AES kỳ vọng áp dụng phạm vi giới nghiên cứu kỹ lưỡng AES chấp thuận làm tiêu chuẩn liên bang Viện tiêu chuẩn công nghệ quốc gia Hoa Kỳ ( NIST ) sau q trình chuẩn hóa kéo dài năm - Thuật toán thiết kế nhà mật mã học người Bỉ: Joan Daemen Vincent Rijmen Thuật toán đặt tên “Rijndael” tham gia thi thiết kế AES Quá trình phát triển - Thuật toán dựa thiết kế Square có trước Daemen Rijmen, cịn Square thiết kế dựa Shark - Khác với DES sử dụng mạng Feistel, Rijndael sử dụng mạng thay hốn vị AES dễ dàng thực với tốc độ cao phần mềm phần cứng khơng địi hỏi nhiều nhớ Do AES tiêu chuẩn mã hóa mới, triển khai sử dụng đại trà Cơ sở toán học - AES sử dụng trường hữu hạn Galois (GF(2 8)) để thực phép toán: phép cộng, phép trừ, phép nhân, phép chia Các phần tử trường GF(28) xem đa thức II Nghiên cứu thuật tốn AES Mơ tả thuật tốn - Mặc dù tên AES Rijndael thường gọi thay cho thực tế thuật tốn khơng hồn tồn giống - AES làm việc với khối liệu (đầu vào đầu ra) 128 bít khóa có độ dài 128, 192 256 bít (do đó còn đặt cho nó các tên AES-128, AES-192, AES-256 tương đương với đợ dài khóa sử dụng) Trong Rijndael làm việc với liệu khóa có độ dài bội số 32 bít nằm khoảng từ 128 tới 256 bít - Các khóa sử dụng chu trình tạo q trình tạo khóa Rijndael Mỗi khóa cột gồm byte Hầu hết phép toán thuật toán AES thực trường hữu hạn byte Mỗi khối liệu 128 bit đầu vào chia thành 16 byte (mỗi byte bit), xếp thành cột, cột phần tử ma trận 4x4 byte, gọi ma trận trạng thái Trong q trình thực thuật tốn tốn tử tác động để biến đổi ma trận trạng thái Biểu diễn ma trận Với 16 bytes b0, b1, … b15 - Thuật toán AES thực gồm nhiều bước biến đổi, kết đầu phép biến đổi trước đầu vào phép biến đổi Kết trung gian phép biến đổi mảng trạng thái (state) - Độ dài khối liệu đầu vào AES cố định Tùy vào độ dài khóa (Nk=4, 6, 8) ban đầu ta có số lần lặp (Nr = 10,12,14) H1 Tổng quan bước trình mã hóa giải mã Thuật tốn mã hóa 2.1 Tạo round key: Với liệu khóa đầu vào cố định 128 bit 192 bit 256 bit Ở phạm vi nghiên cứu, nghiên cứu khóa có độ dài 128 bit Với độ dài vậy, ta xếp khóa vào ma trận trạng thái sau: - ví dụ với khóa: SOME 128 BIT KEY S O B K M I E E T Y Với tốn khóa có độ dài 128 bit, q trình tạo round key gồm 10 vịng với input vịng Roundkey[1] khóa đầu vào, input vịng sau lấy output vịng trước * RoundKey[1] Cipher key Round[1] S O B K M I E E T Y * Quá trình tạo roundkey cho RoundKey[1]: o B1: "Tại cột Round[1]" : lấy cột cuối ma trận cipher key mà đẩy vị trí cuối cột lên đầu: - vd: K E Y - code: public void reverse(int index) { int tmp = Var.roundKeyMatrix[0][index]; for (int i = 1; i < 4; i++) { Var.roundKeyMatrix[i - 1][index] = Var.roundKeyMatrix[i] [index]; } Var.roundKeyMatrix[3][index] = tmp; } Sau cho hàng cột mã hóa thay thơng qua S - box Trước sử dụng hộp thay thế, ta chuyển dạng text hệ Hex - Kết sau mã hóa: K E => b3 => 6e Y => cb => b7 - code: public int[] subs(int index) { reverse(index); int rotWord[] = new int[4]; for (int i = 0; i < 4; i++) { int x = (int) Var.roundKeyMatrix[i][index] / 16; int y = (int) Var.roundKeyMatrix[i][index] % 16; rotWord[i] = Var.s_box[x][y]; } unReverse(index); return rotWord; } Sau có cột mã hóa, sử dụng phép tốn xor với số vịng (Rcon) , số khác biệt với vịng lặp: - Ma trận Rcon thuật tốn aes: public static final int rcon[][] ={ {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }; Cuối cùng, sử dụng phép toán xor với cột input(cipher key) trước thực tính tốn, ta chuyển dạng ASCII chuyển qua hệ Hex để thực phép tính XOR o B2, 3, 4: "Với cột lại (2, 3, 4)": Sử dụng phép toán xor với ma trận input (cipher key) với cột trước round[1] vừa mã hóa - vd: (cột 2- roundkey[1]) = (cột - cipherkey) xor (cột - roundkey[1] * RoundKey[2],[3],[4] [10] : tạo RoundKey[1] với input output roundKey trước - Code tạo roundkey cho AES: public void createRoundKey() { int numRound = 0; Var.roundKeyMatrix = new int[4][4 * (Var.numberRoundKey + 1)]; int dem = * (Var.numberRoundKey + 1) - Var.Nk; for (int i = 0; i < 4; i++) { for (int j = 0; j < Var.Nk; j++) { Var.roundKeyMatrix[i][j] = Var.cipherKey[i][j]; } } for (int j = 0; j < dem; j++) { if (j % Var.Nk == 0) { 10 int rotWord[] = subs(j + Var.Nk - 1); for (int i = 0; i < 4; i++) { Var.roundKeyMatrix[i][j + Var.Nk] = Var.roundKeyMatrix[i][j] ^ rotWord[i] ^ Var.rcon[i][numRound]; } numRound++; } else if (j % == && Var.numberRoundKey == 14) { int rotWord[] = subs(j + Var.Nk - 1); for (int i = 0; i < 4; i++) { Var.roundKeyMatrix[i][j + Var.Nk] = Var.roundKeyMatrix[i][j] ^ rotWord[i]; } } else { for (int i = 0; i < 4; i++) { Var.roundKeyMatrix[i][j + Var.Nk] = Var.roundKeyMatrix[i][j] ^ Var.roundKeyMatrix[i][j + Var.Nk - 1]; } } } } 2.2 Vòng lặp - SubBytes: o phép (phi tuyến) byte trạng thái byte khác theo bảng tra (Rijndael S-box) o Sử dụng bảng S-Box để chỗ vị trí tương ứng ma trận trạng thái sau thực phép xor với key 11 Bảng S-Box: o Cách sử dụng bảng S-Box Nếu có ký tự “D”, trước tiên ta chuyển D dạng Hex có giá trị 44 cách tra cứu bảng ASCII Khi sử dụng bảng S-box, ký tự hệ Hex tham chiếu đến hàng bảng giá trị từ bên trái xuống Ký tự thứ tham chiếu đến cột bảng S-Box Và giá trị hệ Hex ‘1b’ 12 o Bảng S-box sinh từ “ modular arithmetic “ trường Galois Một trường Galois trường với số hữu hạn phần từ Các trường Galois trường lũy thừa số nguyên Đối với số nguyên tôn trường Galois Với bảng S-box GF(28) chọn Code : public void subBytes() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { int x = (int) Var.cipherText[i][j] / 16; int y = (int) Var.cipherText[i][j] % 16; try{ Var.cipherText[i][j] = Var.s_box[x][y]; }catch(Exception e){ System.out.println(" Err " + x + " " +y); } } } } - ShiftRows: o dịch chuyển, hàng trạng thái dịch vòng theo số bước khác o Các hàng dịch vòng số bước định Hàng đầu giữ nguyên Mỗi byte hàng thứ dịch vịng trái vị trí Tương tự, hàng thứ dịch vòng vị trí Do vậy, cột khối đầu bước bao gồm byte đủ cột khối đầu vào 13 Code : public void shiftOne(int a[]) { int tmp = a[0]; for (int i = 1; i < 4; i++) { a[i - 1] = a[i]; } a[3] = tmp; } public void shiftRows() { for (int i = 0; i < 4; i++) { for (int j = 0; j < i; j++) { shiftOne(Var.cipherText[i]); } } } - MixColumns: o Quá trình trộn làm việc theo cột khối theo phép biến đổi tuyến tính o Bốn byte cột kết hợp lại theo phép biến đổi tuyến tính khả nghịch Mỗi khối byte đầu vào cho khối byte đầu với tính chất byte đầu vào ảnh hưởng tới byte đầu Cùng với bước ShiftRows, MixColumns đã tạo tính chất khuếch tán cho thuật toán Mỗi cột xem đa thức 14 trường thức hữu hạn (modulo nhân ) với Vì đa thế, bước xem phép nhân ma trận trong trường hữu hạn o Nói cách khác , MixColumns thực theo công thức : o Vậy thuật toán thực cụ thể ,hãy xét ví dụ sau : 15 o Khi a0 – a3 tương ứng với 04 đến e5 , b0 – b3 tương ứng với d4 – 30 o Ta xét b0 : b0 = {02.d4} ^ {03.bf} ^ {01.5d} ^ {01.30} o Xét {02.d4} Biến đổi d4 hệ Hex : d4 = 1101 0100 Mặt khác, sách Cryptography and Network Security đề cập với số nhân 02 ta thực sau : “Dịch trái d4 bit sau chuyển d4 dạng Hex , sau kết trước dịch bit có bit ngồi bên trái tiến hành XOR kết với dãy 0001 1011” Cụ thể d4 = 1101 0100 , d4 {03.bf} = {02.bf} ^ {01.bf} Có bf = 1011 1111 => bf