Glossário / Referência do desenvolvedor
PP pki type
- O que é PP pki type?
- PP pki type era a string de uma só palavra em uma solicitação de pagamento BIP70 que dizia como o comerciante a havia assinado: none, x509 com SHA-256 ou x509 com SHA-1.
Especificação no BIP-70.
Todo protocolo que assina algo precisa nomear o algoritmo, e nomeá-lo em um campo controlado pelo remetente é como começam os ataques de downgrade. O BIP70 oferecia três valores, um dos quais já era considerado fraco anos antes de a especificação ser escrita. Os navegadores terminaram de expulsar os certificados SHA-1 em janeiro de 2017, e o protocolo de pagamento nunca publicou uma atualização.
Como funciona
Status: histórico. PP pki type era o campo 2 de PaymentRequest, com a string "none" como padrão, e está ausente do Bitcoin Core desde a versão 0.20.0, de 3 de junho de 2020.
Três valores foram definidos e nenhum quarto foi registrado, embora a especificação deixasse espaço para um.
"none" significava uma solicitação não assinada. O campo de certificado ficava vazio, o campo de assinatura ficava vazio, e uma carteira podia mostrar o valor e o destino, mas nenhuma identidade. A maioria das solicitações em circulação era exatamente isso.
"x509+sha256" significava que o comerciante serializava a mensagem inteira com o campo de assinatura em branco, calculava o hash do resultado com SHA-256 e assinava esse hash com a chave privada do primeiro certificado da cadeia anexada.
"x509+sha1" significava o mesmo procedimento com SHA-1 no lugar de SHA-256.
Oferecer a opção fraca é a parte interessante. Um verificador que aceita qualquer algoritmo indicado pelo remetente é tão forte quanto o pior algoritmo que ainda aceita, e por isso os projetos posteriores fixam o conjunto aceitável do lado do verificador em vez de lê-lo da mensagem. O SHA-1 era um candidato ruim mesmo em 2013. Um ataque de colisão mais rápido que a força bruta foi publicado em 2005, e o NIST proibiu o uso do SHA-1 para gerar novas assinaturas digitais depois de 2013. As autoridades certificadoras deixaram de emitir certificados SHA-1 no fim de 2015, o Chrome 56 deixou de confiar neles em janeiro de 2017, e uma colisão pública completa veio um mês depois.
Onde você encontra isso
O próprio Bitcoin fornece o contraexemplo de um algoritmo de assinatura nomeado pelo remetente, e vale a pena guardá-lo.
Uma transação de bitcoin nunca negocia seu algoritmo de assinatura com quem a valida. A saída gasta resolve a questão: uma saída anterior ao Taproot é verificada com ECDSA sobre secp256k1, e uma saída que paga a uma chave Taproot é verificada com Schnorr nos termos do BIP340, uma regra ativada no bloco 709.632 em novembro de 2021. Quem gasta não pode propor algo mais barato de quebrar, porque a escolha foi fixada quando os bitcoins foram recebidos.
Essa diferença explica por que uma camada baseada em certificados se encaixava tão mal sobre o bitcoin. As regras de consenso se aplicam igualmente a todos e mudam apenas por atualização coordenada, enquanto um campo que nomeia um algoritmo é uma negociação, e negociações sofrem downgrade.
Se você está escolhendo onde comprar em vez de escrever software, a versão útil é limitada, mas real. Uma plataforma que mantém viva uma opção criptográfica obsoleta "por compatibilidade" está dizendo como pesa a conveniência contra a segurança, e esse julgamento também se aplica às partes do sistema que você não pode inspecionar.
PP pki type vs assinatura SSL
PP pki type nomeava um esquema; a assinatura SSL era o resultado de executá-lo. Tratar os dois como uma só coisa torna confusa a documentação antiga do BIP70, porque uma solicitação podia nomear um tipo e não trazer assinatura alguma, que é precisamente o que "none" significava. O TLS moderno mantém o mesmo par, com um identificador de algoritmo registrado ao lado dos bytes da assinatura, mas um cliente não aceita mais todos os identificadores que já foram válidos.