Visão geral da assinatura de artefato do Assured OSS

O Assured Open Source Software oferece pacotes, metadados de pacotes e scripts de utilidade. Cada pacote do Assured OSS é assinado usando um certificado separado emitido pelo Google que usa o algoritmo ECDSA P256 para geração de chaves. Cada metadado de pacote e script de utilidade também é assinado usando um único certificado emitido pelo Google que usa o algoritmo ECDSA P256 para geração de chaves. Esses certificados são emitidos usando Certificate Authority Service, e o certificado raiz público correspondente pode ser encontrado em um bucket do Cloud Storage.

Este documento se aplica ao nível sem custo financeiro. Para informações sobre assinaturas no nível premium, consulte Acessar metadados de segurança e verificar pacotes.

Visão geral das assinaturas

As assinaturas são armazenadas em um arquivo signature.zip. O arquivo signature.zip contém os seguintes arquivos:

  • digest.txt: esse arquivo armazena o algoritmo de hash e o resumo do pacote em um formato codificado em hexadecimal. Veja o exemplo a seguir:

    SHA-256:c5feab6f4de0878e94cf2a3074039b4f16a0c93a03501f047ee6eea29a8e33e0`.
    
  • signature.txt: esse arquivo armazena o algoritmo de assinatura junto com a assinatura codificada em hexadecimal. Veja o exemplo a seguir:

    ECDSAP256_DER:30450220585d2a01f20de98dfe6cfab2c01a8f11787dbafbc6541304d23cc582e61be016022100f05a19f5ce473144579dfefc47905fd650584a1c7a31bd9d5bf93ecce739a7cb`
    
  • cert.pem: esse arquivo armazena o certificado público.

  • certChain.pem: esse arquivo armazena a cadeia de certificados do certificado público.

Verificação de assinaturas

É possível verificar assinaturas usando uma das seguintes opções:

Verificar assinaturas usando a ferramenta aoss-verifier

  1. Para verificar a autenticidade e a integridade dos pacotes de software de código aberto, instale a ferramenta aoss-verifier (link em inglês).

  2. Para verificar um pacote, transmita os valores LANGUAGE, PACKAGE_ID e VERSION e o PATH_TO_DATA_FILE que você quer verificar usando as flags --language, --package_id, --version e --artifact_path.

    aoss-verifier verify-package \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       --artifact_path ARTIFACT_PATH
    

    Substitua:

    • LANGUAGE: o idioma do pacote. O valor precisa estar em letras minúsculas.
    • PACKAGE_ID: para Java, o formato é groupId:artifactId. Para Python, o formato é packageName. O valor precisa estar em letras minúsculas.
    • VERSION: a versão do pacote.
    • ARTIFACT_PATH: o caminho para o arquivo de dados no diretório local que você quer verificar. Use as seguintes extensões de nome de arquivo:
      • Extensão de arquivo jar para um pacote Java
      • Extensão de arquivo whl para um pacote Python.

Verificar assinaturas manualmente

Para verificar as assinaturas manualmente, faça o seguinte:

  1. Instale a Google Cloud CLI e o software OpenSSL, versão 3.0.1 ou mais recente.

  2. Verifique o resumo.

    1. Identifique o algoritmo de hash. O arquivo digest.txt contém o algoritmo de hash usado para calcular o resumo. Identifique o algoritmo de hash usando o seguinte comando:

      cut -d ':' -f1 digest.txt
      

      Verifique se a saída é SHA256.

    2. Calcular o resumo do arquivo de dados. É possível calcular o resumo do arquivo de dados usando várias ferramentas de linha de comando, dependendo do algoritmo de hash usado. Para arquivos de dados e scripts do Assured OSS, use o algoritmo de hash SHA-256 para gerar o resumo.

      No Linux, use o seguinte comando para calcular o hash:

      sha256sum PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt
      

      Para a verificação do pacote, substitua PATH_TO_DATA_FILE pelo caminho do pacote no diretório local.

      Para a verificação de metadados, substitua PATH_TO_DATA_FILE pelo nome do arquivo de metadados. Por exemplo, buildInfo.json, vexInfo.json ou healthInfo.json.

      No macOS, use o seguinte comando:

      shasum -a 256 PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt
      
    3. Extraia o hash do arquivo digest.txt usando o seguinte comando:

      cut -d ':' -f2 digest.txt > signaturedigest.txt
      
    4. Compare os dois resumos usando o seguinte comando:

      diff datadigest.txt signaturedigest.txt
      

      Se não houver diferença, não haverá saída.

  3. Verificar a assinatura

    1. Extraia uma chave pública de cert.pem usando o seguinte comando:

      openssl x509 -pubkey -noout -in cert.pem  > pubkey.pem
      
    2. Extraia a assinatura no formato binário usando o seguinte comando (instale o comando xxd se ele não estiver presente):

      cut -d ':' -f2 signature.txt | xxd -r -p > sig.sig
      
    3. Extraia o resumo no formato binário usando o seguinte comando:

      cut -d ':' -f2 digest.txt | xxd -r -p > digest.bin
      
    4. Verifique a assinatura usando um dos seguintes comandos:

      Opção 1

      openssl pkeyutl -in digest.bin -inkey pubkey.pem -pubin -verify -sigfile sig.sig
      

      O comando retorna a seguinte saída:

      Signature Verified Successfully

      Opção 2

      openssl dgst -sha256 -verify pubkey.pem -signature sig.sig PATH_TO_DATA_FILE
      

      Substitua PATH_TO_DATA_FILE pelo caminho para o arquivo de dados no diretório local.

      O comando retorna a seguinte saída:

      Verified OK

  4. Verificar o certificado

    Para verificar o certificado, execute o seguinte comando:

    openssl verify -verbose -CAfile ca.crt -untrusted certChain.pem cert.pem
    

    O ca.cert é o certificado raiz que pode ser baixado usando este comando:

    curl -o PATH_TO_LOCAL_STORE https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    

    A seguinte saída será retornada em caso de sucesso:

    cert.pem: OK

Verificar assinaturas usando um script

Para usar um script de verificação e verificar assinaturas, siga estas etapas:

  1. Baixe o script de verificação.

    1. Configure a autenticação usando Application Default Credentials (ADC).

    2. Faça o download de signatureverification.sh, README.md e signature.zip para o script de verificação usando o seguinte comando:

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0" PATH_TO_LOCAL_STORE --recursive
      

      Substitua PATH_TO_LOCAL_STORE pelo caminho local em que você quer baixar o arquivo.

      Também é possível realizar a verificação de scripts de utilidade usando o script de verificação.

  2. Execute o script seguindo estas etapas:

    1. Instale a Google Cloud CLI e o software OpenSSL, versão 3.0.1 ou mais recente.

    2. Autentique-se com a conta de serviço que tem permissão para acessar o Assured OSS.

    3. Conceda as permissões necessárias para executar o script usando o seguinte comando:

      chmod +x signatureverification.sh
      
    4. Execute o script usando o seguinte comando se você não tiver baixado o arquivo signature.zip:

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE \
      --signature_url SIGNATURE_ZIP_URL \
      --root_cert_url ROOT_CERT_URL
      

      Substitua:

      • PATH_TO_DATA_FILE: o caminho para o arquivo de dados no diretório local que você quer verificar
      • SIGNATURE_ZIP_URL: o URL do arquivo ZIP de assinatura.
      • ROOT_CERT_URL: o URL do certificado raiz público

Exemplo de saída

A saída a seguir indica que o script de verificação foi executado com sucesso.

Signature verification successful

Certificate verification successful

A seguir