- Có thể mã hóa dữ liệu tùy ý vào trong một emoji duy nhất
- Unicode biểu diễn văn bản dưới dạng một chuỗi code point, và mỗi code point là một con số được Unicode Consortium gán ý nghĩa.
- Với văn bản bảng chữ cái Latin đơn giản, tồn tại ánh xạ một-một giữa code point Unicode và ký tự hiển thị trên màn hình.
- Trong các hệ thống chữ viết khác, một ký tự hiển thị trên màn hình có thể được biểu diễn bằng nhiều code point.
- Bộ chọn biến thể
- Unicode quy định 256 code point được gọi là "bộ chọn biến thể", bản thân chúng không hiển thị trên màn hình nhưng được dùng để sửa đổi cách biểu diễn của ký tự đứng trước.
- Phần lớn ký tự Unicode không có biến thể, và bộ chọn biến thể phải được giữ nguyên ngay cả trong quá trình chuyển đổi.
- 256 bộ chọn biến thể cung cấp một cách để giấu một byte đơn lẻ.
- Mã hóa dữ liệu
- Có thể nối các chuỗi bộ chọn biến thể để biểu diễn chuỗi byte tùy ý.
- Ví dụ, có thể mã hóa dữ liệu [0x68, 0x65, 0x6c, 0x6c, 0x6f] biểu diễn văn bản "hello".
- Sau khi chuyển đổi các byte thành bộ chọn biến thể, ta nối chúng vào sau ký tự cơ sở để mã hóa.
- Giải mã dữ liệu
- Việc giải mã cũng đơn giản tương tự như mã hóa.
- Có thể khôi phục dữ liệu gốc bằng cách chuyển các bộ chọn biến thể trở lại thành byte.
- Khả năng bị lạm dụng
- Vì đây là hành vi khai thác Unicode nên không được khuyến khích.
- Nó có thể bị dùng cho các mục đích xấu như vượt qua bộ lọc nội dung do con người kiểm tra hoặc chèn watermark vào văn bản.
- Kết luận
- Bài viết giải thích một cách để giấu dữ liệu tùy ý bằng emoji, tận dụng các bộ chọn biến thể của Unicode.
- Cách này thú vị, nhưng có thể không phù hợp để sử dụng trong thực tế.
1 bình luận
Ý kiến trên Hacker News
PUA (Private Use Area) của Unicode được dùng cho mục đích nội bộ và tùy biến, và không được truyền sang các hệ thống bên ngoài
Việc lạm dụng Unicode chỉ là phần nổi của tảng băng chìm
Từ kinh nghiệm kiểm thử xâm nhập trước đây, có lần chỉ với các dấu phụ âm đơn giản đã làm tràn bộ đệm của máy chủ web backend
Sanity dùng kỹ thuật này để mã hóa Content Source Maps vào chính văn bản thực trên trang web
Tôi thích ý tưởng dùng kỹ thuật này để đóng dấu watermark cho đầu ra của LLM
StegCloak đưa ý tưởng này tiến thêm một bước bằng cách mã hóa payload ẩn bằng AES-256-CTR
Ngoài watermark cho đầu ra LLM, nó còn có thể dùng để đóng gói dữ liệu log probability
Tiêu đề hơi dễ gây hiểu lầm
Tokenizer sẽ bắt được điều này
Ở công ty cũ, vì nhiều trường hợp bị lạm dụng, chúng tôi đã phải dùng con trỏ mã để đếm các “ký tự” trong biệt danh người dùng và tin nhắn trạng thái
Các ký tự tag Unicode phản chiếu ASCII và thường không hiển thị trong các thành phần giao diện
Có một trường hợp khai thác thực tế đã được Microsoft vá trong Copilot