Steganography - Kỹ thuật ẩn giấu thông điệp bí mật trong văn bản và số ký tự

Khoảng 7 phút đọc

Đoạn văn này ẩn chứa một thông điệp bí mật - nếu ai đó nói với bạn như vậy, bạn sẽ tìm ở đâu? Chữ cái đầu mỗi câu? Khoảng cách giữa các ký tự nhất định? Hay có thể là các ký tự vô hình được nhúng vào? Steganography là nghệ thuật ẩn giấu chính sự tồn tại của thông điệp. Nếu mã hóa làm cho thông điệp "không đọc được," thì steganography làm cho nó "không phát hiện được." Và kỹ thuật này đôi khi có thể được phát hiện thông qua hành động đơn giản là đếm ký tự.

Nghệ thuật "ẩn giấu" từ thời cổ đại

Lịch sử steganography có thể truy ngược đến thế kỷ 5 TCN ở Hy Lạp. Trong câu chuyện nổi tiếng được sử gia Herodotus ghi lại, để cảnh báo về cuộc xâm lược của Đế quốc Ba Tư, đầu nô lệ được cạo trọc, thông điệp được xăm lên da đầu, và sau khi tóc mọc lại, nô lệ được gửi đi làm sứ giả. Đây là phương thức truyền thông băng thông thấp tối thượng, cần hàng tuần để thông điệp đến nơi.

Châu Âu thời Trung cổ sử dụng rộng rãi mực vô hình (nước chanh, sữa, nước tiểu, v.v.) cho liên lạc bí mật. Trong Thế chiến II, gián điệp Đức sử dụng công nghệ vi điểm (thu nhỏ tài liệu bằng ảnh đến kích thước cực nhỏ và ngụy trang thành dấu chấm). Công nghệ có thể ẩn cả trang văn bản trong một dấu chấm này được Giám đốc FBI Hoover gọi là "bước tiến lớn nhất trong hoạt động gián điệp của kẻ thù."

Các kỹ thuật Steganography dựa trên văn bản

Steganography văn bản thời đại kỹ thuật số có một số kỹ thuật đại diện.

Acrostic - Thông điệp ẩn trong chữ cái đầu

Acrostic là kỹ thuật mà khi nối chữ cái đầu mỗi dòng hoặc câu sẽ hiện ra thông điệp bí mật. Đây là hình thức steganography văn bản cổ điển nhất, được sử dụng trong thơ ca từ thời cổ đại.

Ví dụ nổi tiếng: năm 2003, Tổng chưởng lý California Bill Lockyer gửi thư cho nghị sĩ bang từ chức. Khi nối chữ cái đầu mỗi đoạn lại đọc được "I FUCK YOU," gây ra vụ bê bối lớn. Acrostic có thể nhúng thông điệp mà không tăng số ký tự, nhưng dễ bị phát hiện khi cố tình tìm kiếm.

Thao tác khoảng trắng

Kỹ thuật nhúng thông tin bit bằng cách thao tác số lượng dấu cách giữa các từ. 1 dấu cách biểu thị "0," 2 dấu cách biểu thị "1," mã hóa dữ liệu nhị phân. Sự khác biệt tinh tế về khoảng cách khó nhận ra bằng mắt thường, nhưng công cụ đếm ký tự có thể phát hiện "có quá nhiều dấu cách so với số từ nhìn thấy."

Steganography ký tự zero-width - Thế giới ký tự vô hình

Kỹ thuật steganography văn bản mạnh nhất hiện đại sử dụng ký tự vô hình zero-width. Unicode định nghĩa nhiều "ký tự zero-width" không hiển thị trên màn hình nhưng tồn tại dưới dạng dữ liệu ký tự.

Mã UnicodeTênMục đích ban đầuVai trò trong Steganography
U+200BZero Width SpaceChỉ định vị trí ngắt dòngBiểu thị bit "0"
U+200CZero Width Non-JoinerNgăn chặn chữ ghépBiểu thị bit "1"
U+200DZero Width JoinerThúc đẩy chữ ghépGiá trị bit bổ sung
U+FEFFZero Width No-Break Space (BOM)Dấu thứ tự byteKý tự phân cách

Sử dụng 2 loại ký tự zero-width U+200B và U+200C, có thể biểu thị 1 bit với 2 giá trị (0 và 1). 8 ký tự zero-width tạo thành 1 byte, tức 1 ký tự ASCII. Ẩn thông điệp 5 ký tự "Hello" cần 40 ký tự zero-width.

Phân tán 40 ký tự zero-width này giữa các từ trong văn bản bình thường, ngoại hình hoàn toàn không thay đổi. Tuy nhiên, so sánh "số ký tự nhìn thấy" với "số ký tự thực tế (số byte)" bằng công cụ đếm ký tự sẽ phát hiện sự khác biệt bất thường. Hiểu kiến thức cơ bản về Unicode giúp xác định nguyên nhân là ký tự zero-width.

