非公式翻訳 (Unofficial translation). これは WACZ Signing and Verification 0.1.0 仕様の有志による日本語訳です。 正典は英語原典 specs.webrecorder.net/wacz-auth/0.1.0 。 原著作: Webrecorder, CC BY 4.0。 本訳は原文を翻訳・改変したもので、Webrecorder の公認・推奨を示すものではありません。
{
"path": "datapackage.json",
"hash": "sha256:3dd086a0be145d1108bf32a5cac7c4b4c046eb78365792d4bb28e9f43e3c6571",
"signedData": <Signature Data structure>
}
## Signature Data Format
SignatureData 構造は、署名操作の出力である。
SignatureData オブジェクトは WACZ ファイルにつき 1 つしか存在できず、
`datapackage-digest.json` のルートオブジェクトに `signedData` として格納される。
SignatureData オブジェクトは、この節で述べる 2 つの署名形式のいずれかに適合しなければ
ならない (MUST):
- [Anonymous Signature](#anonymous-signature)
- [Domain-Ownership Identity + Signed Timestamp](#domain-ownership-identity-signed-timestamp)
SignatureData オブジェクトは、いずれの署名形式にも挙げられていないプロパティを含んでは
ならない (MUST NOT)。
### Anonymous Signature
{
"hash": "<sha256 hash of datapackage.json>",
"created": "<ISO 8601 Date>",
"software": "<string>",
"version": "<string>",
"signature": "<base64 encoded signature>",
"publicKey": "<base64 encoded public key (ECDSA)>"
}
この方式では、WACZ には `publicKey` で署名を検証するのに必要な最小限のものだけが
含まれる。
WACZ の作成者性 (authorship) を検証するには外部の鍵管理が必要であり、それが無い
限りこの署名は匿名である。
現在この方式は、ArchiveWeb.page 拡張機能のような分散型のツールで使われている。
### Domain-Ownership Identity + Signed Timestamp
{
"hash": <sha256 hash of datapackage.json>,
"created": <ISO 8601 Date>,
"software": <string>,
"version": <string>,
// domainCert による 'hash' の署名
"signature": <base64 encoded signature>,
"domain": <valid hostname>,
"domainCert": <PEM certificate chain>,
// timestampCert による 'signature' の署名
"timeSignature": <base64 encoded signature>,
"timestampCert": <PEM ceriticate chain>,
// 任意: "signature" のためのクロス署名証明書
"crossSignedCert": <PEM certificate chain>
}
この方式では、特定のドメインの TLS 証明書を作成するのに使われるのと同じ秘密鍵で、
WACZ の署名を作成できる。
WACZ ファイルの作成者は、特定の TLS 証明書の所有者と同一である。それが誰かは
証明書透明性ログ (Certificate Transparency) を通じて調べることができる。
この方式にはさらに、最初の `signature` に対する RFC 3161 タイムスタンプサーバによる
`timeSignature` が含まれる。
`timeSignature` にはタイムスタンプが含まれており、署名が指定された作成時刻に近い
時点で作成されたことをさらに保証するよう設計されている。
追加の検証のために、任意の `crossSignedCert` を提供できる。これは、ドメイン証明書が
何らかの理由で危殆化していると判明した場合に、`domainCert` の代わりとして使える。
クロス署名証明書は、必要になったときのために domainCert に依存しない別の信頼経路を
用意する手段にすぎない。
`domainCert`・`timestampCert`・`crossSignedCert` は、検証を助けるために完全な証明書
チェーンを含めることが望ましい。