Conversor de Punycode (nomes de domínio internacionalizados)

Converte nomes de domínio internacionalizados (IDN) que contêm caracteres não ASCII, como o japonês, para Punycode (uma codificação compatível com ASCII) e vice-versa.

Para que serve o Punycode

O DNS lidou historicamente apenas com ASCII. Contudo, as pessoas queriam nomes de domínio com **caracteres como os kanji e os kana**, à maneira de 日本語.jp, e o Punycode (RFC 3492) foi concebido como ponte. Converte de forma reversível uma cadeia Unicode numa cadeia ASCII que começa por `xn--`, tornando assim possíveis os nomes de domínio internacionalizados sem mexer no DNS existente.

Que o resultado seja ilegível para uma pessoa é o desenho a funcionar: 日本語.jp torna-se `xn--wgv71a119e.jp`. **Os navegadores ocultam a forma convertida e mostram os caracteres originais na barra de endereços**, pelo que normalmente passa despercebido. Essa diferença de aparência, porém, **é também uma fraqueza exposta ao abuso no phishing**: os domínios falsos construídos com caracteres indistinguíveis, como o «а» cirílico face ao «a» latino, causaram problemas reais. Esta ferramenta converte nos dois sentidos e **tudo corre no seu navegador.**

Como converter

  1. Escolha o sentido Selecione de nome de domínio para Punycode, ou de Punycode para nome de domínio.
  2. Introduza o nome de domínio Introduza-o por inteiro, incluído o domínio de topo, como em 日本語.jp.
  3. Leia o resultado Obtém a cadeia convertida que começa por `xn--`, ou então os caracteres originais.
  4. Compare ambos A forma ASCII permite-lhe verificar **se se infiltraram caracteres enganadores.**

Dicas para aproveitar melhor

  • Nomes de domínio compostos por vários rótulos (partes separadas por `.`) também são processados automaticamente rótulo por rótulo: os que contêm apenas caracteres ASCII permanecem inalterados, e somente os rótulos com caracteres não ASCII são convertidos para o formato com prefixo `xn--`.
  • No modo "Punycode → Nome de domínio", apenas os rótulos que incluem o prefixo `xn--` são decodificados; os demais são mantidos como estão.
  • A mesma lógica de conversão pode ser aplicada não só a nomes de domínio, mas também à parte após o `@` em um endereço de e-mail (a parte do domínio).
  • Ao digitar um nome de domínio internacionalizado na barra de endereços do navegador, a maioria dos navegadores o converte internamente para Punycode antes de realizar a resolução DNS.

Situações em que ajuda

Registar ou configurar um domínio internacionalizado

Os ficheiros de zona do DNS e os certificados de servidor exigem por vezes a forma Punycode.

Verificar o remetente de um correio

**Um nome visível que parece legítimo pode revelar-se, depois de convertido, um domínio totalmente distinto.** Os casos são reais.

Ler uma cadeia xn-- num registo

Descubra a que se refere realmente uma cadeia `xn--` surgida nos registos de acesso ou num relatório.

Validar um ficheiro de configuração

Útil para verificar se um nome internacionalizado pode ser escrito tal qual na configuração do nginx ou do Apache.

Termos do Punycode explicados

Punycode
O esquema que converte de forma reversível uma cadeia Unicode em ASCII (RFC 3492). **O resultado começa sempre por `xn--`.**
Nome de domínio internacionalizado
Um nome de domínio com caracteres fora do ASCII. Internamente é convertido para Punycode para atravessar o DNS.
xn--
O prefixo que marca uma etiqueta como codificada em Punycode. É conhecido como prefixo ACE.
Etiqueta
Cada elemento de um nome de domínio separado por pontos. **A conversão é feita etiqueta a etiqueta.**
Ataque homógrafo
Construir um domínio falso com caracteres de aspecto semelhante. **Converter para a forma Punycode põe-no a descoberto.**
IDNA
O conjunto de especificações para lidar com nomes internacionalizados no DNS. A versão em uso é a IDNA2008 (a partir do RFC 5890).

Perguntas frequentes

Punycode (RFC 3492) é um esquema de codificação que converte nomes de domínio contendo caracteres Unicode — japonês, chinês, árabe, entre outros — conhecidos como nomes de domínio internacionalizados (IDN), em cadeias formadas apenas por caracteres ASCII, que o DNS consegue processar. O rótulo resultante recebe o prefixo `xn--`.

O DNS (Domain Name System) foi originalmente projetado partindo do princípio de que apenas caracteres ASCII seriam usados, por isso nomes de domínio com caracteres japoneses ou emojis não podem ser resolvidos como estão. O Punycode converte nomes de domínio com caracteres não ASCII em cadeias ASCII, tornando possíveis os domínios internacionalizados sem alterar a infraestrutura DNS existente.

`xn--` é conhecido como "prefixo ACE" (ASCII Compatible Encoding), e sinaliza ao DNS e a softwares compatíveis que aquele rótulo é um domínio internacionalizado codificado em Punycode. Ao detectar esse prefixo, os navegadores costumam decodificá-lo e exibir ao usuário a cadeia Unicode original.

Sim, essa é uma técnica de phishing conhecida como "ataque homógrafo de IDN". Já foram relatados casos em que um domínio Punycode (por exemplo, `xn--80ak6aa92e.com`) codificado com caracteres quase idênticos visualmente — como o "а" cirílico e o "a" latino — foi usado para se passar por um domínio legítimo. Os principais navegadores mitigam isso exibindo a forma Punycode não decodificada (a cadeia que começa com `xn--`) na barra de endereços quando detectam uma combinação suspeita de caracteres.
Tool-kun

Curiosidade — os bastidores de como "gato" e "日本語" se tornaram nomes de domínio

As discussões sobre nomes de domínio internacionalizados (IDN) começaram no final da década de 1990, mas a padronização levou muito tempo. Várias abordagens foram propostas para lidar com caracteres não ASCII sem alterar o núcleo do DNS, e por fim foi adotada a abordagem Punycode — codificar e decodificar na camada de aplicação (do lado do cliente), sem modificar o próprio servidor DNS —, padronizada como RFC 3492 em 2003.

Diz-se que o nome "Punycode" vem da combinação de "Unicode" com "an amusing pun" (um trocadilho divertido), e o próprio algoritmo é uma especialização, voltada para nomes de domínio, de um método de codificação mais geral chamado Bootstring (uma técnica de propósito geral criada por pesquisadores da IBM para codificar qualquer conjunto de caracteres em um conjunto restrito). O fato de até a origem do nome "Punycode" ter um quê de piada revela bem o senso de humor típico da comunidade de desenvolvedores.

Hoje em dia, nomes de domínio em diversos idiomas e símbolos — domínios japoneses (`.jp`) e até domínios com emojis (existem exemplos reais como `💩.la`) — são de fato registrados e utilizados, mas por trás de todos eles sempre ocorre esse processo de conversão via Punycode. Até o elegante domínio japonês exibido na barra de endereços do navegador é trocado com o servidor DNS como uma simples cadeia ASCII que começa com `xn--`.