CHƢƠNG 1 CÁC KHÁI NIỆM CƠ BẢN
1.3. Mã hóa dữ liệu
1.3.3. Một số Hệ mã hóa tiêu biểu
1.3.3.1. Hệ mã hóa đối xứng AES
Giới thiệu:
Advanced Encryption Standard (AES) - Tiêu chuẩn mã hóa tiên tiến là một thuật toán mã hóa khối được chính phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa nhằm mã hóa và giải mã dữ liệu do Viện Tiêu chuẩn và Công nghệ quốc gia Hoa Kỳ (National Institute Standards and Technology – NIST) phát hành ngày 26 11 2001 và được đặc tả trong Tiêu chuẩn Xử lý thông tin Liên bang 197 (Federal Information Processing Standard – FIPS 197) sau quá trình kéo dài 5 năm trình phê duyệt, AES tuân theo mục 5131 trong Luật Cải cách quản lý công nghệ thông tin năm 1996 và Luật An toàn máy tính năm 1997.
Thuật toán được hai nhà mật mã học người Bỉ là Joan Daemen và Vincent Rijmen thiết kế. Khi tham gia cuộc thi thiết kế AES thì thuật toán được đặt tên là "Rijndael". Vào những năm 1990, nhận thấy nguy cơ của mã hóa DES là kích thước khóa ngắn, nó có thể bị phá mã trong tương lai gần nên cục tiêu chuẩn quốc gia Hoa Kỳ đã kêu gọi xây dựng một phương pháp mã hóa mới. Cuối cùng
một thuật toán có tên là Rijndael được chọn và đổi tên thành Andvanced Encryption Standard (AES).
Thuật toán Rijndael dựa trên bản thiết kế trước đó của Daemen và Rijmen (đó là Square và Square lại được thiết kế dựa trên Shark). Khác với Rijndael sử dụng mạng thay thế hoán vị thì DES lại sử dụng mạng Feistel. AES không đòi hỏi nhiều bộ nhớ và có thể dễ dàng được thực hiện với tốc độ cao bằng phần mềm hoặc phần cứng.
Chuẩn mã hóa AES cho phép xử lý các khối dữ liệu đầu vào kích thước 128 bit và sử dụng các khóa có độ dài là 128, 192 hoặc 256 bit. Hệ mã hóa Rijndael có thể làm việc với các khóa và khối dữ liệu có độ dài lớn hơn, nhưng khi được Ủy ban tiêu chuẩn của Hoa kỳ đưa ra vào năm 2001 và chọn là chuẩn mã hóa thì nó được quy định chỉ làm việc với khối dữ liệu 128 bit và các khóa có độ dài 128, 192 hoặc 256 bit (do vậy nó còn có các tên AES-128, AES-192, AES-256 tương ứng với độ dài khóa sử dụng).
Ưu điểm:
- AES đã được sử dụng trong thông tin mật (do chính phủ Hoa Kỳ tuyên bố là có độ an toàn cao).
- AES sử dụng bảng tra và phép thế có tính chất phi tuyến mạnh dẫn đến mức độ phân tán thông tin phức tạp làm tăng độ an toàn cho thuật toán.
- AES mô tả cấu trúc rõ ràng, đơn giản, mô tả toán học đơn giản.
Nhược điểm:
Do cấu trúc toán học của AES mô tả toán học khá đơn giản mặc dù điều này hiện tại chưa dẫn đến mối nguy hiểm nào nhưng một số nhà nghiên cứu cho rằng trong tương lai sẽ có người lợi dụng được cấu trúc này.
Ứng dụng:
Hiện nay, AES được sử dụng rộng rãi trên toàn thế giới để bảo vệ dữ liệu ở các tổ chức như tài chính, ngân hàng, chính phủ, chữ ký điện tử, thương mại điện tử.
Mã hóa AES được ứng dụng nhanh đối với cả phần mềm và phần cứng, chỉ yêu cầu một không gian lưu trữ nhỏ sử dụng cho việc mã hóa những thiết bị cầm tay nhỏ như ổ CD, ổ USB, …
Các khái niệm và định nghĩa:
1. Các khái niệm và ký hiệu
Biến đổi Affine Phép biến đổi bao gồm một phép nhân với một ma trận sau đó là môṭ phép cộng của một vectơ
Bit Một số nhi ̣phân nhận giá tri ̣0 hoặc 1
Block Một dãy các bit nhi ̣phân tạo thành input, output, trạng thái (state) và các khóa sử dụng tại các vòng lặp (Round 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ể được xem là một dãy các byte
Byte Một nhóm 8 bit
Cipher Thuật toán mã hóa
Cipher Key Khóa của hệ mã, có thể được biểu diễn dưới dạng một mảng 2 chiều gồm 4 hàng và Nk cột
Ciphertext Bản mã
Inverse Cipher Thuật toán giải mã Thủ tục sinh khóa (Key
Expansion)
Thủ tục được sử dụng để sinh ra các khóa sử dụng tại các vòng lặp của thuật toán mã hóa, giải mã từ khóa chính ban đầu
Round Key Là các giá trị sinh ra từ khóa chính bằng cách sử dụng thủ tục sinh khóa. Các khóa này được sử dụng tại các vòng lặp của thuật toán
Trạng thái (State) Các giá trị mã hóa trung gian có thể biểu diễn dưới dạng môṭ mảng 2 chiều gồm 4 hàng và Nb cột
S-box Một bảng thế phi tuyến được sử dụng trong thủ tuc̣ sinh khóa và trong 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á tri ̣1 byte
Word Một nhóm 32 bit có thể được xem như 1 đơn vi ̣tính toán độc lập hoặc là một mảng 4 byte
2. Các hàm, ký hiệu và các tham số của thuật toán
Các tham số thuật toán, các ký hiệu và các hàm được sử dụng trong mô tả thuật toán:
Tên hàm Giải thích
AddRoundKey() Hàm biến đổi được sử dụng trong thuật toán mã hóa và giải mã trong đó thực hiện phép XOR bit giữa trạng thái trung gian (state) và một khóa vòng lặp (Round Key). Kích thước của một Round Key bằng kích thước của trạng thái, ví dụ với Nb=4 độ dài của một Round Key sẽ là 128 bit hay 16 byte
MixColumns() Hàm biến đổi trong thuật toán mã hóa nhận tất cả các cột của một trạng thái (state) và trộn với dữ liệu của nó (không phụ thuộc lẫn nhau) để nhận được cột mới
ShiftRows() Hàm sử dụng trong quá trình mã hóa, xử lý các trạng 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 nhau SubBytes() Hàm biến đổi sử dụng trong quá trình mã hóa, xử lý một 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 trên mỗi byte một cách độc lập
InvMixColumns() Hàm biến đổi được sử dụng trong thuật toán giải mã, là hàm ngược của hàm MixColumns()
InvShiftRows() Hàm biến đổi sử dụng trong thuật toán giải mã và chính là hàm ngược của hàm ShiftRows()
Inv SubBytes() Hàm biến đổi được sử dụng trong thuật toán giải mã, là hàm ngược của hàm SubBytes()
K Khóa mã hóa
Nb Số lượng các cột (là các word 32 bit) tạo thành một trạng thái, Nb = 4) Nk Số lượng các word 32 bit taọ thành khóa mã hóa K (Nk = 4, 6, hoặc 8) Nr Số lượng các vòng lặp của thuật toán, là một hàm của 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 nhau của Nk)
Rcon[] Mảng word hằng số sử dụng trong các vòng lặp
RotWord() Hàm sử dụng trong thủ tục sinh khóa nhận một word 4-byte và thực hiện một hoán vị vòng
SubWord() Hàm sử dụng trong thủ tục sinh khóa nhận một word input 4-byte và sử dụng một S -box trên mỗi giá trị 4-byte này để thu được 1 word output XOR Phép or bit tuyệt đối
⊕ Phép or bit tuyệt đối
⊗ Phép nhân 2 đa thức (bậc nhỏ hơn 4) theo modulo (x4
+ 1) ● Phép nhân trên trường hữu hạn
Độ an toàn:
Việc sử dụng các hằng số khác nhau ứng với mỗi chu kỳ giúp hạn chế khả năng tính đối xứng trong thuật toán. Sự khác nhau trong cấu trúc của việc mã hóa và giải mã đã hạn chế được các khóa “yếu” như trong phương pháp DES. Ngoài ra, thông thường những điểm yếu liên quan đến mã khóa đều xuất phát từ sự phụ thuộc vào giá trị cụ thể của mã khóa của các thao tác phi tuyến. Trong phiên bản mở rộng, các khóa được sử dụng thông qua thao tác XOR và tất cả những thao tác phi tuyến đều được cố định sẵn trong S-box mà không phụ thuộc vào giá trị cụ thể của khóa mã hóa. Tính chất phi tuyến cùng khả năng khuếch tán thông tin trong việc tạo bản mã khóa mở rộng làm cho việc phân tích mật mã dựa vào khóa tương đương hay các khóa có liên quan trở nên không khả thi.
Đối với phương pháp vi phân rút gọn, việc phân tích chủ yếu khai thác đặc tính tập trung thành vùng của các vết vi phân trong một số phương pháp mã hóa. Trong thuật toán AES, số lượng chu kỳ lớn hơn 6, không tồn tại phương pháp công phá mật mã nào hiệu quả hơn phương pháp thử sai. Tính chất phức tạp của biểu thức S-box cùng với hiệu ứng khuếch tán giúp cho thuật toán không thể bị phân tích bằng phương pháp nội suy.
Đối với phương pháp thử sai với chiều dài khóa 256-bit tương ứng 2256 hay 1.2 x 1077 khả năng có thể xảy ra. Thậm chí nếu sử dụng một trong những siêu máy tính mạnh nhất hiện nay là Roadrunner 54 của IBM để xử lý thì cũng cần 3.5 x 1054
năm để kiểm tra tất cả khả năng (Roadrunner có khả năng thực hiện 1.042 triệu tỉ phép tính / giây).
1.3.3.2. Hệ mã hóa RSA
Sơ đồ
Là hệ mã hóa sử dụng các phép tính toán trong Zn, trong đó n là tích của hai số nguyên tố phân biệt p và q. Ta nhận thấy: (n) = (p-1).(q-1).
Mô tả thuật toán:
1. Tạo cặp khóa (bí mật, công khai) (a, b) :
Chọn bí mật nguyên tố lớn p, q và tính n = p * q, công khai n, đặt P = C = Zn
Tính bí mật (n) = (p-1).(q-1). Chọn khóa công khai b < (n) và b lànguyên tố cùng nhau với (n).
Khóa bí mật a là phần tử nghịch đảo của b theo mod (n) ta có: a*b 1 (mod (n). Cặp khóa (bí mật, công khai) K = (a, b)/ a, b Z(n) , a*b 1 (mod (n)). Với Bản rõ x P và Bản mã y C, định nghĩa:
2. Mã hoá: y = ek (x) = xb mod n
Ta kiểm tra xem các phép mã hóa và giải mã có phải là nghịch đảo của nhau không vì:
a*b 1 (mod (n)). nên ta có: a*b t(n) +1
với một số nguyên t ≥ 1 nào đó. Giả sử x Zn* khi đó ta có:
(xb)a xt(n) +1(mod n) (xt(n) )x(mod n) (1t )x(mod n) x(mod n) Thực hiện:
Thiết lập hệ RSA cần tuân theo các bước sau: 1. Tạo hai số nguyên tố lớn p và q. 2. Tính n = p × q và (n) = (p-1).(q-1).
3. Chọn một số ngẫu nhiên b (với điều kiện 1 < b < (n)) sao cho UCLN(b, (n)) = 1
4. Tính a = b-1 mod (n) dùng thuật toán Euclide mở rộng.
5. Công bố n và b trong cùng một danh bạ và dùng chúng làm khóa công khai.
Độ an toàn
1. Hệ mã hóa RSA là tất định nghĩa là với một bản rõ x và một khóa bí mật
a, thì chỉ có duy nhất một bản mã y.
2. Hệ mật RSA an toàn, khi giữ được bí mật khoá giải mã a, p, q, (n). Thám mã dễ dàng tính được (n) = (q-1)*(p-1) nếu biết được p và q.
Thám mã sẽ tính được a theo thuật toán Euclide mở rộng nếu biết được (n)
Việc phân tích n thành tích của p và q là bài toán không dễ dàng hay nói cách khác là bài toán “khó”.
Độ an toàn của hệ mật RSA dựa vào việc giải bài toán phân tích số nguyên dương n thành tích của hai số nguyên tố lớn p và q.