Amazon Quantum Ledger Database (Amazon QLDB)
開発者ガイド

ステップ 6: 台帳のドキュメントを検証する

Amazon QLDB では、SHA-256 の暗号的ハッシュを使用して、台帳のジャーナルのドキュメントの整合性を効率的に検証できます。この例では、Alexis と Brent は VIN 1N4AL11D75C109151 の車両をディーラーに下取りに出して、新しいモデルにアップグレードすることを決断しました。ディーラーは、登記所に問い合わせて車両の所有権を検証することで、このプロセスを開始します。

検証と暗号的ハッシュが QLDB でどのように機能するかについては、「Amazon QLDB におけるデータ検証」を参照してください。

このステップでは、vehicle-registration 台帳内のドキュメントリビジョンを検証します。最初に、ダイジェストをリクエストします。ダイジェストは、データの変更履歴全体のフィンガープリントとして機能する、台帳の出力ファイルです。次に、そのダイジェストに関係するドキュメントリビジョンの証明をリクエストします。この証明を使用して、すべての検証チェックに合格するかどうかを確認することで、このドキュメントの整合性が検証されます。

ダイジェストをリクエストするには

  1. https://console.aws.amazon.com/qldb で Amazon QLDB コンソールを開きます。

  2. ナビゲーションペインで、[Ledgers (台帳)] を選択します。

  3. 台帳のリストで、「vehicle-registration」を選択します。

  4. [Get digest (ダイジェストの取得)] を選択します。[Get digest (ダイジェストの取得)] ダイアログボックスに、以下のようなダイジェスト詳細が表示されます。

    • [Digest (ダイジェスト)]— リクエストしたダイジェストの SHA-256 ハッシュ値。

    • [Digest tip address (ダイジェストティップアドレス)]—リクエストしたダイジェストの対象となっているジャーナル内の最新のブロック位置。アドレスには以下の 2 つのフィールドがあります。

      • strandId—ブロックを含むジャーナルストランドの一意の ID。

      • sequenceNo — ストランド内のブロックの位置を指定するインデックス番号。

    • [Ledger (台帳)] — ダイジェストをリクエストした台長名。

    • [Date (日付)] — ダイジェストをリクエストした時のタイムスタンプ。

  5. ダイジェスト情報を確認します。次に、[Save ] を選択します。デフォルトのファイル名はそのままにしておくことも、新しい名前を入力することもできます。

    このステップでは、Amazon Ion 形式のコンテンツを含むプレーンテキストファイルを保存します。このファイルには、.ion.txt のファイル名拡張子が付いており、前述のダイアログボックスに列挙されたすべてのダイジェスト情報が含まれています。以下は、ダイジェストファイルのコンテンツ例です。フィールドの順序はブラウザによって異なる場合があります。

    {   "digest": "42zaJOfV8iGutVGNaIuzQWhD5Xb/5B9lScHnvxPXm9E=",   "digestTipAddress": "{strandId:\"BlFTjlSXze9BIh1KOszcE3\",sequenceNo:73}",   "ledger": "vehicle-registration",   "date": "2019-04-17T16:57:26.749Z" }
  6. このファイルを保存して後でアクセスすることができます。以下の手順では、このファイルをフィンガープリントとして使用して、ドキュメントのリビジョンを検証します。

台帳ダイジェストを保存した後は、そのダイジェストと照合してドキュメントのリビジョンを検証するプロセスを開始できます。

注記

検証の実際のシナリオでは、2 つのタスクを同時に行うのではなく、以前に保存したダイジェストを使用してください。ダイジェストは、検証しようとしているドキュメントのリビジョンが台帳に書き込まれた直後に保存されるのが理想的です。

ドキュメントのリビジョンを検証するには

  1. 最初に、検証するドキュメントリビジョンの idblockAddress に関するクエリを台帳に対し実行します。これらのフィールドはドキュメントのメタデータに含まれており、コミット済みビューでクエリを実行できます。

    ドキュメント id は、システムによって割り当てられた一意の識別子です。blockAddress は、リビジョンがコミットされたブロックの位置を指定します。

    QLDB コンソールのナビゲーションペインで、[Query Editor (クエリエディタ)] を選択します。

  2. vehicle-registration 台帳を選択します。

  3. クエリエディタウィンドウで、以下のステートメントを入力し、[Run (実行)] を選択します。

    SELECT r.metadata.id, r.blockAddress FROM _ql_committed_VehicleRegistration AS r WHERE r.data.VIN = '1N4AL11D75C109151'
  4. クエリが返す、idblockAddress の値をコピーし、保存します。id フィールドの二重引用符は必ず省略してください。Amazon Ion では、文字列データ型は二重引用符で区切られます。

  5. これでドキュメントリビジョンが選択されたため、検証プロセスを開始できます。

    ナビゲーションペイン内で [Verification (検証)] を選択します。

  6. [Verify document (ドキュメントの検証)] フォームの [Specify the document that you want to verify (検証するドキュメントの指定)] に、次の入力パラメータを入力します。

    • [Ledger (台帳) —] vehicle-registration を選択します。

    • [Block address (ブロックアドレス)] — ステップ 3 のクエリによって返された blockAddress の値。

    • [Document ID (ドキュメント ID)] — ステップ 3 のクエリによって返された id の値。

  7. [Specify the digest to use for verification (検証に使用するダイジェストの指定)] で、[Choose digest (ダイジェストの選択)] を選択することで、以前に保存されたダイジェストを選択します。ファイルが有効であれば、コンソールにあるすべてのダイジェストフィールドにデータが自動入力されます。また、以下の値をダイジェストファイルから手動で直接コピーして貼り付けることもできます。

    • [Digest (ダイジェスト)] — ダイジェストファイルからの digest 値。

    • [Digest tip address (ダイジェストティップアドレス)] —ダイジェストファイルからの digestTipAddress 値。

  8. ドキュメントおよびダイジェストの入力パラメータを再確認し、[Verify (検証)] を選択します。

    コンソールが次の 2 つのステップを自動的に実行します。

    1. 指定されたドキュメントに関するプルーフを QLDB にリクエストします。

    2. QLDB によって返された証拠を使用してクライアント側 API を呼び出すことで、提供されたダイジェストと照合してドキュメントのリビジョンを検証します。

    コンソールの [Verification results (検証結果)] カードに、リクエストの結果が表示されます。詳細については、「検証結果」を参照してください。

  9. 検証ロジックをテストするには、「ドキュメントのリビジョンを検証するには」のステップ 6 ~ 8 を繰り返しますが、[Digest (ダイジェスト)] 入力文字列を 1 文字変更します。これにより、[Verify (検証)] リクエストは失敗し、適切なエラーメッセージが表示されます。

vehicle-registration 台帳を使用する必要がなくなった場合は、「ステップ 7 (オプション): リソースをクリーンアップする」に進みます。