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 ツール
- 手動
- 確認スクリプト
aoss-verifier ツールを使用して署名を検証する
オープンソース ソフトウェア パッケージの信頼性と完全性を検証するには、aoss-verifier ツールをインストールします。
パッケージを検証するには、
--language、--package_id、--version、--artifact_pathフラグを使用して、LANGUAGE、PACKAGE_ID、VERSION の値と検証する 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ファイル拡張子
- Java パッケージの
署名を手動で検証する
署名を手動で検証する手順は次のとおりです。
Google Cloud CLI と OpenSSL ソフトウェア(バージョン 3.0.1 以降)をインストールします。
ダイジェストを確認します。
ハッシュ アルゴリズムを特定します。
digest.txtファイルには、ダイジェストの計算に使用されるハッシュ アルゴリズムが含まれています。次のコマンドを使用して、ハッシュ アルゴリズムを特定します。cut -d ':' -f1 digest.txt出力が
SHA256であることを確認します。データファイルのダイジェストを計算します。使用するハッシュ アルゴリズムに応じて、さまざまなコマンドライン ツールを使用してデータファイルのダイジェストを計算できます。Assured OSS のデータファイルとスクリプトの場合は、SHA-256 ハッシュ アルゴリズムを使用してダイジェストを生成します。
Linux でハッシュを計算するには、次のコマンドを使用します。
sha256sum PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txtパッケージの検証では、PATH_TO_DATA_FILE を、パッケージの検証用のローカル ディレクトリにあるパッケージのパスに置き換えます。
メタデータの検証では、PATH_TO_DATA_FILE をメタデータ ファイル名に置き換えます。例:
buildInfo.json、vexInfo.json、healthInfo.json。macOS の場合は、次のコマンドを使用します。
shasum -a 256 PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt次のコマンドを使用して、
digest.txtファイルからハッシュを抽出します。cut -d ':' -f2 digest.txt > signaturedigest.txt次のコマンドを使用して、2 つのダイジェストを比較します。
diff datadigest.txt signaturedigest.txt差異がない場合、出力はありません。
署名の検証
次のコマンドを使用して、
cert.pemから公開鍵を取得します。openssl x509 -pubkey -noout -in cert.pem > pubkey.pem次のコマンドを使用してバイナリ形式で署名を抽出します(
xxdコマンドが存在しない場合はインストールします)。cut -d ':' -f2 signature.txt | xxd -r -p > sig.sig次のコマンドを使用して、バイナリ形式でダイジェストを抽出します。
cut -d ':' -f2 digest.txt | xxd -r -p > digest.bin次のいずれかのコマンドを使用して署名を確認します。
オプション 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_FILEPATH_TO_DATA_FILE は、ローカル ディレクトリ内のデータファイルへのパスに置き換えます。
このコマンドは、次の出力を返します。
Verified OK
証明書を確認する
証明書を確認するには、次のコマンドを実行します。
openssl verify -verbose -CAfile ca.crt -untrusted certChain.pem cert.pemca.certは、次のコマンドを使用してダウンロードできるルート証明書です。curl -o PATH_TO_LOCAL_STORE https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt成功すると、次の出力が返されます。
cert.pem: OK
スクリプトを使用して署名を検証する
検証スクリプトを使用して署名を検証する手順は次のとおりです。
検証スクリプトをダウンロードします。
アプリケーションのデフォルト認証情報(ADC)を使用して認証を設定します。
次のコマンドを使用して、検証スクリプト用の
signatureverification.sh、README.md、signature.zipをダウンロードします。gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0" PATH_TO_LOCAL_STORE --recursivePATH_TO_LOCAL_STORE は、ファイルをダウンロードするローカルパスに置き換えます。
検証スクリプトを使用して、ユーティリティ スクリプトの検証を実行することもできます。
次の手順でスクリプトを実行します。
Google Cloud CLI と OpenSSL ソフトウェア(バージョン 3.0.1 以降)をインストールします。
Assured OSS へのアクセス権があるサービス アカウントで認証します。
次のコマンドを使用して、スクリプトを実行するために必要な権限を付与します。
chmod +x signatureverification.shsignature.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