Hình 20: Sơ đồ giấu tin mật theo giải thuật F5
Theo giải pháp đã đề xuất ở trên, phần mềm có các khối chức năng chính nhƣ sau:
Khối chức năng phía ngƣời gửi:
- Tạo ngẫu nhiên cặp khóa công khai/bí mật - Nén thông điệp mật
- Mã hóa thông điệp mật theo giải thuật mã hóa khóa đối xứng
- Phân tích thông điệp đã mã với các vật mang trong CSDL để chọn vật mang phù hợp nhất
- Tiến hành giấu vật mang theo giải thuật giấu F5.
Khối chức năng phía ngƣời nhận:
- Tách thông tin từ vật mang - Giải mã thông tin
Giao diện chính của chƣơng trình nhƣ sau
Hình 21: Giao diện chính của phần mềm
4) Xây dựng cơ sở dữ liệu vật mang
Khi tấn công một hệ giấu tin mật, một trong những phƣơng pháp hay đƣợc kẻ tấn công sử dụng là đối sánh vật mang với vật mang gốc. Nhằm tránh nguy cơ bị phát hiện bởi phƣơng pháp này, vật mang đƣợc giấu tin phải là vật mang có tính ―duy nhất‖.
Nhƣ đã trình bày trong giải pháp đề xuất, ứng dụng cần xây dựng một CSDL vật mang sao cho tất cả các vật mang đều có tính ―duy nhất‖. Vật mang nào đã đƣợc chọn để giấu tin mật một lần thì sẽ đƣợc xóa khỏi CSDL, tránh trƣờng hợp đƣợc sử dụng thêm một lần nữa. Trong phạm vi luận văn này, do ứng dụng chỉ mang tính minh họa cho giải pháp đề xuất nên học viên đã xây dựng CSDL vật mang bằng cách download ngẫu nhiên 155 bức ảnh JPEG từ trên Internet. Các ảnh này đƣợc lƣu vào một thƣ mục cho trƣớc, tên ảnh đƣợc lƣu trong CSDL Access. Khi một bức ảnh đƣợc chọn thì nó sẽ đƣợc xóa khỏi thƣ mục chứa bức ảnh đó.
5) Tạo ngẫu nhiên cặp khóa công khai/bí mật
- Độ dài khóa đƣợc tạo ra có thể là 1024 bit hoặc 2048 bit.
- Sử dụng lớp RSACryptoServiceProvider. Lớp này có một số đặc điểm sau: Thi hành mã hoá và giải mã bất đối xứng bằng cách sử dụng việc thi hành giải
thuật RSA đƣợc cung cấp bởi Cryptographic service provider (CSP)
Gọi hàm RSACryptoServiceProvider (keysize) để khởi tạo một thể hiện của lớp RSACryptoServiceProvider với kích thƣớc khoá keysize
Gọi hàm RSACryptoServiceProvider.ToXmlString(value). Hàm này nhận kết quả là cặp khoá công khai và khoá riêng của RSA nếu value có giá trị là true; nhận kết quả là chỉ khoá riêng nếu giá trị của value là false
- Kết quả thu đƣợc là một cặp khóa công khai/bí mật đƣợc sinh ra một cách ngẫu nhiên, đủ mạnh
Hình 22: Tạo ngẫu nhiên cặp khóa công khai/bí mật
6) Nén thông điệp mật
- Đầu vào là thông điệp mật cần giấu
- Sử dụng thƣ viện ZetaCompressionLibrary.dll - Gọi lớp CompressionHelper, có đặc điểm sau:
Sử dụng giải thuật nén không mất mát thông tin, đạt các chuẩn ZIP, GZIP để nén và giải nén dữ liệu
Có thể nén các loại dữ liệu sau: thƣ mục; nhiều file cùng một lúc; các file XML trong bộ nhớ; một đoạn văn bản; một Dataset trong bộ nhớ; một dãy byte trong bộ nhớ
Kết quả trả ra là một dãy byte
7) Mã hóa thông điệp mật
- Thực hiện nhận khoá key và vectơ ban đầu iv một cách ngẫu nhiên, có độ dài 16 byte
Các giá trị nhận đƣợc bằng cách lấp đầy 16 byte với một dãy mật mã các giá trị ngẫu nhiên đủ mạnh
Gọi RNGCryptoServiceProvider để tạo ra một bộ sinh số ngẫu nhiên, lấp đầy cho khóa key và vecto iv
- Mã hóa thông điệp mật cần giấu bằng giải thuật AES với khóa key và iv vừa nhận đƣợc, sử dụng lớp RijndaelManaged
Dựa vào giải thuật Rijindael
Gọi phƣơng thức CreateEncryptor (key, iv) để tạo ra bộ mã hoá Rijindael với khoá key và vecto khởi tạo iv
- Quá trình thực hiện nhƣ sau: Tạo ra một bộ mã hoá Mã hoá dữ liệu
Ghi dữ liệu đã mã hoá vào một stream Kết quả nhận đƣợc một dãy các byte
- Mã hoá key và iv bằng giải thuật RSA, sử dụng lớp RSACryptoServiceProvider - Thêm key và iv đã mã hóa vào đầu thông điệp
- Kết quả nhận đƣợc bao gồm: 2 byte độ dài khóa, key, iv và thông điệp mật đã mã hóa
8) Giải thuật giấu tin mật
Giải thuật F5 giấu tin mật trong ảnh JPEG có cấu trúc mức thô nhƣ sau:
- Bước 1: Khởi động nén JPEG. Dừng quá trình này sau khi đã lượng tử hoá các hệ số.
- Bước 2: Khởi tạo bộ sinh số ngẫu nhiên mã hoá với khoá có được từ mật khẩu.
- Bước 3: Thực hiện hoán vị (có hai tham số: bộ sinh số ngẫu nhiên và các hệ số)
- Bước 4: Định tham số k dựa vào không gian lưu trữ của vật mang và độ dài thông điệp.
- Bước 5: Tính toán độ dài từ mã n=2k-1.
- Bước 6: Nhúng thông điệp mật với ma trận mã (1,n,k):
Điền đầy bộ đệm với n hệ số khác 0.
Băm bộ đệm này (sinh một giá trị hàm băm với k vị trí bit).
Thêm tiếp k bit của thông điệp vào giá trị hàm băm (phép toán xor).
Nếu sum=0 thì bộ đệm không bị thay đổi. Trái lại, sum là chỉ số của bộ đệm 1..n, giá trị tuyệt đối của thành phần đó bị giảm
Kiểm tra sự suy giảm (có tạo ra giá trị 0 không). Nếu có, điều chỉnh bộ đệm (loại bỏ 0 bằng cách đọc hệ số 1 hoặc khác 0, ví dụ như lặp bước trên bắt đầu từ hệ số trùng). Nếu không có suy giảm, đưa các hệ số mới ra phía sau của bộ đệm thực. Lặp lại bước 6 đến khi hết thông điệp.
Sơ đồ khối của quá trình giấu nhƣ sau:
Hình 23: Sơ đồ khối quá trình giấu tin theo giải thuật F5
9) Tính toán và sắp xếp vật mang theo hiệu quả nhúng
Một trong những yêu cầu quan trọng của phần mềm là phải xây dựng CSDL vật mang. Thông điệp mật đƣợc phân tích trên cơ sở CSDL vật mang đã xây dựng để tìm ra vật mang tốt nhất. Trong phần mềm này, ta sẽ tiến hành duyệt từng vật mang trong CSDL, tính toán với thông điệp mật, sau đó sẽ sắp xếp các vật mang theo tiêu chí ―hiệu quả nhúng‖ giảm dần. Vật mang đƣợc lựa chọn không chỉ là vật mang có hiệu quả nhúng tốt mà còn phải đáp ứng yêu cầu là phù hợp với hình thức ―ngụy trang‖ cho liên lạc. Đây cũng có thể nói là một ƣu điểm của phần mềm này so với các phần mềm có trên thị trƣờng hiện nay.
Với mỗi một vật mang trong CSDL, phần mềm thực hiện các bƣớc từ 1 đến 6 nhƣ trong giải thuật F5 ở trên, qua đó tính toán số thay đổi do nhúng. Cuối cùng, phần mềm thực hiện sắp xếp các vật mang theo tiêu chí đã lựa chọn để tìm ra vật mang phù hợp.
10) Tách tin mật
Hình 25: Tách tin mật từ vật mang tin
- Tách thông điệp mật đã giấu - Giải mã thông điệp
Sử dụng khoá riêng đã trao đổi trƣớc để giải nén Khởi tạo một thể hiện của RSACryptoServiceProvider
Sử dụng đối tƣợng RSAParameters: biểu diễn các tham số của giải thuật
RSA. Với đối tƣợng này, tính toán tất cả các tham số cần thiết của RSA: D, P, DP, DQ, Exponent, InverseQ, Modulus, P, Q
Tách giá trị key và iv
Giải mã thông điệp
Sử dụng lớp RijndaelManaged
Gọi phƣơng thức CreateDecryptor để tạo bộ giải mã Các bƣớc thực hiện
Tạo ra bộ giải mã Giải mã thông điệp Đọc dữ liệu đầu ra vào một dãy
- Thực hiện giải nén bằng cách sử dụng thƣ viện ZetaCompressionLibrary.dll và lớp CompressionHelper.