- É possível codificar dados arbitrários em um único emoji
- O Unicode representa texto como uma sequência de pontos de código, e cada ponto de código é um número ao qual o Unicode Consortium atribuiu um significado.
- No caso de texto simples com alfabeto latino, existe um mapeamento um para um entre os pontos de código Unicode e os caracteres exibidos na tela.
- Em outros sistemas de escrita, um caractere exibido na tela pode ser representado por vários pontos de código.
- Seletores de variação
- O Unicode define 256 pontos de código chamados "seletores de variação", que não aparecem sozinhos na tela, mas são usados para modificar a representação do caractere anterior.
- A maioria dos caracteres Unicode não tem variações, e os seletores de variação devem ser preservados mesmo durante conversões.
- Esses 256 seletores de variação oferecem uma forma de ocultar um único byte.
- Codificação de dados
- Ao concatenar sequências de seletores de variação, é possível representar uma string arbitrária de bytes.
- Por exemplo, é possível codificar os dados [0x68, 0x65, 0x6c, 0x6c, 0x6f], que representam o texto "hello".
- Depois de converter os bytes em seletores de variação, eles são anexados após um caractere base para realizar a codificação.
- Decodificação de dados
- A decodificação é tão simples quanto a codificação.
- É possível restaurar os dados originais convertendo os seletores de variação de volta em bytes.
- Possibilidades de uso indevido
- Como isso explora o Unicode de forma indevida, não é recomendado.
- Pode ser usado de forma maliciosa para contornar filtros de conteúdo voltados a humanos ou inserir marcas d'água em textos.
- Conclusão
- O texto explica como ocultar dados arbitrários usando emojis, aproveitando os seletores de variação do Unicode.
- O método é divertido, mas pode ser inadequado para uso prático.
1 comentários
Comentários do Hacker News
A PUA (Private Use Area) do Unicode é usada para fins internos e personalizados, e não é repassada a sistemas externos
Abusar do Unicode é só a ponta do iceberg
Em uma experiência passada de teste de invasão, houve a lembrança de causar buffer overflow no servidor web de backend usando simples sinais diacríticos
A Sanity usa essa técnica para codificar Content Source Maps no texto real de páginas web
Gosto da ideia de usar essa técnica para marca d’água na saída de LLMs
O StegCloak leva essa ideia um passo além ao criptografar a carga oculta com AES-256-CTR
Além da marca d’água na saída de LLMs, isso também pode ser usado para empacotar dados de log probability
O título é um pouco enganoso
O tokenizador detecta isso
Em um emprego anterior, por causa de vários casos de abuso, foi necessário usar ponteiros de código para contar os "caracteres" em apelidos de usuário e mensagens de status
Os caracteres de tag Unicode espelham ASCII e muitas vezes não aparecem em elementos de UI
Existe um caso real de exploração que a Microsoft corrigiu no Copilot