2 điểm bởi GN⁺ 2025-02-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2025-02-13
Ý 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

    • Hầu hết hệ thống và thư viện được thiết kế để cho phép chúng đi qua nguyên trạng
    • Đây có thể là một kênh rò rỉ dữ liệu tiềm ẩn
    • Phần lớn lập trình viên không biết nhiều hơn ngoài lời khuyên “hãy luôn dùng Unicode để tránh các vấn đề quốc tế hóa”
  • Việc lạm dụng Unicode chỉ là phần nổi của tảng băng chìm

    • Có thể gây tràn bộ đệm trong các hệ thống chấp nhận chuỗi Unicode
    • Thường thì nó gây ra lỗi hoặc sự cố, nhưng đôi khi lại dẫn đến những kết quả thú vị ngoài dự đoán
  • 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

    • Chủ yếu là làm máy chủ sập rồi tự khởi động lại, nhưng nếu điều khiển đủ khéo thì có thể khai thác một số hệ thống hoặc phần mềm nhất định
  • 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

    • Điều này cho phép biên tập viên nhấp vào văn bản để dễ dàng lần theo cấu trúc nội dung
    • Tốt hơn là không nên thêm vào các mục cần phân tích cú pháp như ngày tháng, URL, ID, v.v.
  • Tôi thích ý tưởng dùng kỹ thuật này để đóng dấu watermark cho đầu ra của LLM

    • Có thể dễ dàng phát hiện 99% các công cụ tạo nội dung chỉ dựa trên sao chép-dán
    • Tôi tò mò không biết có thể nhúng bao nhiêu thông tin vào mỗi ký tự hoặc token
  • 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

    • Có thể bao gồm thông tin xác suất cho từng token để mang lại tính minh bạch cho quá trình sinh
    • Đây là một phần trong đặc tả API của OpenAI, và cũng được các engine khác hỗ trợ
  • Tiêu đề hơi dễ gây hiểu lầm

    • Ký tự cơ sở không nhất thiết phải là emoji, và cách xử lý variation selector cũng giống như với ký tự thông thường
    • Dùng cùng emoji thì vui hơn thôi
  • 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

    • Chúng tôi không muốn phải tải về 9MB chỉ để duyệt người dùng khác
  • 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

    • Một số LLM diễn giải văn bản ẩn thành ASCII và làm theo chỉ dẫn, thậm chí còn có thể tự viết ra chúng
  • Có một trường hợp khai thác thực tế đã được Microsoft vá trong Copilot