Panoramica della firma dell'artefatto Assured OSS

Assured Open Source Software fornisce pacchetti, metadati dei pacchetti e script di utilità. Ogni pacchetto Assured OSS è firmato utilizzando un certificato separato emesso da Google che utilizza l'algoritmo ECDSA P256 per la generazione delle chiavi. Anche i metadati di ogni pacchetto e lo script di utilità sono firmati utilizzando un unico certificato emesso da Google che utilizza l'algoritmo ECDSA P256 per la generazione delle chiavi. Questi certificati vengono emessi utilizzando Certificate Authority Service e il certificato radice pubblico corrispondente è disponibile in un bucket Cloud Storage.

Questo documento si applica al livello senza costi. Per informazioni sulle firme nel livello premium, vedi Accedere ai metadati di sicurezza e verificare i pacchetti.

Panoramica delle firme

Le firme vengono memorizzate in un file signature.zip. Il file signature.zip contiene i seguenti file:

  • digest.txt: questo file memorizza l'algoritmo di hashing insieme al digest del pacchetto in un formato con codifica esadecimale. Vedi il seguente esempio:

    SHA-256:c5feab6f4de0878e94cf2a3074039b4f16a0c93a03501f047ee6eea29a8e33e0`.
    
  • signature.txt: questo file memorizza l'algoritmo di firma insieme alla firma codificata in esadecimale. Vedi il seguente esempio:

    ECDSAP256_DER:30450220585d2a01f20de98dfe6cfab2c01a8f11787dbafbc6541304d23cc582e61be016022100f05a19f5ce473144579dfefc47905fd650584a1c7a31bd9d5bf93ecce739a7cb`
    
  • cert.pem: Questo file memorizza il certificato pubblico.

  • certChain.pem: Questo file memorizza la catena di certificati per il certificato pubblico.

Verifica delle firme

Puoi verificare le firme utilizzando uno dei seguenti metodi:

Verificare le firme utilizzando lo strumento aoss-verifier

  1. Per verificare l'autenticità e l'integrità dei pacchetti software open source, installa lo strumento aoss-verifier.

  2. Per verificare un pacchetto, trasmetti i valori LANGUAGE, PACKAGE_ID e VERSION e il PATH_TO_DATA_FILE che vuoi verificare utilizzando i flag --language, --package_id, --version e --artifact_path.

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

    Sostituisci quanto segue:

    • LANGUAGE: la lingua del pacchetto. Il valore deve essere in minuscolo.
    • PACKAGE_ID: per Java, il formato è groupId:artifactId. Per Python, il formato è packageName. Il valore deve essere in minuscolo.
    • VERSION: la versione del pacchetto.
    • ARTIFACT_PATH: il percorso del file di dati nella directory locale che vuoi verificare. Utilizza le seguenti estensioni dei nomi dei file:
      • Estensione del file jar per un pacchetto Java
      • Estensione file whl per un pacchetto Python

Verificare le firme manualmente

Per verificare manualmente le firme:

  1. Installa Google Cloud CLI e il software OpenSSL, versione 3.0.1 o successive.

  2. Verifica il digest.

    1. Identifica l'algoritmo di hashing. Il file digest.txt contiene l'algoritmo di hashing utilizzato per calcolare il digest. Identifica l'algoritmo di hashing utilizzando il seguente comando:

      cut -d ':' -f1 digest.txt
      

      Assicurati che l'output sia SHA256.

    2. Calcola il digest del file di dati. Puoi calcolare il digest del file di dati utilizzando vari strumenti della riga di comando a seconda dell'algoritmo hash utilizzato. Per i file di dati e gli script di Assured OSS, utilizza l'algoritmo hash SHA-256 per generare il digest.

      Su Linux, utilizza il seguente comando per calcolare l'hash:

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

      Per la verifica del pacchetto, sostituisci PATH_TO_DATA_FILE con il percorso del pacchetto nella directory locale per la verifica del pacchetto.

      Per la verifica dei metadati, sostituisci PATH_TO_DATA_FILE con il nome del file dei metadati. Ad esempio, buildInfo.json, vexInfo.json o healthInfo.json.

      Su macOS, utilizza il seguente comando:

      shasum -a 256 PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt
      
    3. Estrai l'hash dal file digest.txt utilizzando il seguente comando:

      cut -d ':' -f2 digest.txt > signaturedigest.txt
      
    4. Confronta i due digest utilizzando il seguente comando:

      diff datadigest.txt signaturedigest.txt
      

      Se non c'è alcuna differenza, non verrà generato alcun output.

  3. Verificare la firma

    1. Ottieni una chiave pubblica da cert.pem utilizzando il seguente comando:

      openssl x509 -pubkey -noout -in cert.pem  > pubkey.pem
      
    2. Estrai la firma in formato binario utilizzando il seguente comando (installa il comando xxd se non è presente):

      cut -d ':' -f2 signature.txt | xxd -r -p > sig.sig
      
    3. Estrai il digest in formato binario utilizzando il seguente comando:

      cut -d ':' -f2 digest.txt | xxd -r -p > digest.bin
      
    4. Verifica la firma utilizzando uno dei seguenti comandi:

      Opzione 1

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

      Il comando restituisce il seguente output:

      Signature Verified Successfully

      Opzione 2

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

      Sostituisci PATH_TO_DATA_FILE con il percorso del file di dati nella directory locale.

      Il comando restituisce il seguente output:

      Verified OK

  4. Verifica il certificato

    Per verificare il certificato, esegui questo comando:

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

    ca.cert è il certificato radice che può essere scaricato utilizzando questo comando:

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

    In caso di esito positivo, viene restituito il seguente output:

    cert.pem: OK

Verificare le firme utilizzando uno script

Per utilizzare uno script di verifica per verificare le firme:

  1. Scarica lo script di verifica.

    1. Configura l'autenticazione utilizzando le Credenziali predefinite dell'applicazione (ADC).

    2. Scarica signatureverification.sh, README.md e signature.zip per lo script di verifica utilizzando il seguente comando:

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

      Sostituisci PATH_TO_LOCAL_STORE con il percorso locale in cui vuoi scaricare il file.

      Puoi anche eseguire la verifica dello script di utilità utilizzando lo script di verifica.

  2. Esegui lo script seguendo questa procedura:

    1. Installa Google Cloud CLI e il software OpenSSL, versione 3.0.1 o successive.

    2. Esegui l'autenticazione con il account di servizio che dispone dell'autorizzazione per accedere ad Assured OSS.

    3. Concedi le autorizzazioni richieste per eseguire lo script utilizzando il seguente comando:

      chmod +x signatureverification.sh
      
    4. Esegui lo script utilizzando il seguente comando se non hai scaricato il file signature.zip:

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

      Sostituisci quanto segue:

      • PATH_TO_DATA_FILE: il percorso del file di dati nella directory locale che vuoi verificare
      • SIGNATURE_ZIP_URL: l'URL del file zip della firma
      • ROOT_CERT_URL: l'URL del certificato radice pubblico

Esempio di output

L'output seguente indica che lo script di verifica è stato eseguito correttamente.

Signature verification successful

Certificate verification successful

Passaggi successivi