Nhóm đã lựa chọn RC4 trong rất nhiều kiểu mật mã khác để nghiên cứu bởi vì tốc độ và sự đơn giản của nó, hiệu quả triển khai thực hiện trong cả phần mềm và phần cứng là rất dễ dàng để phát triển. Mục tiêu đặt ra khi thực hiện đề tài ngày gồm: Tìm hiểu tổng quan về thuật toán RC4. Phân tích và làm rõ được tính bảo mật của thuật toán RC4. Xây dựng được một chương trình minh họa thuật toán.
Trang 1MẬT MÃ
THUẬT TOÁN RC4
Thực hiện:
1 Nguyễn Xuân Khánh
2 Nguyễn Thị Thanh Hương
3 Nguyễn Thị Hoài Trang
Trang 2THUẬT TOÁN RC4
Trang 3Ý KIẾN CỦA GIẢNG VIÊN
Trang 4
THUẬT TOÁN RC4
MỤC LỤC
Ý KIẾN CỦA GIẢNG VIÊN I MỤC LỤC II
Trang 5DANH MỤC KÝ HIỆU VÀ TỪ VIẾT TẮT
Viết tắt Giải thích
CBC Cipher Block Chaining
KSA Key scheduling algorithm
PDF Portable Document Format
PRGA Pseudo-random generation algorithm
RC4 Rivest Cipher 4
SSL Secure Sockets Layer
TLS Transport Layer Security
WEP Wired Equivalent Privacy
WPA Wireless Protected Area
Trang 6THUẬT TOÁN RC4
DANH MỤC CÁC HÌNH VẼ
Hình 3.4.a Giao diện chính 9
Hình 3.4.b Giao diện form Input 9
Form mã hóa 10
Hình 3.4.c Giao diện form mã hóa 10
Hình 3.4.d Giao diện form giải hóa 10
Hình 3.5.a Kết quả từ website rc4.online-domain-tools.com 11
Hình 3.5.b Kết quả từ chương trình 11
Trang 7LỜI MỞ ĐẦU
Ngày nay, thông tin liên lạc đã trở nên rất phổ biến và vô cùng thuận lợi Song song với điều này, nhu cầu bảo mật thông tin ngày càng được đặt ra cấp thiết hơn Vì vậy, mật mã được nghiên cứu rộng rãi, được ứng dụng nhiều hơn
và được nói đến nhiều hơn bao giờ hết
Nhóm đã lựa chọn RC4 trong rất nhiều kiểu mật mã khác để nghiên cứu bởi
vì tốc độ và sự đơn giản của nó, hiệu quả triển khai thực hiện trong cả phần mềm và phần cứng là rất dễ dàng để phát triển Mục tiêu đặt ra khi thực hiện đề tài ngày gồm:
- Tìm hiểu tổng quan về thuật toán RC4
- Phân tích và làm rõ được tính bảo mật của thuật toán RC4
- Xây dựng được một chương trình minh họa thuật toán
Nhóm cũng xin cảm ơn sự hướng dẫn tận tình của thầy giáo bộ môn cả về chuyên môn cũng như định hướng Vì kiến thức còn hạn hẹp nên trong quá trình thực hiện đề tài không thể tránh khỏi thiếu sót Rất mong nhận được nhận sự góp
ý của thầy cô để đề tài có thể hoàn thiện hơn nữa
Trang 8MẬT MÃ HỌC NÂNG CAO THUẬT TOÁN RC4
CHƯƠNG 1 GIỚI THIỆU VỀ THUẬT TOÁN RC4
1.1 Lịch sử RC4
RC4 có tên gọi đầy đủ là Rivest Cipher 4 và được thiết kế bởi Ron Rivest của hãng bảo mật RSA Security vào năm 1987
RC4 bước đầu là một bí mật thương mại, nhưng vào tháng 9 năm 1994, một
mô tả của nó được gửi ẩn danh với Cypherpunks Nó sớm được đăng lên nhóm tin sci.crypt, và sau đó có mặt trên nhiều trang Web khác Các mã rò rỉ đã được xác nhận có kết quả mã hóa giống với RC4 ban đầu Bởi vì các thuật toán đã bị
rò rỉ cho nên RC4 không còn là một bí mật thương mại Do cái tên RC4 đã được đăng ký thương hiệu nên nó đã được gọi tắt là ARCFOUR hoặc ARC4 RC4 là
mã dòng được sử dụng rộng rãi nhất và được dùng trong các giao thức như: SSL, TLS (để bảo vệ lưu lượng Internet) và WEP, WPA (để đảm bảo an toàn mạng không dây)
Các yếu tố chính trong thành công của RC4 là do tốc độ và sự đơn giản của
nó Hiệu quả triển khai thực hiện trong cả phần mềm và phần cứng là rất dễ dàng để phát triển
1.2 Mô tả thuật toán
Các thuật toán RC4 là khá đơn giản và dễ dàng để giải thích Một khóa có
độ dài từ 8 tới 2048 bit được sử dụng để khởi tạo 256 byte trạng thái S, với các phần tử S[0], S[1],…,S[255] Vào mọi thời điểm, S chứa một hoán vị của tất cả các số 8 bit (từ 0 đến 255) Đối với mã hóa và giải mã, l byte K được tạo ra từ S bằng cách chọn một trong 256 phần tử một cách có hệ thống Khi mỗi giá trị của
K được tạo ra, các phần tử trong S một lần nữa được hoán vị
Hoán vị ban đầu sử dụng thuật toán lập lịch khóa (KSA) Sau khi bước này được hoàn thành, l byte K được sinh ra bởi thuật toán sinh số giả ngẫu nhiên (PRGA)
Trang 91.2.1 Giai đoạn khởi tạo
Để bắt đầu, các mục của S được thiết lập bằng các giá trị từ 0 đến 255 theo thứ tự tăng dần, đó là S[0] = 0, S[1] = 1,…, S[255]=255 Một mảng tạm thời T cũng được tạo ra Mảng T là mảng được sao chép từ K và sau đó K được lặp đi lặp lại nhiều lần cho đến khi lấp đủ 256 byte Các hoạt động sơ bộ có thể được
mô tả với thuật toán như sau:
for i = 0 to 255 do
S[i] = i;
T[i] = K[i mod lengthK];
endfor
Với lengthK là kích thước khóa K
1.2.2 Thuật toán lập lịch khóa (KSA)
Tiếp theo, chúng ta sử dụng T để lập lịch khóa của S Điều này liên quan đến việc bắt đầu với S[0] và đi tới S[255], và ở mỗi S[i], hoán đổi S[i] với một byte khác trong S được định sẵn theo thuật toán này:
j = 0;
for i = 0 to 255 do
j = (j + S[i] + T[i]) mod 256;
HoanVi(S[i], S[j]);
endfor
Thuật toán được quyết định bởi T[i] nhưng hoạt động duy nhất trên S là hoán đổi Vì là phép hoán vị nên S vẫn còn chứa tất cả các số từ 0 đến 255
1.2.3 Thuật toán sinh số giả ngẫu nhiên (PRGA)
Một khi lập lịch khóa hoàn thành thì khóa K đầu vào không còn được sử dụng Sinh số liên quan đến việc xoay vòng qua tất cả các phần tử của S[i], và ở mỗi S[i], hoán đổi S[i] với một byte khác trong S theo thuật toán được quyết
Trang 10THUẬT TOÁN RC4
định bởi các giá trị hiện tại của S Sau đó đến S[255], quá trình này tiếp tục, bắt đầu lại một lần nữa tại S[0]
i, j = 0;
while (true)
i = (i + 1) mod 256;
j = (j + S[i]) mod 256;
HoanVi(S[i], S[j]);
t = (S[i] + S[j]) mod 256;
k = S[t];
end while;
1.2.4 Mã hóa và giải mã
Để mã hóa, XOR giá trị k với các byte tiếp theo của bản gốc P
Để giải mã, XOR giá trị k với các byte tiếp theo của bản mã C
Trang 11CHƯƠNG 2 TÍNH BẢO MẬT CỦA THUẬT TOÁN RC4
2.1 Độ an toàn
Không giống như mã dòng hiện đại (ví dụ eSTREAM), RC4 không tạo một giá trị ngẫu nhiên riêng biệt đi cùng với khóa Điều này có nghĩa là nếu một khóa dài hạn được sử dụng để mã hóa cho nhiều dòng, thì phải miêu tả cách gắn giá trị ngẫu nhiên như nào để tạo dòng khóa cho RC4 Một cách tiếp cận để giải quyết vấn đề này, để “làm tươi” khóa, người ta băm khóa dài hạn cùng với một giá trị ngẫu nhiên Tuy nhiên, nhiều ứng dụng sử dụng RC4 chỉ đơn giản là nối khóa với giá trị ngẫu nhiên Khóa lập lịch yếu của RC4 đem lại một loạt các vấn
đề nghiêm trọng
Đáng chú ý là, mã dòng RC4, là một thuật toán mã hóa thông thường, lại kháng lại được tấn công BEAST (tìm ra vào năm 2011) vào giao thức TLS 1.0, khai thác điểm yếu được biết đến trong chế độ xích mã khối (CBC), gồm tất cả các hệ mã khối hỗ trợ bởi TLS 1.0 Trong năm 2013 đã có một kịch bản tấn công mới được đề xuất bởi AlFardan, Bernstein, Paterson, Poettering và Schuldt sử dụng sai số thống kê mới trong bảng khóa của RC4, để phục hồi bản rõ với số lượng lớn lần mã hóa của TLS
2.2 Độ chệch Roos và việc thiết lập lại khóa từ hoán vị
Trong năm 1995, Andrew Roos đã quan sát thực nghiệm rằng byte đầu tiên của dòng khóa có quan hệ với 3 byte đầu tiên của khóa và một ít byte đầu tiên của hoán vị sau KSA có quan hệ với tổ hợp tuyến tính nào đó của các byte khóa Nhưng độ chệch này vẫn còn chưa được chứng minh cho đến năm 2007, khi Gautam Paul, Siddheshwar Rathi và Subhamoy Maitra chứng minh tưng quan dòng khóa – khóa và trong công trình khác Gautam Paul, Subhamoy Maitra chứng minh các tương quan hoán vị - khóa Công trình sau cũng sử dụng các tương quan hoán vị - khóa để thiết kế thuật toán đầu tiên nhằm thiết lập lại khóa đầy đủ từ hoán vị cuối cùng sau KSA mà không cần giả thiết nào vào khóa hoặc véc tơ khởi tạo Thuật toán này có xác suất thành công không đổi trong một thời gian là căn bậc hai của độ phức tạp tìm kiếm vét cạn khóa Sau đó, nhiều công trình khác đã được thực hiện để thiết lập lại khóa từ các trạng thái bên trong
Trang 12THUẬT TOÁN RC4
Subhamoy Maitra và Gautam Paul cũng chứng tỏ rằng những độ chệch kiểu Roos vẫn còn ngay cả khi người ta xét xác chỉ số hoán vị lồng nhau như S[S[i]] hoặc S[S[S[i]]] Những kiểu chệch này được dùng trong một vài phương pháp thiết lập lại khóa sau này nhằm tăng xác suất thành công
2.3 Những đầu ra chệch của RC4
Dòng khóa được sinh bởi RC4 bị chệch theo nhiều mức độ khác nhau đối với những dãy nhất định làm cho nó có thể bị tổn thương trước các tấn công phân biệt Tấn công tốt nhất loại này thuộc về Itsik Mantin và Adi Shamir, những người đã chỉ ra rằng byte ra thứ hai của mật mã bị chệch từ 0 với xác suất 1/128 (thay cho 1/256) Nếu byte thứ 3 của trạng thại gốc là 0, và byte thứ 2 không bằng 2 thì byte ra thứ hai luôn luôn là 0 Sự chệch như thế có thể bị phát hiện bằng cách quan sát chỉ 256 byte
Souradyuti và Bart Preneel của COSIC đã chứng tỏ rằng các byte thứ nhất
và thứ hai của RC4 cũng bị chệch Số các mẫu cần thiết để phát hiện chệch này
là 225 byte
Scott Fluhrer và David McGrew cũng chứng tỏ những tấn công như thế,
chúng đã phân biệt dòng khóa với dòng ngẫu nhiên khi cho a gigabyte đầu ra.
Đặc trưng đầy đủ của bước đơn PRGA của RC4 được thực hiện đầy đủ bởi nhiều tác giả Khi xem xét tất cả các hoán vị, họ đã chứng minh rằng phân phối của các đầu ra là không đều khi cho i và j, và như một hệ quả, thông tin về j luôn luôn bị rò rỉ vào đầu ra
2.4 Những hệ mật dựa trên RC4
RC4 được sử dụng khá rộng rãi Có thể liệt kê ra một số hệ mật như sau: WEP, WPA (thuật toán mặc định), BitTorrent protocol encryption, Secure Sockets Layer (tùy chọn), Microsoft Point-to-Point Encryption, Secure Shell (tùy chọn), Remote Desktop Protocol, Kerberos (tùy chọn), PDF, Skype (ở dạng
đã sửa đổi), trong đó một hệ mật được lưu ý với “tùy chọn” thì RC4 là một trong một vài mật mã mà hệ thống này có thể được cấu hình để sử dụng
Trang 13CHƯƠNG 3 THIẾT KẾ CHƯƠNG TRÌNH
3.1 Phân tích yêu cầu
- Thiết kế một chương trình mã hóa và giải mã bằng thuật toán RC4
- Chương trình nhận đầu vào từ file “input.txt”, xuất kết quả ra 2 file
“encrypt.txt” và “decrypt.txt” Tất cả các file này nằm trong cùng thư mục với file chương trình Dữ liệu các file được biểu diễn dưới dạng chuỗi HEX viết thường
- File “input.txt” gồm 2 dòng:
+ Dòng 1: Khóa
+ Dòng 2: Khối dữ liệu bản rõ
- File “encrypt.txt” gồm x dòng:
+ Dòng 1: Khóa
+ Dòng 2: Dòng khóa mã hóa
+ Dòng 3: Bản rõ
+ Dòng 4: Bản mã
+ Dòng 5 x: Dòng khóa mã hóa được ngắt thành từng đoạn 16 byte, mỗi đoạn lưu trên một dòng
- File “decrypt.txt” gồm y dòng:
+ Dòng 1: Khóa
+ Dòng 2: Dòng khóa giải mã
+ Dòng 3: Bản mã
+ Dòng 4: Bản rõ
Trang 14THUẬT TOÁN RC4
+ Dòng 5 y: Dòng khóa giải mã được ngắt thành từng đoạn 16 byte, mỗi đoạn lưu trên một dòng
- Có khả năng tạo khóa và bản rõ với các giá trị ngẫu nhiên Hoặc có thể nhập đầu vào theo các ký tự ASCII và chuyển đổi qua lại sang HEX
3.2 Thiết kế chương trình
Chương trình có một Form chính để chứa 3 nút: Tạo file Input, Mã hóa, Giải mã
• Form Input:
- Có các Button để tạo ra khóa và bản rõ với các giá trị ngẫu nhiên
- Có thể chuyển đổi qua lại giữa ASCII và HEX
- Có Button lưu file để xuất ra file đúng định dạng yêu cầu
• Form Mã Hóa:
- Mặc định sẽ tải dữ liệu từ file input hoặc có thể chọn file tùy ý
- Có Button mã hóa đồng thời xuất ra file “encrypt.txt” đúng định dạng yêu cầu
- Hiển thị giá trị của khóa và bản rõ từ dữ liệu đầu vào
- Hiển thị giá trị vector T, S ban đầu, S sau lập lịch khóa và số giả ngẫu nhiên dùng để mã hóa
- Hiển thị được bản mã
• Form Giải Mã:
- Tương tự với form Mã Hóa nhưng không hiển thị các vector T và S
3.3 Cài đặt thuật toán
Chương trình được triển khai trên ngôn ngữ NET và sử dụng bộ công cụ
Trang 15• Khởi tạo 2 mảng T và S:
For i As Integer = 0 To 255
arrKeyT(i) = arrKey(i Mod ((strKey.Length / 2)))
arrKeyS(i) = i
Next
• Thuật toán lập lịch khóa:
Dim j As Integer = 0
For i As Integer = 0 To 255
j = (j + arrKeyS(i) + arrKeyT(i)) Mod 256
Dim bytehoanvi As Byte
bytehoanvi = arrKeyS(i)
arrKeyS(i) = arrKeyS(j)
arrKeyS(j) = bytehoanvi
Next
• Thuật toán sinh số giả ngẫu nhiên:
Dim arrKeyFinal(arrText.Length - 1) As Byte
Dim dem As Integer = 0
Dim ii As Integer = 0
Dim jj As Integer = 0
Dim lenght As Integer = arrText.Length
While lenght > 0
ii = (ii + 1) Mod 256
jj = (jj + arrKeyS(ii)) Mod 256
Dim bytehoanvi As Byte
bytehoanvi = arrKeyS(ii)
arrKeyS(ii) = arrKeyS(jj)
arrKeyS(jj) = bytehoanvi
arrKeyFinal(dem) = arrKeyS(( Convert ToInt16(arrKeyS(ii)) +
Trang 16THUẬT TOÁN RC4
Convert ToInt16(arrKeyS(jj))) Mod 256) dem = dem + 1
lenght = lenght - 1
End While
• Mã hóa:
Dim arrEncrypt(arrText.Length - 1) As Byte
For i As Integer = 0 To arrText.Length - 1
arrEncrypt(i) = arrText(i) Xor arrKeyFinal(i)
Next
Do việc mã hóa bản rõ chỉ qua một phép toán XOR nên việc giải mã chúng
ta có thể sử dụng lại các thuật toán cũ của mã hóa
3.4 Thiết kế giao diện
• Giao diện chính
Hình 3.4.a Giao diện chính
• Form tạo file input
Hình 3.4.b Giao diện form Input
Trang 17• Form mã hóa
Hình 3.4.c Giao diện form mã hóa
• Form giải mã
Hình 3.4.d Giao diện form giải hóa
3.5 Kiểm tra tính đúng đắn của kết quả mã hóa
Sau khi thiết kế và cài đặt chương trình hoàn tất Nhóm đã sử dụng những vector test để kiểm tra tính đúng đắn của kết quả mã hóa Các khóa và bản rõ ở dạng mã ASCII, dòng khóa và bản mã trong hệ cơ số 16
Key Keystream Plaintext Ciphertext
Key EB9F7781B734CA72A719 Plaintext BBF316E8D940AF0AD3
Secret 04D46B053CA87B59 Attack at
dawn
45A01F645FC35B383552544B9BF5
Nguồn http://en.wikipedia.org/wiki/RC4
Trang 18THUẬT TOÁN RC4
Kết quả mã hóa của chương trình hoàn toàn trùng khớp với 3 vector test trên Tuy nhiên nhóm đã sử dụng thêm một công cụ mã hóa RC4 online (http://rc4.online-domain-tools.com) để kiểm thử thêm nhiều trường hợp khác
và nhận được kết quả hoàn toàn trùng khớp
Hình 3.5.a Kết quả từ website rc4.online-domain-tools.com
Hình 3.5.b Kết quả từ chương trình
Trang 19KẾT LUẬN
Báo cáo này tìm hiểu về thuật toán RC4 Qua đó chúng ta thấy thuật toán RC4 khá đơn giản, ý nghĩa từng bước rõ ràng, logic và cũng dễ dàng triển khai Đồng thời RC4 cũng tỏ ra an toàn với phương pháp thám mã cơ bản bản là thám
mã tuyến tính và thám mã vi phân
Trong thời gian qua, nhóm em đã tìm hiểu tổng quan được về RC4, phân tích được tính bảo mật của thuật toán Thông qua những tìm hiểu trên nhóm em còn xây dựng được một chương trình minh họa thuật toán đó Tuy nhiên do thời gian có hạn, kiến thức chưa được sâu nên bản báo cáo này còn nhiều thiếu sót mong các bạn và thầy giáo có những nhận xét và ý kiến để giúp cho bản báo cáo của nhóm chúng em hoàn thiện thêm
Trang 20THUẬT TOÁN RC4
TÀI LIỆU THAM KHẢO
[1] TS Nguyễn Ngọc Cương, TS Nguyễn Tuấn Anh, ThS Trần Thị Lương,
Giáo trình Mật mã ứng dụng trong an toàn thông tin, Học viện kỹ thuật mật
mã, 2013, trang 13-14 76-81
[2] RC4 Algorithm, http://en.wikipedia.org/wiki/RC4, 01/2015
[3] RC4 - Symmetric Ciphers Online, http://rc4.online-domain-tools.com/, 01/2015
[4] Vishwas Gagrani, Presentation over Cryptographic Primitives (RC4),
http://www.youtube.com/watch?v=KM-xZYZXElk, 01/2015