Pular para o conteúdo
buybitcoinsmart

Glossário / Referência do desenvolvedor

Assinatura SSL

O que é uma assinatura SSL?
Assinatura SSL é o nome que o BIP70 deu aos bytes que assinam uma mensagem PaymentRequest com a chave do certificado de um servidor web, e o rótulo já era impróprio quando foi escrito.

Especificação no BIP-70.

Nenhum protocolo SSL está envolvido em uma assinatura SSL. Os bytes são uma assinatura X.509 comum sobre uma mensagem serializada, feita com a chave privada de um certificado de servidor TLS, e o protocolo SSL 3.0 foi formalmente proibido pelo RFC 7568 em junho de 2015. Quem ler documentação antiga de bitcoin deve entender a expressão como “assinatura de certificado” e seguir adiante.

Como funciona

Situação: a assinatura SSL morreu junto com o BIP70, o protocolo que a definia. O Bitcoin Core carregou o BIP70 de março de 2014 até que a versão 0.20.0 o removeu, e nenhum software mantido produz ou verifica uma dessas assinaturas hoje. A expressão sobrevive na referência para desenvolvedores do bitcoin.org, que é onde a maioria das pessoas a encontra.

O algoritmo era escolhido por um campo irmão, e não anunciado pela própria assinatura. Uma solicitação de pagamento declarava seu pki_type como none, x509+sha256 ou x509+sha1. Esse valor indicava o formato do certificado e o resumo, enquanto o algoritmo de assinatura vinha da chave que o certificado do comerciante por acaso carregasse, na prática RSA. Um verificador reconstruía os bytes exatos que o comerciante havia assinado, aplicava o resumo indicado e comparava o resultado com a chave pública do primeiro certificado da cadeia anexada.

Duas das três opções envelheceram mal. A configuração x509+sha1 já era fraca antes mesmo de o BIP70 ser publicado, pois o NIST havia desautorizado o SHA-1 para gerar assinaturas digitais depois de 31 de dezembro de 2013. Em janeiro de 2020, pesquisadores demonstraram uma colisão de prefixo escolhido contra o SHA-1 por aproximadamente US$ 45.000 de tempo de GPU alugada, que é justamente o ataque que permite trocar um documento assinado por outro. Desde então, o NIST definiu 31 de dezembro de 2030 como o momento em que o SHA-1 sai de vez de seus algoritmos aprovados.

O ponto mais profundo é que essa assinatura e uma assinatura de bitcoin respondem a perguntas diferentes. Uma assinatura dentro de uma transação de bitcoin é verificada por cada nó segundo as regras de consenso, sobre a curva secp256k1, usando ECDSA ou, desde que o Taproot foi ativado no bloco 709.632 em 14 de novembro de 2021, Schnorr, como especifica o BIP340. Uma assinatura SSL era verificada por uma única carteira contra um repositório de certificados mantido por um fornecedor. Uma autoriza a movimentação de dinheiro e não pode ser anulada por ninguém. A outra era uma afirmação sobre quem estava pedindo.

Onde você a encontra

As assinaturas de certificado não desapareceram, apenas o nome do campo do BIP70 desapareceu. Seu navegador ainda observa um servidor provar a posse da chave de seu certificado durante o handshake do TLS, e essa é a versão honesta daquilo que o BIP70 tentava tomar emprestado.

A versão que importa quando você guarda bitcoin é a assinatura de código. O software de carteira e o firmware das carteiras de hardware são assinados com chaves que o fabricante controla, e verificar essa assinatura antes de instalar é o passo que detecta um download adulterado. Os dispositivos Trezor e Ledger verificam as assinaturas de firmware no próprio dispositivo e recusam ou sinalizam com destaque as compilações que não conseguem autenticar. Essa é uma assinatura que faz um trabalho real, ao contrário do campo do BIP70, porque protege as chaves que guardam seus bitcoins e não o nome impresso em uma página de pagamento.

Assinatura SSL vs assinatura digital

Uma assinatura SSL não autorizava nada na blockchain. Uma assinatura digital em uma transação de bitcoin desbloqueia uma saída específica e é validada de forma independente por milhares de nós; o campo do BIP70 era validado por um único programa cliente contra uma lista de autoridades certificadoras. As consequências de perder a chave diferem igualmente. Uma chave de certificado comprometida é revogada e reemitida na mesma tarde. Uma chave de bitcoin comprometida significa que os bitcoins já se foram.

Não confundir com

Perguntas frequentes

Uma assinatura SSL é a mesma coisa que uma assinatura de bitcoin?

Não. Uma assinatura de bitcoin é feita sobre a curva secp256k1 e verificada por cada nó segundo as regras de consenso antes que os bitcoins se movam. Uma assinatura SSL era uma assinatura X.509 sobre uma mensagem de pagamento, verificada por uma única carteira contra uma lista de autoridades certificadoras.

Alguma carteira ainda verifica assinaturas SSL?

Nenhuma que seja mantida. O Bitcoin Core removeu o BIP70 na versão 0.20.0 e o restante do ecossistema seguiu o exemplo, então nada que você instale hoje vai analisar uma solicitação de pagamento ou verificar a assinatura nela.

Termos relacionados

Mais em Referência do desenvolvedor

Ler esta página em inglês