Converter números hexagonais como 51 ac 0759 fc 4 d em sirings single e memoráveis como kalo- tadu- komu- tigi. Este é um experimento divertido que começou como uma forma de gerar "nomes de usuário" determinísticos para as chaves npub do Nostr (veja a última seção). O inglês é realmente difícil de lidar mesmo para sílabas simples, então o resultado não é tão bom quanto eu gostaria que fosse (um string que você possa ler para outra pessoa pelo telefone e certificar- se de que eles o façam bem), mas não é ruim também — se todos falassem cantando em italiano seria muito mais valioso:-) A canção é uma codificação reversível de cadeias de bytes arbitrárias como sílabas CV pronunciables. Sua 64 -sílaba alfabeto mapeia cada 6 - valor de bit diretamente para uma sílaba. As codificações completas preservam o comprimento de byte e os bytes que lideram zero, não requerem metadados de comprimento externo, e são canônicos. A codificação é a tabela de prefixos: os prefixos de entrada compartilhados produzem prefixos de sílaba compartilhados. Um sufixo opcional de variante fornece representações reversíveis alternativas da mesma cadeia de bytes. Codificações orientadas para a máquina, como hexagonal e Base 58 são compactos, mas estranhos de falar, transcrever e lembrar. Cantando- canção negocia alguma densidade escrita para uma pequena grammatica de pronúncia regular, enquanto permanece determinista, reversível e computacionalmente simples. A codificação deve ser determinística, reversível, estável com prefixo, falable e transcribível sem treinamento, autodimensionamento para cadeias de byte completas e auto- delimitação sem pontuação de carga. Consonantes e vogais se alternam estritamente, produzindo 64 abrir sílabas CV sem clusters ou codas. A paridade de posição determina a tabela de símbolos. h, y e são omitidas porque a sua pronúncia é comparativamente instável. Cada sílaba codifica exatamente 6 Pedaços. Os grupos de exibição contêm duas sílabas ( zila, sibo ) separadas por guiões cosméticos. Os parsers devem ignorar os guiões: zilasibotivajuzu e zila- sibo-tiva-juzu são idênticos. Os grupos fornecem pontos de check-points naturais para falar. O canto- canto usa uma pronúncia fixa para cada letra. A ortografia é fonêmica: cada letra representa um som, e a mesma letra é sempre pronunciada da mesma forma. Vowels são vogais puras e NÃO DEVE ser interpretado de acordo com as convenções de ortografia em inglês. Em particular, eu é /i/, o é /o/, e u é /u/; eles não são pronunciados /a- a- a- a, /o- a ou /ju- a/. Cada letra é pronunciada independentemente. Não há letras silenciosas, digrafos ou pronunciações dependentes do contexto.

As palavras são divididas em sílabas em cada par de consoantes – vowels e o estresse cai na primeira sílaba. As diferenças menores dependentes do sotaque na pronúncia são aceitáveis enquanto as letras codificadas permanecerem distinguíveis. Tratar a entrada como um fluxo bit e dividi-la em 6 - bits, o bit mais significativo primeiro. Cada pedaço mapeia diretamente para uma sílaba: Para os bytes de entrada de L, emite n = ceil( 8 ·L / 6 ) sílabas. Se o pedaço final tiver menos de seis bits de entrada, preencha zero de seus bits baixos. Estes zeros são revestimentos canônicos e não possuem informações. Uma codificação completa é autodimensionada: L = floor( 6 · n / 8 ). O decodificador reconstrui o 6 - bits, infere L, retorna o primeiro 8 ·Bits de L, e DEVE rejeitar contagens de sílabas não- canônicas ou acolchoamento não- zero. Os bytes de liderança zero são preservados. Isto se aplica a codificações completas. Um prefixo truncado não indica se seguem mais sílabas. Um prefixo de sílabas k se compromete com o primeiro 6 ·k bits do valor codificado e é verificado por recomputação, não por decodificação. Uma variante é uma representação reversível alternativa da mesma cadeia de bytes. O identificador de variante está codificado na representação, portanto a decodificação não requer metadados externos. Codifique Y com o código comum de cantos. Porque o XOR é auto- inverso: A máscara é pública e não proporciona confidencialidade. SHAKE- 256 produz um fluxo determinístico, preservando a propriedade de estabilidade do prefixo descrita acima. Variante 0 é a codificação direta. O identificador de variante é renderizado como um sufixo de duas letras: uma vocal seguida por uma de l m n r: Variante 0 Deve ser renderizado sem um sufixo; os analisadores DEVE aceitar um al explícito como equivalente. A paridade desambigua o sufixo: as consoantes de conteúdo ocupam posições ímpares, de modo que uma vocal em uma posição ímpares só pode iniciar o sufixo variante. Os parsers DEVE exigir exatamente duas letras de rastreamento (vowel em seguida, l/ m/ n/ r ) e rejeitar outras violações da paridade. Cada sílaba completa representa exatamente seis bits consecutivos de entrada.