Ví dụ triển khai Steganography ký tự zero-width

Hãy xem quy trình nhúng cụ thể. Xét trường hợp ẩn thông điệp bí mật "Hi" trong văn bản bình thường "Good morning."

"H" có mã ASCII 72, nhị phân 01001000. "i" là 105, nhị phân 01101001. Chuyển 0 thành U+200B (zero-width space) và 1 thành U+200C (zero-width non-joiner) tạo ra chuỗi 16 ký tự zero-width.

Chèn 16 ký tự zero-width này giữa "Good" và "morning." Ngoại hình vẫn là "Good morning" nhưng dữ liệu thực chứa 16 ký tự vô hình. Trình soạn thảo đếm 12 ký tự, nhưng đếm bằng chương trình cho 28 mã Unicode. Chênh lệch 16 ký tự chính là thông điệp ẩn.

Triển khai nâng cao hơn sử dụng 3 loại ký tự zero-width trở lên cho mã hóa tam phân hoặc cao hơn. Dùng U+200B, U+200C, U+200D cho khoảng 1,58 bit mỗi ký tự (log₂3), biểu thị ký tự ASCII 8 bit bằng khoảng 5 ký tự zero-width.

Tấn công Homoglyph - Ký tự khác nhau trông giống hệt

Homoglyph là các ký tự trông gần như giống hệt nhau nhưng có mã Unicode khác nhau. Ví dụ, chữ Latin "a" (U+0061) và chữ Cyrillic "а" (U+0430) trông hoàn toàn giống nhau trong nhiều phông chữ.

Ký tự LatinKý tự CyrillicKhác biệt thị giác
aU+0061аU+0430Gần như giống hệt
eU+0065еU+0435Gần như giống hệt
oU+006FоU+043EGần như giống hệt
pU+0070рU+0440Gần như giống hệt
cU+0063сU+0441Gần như giống hệt

Tấn công homoglyph khai thác đặc tính này. Thay "a" trong "apple.com" bằng chữ Cyrillic "а" trong URL lừa đảo trông giống hệt nhưng chuyển hướng đến tên miền hoàn toàn khác. Trong steganography, thay thế ký tự cụ thể bằng homoglyph nhúng thông tin bit.

Phát hiện homoglyph cần kiểm tra mã Unicode của mỗi ký tự. Như thảo luận trong độ dài mật khẩu và bảo mật, trường hợp ngoại hình giống nhau nhưng chuỗi byte khác nhau tạo ra rủi ro bảo mật nghiêm trọng.

Để đối phó, các trình duyệt chính hạn chế hiển thị IDN (Tên miền quốc tế hóa). Khi tên miền trộn lẫn nhiều hệ chữ viết, trình duyệt hiển thị tên miền dạng Punycode (định dạng mã hóa bắt đầu bằng xn--) để cảnh báo người dùng. Chrome áp dụng biện pháp này từ phiên bản 58 năm 2017.

Công nghệ watermark văn bản

Là ứng dụng của steganography, công nghệ watermark kỹ thuật số cho văn bản tồn tại. Dù watermark hình ảnh và video được biết rộng rãi, kỹ thuật nhúng watermark vào văn bản cũng có.

Phương pháp watermarkNguyên lýPhương pháp phát hiệnKhả năng chống chịu
Nhúng ký tự zero-widthLưu thông tin bit trong ký tự vô hìnhĐếm ký tựCó thể mất khi sao chép-dán
Thay thế từ đồng nghĩa"lớn" → "to lớn" thay thế đồng nghĩaSo sánh với bản gốcChống chịu tốt với chỉnh sửa
Chuyển đổi cú phápChủ động → bị động chuyển đổi cú phápSo sánh với bản gốcChống chịu tốt với chỉnh sửa
Thao tác khoảng trắngThao tác số lượng dấu cách và tabPhân tích thống kê khoảng trắngMất khi thay đổi định dạng

Watermark thay thế từ đồng nghĩa nhúng thông tin bit mà không thay đổi nghĩa văn bản. Phương pháp này có thể thay đổi số ký tự nhưng chống chịu tốt với chỉnh sửa và sao chép-dán.

Mã hóa vs. Steganography

Mã hóa và steganography thường bị nhầm lẫn nhưng là công nghệ khác nhau về cơ bản.

