Chuẩn mã hóa dữ liệu cao cấp AES
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP HCM KHOA CÔNG NGHỆ THÔNG TIN ĐỀ TÀI 2: AES CƠ SỞ TOÁN THUẬT TOÁN VẤN ĐỀ AN TOÀN VÍ DỤ MINH HOẠ TRÊN NỀN WINDOWS PHONE Sinh viên thực hiện: Lớp : DHTH6ALT Khoá : TP Hồ Chí Minh, tháng 04 năm 2012 Mục lục Mục lục 1.Các khái niệm ký hiệu 2.Các hàm, ký hiệu tham số thuật toán 1.Thuật toán mã hoá .6 2.Thuật toán sinh khoá (Key Expansion) .11 1.Tổng quan: 18 2.Danh sách hình 18 3.Luồng di chuyển hình chương trình 19 4.Màn hình chụp lại 20 I Giới thiệu Chuẩn mã hóa liệu cao cấp AES là một hệ mã khóa bí mật có tên là Rijndael (Do hai nhà mật mã học người Bỉ là Joan Daemen và Vincent Rijmen đưa và trở thành chuẩn từ năm 2002) cho phép xử lý các khối liệu input có kích thước 128 bit sử dụng các khóa có độ dài 128, 192 hoặc 256 bit Hệ mã Rijndael thiết kế để có thể làm việc với các khóa và các khối liệu có độ dài lớn nhiên chọn là một chuẩn Ủy ban tiêu chuẩn của Hoa Kỳ đưa vào năm 2001, qui định làm việc với các khối liệu 128 bit và các khóa có độ dài 128, 192 hoặc 256 bit (do đó còn đặt cho nó các tên AES-128, AES-192, AES256 tương đương với độ dài khóa sử dụng) II Các khái niệm định nghĩa: Các khái niệm ký hiệu Các khái niệm định nghĩa sử dụng để trình bày chuẩn mã hoá cao cấp: AES Chuẩn mã hoá cao cấp Phép biến đổi bao gồm một phép nhân với một ma trận Biến đổi Affine sau đó là một phép cộng của một vectơ Bit Một số nhị phân nhận giá trị hoặc Một dãy các bit nhị phân tạo thành input, output, trạng thái (state) và các khóa sử dụng tại vòng lặp (Round Block Key) của hệ mã Độ dài của dãy (khối) là số lượng các bit mà nó chứa Các khối cũng có thể xem là một dãy các byte Byte Một nhóm bit Cipher Thuật toán mã hóa Khóa của hệ mã, có thể đƣợc biểu diễn dướ dạng một Cipher Key mảng chiều gồm hàng và Nk cột Ciphertext Bản mã Inverse Cipher Thuật toán giải mã Thủ tục sử dụng để sinh các khóa sử dụng tại các Thủ tục sinh khóa vòng lặp của thuật toán mã hóa, giải mã từ khóa chính ban (Key Expansion) đầu Là các giá trị sinh từ khóa chính bằng cách sử dụng thủ Round Key tục sinh khóa Các khóa này sử dụng tại các vòng lặp của thuật toán Các giá trị mã hóa trung gian có thể biểu diễn dạng Trạng thái (State) một mảng chiều gồm hàng và Nb cột Một bảng thế phi tuyến sử dụng thủ tục sinh S-box khóa và các biến đổi thay thế các byte để thực hiện các thay thế 1-1 đối với một giá trị byte Một nhóm 32 bit xem đơn vị tính toán Word độc lập mảng byte Các hàm, ký hiệu tham số thuật toán Các tham số thuật toán, ký hiệu hàm sử dụng mô tả thuật toán: Hàm biến đổi sử dụng thuật toán mã hóa và giải mã thực hiện phép toán XOR bit một trạng thái trung gian (State) và một khóa của vòng lặp AddRoundKey() (Round Key) Kích thước của một Round Key bằng kích thước của trạng thái (chẳng hạn với Nb = độ dài của một Round Key là 128 bit hay 16 byte) Hàm biến đổi sử dụng thuật toán giải mã, là InvMixColumns() hàm ngược của hàm MixColumns() Hàm biến đổi thuật toán giải mã, là hàm ngược InvShiftRows() của hàm ShiftRows() Hàm biến đổi thuật toán giải mã, là hàm ngược InvSubBytes() của hàm SubBytes() K Khóa mã hóa Hàm biến đổi thuật toán mã hóa nhận tất cả các MixColumns() cột của một trạng thái (State) và trộn với liệu của (không phụ thuộc lẫn nhau) để nhận một cột mới Số lượng các cột (là các word 32 bit) tạo thành một Nb trạng thái, Nb = 4) Số lượng các word 32 bit tạo thành khóa mã hóa K (Nk Nk = 4, 6, hoặc 8) Số lượng các vòng lặp của thuật toán, là một hàm của Nr Nk và Nb (là các giá trị cố định) (Nr = 10, 12 hoặc 14 tương ứng với các giá trị khác của Nk) Rcon[] Mảng word hằng số sử dụng các vòng lặp Hàm sử dụng thủ tục sinh khóa nhận một word 4RotWord() byte và thực hiện một hoán vị vòng Hàm sử dụng quá trình mã hóa, xử lý các trạng ShiftRows() thái bằng cách dịch vòng ba hàng cuối của trạng thái với số lần dịch khác Hàm biến đổi sử dụng quá trình mã hóa, xử lý một SubBytes() trạng thái bằng cách sử dụng một bảng thế phi tuyến các byte (S-box) thao tác mỗi byte một cách độc lập Hàm sử dụng thủ tục sinh khóa nhận một word SubWord() input 4-byte và sử dụng một S-box mỗi giá trị 4byte này để thu word output XOR Phép or bit tuyệt đối Phép or bit tuyệt đối ⊕ ⊗ Phép nhân đa thước (bậc nhỏ 4) theo modulo (x4 + 1) Phép nhân trường hữu hạn Các khái niệm quy ước 1.1 Input và Output Input và Output của chuẩn mã hóa cao cấp đều là các dãy 128 bit, gọi là các khối (block), độ dài của mỗi khối này là số bit liệu mà chứa Khóa của chuẩn mã hóa cao cấp là một dãy có độ dài 128, 192 hoặc 256 bit Chuẩn mã hóa liệu cao cấp không làm việc với các giá trị input, output và khóa có độ dài khác (mặc dù thuật toán sở của nó cho phép điều này) Các bit của input, output và khóa của hệ mã đánh số từ 1.2 Đơn vị Byte Byte dãy bit biểu diễn dạng bit nhị phân theo thứ tự {b7, b6, b5, b4, b3, b2, b1, b0} biểu diễn trường hữu hạn đa thức ký tự hệ Hexa Một số phép toán trường hữu hạn đòi hỏi them bit (bs) vào bên trái byte bit, ký hiệu {01} 1.3 Mảng byte Các mảng byte biểu diễn theo dạng sau: a0 a1 a2 … an-1 (với n=16, 24 hay 32 tùy thuộc vào độ dài liệu đầu vào 128 bit, 192 bit 256 bit) 1.4 Mảng trạng thái Mảng trạng thái mảng hai chiều gồm hàng, Nb cột, ký hiệu s dung để lưu trữ giá trị trung gian bước trình xử lý Bắt đầu phép mã hoá hay giải mã việc chép mảng byte in 0, in1, in2, …, in15 đầu vào mảng trạng thái s theo công thức sau: s[r,c]= in[r+4c], v_i ≤ r, c ≤ Vào cuối trình mã hoá hay giải mã, mảng trạng thái chép vào mảng byte đầu theo công thức: out0, out1, out2, …, out15 1.5 Mảng từ Bốn byte cột Mảng trạng thái tạo thành từ 32 bit mảng gồm byte đánh mục theo hàng r Từ ta coi mảng trạng thái mảng chiều gồm từ w0, w1, w2, w3, giá trị cột c dung làm mục cho bảng III Cở sở toán học Hai phép cộng phép nhân trường Galoris GF ( 28) cở sở toán học thuật toán AES Phép cộng Phép “cộng” hiểu phép XOR hai bit tương ứng byte có ký hiệu ⊕ Phép nhân Phép nhân trường GF(28), ký hiệu ⊗ tương ứng với phép nhân thong thường hai đa thức đem chia lấy dư (modulo) cho đa thức tối giản bậc Trong thuật toán AES, đa thức tối giản chọn là: m(x) = x8 + x4 + x3 + x + hay {01} {1b} biểu diễn dạng hexa Kết nhận phép rút gọn đa thức có bậc nhỏ nên biểu diễn dạng byte Phép nhân với x Phép nhân với đa thức x (hay phần tử {00000010} € GF(28) thực mức độ byte phép dịch trái sau thực tiếp phép XOR với giá trị {1b} b7=1 Thao tác ký hiệu xtime() Phép nhân với luỹ thừa x thực cách áp dụng nhiều lần thao tác xtime() Kết phép nhân với giá trị xác định phép cộng (⊕ ) kết trung gian lại với Đa thức với hệ số trường GF(28) Phép nhân hai đa thức bậc với hệ số GF(28) a(x) ⊗ b(x) xác định hạng tử d(x): d(x) = d3x3 + d2x2 + d1x d0 đó: d0 = (a0 • b0 ) ⊕ (a3 • b1) ⊕ (a2 • b2) ⊕ (a1 • b3) d1 = (a1 • b0 ) ⊕ (a0 • b1) ⊕ (a3 • b2) ⊕ (a2 • b3) d2 = (a2 • b0 ) ⊕ (a1 • b1) ⊕ (a0 • b2) ⊕ (a3 • b3) d3 = (a3 • b0 ) ⊕ (a2 • b1) ⊕ (a1 • b2) ⊕ (01 • b3) IV Thuật toán 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 với Nb=4 Tùy vào độ dài khóa (Nk=4, 6, 8) ban đầu ta có số lần lặp (Nr) cho trình xác định theo công thức Nr=max{Nb, Nk,}+6 Thuật toán mã hoá Bắt đầu thuật toán bản rõ (input) copy vào mảng trạng thái sử dụng các qui ước mô tả phần 3.4 Sau cộng với khóa Round Key khởi tạo mảng trạng thái biến đổi bằng các thực hiện một hàm vòng (round function) Nr lần (10, 12, hoặc 14 phụ thuộc vào độ dài khóa) đó lần cuối cùng thực hiện khác các lần trước đó Trạng thái sau lần lặp cuối chuyển thành output của thuật toán Hàm vòng tham số hóa sử dụng một (key schedule) dãy các khóa biểu diễn là một mảng chiều của các word 4-byte sinh từ thủ tục sinh khóa (Key Expansion) Chúng ta có thể thấy tất cả các vòng thực hiện các công việc giống dựa hàm (theo thư tự) SubBytes(), ShiftRows(), MixColumns() và AddRoundKey() trừ vòng cuối bỏ qua việc thực hiện hàm MixColumns() Hình 1: Thuật toán mã hoá giải mã AES 1.1 Hàm SubBytes() Hàm SubBytes() thực hiện phép thay thế các byte của mảng trạng thái bằng cách sử dụng một bảng thế S -box, bảng thế này là khả nghịch và xây dựng bằng cách kết hợp hai biến đối sau: - Nhân nghich đảo trường hữu hạn GF (28), phần tử {00} được ánh xa ̣ thành chính - Áp dụng biến đổi Affine sau (trên GF(2)): b’I = bi ⊕ b(i+4) mod ⊕ b(i+5) mod ⊕ b(i+6) mod ⊕ b(i+7) mod ⊕ ci