Portanto, se duas cadeias de byte compartilharem a primeira 6 Os bits de k, suas codificações diretas de canto compartilham suas primeiras sílabas de k. Para os prefixos alinhados por byte, um limite é alinhado por byte e sílaba a cada 24 bits: Nesses limites, a tronca da codificação é exatamente equivalente a codificação da cadeia de bytes truncada: A mesma propriedade é detida para variantes. O SHAKE- 256 a máscara é gerada como um fluxo de saída, por isso uma máscara mais curta é um prefixo de um maior: Para os prefixos que não terminam em um byte e limite de sílaba, as sílabas principais compartilhadas ainda representam os mesmos bits principais, mas o texto truncado não é por si mesmo uma codificação canônica completa de uma cadeia de byte. A gramática CV fornece verificação básica da sintaxe. Posições estranhas DEVE conter uma consonante e posições uniformes DEVE conter uma vogal. Os caracteres fora do alfabeto correspondente DEVE ser rejeitado. Os parsers podem normalizar substituições de transcrição inequívocas onde a posição determina o símbolo pretendido: Estas substituições corregem apenas erros de representação. O Sing- song não inclui um código ou soma de verificações que corrija erros: uma sílaba válida substituída por outra sílaba válida não pode ser detectada somente a partir da codificação. A gramática básica sobreviveu a três alternativas que valem a pena gravar. Um livro de códigos escolhido a mão pode excluir pares mínimos confusíveis, fundindo sons como b/ p, d/ t, g/ k, f/ v, s/ z, m/ n e l/ r em classes de equivalência. Cerca de dez classes de início × quatro vogais × três classes de coda dá sobre 120 sílabas robustas, ou ~ 6.9 bits cada: sobre 17% menos sílabas do que a Canção- Canto, com uma melhor tolerância de erros. O custo é uma grande tabela de busca, formulários escritos mais longos e sílabas fechadas mais pesadas. O ganho não valeu a pena perder a gramática simples gerativa e o som claro e aberto. Permitir CV, CVC e CVC, ao mesmo tempo que apenas proibir consonantes adjacentes aumenta a capacidade teórica a partir de 2.95 para 3.32 bits/letra. Uma vez que as vogais dobradas são proibidas, as rodadas de vogais são limitadas, e apenas diftongos claros ( ai, au, oi, ou, ui ) são permitidos, o ganho prático cai para cerca 3% em comprimento escrito e essencialmente zero na densidade falada. O pequeno ganho não justifica a substituição da regra da paridade por um autômato, enfraquecendo a cura de erros e complicando a análise da variante. Manter as sílabas abertas, mas permitindo que os dados CC selecionados em inglês (C) CC selecionado)V, tais como ba, gro, pli, tru. Com a atualidade 16 Aparecimentos simples mais doze agrupamentos (br, bl, dr, fr, fl, gr, gl, kr, kl, pr, pl, tr ), o alfabeto tem 112 sílabas, ou sobre 6.81 bits cada. A 256 - valor bit precisaria sobre 38 Silábicas. Isto preserva grande parte do caráter melódico aberto do Sing- song, mas sacrifica a grammatica uniforme CV e a análise da paridade para uma redução modesta no comprimento falado. O 16 × 4 O alfabeto CV é o limite útil: exatamente 6 bits por sílaba com um códec trivial, preservando a gramática pequena, som aberto e análise posicional. Canto- canto negocia densidade escrita para densidade falada.

Ele carrega 3 bits por letra e exatamente 6 bits por sílaba. O hexadeix carrega 4 bits por caracter e Base 58 sobre 5.9. O trade inverte quando os valores são falados: os nomes de caracteres hexadecimais são mais longos e contêm classes de rima fortes, enquanto o Sing-song carrega 6 bits em cada sílaba curta de CV. Um completo 256 - valor bit leva 43 Silábicas. Onde não existe nenhum canal humano, hexa ou Base 58 é mais curto e preferível. O canto- canto é destinado a valores que os humanos devem ler, digitar ou lembrar. O códec opera em bytes sem atribuir semântica a eles. Decodificando os rendimentos do corpo do canto- canto derivado; XOR com a mesma máscara recupera entrada. apply_variant é o seu próprio inverso: aplicar a mesma variante duas vezes recupera os bytes originais. Um npub Nostr é um Bech 32 representação de um 32 - chave pública byte. Um aplicativo pode obter um nome de usuário de Cante- Canto de comprimento fixo decodificando o npub e tomando as primeiras oito sílabas (quatro grupos de visualização) da codificação direta de Cante- Canto: Oito sílabas representam exatamente 48 bits, então isto é equivalente a codificar os primeiros seis bytes da chave pública: Isto segue diretamente da regra de estabilidade do prefixo do Sing-song: 6 bytes = 48 bits = 8 sílabas. O nome de usuário resultante é, portanto, uma representação legível do prefixo de tecla pública, não uma impressão digital derivada do hash. Um usuário pode decodificar o nome de usuário de volta para seis bytes de hexadecimal e compará- los diretamente com o início da chave pública. As aplicações também podem obter nomes de usuário sem hashing e encontrar correspondências de candidatos comparando o prefixo descodificado. O nome de usuário não é globalmente único: muitos 32 -byte chaves públicas podem compartilhar os mesmos seis primeiros bytes. Aplicações que requeiram identificação mais forte podem usar mais sílabas, até a codificação completa de Single-song, que inverte exatamente para a completa 32 - chave pública byte. Cante- canção se consolidou no trabalho de codificação de pronunciabilidade incluindo codificação de palavras S/Key (RFC) 1751 ), a lista de palavras PGP, Bola de Bubble, codificação mnemônica de Oren Tirosh, proquints, BIP 39, e Urbit @p. Sua combinação diferenciadora é uma codificação reversível, de prefixo-estável de byte-string com um 64 - gramática CV sílaba, direta 6 - mapeamento em bits, auto- dimensionamento completos formulários, e variantes reversíveis codificadas. Agradecimentos especiais a todos que comentaram no fio lobste.rs. Graças aos seus comentários, corrigi e melhorei muitos aspectos deste post.