Tiêu chuẩn mã hóa nâng cao (AES – Advance Encrypto Standard) là khối mã hóa đối xứng được xuất bản bởi Viện tiêu chuẩn và Công nghệ (NIST) vào tháng 12 năm 2001. Tháng 2 năm 2001, NIST đã thông báo rằng một bản dự thảo tiêu chuẩn xử lý thông tin Liên bang (FIPS) đã sẵn có cho công chúng xem xét và bình luận. Cuối cùng, AES được xuất bản như FIPS 197 trong sổ đăng kí Liên bang trong tháng 12 năm 2001.
Trang 11.1 Lý thuyết về mã hóa dữ liệu 2
1.1.1 Hệ thống mã hóa đối xứng (Symmetric Cryptosystems) 3
1.1.2 Hệ thống mã hóa bất đối xứng (Asymmetric Cryptosystems) 4
1.2 Lịch sử phát triển của AES 8
1.3 Lý thuyết về chuẩn mã hóa nâng cao 11
1.3.1 Cơ sở toán học của AES 11
1.3.2 Chuẩn mã nâng cao AES – Rijndael 13
1.3.3 Thuật toán AES 13
1.3.4 Mở rộng khóa AES 18
PHẦN 2: XÂY DỰNG ỨNG DỤNG 21
2.1 Cài đặt thuật toán 21
2.2 Kết quả đạt được 23
TÀI LIỆU THAM KHẢO 26
Trang 2PHẦN 1: CƠ SỞ LÝ THUYẾT 1.1 Lý thuyết về mã hóa dữ liệu
Mã hóa hoặc mật mã hóa dữ liệu là cơ chế chuyển đổi dữ liệu sang một định dạng khác không thể đọc được, vi dụ như ciphertext (văn bản viết thành mật mã), để có thể ngăn cản những truy cập bất hợp pháp khi dữ liệu trao đổi trong môi trường mạng không an toàn
Mã hóa dữ liệu ngăn chặn được các việc sau :
• Nghe trộm và xem lén dữ liệu
Người gởi và người nhận, phụ thuộc vào quá trình mã hóa,dưới hình thức là một hệ thống
mã hóa Hệ thống mã hoá (Cryptosystems) có 2 loại sau:
• Đối xứng (Symmetric)
• Bất đối xứng (Asymmetric)
Trang 3Một hệ thống mã hóa được phân loại dựa vào con số của khoá mà nó dùng Một khoá
có thể là một con số, một từ, hoặc một cụm từ được dùng vào mục đích mã hóa và giải mã dữ liệu
1.1.1 Hệ thống mã hóa đối xứng (Symmetric Cryptosystems)
Symmetric cryptosystems dựa trên một khóa đơn, đó là một chuỗi ngắn với chiều dài không thay đổi Do đó, phương pháp mã hóa này được xem như là single-key encryption Khoá thường là khóa riêng (hoặc bảo mật) và được dùng để mã hóa cũng như giải mã
Ghi chú : Trong một số tài liệu, symmetric cryptosystem cũng được xem như khóa scryptosystems riêng hoặc bí mật và kỹ thuật này cũng được xem như khóa mật mã riêng hoặc khóa mật mã bí mật
Trước khi hai bên trao đổi dữ liệu, khóa phải được chia sẽ dùng chung cho cả 2 bên Người gửi sẽ mã hóa thông tin bằng khóa riêng và gửi thông tin đến người Trong quá trình nhận thông tin, người nhận sử dụng cùng một khóa để giải mã thông điệp
Tiêu chuẩn mã hóa dữ liệu (Data Encryption Standard (DES)) Nguyên bản DES đề ra giải pháp cho một khóa có chiều dài lên đến 128 bit Tuy nhiên, kích thước của khóa đã giảm xuống còn 56 bit bởi chính phủ Hoa Kỳ trong việc nổ lực tìm ra thuật giải nhanh hơn Việc giảm chiều dài khóa xuống, phụ thuộc vào tốc độ xử lý của bộ vi xử lý Trong phương pháp tấn công Brute Force, các khóa sẽ phát sinh ngẩu nhiên và được gửi đến đoạn văn bản nguyên mẩu cho tới khi xác định được từ khóa chính xác Với những khóa có kích thước nhỏ, sẽ dễ dàng để phát sinh ra chính xác từ khóa và phá vở hệ thống mật mã
Trang 4Chú ý : Tên chính thức của DES là Federal Information Processing Standard (FISP) (Tiêu chuẩn xứ lý thông tin liên bang (Hoa kỳ).
Bội ba tiêu chuẩn mã hóa dữ liệu (Triple Data Encryption Standard (3DES)):
cũng giống như DES, 3DES cũng sử dụng khóa 56 bit Tuy nhiên, nó an toàn hơn nhiều do dùng 3 khóa khác nhau để mã hóa dử liệu Bộ xử lý thực hiện các bước sau : khóa đầu tiên dùng để mã hóa dữ liệu Sau đó, khóa thứ hai sẽ dùng để giải mã dữ liệu vừa được mã hóa Cuối cùng, khóa thứ ba sẽ mã hóa lần thứ hai Toàn bộ quá trình xử lý của 3DES tạo thành một thuật giải có độ an toàn cao Nhưng bởi vì đây là một thuật giải phức tạp nên thời gian thực hiện sẽ lâu hơn, gấp 3 lần so với phương pháp DES
Ron's Code 4 (RC4): được phát triển bởi Ron Rivest, thuật giải này sử dụng những từ
khóa với chiều dài có thể biến đổi lên đến 256 bytes Bởi vì chiều dài của khóa, RC4 được phân loại là một cơ chế mã hóa mạnh Nó cũng tương đối khá nhanh RC4 tạo một dòng bytes ngẩu nhiên và XORs chúng với văn bản nguyên mẩu Bởi vì các bytes được phát sinh ngẩu nhiên, RC4 đòi hỏi một khóa mới cho mổi lần gởi thông tin ra ngoài
Hệ thống mã hóa đồng bộ đưa ra 2 vấn đề chính Đầu tiên, bởi vì một khóa vừa được dùng để mã hóa vừa dùng để giả mã, nếu nó bắt đầu trở thành kẻ xâm nhập, thì tất cả những thông tin sữ dụng khóa này sẽ bị huỷ Vì thế, khóa nên thường xuyên thay đổi theo định kỳ
Một vấn đề khác là khi hệ thống mã hóa đồng bộ xữ lý một lượng thông tin lớn, việc quả lý các khóa sẽ trở thành một công việc vô cùng khó khăn Kết hợp với việc thiết lặp các cặp khóa, phân phối, và thay đổi theo định kỳ đều đòi hỏi thời gian và tiền bạc
Hệ hống mã hóa đối xứng đã giải quyết vấn đề đó bằng việc đưa ra hệ thống mã hóa đối xứng Đồng thời, họ cũng tăng tính năng bảo mật trong suốt quá trình chuyển vận Chúng
ta sẽ được tham khảo thêm về hệ thống mã hóa bất đối xứng ở phần sau
1.1.2 Hệ thống mã hóa bất đối xứng (Asymmetric Cryptosystems)
Thay vì sử dụng một khóa đơn trong hệ thống mã hóa đối xứng, hệ thống mã hóa bất đối xứng sử dụng một cặp khóa có quan hệ toán học Một khóa là riêng tư, chỉ được chính
Trang 5Trong VPN, 2 hệ thống mã hóa bất đối xứng được dùng phổ biến là thuật toán Hellman (DH) và thuật toán Rivest Shamir Adleman (RSA).
Diffie-Thuật toán Diffie-Hellman
Trong thuật toán DH, mổi thực thể giao tiếp nhận được một cặp khóa, một được phân phối tới những thực thể thông tin khác và một được giữ lại riêng Thuật toán DH làm việc theo những vấn đề chính sau :
1 Người gửi nhận khóa công cộng của người nhận, do khóa này là khóa công cộng nên đều được mọi người biết
2 Người gửi thực hiện một thao tác gộp khóa riêng và khóa công công của người nhận, kết quả cho ra một khóa chung bảo mật (shared secret key)
3 Thông điệp sẽ được mã hóa bằng khóa vừa nhận được
4 Sau đó thông điệp mã hóa sẽ được gửi đến người nhận
5 Trong qua trình nhận thông điệp mã hóa, bên nhận sẽ phát sinh một khóa chung mật khác cũng bằng thao tác tương tự gộp chính khóa riêng của mình với khóa chung của bên gửi
Giả định cơ bản của thuật toán này là nếu bất kỳ một ai bắt được thông điệp mã hóa, người đó cũng không thể nào giải mã được bởi vì anh hoặc cô ta không xữ lý khóa riêng của bên nhận được (khóa riêng của anh hoặc cô ta) Dữ liệu được trao đổi dựa trên thuật toán Diffie-Hellman được mô tả ở hình:
Trang 6Mặc dù thuật toán DH có một độ an toàn cao hơn so với hệ thống mã hóa đối xứng, nhưng cũng gặp một số vấn đề khó khăn Phải đảm bảo chắc chắn rằng khóa công cộng phải được trao đổi trước khi quá trình trao đổi dữ liệu thực sự được xác định Cho ví dụ : nếu 2 bên trao đổi khóa công cộng cho nhau qua môi trường không an toàn, như Internet, điều đó
có thể làm cho khóa công cộng có thể bị bắt giữ trước bởi một người xâm phạm nào đó, sau
đó người này sẽ gửi khóa công cộng của mình cho cả hai bên đầu cuối đang thực hiện trao đổi Trong trường hợp này, người xâm nhập sẽ dễ dàng mắc vào nghe lén thông tin của hai bên đầu cuối bởi vì cả hai bên đầu cuối đều trao đổi dữ liệu thông qua khóa công cộng của người xâm phạm Đây là một dạng xâm nhập được biết như một kiểu tấn công Man-in-the-Middle
Thuật toán Rivest Shamir Adleman (RSA), sẽ được tham khảo tiếp theo sau sẽ giải quyết hiệu quả phương pháp tấn công Man-in-the-Middle mà đã nảy ra trong thuật toán DH Thuật toán RSA nổi lên như là một cơ chế mã hóa bất đối xứng khá mạnh
Thuật toán Rivest Shamir Adleman (RSA)
Thuật toán RSA triển khai quá trình xác nhận bằng cách sử dụng chữ ký điện tử theo các bước sau :
1 Khóa công cộng của người gửi được yêu cầu và được dùng cho người nhận và sau
đó được chuyễn hướng về phía trước (forward)
Trang 72 Người gửi sử dụng hàm băm để làm giảm kích thước mẩu tin gốc Thông điệp tổng hợp thì được hiểu như là một thông điệp phân loại (message digest (MD)).
3 Người gửi mã hóa thông điệp phân loại bằng khóa riêng của nó được rút ra từ sự phát sinh chữ ký điện tử độc nhất
4 Thông điệp và chữ ký điện tử được kết hợp và chuyễn hướng đến người nhận
5 Trong lúc nhận thông điệp mã hóa, người nhận phục hồi lại thông điệp phân loại bằng cách sử dụng cùng một hàm băm như người gửi
6 Người nhận sau đó giải mã chữ ký điện tử bằng cách sử dụng khóa công cộng của người gửi
7 Người nhận sau đó sẽ so sánh thông điệp phân loại vừa được phục hồi (bước 5) và thông điệp phân loại nhận được từ chữ ký điện tử (bước 6) Nếu cả hai đồng nhất, tức là dữ liệu không bị chặn đứng, giả mạo hoặc chỉnh sửa trong suốt quá trình trao đổi Ngược lại, dữ liệu sẽ không được chấp nhận, bị từ chối
RSA bảo đảm an toàn và bảo mật trong chuyến đi của dữ liệu bởi vì người nhận kiểm tra sự đúng đắn của dữ liệu qua 3 lần (bước 5, 6 và 7) RSA cũng làm đơn giản hóa công việc quản lý khóa Trong cách mã hóa đối xứng, n2 khóa được yêu cầu nếu trong quá trình trao đổi có n thực thể Bằng cách so sánh, cách mã hóa bất đối xứng chỉ đòi hỏi 2*n khóa
Trang 81.2 Lịch sử phát triển của AES
Tiêu chuẩn mã hóa nâng cao (AES – Advance Encrypto Standard) là khối mã hóa đối xứng được xuất bản bởi Viện tiêu chuẩn và Công nghệ (NIST) vào tháng 12 năm 2001
Tháng 2 năm 2001, NIST đã thông báo rằng một bản dự thảo tiêu chuẩn xử lý thông tin Liên bang (FIPS) đã sẵn có cho công chúng xem xét và bình luận Cuối cùng, AES được xuất bản như FIPS 197 trong sổ đăng kí Liên bang trong tháng 12 năm 2001
Chú ý: AES đã xác định ba phiên bản với 10, 12 và 14 vòng Mỗi phiên ban sử dụng một khóa mật mã kích thước khác nhua (128, 192 hoặc 256) nhưng các khóa vòng thường là
128 bit
Thiết kế chung của mật mã mã hóa AES
Trang 9Các đơn vị dữ liệu
Khối trạng thái và trạng thái khôi chuyển đổi
Trang 10Ví dụ 1:
Chuyển đổi văn bản rõ sang trạng thái
Cấu trúc của mỗi vòng
Trang 111.3 Lý thuyết về chuẩn mã hóa nâng cao
Để cung cấp an ninh, AES sử dụng bốn lại biến đổi: thay thế, hoán vị, trộn và thêm khóa
1.3.1 Cơ sở toán học của AES
Trong AES các phép toán cộng và nhân được thực hiện trên các byte trong trường hữu hạn GF 2 ( )8 .
Phép cộng:
Phép cộng giữa hai phần tử (các byte) trong trường hữu hạn được thực hiện bằng cách cộng theo mođulo 2 các bít tương ứng trong biểu diễn của các byte này Phép cộng các byte
A và B với:
Trang 12trong đó Ci = + ai b mod 2i với i 1,8 =
Các phần tử của trường hữu hạn còn có thể được biểu diễn dưới dạng đa thức Ví dụ tổng của A 73 = H và B 4E = H (viết dưới dạng cơ số 16 - hexa) là:
73 + 4E = 3D
Viết dưới dạng nhị phân:
01110011 01001110 00111101 + =Viết dưới dạng đa thức:
Trang 13 Có 128/192/256 bit khoá và 128 bit khối dữ liệu
Lặp hơi khác với Fiestel
Chia dữ liệu thành 4 nhóm – 4 byte
Thao tác trên cả khối mỗi vòng
Thiết kế để:
o Chống lại các tấn công đã biết
o Tốc độ nhanh và nén mã trên nhiều CPU
o Đơn giản trong thiết kế
1.3.3 Thuật toán AES
AES mã hóa một khối bản rõ M 128 bít thành một khối bản mã C 128 bít bằng cách dùng một khóa mã K có độ dài 128 bít (hoặc 192 hoặc 256 bít) tương ứng với AES 128 −(hoặc AES 192 − hoặc AES 256 − ) Thuật toán thực hiện trên các byte và kích thước khối đối với đầu vào đầu ra và khóa được biểu thị bằng các từ 32 bít (4 byte)
AES sẽ thực hiện một số vòng mã hóa Nr phụ thuộc vào độ dài khóa được sử dụng
(Xem bảng 1)
Trang 14AES vào/đầu ra khóa Nk vòng Nr
Mã hóa AES:
Mỗi vòng gồm 4 phép biến đổi mật mã theo byte
- Thay thế byte
- Dịch các hàng của mảng trạng thái (State Array)
- Trộn dữ liệu trong một cột của State Array
- Cộng khóa vòng vào State Array
Phép thay thế byte: SubBytes( )
Phép biến đổi AES đầu tiên là một phép thay thế byte phi tuyến gọi là phép biến đổi SubBytes( ), nó hoạt động độc lập trên mỗi byte Trước tiên nó sẽ tính nghịch đảo của phép nhân trong GF 2( )8 , sau đó sử dụng một phép biến đổi afin trên nghịch đảo này.
Trang 15' 0
0 '
1
1 '
5
6 '
6
7 '
trong đó bi biểu thị bít thứ i của byte b
Dịch các hàng của State Array; Phép biến đổi ShiftRows( )
Phép biến đổi tiếp theo của AES là dịch các hàng của State Array Lượng dịch
Hàng đầu tiên sẽ không dịch, tức là shift 0, N ( b = = 4 ) 0
Với các hàng còn lại lượng dịch sẽ tùy theo số hàng
( ) ( ) ( ) ( )
shift 0,4 0 shift 1,4 1 shift 2,4 2 shift 3,4 3
=
=
=
=
Trang 16Trộn dữ liệu trong một cột State Array: Phép biến đổi Mixcolumns( )
Phép biến đổi Mixcolumns( ) được dùng để trộn dữ liệu trong một cột của ma trận
trạng thái Các cột được xem như các đa thức trong GF 2 ( )8 Đầu ra của Mixcolumns( ) là
Mở rộng khóa AES: KeyExpansion( )
Thuật toán AES sẽ tạo từ khóa mã 128 bít (hoặc 192 hoặc 256 bít) một tập khởi tạo b
N từ 32 bít và Nb từ 32 bít cho mỗi vòng bao gồm N Nb( r + 1 ) từ 32 bít Chương trình giải mã KeyExpansion( ) chứa các SubWord( ) và RotWord( )
Hàm SubWord( ) là một phép thay thế (hộp S) một từ vào 4 byte bằng một từ ra 4 byte
Hàm RotWord( ) thực hiện phép hoán vị vòng các byte trong một từ 4 byte (32 bít)
Trang 17temp SubWord RotWord temp xor Rconw i N =
else if ( Nk = 8 and i mod Nk = 4 )
Trang 18i i 1= +
end while
end
(nguồn trích dẫn: Đặc tả thô AES: http://csrc.nist.gov/encryption/aes/ )
Chương trình giải mã của AES:
Cipher ( bytein 4 N ,byteout 4 N , word w N [ * b] [ * b] b*( Nr + 1 ) )
Begin byte state [ 4, Nb] state = in AddRoundKey(state,w)
for round = 1 step 1 to Nr − 1
SubBytes (state), ShifRows (state),Mixcolumns(state), AddRoundKey(state,w+round*Nb)
end forSubBytes (state), ShifRows (state)
r* b
AddRoundKey(state,w+N N )
out = stateend
1.3.4 Mở rộng khóa AES
Dùng khoá 128 bit (16 byte) và mở rộng thành mảng gồm 44/52/60 từ 32 bit
Trang 19Sau đó tạo quay vòng các từ mà phụ thuộc vào giá trị ở các vị trí trước và 4 vị trí sau
3 trong 4 trường hợp chỉ là XOR chúng cùng nhau
Mỗi cái thứ 4 có S box kết hợp quay và XOR với hằng số trước đó, trước khi XOR cùng nhau
Thiết kế chống các tấn công đã biết
Giải mã AES
Giải mã ngược lại không duy nhất vì các bước thực hiện theo thứ tự ngược lại
Nhưng có thể xác định mã ngược tương đương với các bước đã làm đối với mã
• Nhưng sử dụng ngược lại với từng bước
• Với khoá con khác nhau
Thực hiện được vì kết quả không thay đổi khi
• Đổi lại phép thế byte và dịch các hàng
• Đổi lại việc trộn các cột và bổ sung khoá vòng
Lý do mở rộng khoá: các tiêu chuẩn thiết kế bao gồm
• Giả sử biết một phần khoá, khi đó không đủ để biết nhiều hơn, tức là các khoá con khác hoặc khoá nói chung
• Phép biến đổi nghịch đảo được
• Nhanh đối với nhiều kiểu CPU
• Sử dụng hằng số vòng để làm mất tính đối xứng
• Khuếch tán bit khoá thành khoá con cho các vòng
• Có đủ tính phi đối xứng để chống thám mã
Trang 20Các khía cạnh cài đặt:
• Có thể cài đặt hiệu quả trên CPU 8 bit
• Phép thế byte làm việc trên các byte sử dụng bảng với 256 đầu vào
• Dịch hàng là phép dịch byte đơn giản
• Cộng khoá vòng làm việc trên byte XOR
• Các cột hỗn hợp yêu cầu nhân ma trận trong GF(28) mà làm việc trên giá trị các byte, có thể đơn giản bằng cách tra bảng
• có thể cài đặt hiệu quả trên CPU 32 bit
• Xác định lại các bước để sử dụng từ 32 bit
• Có thể tính trước 4 bảng với 256 đầu vào
• Sau đó mỗi cột trong mỗi vòng có thể tính bằng cách tra 4 bảng và 4 XOR
• Cần 16 Kb để lưu các bảng
• Những nhà thiết kế tin tưởng rằng việc cài đặt rất hiệu quả này là yếu tố cơ bản trong việc chọn nó là mã AES
Trang 21PHẦN 2: XÂY DỰNG ỨNG DỤNG
Với lý thuyết tìm hiểu được ở trên nhóm chúng em đã tiến hành cài đặt và xây dựng chương trình mã hóa và giải mã sử dụng AES, sử dụng ngôn ngữ C#, NET
2.1 Cài đặt thuật toán
Dưới đây là thuật toán mã hóa dữ liệu và giải mã dữ liệu:
Thuật toán mã hóa dữ liệu:
public string Encrypt( string Data, string Password , int Bits)
{
//string Password = aeskey192;
byte [] clearBytes =
System.Text Encoding Unicode.GetBytes(Data);
PasswordDeriveBytes pdb = new PasswordDeriveBytes (Password, new byte [] { 0x00, 0x01, 0x02, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4 });