Intramedialの署名付き台帳バンドルを下に貼り付けてください。検証はブラウザ内で、公開済みの公開鍵を使って行われます。貼り付けたバンドルがIntramedialに送信されることはありません。ダウンロードするのは公開鍵セットのみです。
JSONを読み込み、recordsの件数を数え、各ハッシュからMerkleルートを再計算します。署名済みのmerkleRootと一致し、recordCountも合っている必要があります。
バンドルにはsigningKeyIdが記載されています。公開済みの鍵セットと照合します。鍵IDは鍵そのものから導出されている必要があり、鍵の管轄はバンドルの管轄と同じでなければなりません。
署名された11個のメンバーを正規化し(RFC 8785、JCS)、Ed25519署名を検証します。バンドルにotsProofがあれば表示しますが、このページでは検証しません。
TypeScript版の検証ツールはnpmで公開されており、オフラインで動くコマンドラインツールも用意しています(MIT)。どちらもご自身のコードでバンドルを検証でき、Intramedialへの問い合わせは発生しません。
import { verifyLedgerBundlesBundleWithKeys } from '@intramedial/verifier'; keys = (await fetch()).json(); result = verifyLedgerBundlesBundleWithKeys(bundle, keys); (result.ok) { console.log(, result.details.merkleRoot); } { console.error(, result.reason); }
サンプルは3件のレコードを持つ台帳バンドルです。使い捨てのテスト鍵で署名され、その鍵で検証されます。Intramedialの公開鍵は使いません。改ざん版ではレコードのハッシュを1つ変えているため、レコードから署名済みのMerkleルートが得られなくなります。
/.well-known/ledger-bundles-keys.jsonintramedial-verify ledger-bundle.json \
--keys ledger-bundles-keys.json
# exits 0 when verified, 1 when not