2 pontos por GN⁺ 2025-02-13 | 1 comentários | Compartilhar no WhatsApp
  • É 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

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

    • A maioria dos sistemas e bibliotecas é projetada para simplesmente deixá-la passar
    • Isso pode se tornar um possível caminho de vazamento de dados
    • A maioria dos desenvolvedores não sabe muito além de "sempre use Unicode para evitar problemas de internacionalização"
  • Abusar do Unicode é só a ponta do iceberg

    • É possível provocar buffer overflow em sistemas que aceitam strings Unicode
    • Normalmente isso causa erros ou travamentos, mas às vezes pode levar a resultados inesperados e curiosos
  • 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

    • Em geral, isso derrubava o servidor e ele reiniciava automaticamente, mas com manipulação suficiente seria possível explorar sistemas ou softwares específicos
  • A Sanity usa essa técnica para codificar Content Source Maps no texto real de páginas web

    • Isso permite que editores cliquem no texto e rastreiem facilmente a estrutura do conteúdo
    • É melhor não adicionar isso a itens que precisem de parsing, como datas, URLs e IDs
  • Gosto da ideia de usar essa técnica para marca d’água na saída de LLMs

    • Daria para detectar facilmente 99% dos geradores baseados em copiar e colar
    • Fico curioso sobre quanta informação pode ser inserida em cada caractere ou token
  • 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

    • Pode incluir informações de probabilidade de cada token para dar transparência ao processo de geração
    • Isso faz parte da especificação da API da OpenAI e também é suportado por outros motores
  • O título é um pouco enganoso

    • O caractere-base não precisa ser um emoji, e o tratamento dos variation selectors é igual ao de caracteres comuns
    • Com emojis, porém, fica mais divertido
  • 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

    • Ninguém queria baixar 9 MB só para navegar pelos outros usuários
  • Os caracteres de tag Unicode espelham ASCII e muitas vezes não aparecem em elementos de UI

    • Alguns LLMs interpretam texto oculto como ASCII e seguem as instruções, podendo até mesmo escrevê-lo
  • Existe um caso real de exploração que a Microsoft corrigiu no Copilot