Đặc tínhMã hóaSteganography
Mục đíchLàm nội dung không đọc đượcẨn sự tồn tại của thông điệp
Khả năng phát hiệnSự tồn tại của bản mã rõ ràngSự tồn tại của thông điệp không được biết
Ảnh hưởng đến số ký tựTương đương văn bản gốcSố ký tự văn bản che có thể tăng
Yêu cầu khóaCần khóa để giải mãCó thể trích xuất nếu biết kỹ thuật
Kết hợpCó thể dùng đơn lẻMạnh nhất khi kết hợp với mã hóa

Cách tiếp cận an toàn nhất là mã hóa thông điệp rồi ẩn bằng steganography. Ngay cả khi steganography bị phá và sự tồn tại của thông điệp bị phát hiện, nội dung vẫn không đọc được nếu đã mã hóa.

Phát hiện Steganography qua đếm ký tự

Phương pháp đơn giản nhất để phát hiện steganography văn bản là đếm ký tự. Các bất thường sau đây là gợi ý phát hiện.

Không khớp giữa số ký tự nhìn thấy và số ký tự thực tế (số mã). Khi nhúng ký tự zero-width, số ký tự nhìn thấy trong trình soạn thảo ít hơn số đếm bằng chương trình. Ví dụ, văn bản trông 100 ký tự nhưng thực chứa 180 ký tự dữ liệu, có thể 80 ký tự zero-width đã được nhúng.

Kích thước mã hóa ký tự bất thường cũng là manh mối. Văn bản ASCII thuần (chỉ chữ số) trong UTF-8 phải là 1 ký tự = 1 byte. Nhưng nếu trộn homoglyph Cyrillic, một số ký tự trông ASCII trở thành 2 byte.

Biện pháp đối phó ký tự zero-width của Twitter

Twitter (nay là X) áp dụng quy tắc đếm ký tự riêng để ngăn steganography và lách giới hạn ký tự bằng ký tự zero-width. Thư viện đếm ký tự "twitter-text" của Twitter tính các ký tự Unicode nhất định bao gồm ký tự zero-width vào số ký tự. Nghĩa là nhúng nhiều ký tự zero-width khiến văn bản trông ngắn cũng đạt giới hạn 280 ký tự.

Biện pháp này không chỉ ngăn steganography mà còn đảm bảo sử dụng dịch vụ công bằng.

Công cụ và kỹ thuật phát hiện Steganography

Có một số công cụ và kỹ thuật chuyên dụng để phát hiện steganography văn bản.

Phương pháp phát hiệnMục tiêuNguyên lýHạn chế
So sánh số ký tự vs byteKý tự zero-widthKhông khớp giữa số nhìn thấy và byte thựcKhó phân biệt với ký tự zero-width hợp lệ
Phân tích danh mục UnicodeHomoglyphXác minh tính nhất quán khối UnicodeNhiều dương tính giả trong văn bản đa ngữ
Phân tích thống kêThao tác khoảng trắngXác minh phân bố dấu cách phù hợp thống kê ngôn ngữ tự nhiênĐộ chính xác thấp cho văn bản ngắn
Phân tích entropyTổng quátXác minh entropy thông tin trong phạm vi ngôn ngữ tự nhiênKhó đối phó kỹ thuật nâng cao

Phương pháp phát hiện đơn giản và hiệu quả nhất là sao chép-dán văn bản thành plain text rồi so sánh số byte với bản gốc. Nếu chứa ký tự zero-width hoặc homoglyph, số byte sẽ khác nhau.

Mạng xã hội và Steganography - Các trường hợp thực tế

Năm 2016, các nhà nghiên cứu bảo mật báo cáo việc sử dụng thực tế steganography ký tự zero-width trên Twitter (nay là X). Tweet trông như văn bản bình thường trong 280 ký tự, nhưng bao gồm ký tự zero-width thì lượng dữ liệu thực lớn hơn nhiều.

Một số công ty thực hiện "dấu vân tay tài liệu" bằng cách nhúng ID nhân viên vào tài liệu nội bộ bằng ký tự zero-width. Nếu tài liệu mật bị rò rỉ ra ngoài, phân tích ký tự zero-width nhúng có thể xác định ai đã rò rỉ. Kỹ thuật này khó phát hiện hơn watermark truyền thống vì hoàn toàn không thay đổi ngoại hình tài liệu.

Steganography là công nghệ quan trọng cho cả bảo vệ quyền riêng tư và an ninh thông tin. Ở các nước kiểm duyệt nghiêm ngặt, các nhà hoạt động sử dụng steganography để phát tán thông tin. Mặt khác, khủng bố và tội phạm cũng có thể dùng nó để ẩn liên lạc. Công cụ đếm ký tự tưởng chừng đơn giản có thể trở thành tuyến phòng thủ đầu tiên trong việc phát hiện những thông điệp ẩn này.

Sách về an ninh thông tin và kỹ thuật mật mã có thể tìm thấy trên Amazon.

Chia sẻ bài viết này