← 検証ツールに戻る

仕組み

pverify は公的な PKI(GPKI/JPKI/LGPKI、台湾 GRCA、韓国 GPKI、シンガポール NCA、EU eIDAS、米国 FPKI など)の電子署名を 検証するためのツールです。PDF(PAdES)、CMS(CAdES)、 XML(XAdES)、JSON(JAdES、JWS)、これらを ZIP に 包んだ ASiC コンテナについて、署名・コンテンツ照合・信頼パス・ 有効期間・失効状態を確認し、ETSI の判定区分(TOTAL_PASSED / TOTAL_FAILED / INDETERMINATE)で結果を返します。 CAdES・PAdES・XAdES・JAdES はいずれも、基本署名(B-B/BES)に加え、署名タイムスタンプ付き(B-T)・ 長期保存データ埋め込み(B-LT)・アーカイブタイムスタンプ(B-LTA)まで検証します。

署名アルゴリズムは RSA(PKCS#1 v1.5・RSA-PSS)、ECDSA(P-256/P-384)、 Ed25519、耐量子計算機暗号(PQC)の ML-DSA(FIPS 204)、および中国国家標準の SM2(SM3 ハッシュ使用、GM/T 0003-2012)に対応します。 Ed448 など未対応の方式は signature_algorithm_unsupported として INDETERMINATE で返します。

参照した検証材料(再現性の土台)

検証結果には、判定が依拠した生バイトの一覧(validation_objects)が含まれます。 証明書・CRL・OCSP レスポンス・タイムスタンプトークン・署名対象コンテンツのそれぞれを、 内容の SHA-256 と、どこから来たか(署名内蔵/バンドル供給/オンライン取得/ 信頼アンカ/入力供給)・どう使われたか(署名者/CA/信頼アンカ、失効確認対象、 各種タイムスタンプ)とともに列挙します。EU の eIDAS リファレンス実装 DSS の 「Diagnostic Data」に相当する出力で、同じ SHA-256 のバイト列を揃えれば 同じ判定を再現できます。

プライバシー

暗号検証はすべてお使いのブラウザ内(WebAssembly)で完結し、 署名・証明書・文書ファイルがサーバへ送信されることはありません。

例外は失効確認のための CRL/OCSP 取得です。検証時に 失効情報配布点の URL が 当サイトの中継(プロキシ)を経由します。これは配布点の多くが http:// 配信かつ CORS 未許可で、ブラウザから直接取得できない ためです。ldap:// 配信の CRL(後述)も同じ中継がサーバ側で取得します (ブラウザは LDAP も生 TCP ソケットも扱えないため)。 中継を経由するのは失効情報を取得する URL だけで、 署名や文書そのものは送信されません

耐量子計算機暗号(PQC)への対応

NIST が 2024 年に FIPS 204 として標準化した格子ベースの署名方式 ML-DSA(旧称 CRYSTALS-Dilithium)の 3 つのパラメータセット (ML-DSA-44/65/87、NIST セキュリティカテゴリ 2/3/5)に対応します (OID 2.16.840.1.101.3.4.3.17〜.19)。 PAdES/CAdES/XAdES のいずれの署名でも、証明書チェーンの各リンクや署名本体が ML-DSA であればそのまま検証されます。検証も純 Rust 実装でブラウザ内(WASM)に完結します (Web Crypto の SubtleCrypto は ML-DSA を未提供のため、内部実装で検証)。

実装は NIST ACVP の既知解テスト(KAT)と、公開されている PQC 多段チェーンの 経路検証(米連邦 PKI の PQC 相互運用ラボ FPKI BRAWL の ML-DSA-87 ルート、および GlobalSign 公開の ML-DSA-87→65→44 三段チェーン)で確認しています。 これらは本番の信頼アンカではなく、ブラウザ版では pqc-interop-lab 区分で 実験収録しています。詳細は収録ルート一覧を参照してください。

失効確認(CRL / OCSP)

証明書が失効していないかは、まず CRL(証明書失効リスト)で確認し、確認できない場合は OCSP も試みます。中継が取得するのは、同梱ルートに対応する許可済みの配布元のみです (許可リスト方式)。自己署名のルート証明書は失効確認の対象外です。

電子署名法の認定認証事業者の一部(AOSign/帝国データバンク/TOiNX/DIACERT/ e-Probatio など)は CRL を ldap:// でのみ配布します。 ブラウザ自身は LDAP を扱えないため、当サイトの中継が匿名 LDAP(RFC 4511/4516、 ポート 389)で CRL を取得し、http(s) 配信と同じく Good/Revoked の 判定に進みます。ネイティブ CLI は中継を介さず直接 LDAP から取得します。

取得できなかった範囲は IndeterminateNoCrl(許可リスト外・配布元停止など)、 ネットワークを使わない検証では revocation_not_checked_offlineftp:// など pverify が取得手段を持たない方式は IndeterminateUnsupportedProtocol として区別して報告します。 いずれも失効・エラーではなく「未確認」を意味します。

同梱ルート証明書(信頼の起点)

日本政府系 PKI(GPKI/JPKI/LGPKI)に加え、台湾(GRCA1/2/3)・韓国(GPKIRootCA1)・ シンガポール(NCA B1)・EU(eIDAS LOTL)・米国(FPKI)・Adobe AATL(政府系)の 信頼アンカ(ルート証明書)を同梱しているため、別途用意しなくても検証できます。 自前の自己署名証明書をファイルとして追加すれば、それも併用されます。 収録した認証局の出自(データソース・根拠 URL・取得日・fingerprint・鍵アルゴリズム)は 収録ルート一覧で確認できます。

検証時刻は既定で現在時刻(端末のタイムゾーン)です。過去時点の 有効性を確認したい場合に変更してください。入力時刻は併せて選択できるタイムゾーン (現地時間/JST/UTC)で解釈します。

機能諸元

pverify が検証できる署名形式・レベル・アルゴリズム・失効確認方式の一覧です。 未対応の項目はそのまま「未対応」と表示します。

署名形式とレベル

ここでの「レベル」は署名に含まれる構造(タイムスタンプ・失効情報・アーカイブ TS)から判定するもので、 JNSA デジタル署名検証ガイドライン第 1.1 版が各レベルに要求する Mandatory 項目すべてを満たすことを意味するものではありません。

形式 説明 対応レベル
CAdES CMS/PKCS#7 署名(添付・分離) BES / T(署名 TS)/ LT(長期保存データ)/ LTA(アーカイブ TS)
PAdES PDF 署名。差分更新(incremental update)と /DocTimeStamp に対応 B / B-T / B-LT / B-LTA
XAdES XML 署名。enveloped + Exclusive C14N。分離(detached)型は ASiC コンテナ内で対応 B-B / B-T / B-LT / B-LTA
JAdES JSON Web Signature(JWS、RFC 7515)ベースの ETSI TS 119 182-1。JSON Serialization(general/flattened)の enveloping 形式。sigD による分離と JWS Compact Serialization は未対応 B-B / B-T / B-LT / B-LTA
ASiC CAdES/XAdES 署名を包む ZIP コンテナ(ETSI EN 319 162)。中の署名を上記パイプラインで検証 ASiC-S / ASiC-E

署名・ハッシュアルゴリズム

種別 対応 備考
RSA PKCS#1 v1.5 / RSA-PSS RSA-PSS は XAdES でも対応(MGF1・salt 長を解釈)。JAdES は JWS の RS256/384/512PS256/384/512(RFC 7518)に相当
ECDSA P-256 / P-384 JAdES は ES256ES384ES512(P-521)は未対応
EdDSA Ed25519(RFC 8410/8032 pure) Ed448(1.3.101.113)は未対応。JAdES でも JWS の EdDSA(Ed25519)に対応
ML-DSA(PQC) ML-DSA-44 / 65 / 87(FIPS 204) NIST セキュリティカテゴリ 2/3/5。OID …3.4.3.17〜.19
SM2(中国標準) SM2 with SM3(GM/T 0003-2012) 中国国家標準。256-bit EC 曲線、SM3 ハッシュ(OID 1.2.156.10197.1.501)。台湾 GRCA・中国 CFCA 等の検証に使用
ハッシュ SHA-256 / SHA-384 / SHA-512 / SM3 SHA-1 は受理し weak として表示(SM3 は SM2 署名の付随ハッシュとして使用)

失効確認・実行環境

項目 対応
失効確認 CRL(http(s)ldap://、ブラウザ版は中継経由)・OCSP(RFC 6960)。取得不能時は IndeterminateNoCrl 等の未確認区分で報告
パス検証 RFC 5280 §6(名前制約・ポリシー処理)。GPKI/FPKI のブリッジ CA を辿る多段経路探索に対応
検証時刻 任意の時点(--at)を指定でき、過去時点の有効性を再現的に検証
実行環境 ネイティブ CLI とブラウザ(WASM)で同一の検証コア・同一の判定結果。暗号は RustCrypto 系 pure Rust のみ(ネイティブ依存なし)

サプライチェーン(CBOM・SBOM)

pverify は検証専用のツールであり、署名鍵を一切持ちません。 この性質を機械可読な形で公開するため、2 種類の部品表(BOM)を提供します。 内容はサプライチェーン・ビューアで 一覧表示できます(生の JSON も下記から取得できます)。

リリース版では各成果物(バイナリ・ソース・WASM・CBOM・SBOM)に SLSA v1.0 の 来歴(provenance)を付与し、第三者が SHA-256 で照合できます。

詳細設計仕様書

pverify の検証ロジック・アーキテクチャ・標準準拠を章ごとに記した詳細設計仕様書を公開しています(全 18 章、各記述はソースコードに対応づけ)。HTML 版(日本語)HTML 版(英語) で閲覧できます。

ソースコード

ネイティブ CLI とブラウザ版は同一の検証コアを共有しており、判定結果は同じです。 オープンソースとして整備中です。