Assured OSS アーティファクト署名の概要

Assured Open Source Software は、パッケージ、パッケージ メタデータ、ユーティリティ スクリプトを提供します。各 Assured OSS パッケージは、鍵の生成に ECDSA P256 アルゴリズムを使用する、Google が発行した個別の証明書を使用して署名されます。各パッケージのメタデータとユーティリティ スクリプトも、鍵生成に ECDSA P256 アルゴリズムを使用する Google 発行の単一の証明書を使用して署名されます。これらの証明書は Certificate Authority Service を使用して発行され、対応する公開ルート証明書は Cloud Storage バケットにあります。

このドキュメントは、無料枠に適用されます。プレミアム ティアの署名については、セキュリティ メタデータにアクセスしてパッケージを検証するをご覧ください。

シグネチャの概要

署名は signature.zip ファイルに保存されます。signature.zip ファイルには次のファイルが含まれています。

  • digest.txt: このファイルには、ハッシュ アルゴリズムとパッケージ ダイジェストが 16 進エンコード形式で保存されます。次の例をご覧ください。

    SHA-256:c5feab6f4de0878e94cf2a3074039b4f16a0c93a03501f047ee6eea29a8e33e0`.
    
  • signature.txt: このファイルには、署名アルゴリズムと 16 進数でエンコードされた署名が保存されます。次の例をご覧ください。

    ECDSAP256_DER:30450220585d2a01f20de98dfe6cfab2c01a8f11787dbafbc6541304d23cc582e61be016022100f05a19f5ce473144579dfefc47905fd650584a1c7a31bd9d5bf93ecce739a7cb`
    
  • cert.pem: このファイルには公開証明書が保存されます。

  • certChain.pem: このファイルには、公開証明書の証明書チェーンが保存されます。

署名の検証

署名は、次のいずれかを使用して検証できます。

aoss-verifier ツールを使用して署名を検証する

  1. オープンソース ソフトウェア パッケージの信頼性と完全性を検証するには、aoss-verifier ツールをインストールします。

  2. パッケージを検証するには、--language--package_id--version--artifact_path フラグを使用して、LANGUAGEPACKAGE_IDVERSION の値と検証する PATH_TO_DATA_FILE を渡します。

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

    次のように置き換えます。

    • LANGUAGE: パッケージの言語。値は小文字にする必要があります。
    • PACKAGE_ID: Java の場合、形式は groupId:artifactId です。Python の場合、形式は packageName です。値は小文字にする必要があります。
    • VERSION: パッケージのバージョン。
    • ARTIFACT_PATH: 検証するローカル ディレクトリ内のデータファイルへのパス。次のファイル名拡張子を使用します。
      • Java パッケージの jar ファイル拡張子
      • Python パッケージの whl ファイル拡張子

署名を手動で検証する

署名を手動で検証する手順は次のとおりです。

  1. Google Cloud CLI と OpenSSL ソフトウェア(バージョン 3.0.1 以降)をインストールします。

  2. ダイジェストを確認します。

    1. ハッシュ アルゴリズムを特定します。digest.txt ファイルには、ダイジェストの計算に使用されるハッシュ アルゴリズムが含まれています。次のコマンドを使用して、ハッシュ アルゴリズムを特定します。

      cut -d ':' -f1 digest.txt
      

      出力が SHA256 であることを確認します。

    2. データファイルのダイジェストを計算します。使用するハッシュ アルゴリズムに応じて、さまざまなコマンドライン ツールを使用してデータファイルのダイジェストを計算できます。Assured OSS のデータファイルとスクリプトの場合は、SHA-256 ハッシュ アルゴリズムを使用してダイジェストを生成します。

      Linux でハッシュを計算するには、次のコマンドを使用します。

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

      パッケージの検証では、PATH_TO_DATA_FILE を、パッケージの検証用のローカル ディレクトリにあるパッケージのパスに置き換えます。

      メタデータの検証では、PATH_TO_DATA_FILE をメタデータ ファイル名に置き換えます。例: buildInfo.jsonvexInfo.jsonhealthInfo.json

      macOS の場合は、次のコマンドを使用します。

      shasum -a 256 PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt
      
    3. 次のコマンドを使用して、digest.txt ファイルからハッシュを抽出します。

      cut -d ':' -f2 digest.txt > signaturedigest.txt
      
    4. 次のコマンドを使用して、2 つのダイジェストを比較します。

      diff datadigest.txt signaturedigest.txt
      

      差異がない場合、出力はありません。

  3. 署名の検証

    1. 次のコマンドを使用して、cert.pem から公開鍵を取得します。

      openssl x509 -pubkey -noout -in cert.pem  > pubkey.pem
      
    2. 次のコマンドを使用してバイナリ形式で署名を抽出します(xxd コマンドが存在しない場合はインストールします)。

      cut -d ':' -f2 signature.txt | xxd -r -p > sig.sig
      
    3. 次のコマンドを使用して、バイナリ形式でダイジェストを抽出します。

      cut -d ':' -f2 digest.txt | xxd -r -p > digest.bin
      
    4. 次のいずれかのコマンドを使用して署名を確認します。

      オプション 1

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

      このコマンドは、次の出力を返します。

      Signature Verified Successfully

      オプション 2

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

      PATH_TO_DATA_FILE は、ローカル ディレクトリ内のデータファイルへのパスに置き換えます。

      このコマンドは、次の出力を返します。

      Verified OK

  4. 証明書を確認する

    証明書を確認するには、次のコマンドを実行します。

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

    ca.cert は、次のコマンドを使用してダウンロードできるルート証明書です。

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

    成功すると、次の出力が返されます。

    cert.pem: OK

スクリプトを使用して署名を検証する

検証スクリプトを使用して署名を検証する手順は次のとおりです。

  1. 検証スクリプトをダウンロードします。

    1. アプリケーションのデフォルト認証情報(ADC)を使用して認証を設定します。

    2. 次のコマンドを使用して、検証スクリプト用の signatureverification.shREADME.mdsignature.zip をダウンロードします。

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

      PATH_TO_LOCAL_STORE は、ファイルをダウンロードするローカルパスに置き換えます。

      検証スクリプトを使用して、ユーティリティ スクリプトの検証を実行することもできます。

  2. 次の手順でスクリプトを実行します。

    1. Google Cloud CLI と OpenSSL ソフトウェア(バージョン 3.0.1 以降)をインストールします。

    2. Assured OSS へのアクセス権があるサービス アカウントで認証します。

    3. 次のコマンドを使用して、スクリプトを実行するために必要な権限を付与します。

      chmod +x signatureverification.sh
      
    4. signature.zip ファイルをダウンロードしていない場合は、次のコマンドを使用してスクリプトを実行します。

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

      次のように置き換えます。

      • PATH_TO_DATA_FILE: 検証するローカル ディレクトリ内のデータファイルのパス
      • SIGNATURE_ZIP_URL: 署名 zip ファイルの URL
      • ROOT_CERT_URL: 公開ルート証明書の URL

出力例

次の出力は、検証スクリプトが正常に実行されたことを示しています。

Signature verification successful

Certificate verification successful

次のステップ