Quero ser capaz de gerar múltiplos identificadores curtos usando a mesma chave. Até onde sei, PGP/GPG deve fornecer essa capacidade, mas sou um completo novato na tecnologia e, portanto, não consegui nem verificar se isso é possível.
Justificativa
Minha justificativa é que, online, uso um pseudônimo para todas as minhas contas. No entanto, onde há duplicatas, adiciono algo ao final. Normalmente, a .
(para hierarquia) e um inteiro codificado em base 36 de segundos decorridos da época UNIX, já que https://aran.horse/converters/time/b36 torna isso tão fácil, e o resultado é tão compacto. Como exemplo, considere RokeJulianLockhart.skuvsv
.
No entanto, já fui personificado algumas vezes online. Geralmente, por amigos, mas nem sempre. Para esse fim, gostaria que esses identificadores para contas duplicadas fossem verificáveis como sendo meus, para que outra conta não possa simplesmente copiar o processo que eu uso.
Percebo que esse caso de uso é de nicho, mas há uma infinidade de usos aos quais posso pensar em aplicar isso, como namespaces do GitLab.
Não, você não pode. O propósito inteiro de uma impressão digital é ser diretamente derivável de uma chave pública sem nenhuma entrada adicional (principalmente para que duas pessoas possam comparar rapidamente que obtiveram a mesma chave pública). A impressão digital não é sua identidade PGP – a chave pública real é sua identidade PGP.
Isso significa que o processo de geração de uma impressão digital é inerentemente "público" (ou simétrico, no sentido de que verificar se a chave X corresponde à impressão digital Y envolve, na verdade, gerar uma impressão digital dessa chave). Então, embora você possa, em teoria, escrever ferramentas personalizadas para, por exemplo, fazer hash de uma chave pública mais um identificador personalizado para gerar uma impressão digital específica do site, ainda seria o caso de que qualquer um que saiba como validar tal impressão digital personalizada, automaticamente saiba como gerar uma a partir das mesmas entradas também.
As impressões digitais PGP não são adequadas para isso, principalmente porque são longas demais para caber na maioria dos campos de nome de usuário, mesmo sozinhas, muito menos como sufixo de algum outro nome.
Imagino que você tinha em mente o "ID curto" de 8 caracteres, que são os últimos 4 bytes de toda a impressão digital em hexadecimal, mas isso nem é adequado para seu propósito original, dada a facilidade de gerar novas chaves PGP que colidem em seus "IDs curtos".
Não acho que exista nenhum método para gerar identificadores curtos usando sua chave privada que sejam verificáveis usando apenas sua chave pública. Mesmo que você crie algum tipo de esquema assimétrico onde outros possam saber como verificar o identificador sem saber automaticamente como gerá-lo, os computadores modernos provavelmente serão capazes de força bruta por meio da validação de todos os identificadores de 6 caracteres em um dia, 7 caracteres em um mês, até que um "válido" apareça - e muito provavelmente, seus outros amigos não vão realmente se incomodar em verificar seu nome de conta usando seu esquema personalizado em primeiro lugar.
Se a segurança criptográfica for necessária, o processo padrão seria assinar uma mensagem PGP
My account name at <site foo> is <username>
e publicá-la no perfil de usuário do site ou no seu próprio site. Uma chave primária Ed25519 ou subchave de assinatura pode produzir assinaturas razoavelmente curtas, e isso dá aos outros algo que eles podem copiar diretamente para seu software PGP padrão para verificação (assumindo que eles já tenham sua chave pública) – e como as assinaturas usam criptografia assimétrica, elas podem ser validadas sem a possibilidade de criar uma falsa.(Você poderia então usar, por exemplo, os últimos X bits da assinatura codificada como base64 ou base36 como parte do seu nome de usuário, pois isso provavelmente seria suficientemente único, mas a segurança do esquema não depende disso.)
Mais comumente, a segurança criptográfica não é realmente necessária e é suficiente ter um local central (por exemplo, seu site ou seu arquivo README do GitHub) que liste as contas que são realmente suas e então diga às pessoas "Se não estiver na lista, então não é meu".