Bài thực hành này sẽ khám phá khái niệm về các chế độ mã hóa và tính chất của chúng. Để thực hiện, sinh viên sẽ sử dụng một sản phẩm mã hóa mã nguồn mở được biết đến là OpenSSL. Sinh viên sẽ khám phá tính chất của các chế độ này, xem một biểu đồ minh họa trạng thái của văn bản được mã hóa, và khám phá quá trình truyền lỗi trong quá trình giải mã ở các chế độ khác nhau.
Lưu ý: Sinh viên có thể sử dụng các lệnh "man openssl" và "man enc" để có thêm trợ giúp về cách sử dụng công cụ dòng lệnh openssl. Phụ lục A cung cấp sự chuyển đổi từ hex sang nhị phân.
Phụ lục B mô tả định dạng hình ảnh BMP, điều này hữu ích để hiểu khi thực hiện phần ECB trong bài thực hành này.
Sử dụng lệnh "ll" để liệt kê nội dung của thư mục.
2. Yêu cầu đối với sinh viên:
Nắm được kiến thức về mã hóa khóa đối xứng và câu lệnh trên Linux.
3. Nội dung thực hành Chuẩn bị lab
- Khởi động lab:
labtainer symkeylab
Các nhiệm vụ
Nhiệm vụ 1: Làm quen Mã hóa và giải mã một tệp tin (bất kỳ tệp tin nào) Trong nhiệm vụ này, sinh viên chỉ cần làm quen với cú pháp của lệnh openssl.
Thực hiện các bước sau:
1. Tạo một tệp tin văn bản với một số nội dung nhỏ bằng cách sử dụng một trình soạn thảo (ví dụ:
leafpad) hoặc sử dụng kết hợp của lệnh echo và chuyển hướng (‘>’).
2. Để mã hóa tệp tin văn bản thành "cipher.txt", gõ:
openssl CIPHER -e -in plain.txt -out cipher.txt -K KEY -iv IV thay thế:
- CIPHER bằng một thuật toán mã hóa cụ thể và chế độ CBC, ví dụ: aes-128-cbc. (Để xem tất cả các tùy chọn, sử dụng "man enc").
- plain.txt là tên của tệp văn bản thô sinh viên vừa tạo.
- cipher.txt là tên của tệp kết quả sẽ chứa văn bản đã được mã hóa.
- KEY bằng một khóa đối xứng biểu diễn bằng hệ thập lục phân (tùy chọn của sinh viên).
- IV bằng một vectơ khởi tạo biểu diễn bằng hệ thập lục phân (tùy chọn của sinh viên).
Hãy chắc chắn sử dụng tùy chọn -K, và không phải tùy chọn -k. Tùy chọn sau có thể không tạo ra lỗi, nhưng có thể gây ra vấn đề sau này trong bài thực hành.
3. Quan sát văn bản đã được mã hóa bằng cách sử dụng lệnh cat, more, less hoặc leafpad.
4. Sinh viên đã thấy rằng tệp tin đã được mã hóa là những ký tự vô nghĩa và không hiển thị đúng.
Để xem giá trị hex thực tế của văn bản đã mã hóa, nhập lệnh sau:
hexdump -C FILENAME
5. Liệt kê nội dung của thư mục bằng tùy chọn dài (tức là nhập "ls -l") để xem kích thước của tệp tin ban đầu và tệp tin đã được mã hóa.
Kích thước file sau khi mã hóa đã lớn hơn
6. Sinh viên có thể giải mã tệp tin đã mã hóa bằng lệnh sau. Hãy chắc chắn xuất ra một tệp văn bản mới và không ghi đè lên tệp tin văn bản gốc.
openssl CIPHER -d -in cipher.txt -out plainmod.txt -K KEY -iv IV
7. So sánh văn bản đã giải mã với văn bản gốc bằng lệnh diff, như dưới đây (thay thế ORIGINAL và UNENCRYPTED bằng tên tệp sinh viên đã sử dụng):
diff -a plain.txt plainmod.txt
Nhiệm vụ 2: Chế độ mã hóa
Trong nhiệm vụ này, sinh viên sẽ khám phá sự khác biệt về bảo mật được đạt được bởi một số chế độ mã hóa.
Sinh viên sẽ sử dụng trình duyệt web trên hệ thống Linux của sinh viên (để xem các tệp tin sinh viên tạo và sửa đổi trên máy tính "symkeylab"). Sinh viên nhận thấy rằng máy tính symkeylab chứa các tệp "index.html" và "nps-logo.bmp". Để xem trang web, hãy khởi chạy trình duyệt firefox bằng lệnh sau:
./start_firefox &
Sinh viên sẽ thấy logo NPS, tệp tin (nps-logo.bmp), và một liên kết hỏng đến phiên bản sửa đổi của logo (một tệp tin nps-logo_mod.bmp mà sinh viên sẽ tạo).
1. Chế độ ECB a. Quan sát logo NPS.
Khi nhìn vào logo NPS với mắt của một chuyên gia phân tích mật mã, tôi thấy một bước ảnh bị lỗi hiển thị.
b. Mã hóa tệp tin nps-logo.bmp bằng AES trong chế độ ECB (với tùy chọn aes-128-ecb) để tạo thành một văn bản đã được mã hóa (Đặt tên tệp mã hóa của sinh viên là "nps-logo_mod.bmp".
[Vì chế độ ECB không yêu cầu vectơ khởi tạo, sinh viên không cần cung cấp vectơ khởi tạo.]
c. Liệt kê nội dung của thư mục bằng tùy chọn long để xem kích thước của tệp tin logo ban đầu và tệp tin đã được mã hóa.
Kích thước ban đầu của nps-logo.bmp là 16782454 còn sau khi mã hóa là 16782464 lớn hơn ban đầu
d. Sinh viên có thể hiển thị văn bản đã được mã hóa bằng cách khiến trình duyệt tin rằng tệp tin đã mã hóa vẫn là một tệp tin hình ảnh hợp lệ. Để làm điều này, sinh viên cần thực hiện một số
"tiền xử lý" nhỏ để làm cho tệp tin có thể xem được.
Các hình ảnh BMP có một tiêu đề 54 byte thông báo cho trình xem hình ảnh về hình ảnh, chẳng hạn như kích thước hình ảnh và kích thước của nó. Sinh viên cần thay thế tiêu đề BMP đã được mã hóa trong văn bản đã mã hóa bằng một tiêu đề BMP hợp lệ từ nps-logo.bmp.
Để thay thế 54 byte tiêu đề bằng một lệnh, thực hiện lệnh sau:
dd if=nps-logo.bmp of=nps-logo_mod.bmp bs=1 count=54 conv=notrunc
e. Sau khi sửa đổi tiêu đề, quay lại trình duyệt web và làm mới trang web để xem hình ảnh đã được mã hóa.
Đã có hình ảnh hiển thị.
2. Chế độ CBC
a. Mã hóa lại tệp tin nps-logo.bmp, nhưng lần này sử dụng chế độ CBC để tạo thành một văn bản đã được mã hóa (với tùy chọn aes-128-cbc). [Lần này sinh viên cần cung cấp một vectơ khởi tạo.]
b. Liệt kê nội dung của thư mục bằng tùy chọn long để xem kích thước của tệp tin văn bản đã mã hóa mà sinh viên vừa tạo.
c. Sử dụng lệnh dd đã được mô tả ở trên, sửa đổi tiêu đề của văn bản đã mã hóa mới để có cùng 54 byte như tệp tin BMP gốc.
d. Xem văn bản đã mã hóa bằng cách làm mới trang web trong trình duyệt.
3. Chế độ CFB
a. Mã hóa lại tệp tin nps-logo.bmp, nhưng lần này sử dụng chế độ CFB (với tùy chọn aes-128- cfb). [Sinh viên cần cung cấp một vectơ khởi tạo.]
b. Liệt kê nội dung của thư mục bằng tùy chọn long để xem kích thước của tệp tin văn bản đã mã hóa mà sinh viên vừa tạo.
c. Sử dụng lệnh dd đã được mô tả ở trên, sửa đổi tiêu đề của văn bản đã mã hóa mới để có cùng 54 byte như tệp tin BMP gốc.
d. Xem văn bản đã mã hóa bằng cách làm mới trang web trong trình duyệt.
4. Chế độ OFB
a. Mã hóa lại tệp tin nps-logo.bmp, nhưng lần này sử dụng chế độ OFB (với tùy chọn aes-128- ofb). [Sinh viên cần cung cấp một vectơ khởi tạo.]
b. Liệt kê nội dung của thư mục bằng tùy chọn long để xem kích thước của tệp tin văn bản đã mã hóa mà sinh viên vừa tạo.
c. Sử dụng lệnh dd đã được mô tả ở trên, sửa đổi tiêu đề của văn bản đã mã hóa mới để có cùng 54 byte như tệp tin BMP gốc.
d. Xem văn bản đã mã hóa bằng cách làm mới trang web trong trình duyệt.
Nhiệm vụ 3: Lỗi lan truyền trong quá trình giải mã
Nhiệm vụ này sẽ giúp sinh viên hiểu khả năng của các chế độ mã hóa khác nhau trong việc khôi phục khi có lỗi. Sinh viên sẽ mã hóa một tệp văn bản bằng hai chế độ khác nhau, thay đổi một bit duy nhất ở giữa tệp mã hóa, giải mã tệp bị hỏng và sau đó xem hiệu ứng của bit bị hỏng đối với tệp văn bản.
1. Giới thiệu
a. Liệt kê nội dung của thư mục bằng tùy chọn dài để sinh viên có thể xem kích thước của tệp declare.txt (tính bằng byte).
Sử dụng mục 18 của báo cáo, ghi lại kích thước của declare.txt.
Tính số khối AES cần thiết để mã hóa declare.txt.
2. Chế độ ECB
a. Mã hóa declare.txt bằng AES-128 trong chế độ ECB (với tùy chọn aes-128-ecb).
b. Mở tệp đã mã hóa bằng cách sử dụng ghex, như được hiển thị dưới đây, thay thế ENCRYPTEDFILE bằng tên sinh viên đã chọn:
ghex ENCRYPTEDFILE
c. Chọn Edit > Goto Byte và nhập 0x1230 để đến gần giữa tệp đã mã hóa. Sinh viên sẽ thấy
"0x1230" xuất hiện trong phần "Offset:" ở góc dưới bên trái của cửa sổ GHex, và con trỏ được tô sáng trên ký tự hex đầu tiên trong hai ký tự hex phản ánh giá trị được lưu trữ tại địa chỉ như trong hình minh họa sau.
d. Giải mã ciphertext mà không ghi đè lên tệp gốc.
e. Sử dụng lệnh diff (với tùy chọn "-a", như đã được hiển thị trước đó) để hiển thị những nơi tệp gốc khác với tệp được giải mã.
Chỉ thay đổi 1 bit cũng thấy được sự thay đổi rõ ràng.
3. Chế độ CBC
a. Mã hóa tệp declare.txt một lần nữa bằng AES-128 trong chế độ CBC (với tùy chọn aes-128- cbc).
b. Sử dụng ghex một lần nữa để sửa đổi ciphertext ở cùng vị trí sao cho chỉ có một bit được thay đổi.
c. Giải mã ciphertext mà không ghi đè lên tệp gốc.
d. Sử dụng lệnh diff (với tùy chọn "-a", như đã được hiển thị trước đó) để hiển thị những nơi tệp gốc khác với tệp được giải mã.
Chỉ đổi 1 bit cũng lm thay đổi rất rõ ràng