Repositório de pacotes do FreeBSD - como fazer a verificação manual da assinatura?

11

Estou tentando verificar a assinatura de um pacote no site do pacote FreeBSD

wget http://pkg.freebsd.org/FreeBSD:11:amd64/latest/digests.txz
tar xf digests.txz

Isto dá três arquivos: digests, digests.pub digests.sig
eu levá-la de que digests.sigé uma assinatura para o arquivo digestscom digests.puba chave pública. Mas tentei confirmar isso:

openssl dgst -verify digests.pub -signature digests.sig digests

e recebi a mensagem

Verification Failure

Suponho que tenho algo errado - alguém pode me dizer o que estou perdendo?

EDIT: Com base em uma busca pelo código fonte, acho que a função importante pode ser encontrada aqui , chamada de rsa_verify_cert_cbchamadas RSA_verifyda biblioteca openssl. Mas ainda não descobri o que está sendo alimentado ou se é possível chamar essa função usando as opensslferramentas de linha de comando.

SauceCode
fonte
Parece relevante lists.freebsd.org/pipermail/freebsd-ports/2014-February/… No entanto, o comando análogo ao mencionado lá openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse também não parece corresponder.
SauceCode
... isto é, parece não combinar comsha256sum digests
SauceCode 29/11

Respostas:

1

Como não há "Como Fazer" na Internet para verificação manual do pacote FreeBSD, eis o que eu descobri.

O truque é que a sequência de octetos na openssl rsautlsaída é de fato um hash da sequência que é o hash SHA256 de um arquivo.

Por exemplo, faça o download atual http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz, extraia-o e faça o seguinte:

Método 1 (usando uma linha openssl dgst)

É importante fazer aqui o tr -d '\n'descarte de uma nova linha da entrada padrão, para que não seja incluída na entrada de string para openssl dgst.

sha256 -q digests | tr -d '\n' | openssl dgst -verify digests.pub -signature digests.sig

Este comando deve ser exibido Verified OK.

Método 2 (comparação visual da cadeia de octetos do arquivo .sig com hash gerado manualmente)

  1. Use o utilitário OpenSSL para despejar o conteúdo de digests.sig

    openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
    0:d=0  hl=2 l=  49 cons: SEQUENCE          
    2:d=1  hl=2 l=  13 cons:  SEQUENCE          
    4:d=2  hl=2 l=   9 prim:   OBJECT            :sha256
    15:d=2  hl=2 l=   0 prim:   NULL              
    17:d=1  hl=2 l=  32 prim:  OCTET STRING      
      0000 - ac c6 ac be cd 5e 61 63-62 82 62 4b ba 77 37 6e   .....^acb.bK.w7n
      0010 - 0b fa ea ef 6e 10 21 01-62 64 06 2f d0 f1 60 22   ....n.!.bd./..`"
    

    Aqui você pode ver que o objeto incorporado é um hash SHA256 e seu valor é acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022.

  2. Agora calcule o SHA256 do arquivo digests:

    sha256 -q digests
    8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
    
  3. E, finalmente, calcule o SHA256 dessa sequência usando o echocomando e compare com o valor retornado por openssl rsautl:
    echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256
    acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
    

Observe como o valor da etapa 3. corresponde ao valor da etapa 1., portanto, o arquivo digestsé válido.

kalabic
fonte
0

Essa mensagem está dizendo que a chave pública não corresponde ao arquivo que você baixou. De acordo com a página de manual do dgst -verify filename, verifique a assinatura usando a chave pública em "filename". A saída é "Verification OK" ou "Verification Failure". A causa mais provável é que o arquivo foi corrompido durante o download. Eu tentaria fazer o download novamente e, se continuar com falha na verificação, isso é um sinal de um link de download comprometido (mas, como é do site freebsd, eu suspeitaria que seja simplesmente um erro de download. Mesmo assim, verificaria o novo faça o download apenas para garantir a segurança). Se você tiver uma conexão com a Internet lenta / não confiável, pode levar algumas tentativas para fazer o download certo. Se você precisar verificar informações sobre comandos,

Ismael Monroig III
fonte
Isso foi há um tempo atrás, mas estou bastante confiante de que não foi um erro de download (ou um download comprometido) desde que tentei várias vezes.
SauceCode