2 poin oleh GN⁺ 2025-02-13 | 1 komentar | Bagikan ke WhatsApp
  • Data arbitrer dapat dikodekan ke dalam satu emoji
    • Unicode merepresentasikan teks sebagai urutan code point, dan setiap code point adalah angka yang diberi makna oleh Unicode Consortium.
    • Untuk teks alfabet Latin sederhana, ada pemetaan satu banding satu antara code point Unicode dan karakter yang muncul di layar.
    • Pada sistem penulisan lain, karakter yang muncul di layar dapat direpresentasikan oleh beberapa code point.
  • Variation selector
    • Unicode menetapkan 256 code point yang disebut "variation selector", yang tidak tampil sendiri di layar, tetapi digunakan untuk memodifikasi representasi karakter sebelumnya.
    • Sebagian besar karakter Unicode tidak memiliki variasi, dan variation selector harus dipertahankan selama proses konversi.
    • Ke-256 variation selector ini menyediakan cara untuk menyembunyikan satu byte.
  • Pengodean data
    • Dengan menghubungkan urutan variation selector, kita dapat merepresentasikan string byte arbitrer.
    • Sebagai contoh, data [0x68, 0x65, 0x6c, 0x6c, 0x6f] yang merepresentasikan teks "hello" dapat dikodekan.
    • Setelah byte diubah menjadi variation selector, hasilnya dikodekan dengan menempelkannya setelah karakter dasar.
  • Dekode data
    • Dekode semudah proses pengodean.
    • Data asli dapat dipulihkan dengan mengubah variation selector kembali menjadi byte.
  • Potensi penyalahgunaan
    • Karena ini merupakan penyalahgunaan Unicode, metode ini tidak direkomendasikan.
    • Ini dapat digunakan untuk tujuan berbahaya, seperti melewati filter konten berbasis manusia atau menyisipkan watermark ke dalam teks.
  • Kesimpulan
    • Artikel ini menjelaskan cara menyembunyikan data arbitrer menggunakan emoji, dengan memanfaatkan variation selector Unicode.
    • Metode ini menarik, tetapi mungkin tidak cocok untuk penggunaan nyata.

1 komentar

 
GN⁺ 2025-02-13
Komentar Hacker News
  • PUA (Private Use Area) Unicode digunakan untuk keperluan internal dan kustom, serta tidak diteruskan ke sistem eksternal

    • Sebagian besar sistem dan pustaka dirancang untuk membiarkannya lewat begitu saja
    • Ini bisa menjadi jalur potensial untuk kebocoran data
    • Sebagian besar pengembang tidak terlalu tahu selain "selalu gunakan Unicode untuk menghindari masalah internasionalisasi"
  • Penyalahgunaan Unicode hanyalah puncak gunung es

    • Dapat memicu buffer overflow pada sistem yang menerima string Unicode
    • Biasanya menyebabkan error atau crash, tetapi kadang bisa menghasilkan hal tak terduga yang menarik
  • Dari pengalaman uji penetrasi di masa lalu, ada ingatan tentang membuat buffer backend web server overflow hanya dengan tanda diakritik sederhana

    • Biasanya server crash lalu restart otomatis, tetapi jika dimanipulasi cukup jauh, hal itu bisa dieksploitasi pada sistem atau perangkat lunak tertentu
  • Sanity menggunakan teknik ini untuk mengenkode Content Source Maps ke dalam teks nyata di halaman web

    • Ini memungkinkan editor mengklik teks dan dengan mudah melacak struktur konten
    • Sebaiknya tidak menambahkannya pada hal-hal yang perlu diparse seperti tanggal, URL, ID, dan sejenisnya
  • Menyukai ide menggunakan teknik ini untuk watermark pada output LLM

    • Bisa dengan mudah menangkap 99% generator copy-paste
    • Menjadi penasaran berapa banyak informasi yang bisa disisipkan ke tiap karakter atau token
  • StegCloak membawa ide ini selangkah lebih jauh dengan mengenkripsi payload tersembunyi melalui AES-256-CTR

  • Selain watermark output LLM, ini juga bisa digunakan untuk mengemas data log-probability

    • Dapat menyertakan informasi probabilitas untuk tiap token guna memberikan transparansi pada proses generasi
    • Ini merupakan bagian dari spesifikasi API OpenAI, dan juga didukung oleh engine lain
  • Judulnya agak menyesatkan

    • Karakter dasarnya tidak harus emoji, dan penanganan variation selector sama seperti karakter biasa
    • Namun lebih menyenangkan jika digunakan bersama emoji
  • Tokenizer menangkap ini

  • Di tempat kerja sebelumnya, karena berbagai kasus penyalahgunaan, harus menggunakan code pointer untuk menghitung 'karakter' pada nama panggilan pengguna dan pesan status

    • Tidak ingin mengunduh 9MB hanya untuk menelusuri pengguna lain
  • Karakter tag Unicode mencerminkan ASCII dan sering kali tidak terlihat di elemen UI

    • Beberapa LLM menafsirkan teks tersembunyi sebagai ASCII lalu mengikuti instruksinya, bahkan bisa menuliskannya juga
  • Ada kasus eksploitasi nyata yang diperbaiki Microsoft di Copilot