Skip to content

ハッシュチェーンの変更台帳を読み、自分で再検証する

チェーンされた記録の価値は、第二の人が自分で確かめられる分だけです。一行が何を保持し、チェーンが単独で何を証明し、何を他のコントロールに委ねるか。そして監査人が自分のツールでエクスポートを再検証する方法。

更新 · 7 分で読めます

一行が保持するもの

変更台帳は、その場にいなかった人が読めることでその名にふさわしくなります。すべての統制された変更が一行を書きます。その行は意図的に退屈です。

いつ、誰が
タイムスタンプ。行動した人のメールアドレス。その瞬間に持っていたロール。ロールは後で調べるのではなく、その時に書き留められます。ロールは変わり、この記録はそれが起きた日についてのものです。
どこで、何を
変更が行われた画面。行われたアクション。作用した対象。セマンティックレイヤー、リレー、プロバイダーキー、スクリプト実行、管理コンソールはすべてここに書きます。
状態、ハッシュとして
変更前の状態のコンテンツハッシュと、変更後のもの。値そのものは台帳の外に留まります。認証情報の変更の記録は、認証情報がまるで近くにない状態で存在できます。
リンク
前のエントリのハッシュと、このエントリ自身のハッシュ。その2つのフィールドがチェーンです。
詳細
小さな文脈の辞書。オペレーター監査証跡が使うのと同じスクラバーを通ります。秘密の形をしたキーは、何かがファイルに届く前に取り除かれます。

それはオペレーター監査証跡を置き換えるのではなく、その隣に座ります。2つの記録、2人の読み手。監査証跡は管理者が週の間に眺めるコンソールの履歴です。台帳は、誰かが1年後に、そのどれも覚えていないまま読むものです。

チェーンが証明するもの

各エントリのハッシュは、つなぎ合わせた2つのものにかかる SHA-256 です。第一に、自身のハッシュを取り除いたエントリの正規形。第二に、前のエントリのハッシュ。正規とは、キーをひとつの固定された順序に並べ、余計な空白がないことです。すると同じエントリは常に同じバイト列に直列化されます。最初のエントリは64個のゼロにリンクします。

その構造が買うものは、正確に述べる価値があります。記録されたフィールドの1文字を変え、1行を削除し、2行を入れ替える。その地点から先のすべてのリンクが一致しなくなります。検証はファイル全体を歩きます。最初の不正な行のインデックスと理由を報告します。理由は3つのうちのひとつです:不正な形の行、壊れたリンク、または自身の内容と食い違うハッシュ。

最初の不正な行を名指しすることが価値の大半です。「5万行のどこかで何かがおかしい」は警報です。「8,214行目、ハッシュ不一致」は始める場所です。問いを限定もします。その前のすべては検証済みだからです。

関数は秘密鍵なしのプレーンな SHA-256 です。それは意図的なトレードです。鍵付きの構成は、記録が私たちから来たことを証明するでしょう。鍵なしの構成は、エクスポートを持つ誰もが自分の30行のスクリプトで確かめられるようにします。監査人にとって、それは断然役に立つ性質です。

他のコントロールへの問い

チェーンはひとつの問いにはよく答え、他のいくつかにはまったく答えません。どれがどれかを知ることが大事です。コントロールが、一度もしていなかった仕事について信頼されるのを防ぎます。

  • 変更がそもそも記録されたかどうか。チェーンは一度も書かれなかったエントリについて何も言いません。書き込みは直列化され、追記のみです。失敗した書き込みは大きくログに残し、管理者のアクションを中断せずに何も返しません。それはライブのコンソールにとって正しいトレードです。ただし完全性は、チェーンではなく書き込み経路に依存するということです。書き込みが失敗すると何が起き、どうやってそれを知るかを尋ねてください。
  • 変更が実際に何だったか。前と後はコンテンツハッシュです。台帳は状態が変わったことを確認し、それはあなたがすでに持つ状態と一致します。古い値をハッシュから読み戻すのは、ハッシュにできることを超えています。だからこそ秘密を台帳から完全に外しておけるのです。
  • ファイル全体が書き直されたかどうか。鍵なしのチェーンは部分的な編集を検出します。すべての行を書き直せる誰かは、すべてのリンクを再計算できるでしょう。それに答えるのは、追記のみの書き込み経路とファイルの権限です。何より、すでに他の誰かが持っているコピーです。
  • チェーンが再始動したかどうか。起動時に末尾が読めなければ、追記は起点のリンクから続きます。検証はつなぎ目にフラグを立て、決してならしません。再始動の境界で壊れたリンクには、たいてい退屈な説明があります。それでも問いに値します。

4つすべてに快く答えるベンダーは、チェーンがそれらをカバーすると言うベンダーより役に立ちます。

エクスポートを自分で再検証する

エクスポートは台帳コンソールから取った JSON または CSV として届きます。適用されていたフィルターを運びます。検証には JSON を使ってください。CSV は人が読めるように詳細の列を平らにしており、ハッシュは別の形の上で計算されています。

  1. 64個のゼロの前ハッシュから始める。
  2. 各行を順に、オブジェクトをコピーし、そのエントリハッシュのフィールドを取り除く。
  3. 残りを JSON として直列化する。キーをソートし、トークンの間に空白を残さず、非 ASCII 文字をエスケープする。
  4. そのテキストに前ハッシュを付け加える。結果を UTF-8 でエンコードする。SHA-256 ダイジェストを小文字の16進で取る。
  5. それを記録されたエントリハッシュと比べる。行に記録された前ハッシュを、持ち込んだものと比べる。それからこの行自身のハッシュを次へ持ち越す。
  6. どちらかの比較が失敗した最初の行で止まる。そのインデックスと、どちらの比較が失敗したかを記録する。

すべての行で食い違う再計算は、たいてい台帳ではなく直列化器を指しています。それは最初の行も含みます。キーの順序、空白、Unicode のエスケープは、それぞれハッシュされるバイト列を変えます。そのひとつを間違えると、一様で、自信に満ちた、完全に間違った答えが出ます。

スクリプトを保ってください。要求に応じて再実行できる検証はコントロールです。誰かが一度、会議で行った検証は逸話です。

エクスポートのほうが遠くまで行く理由

コンソールは検証バッジを表示します。ページ読み込みごとにファイル全体にわたって計算されます。破損は次に誰かが見たときに表面化します。それは同時に、避けがたく、書き手が自分自身について報告するものです。

画面は普通の意味でもビューです。画面、行為者、日付範囲でフィルターされています。新しいものから並び、実務的な行数で上限があります。エクスポートは同じフィルターを、はるかに大きな上限で適用します。件数から結論を引き出す前に、2つのどちらを読んでいるかを知ってください。

エクスポートは建物を出られ、画面は出られません。今日取られ、監査人が保持するエクスポートは、チェーンを今日に固定します。彼らのコピーとあなたのコピーの間の後の食い違いは、単純な比較で現れます。どちらの側への信頼も求めません。それが、ルーティン全体をその周りに設計する価値のある性質です。

エクスポートは年月と距離とともに価値を増します。自分の手元の、同じマシン上の1つのコピーはバックアップです。一連のコピーは証拠です。スケジュールで取り、製品が書き込みアクセスを持たない場所に保持してください。

繰り返せるルーティン

  1. 各期間の終わりに、全範囲を JSON でエクスポートする。フィルターは適用しない。
  2. 自分のスクリプトで検証し、エクスポートとスクリプトを一緒に保つ。
  3. 新しいエクスポートを前のものと比較する。共有するすべての行は一文字違わず同一であるべきです。これが、チェーンだけでは開いたままの書き直しを捕まえる検査です。
  4. 誰かが行った覚えのある変更に対して、数行を抜き取り検査する。隣に記録された行為者とロールを確かめる。
  5. 各エクスポートを、製品が書き込みアクセスを持たない場所に保管する。
  6. 誰がいつ取ったかを、別のシステムではなく、ファイルの隣に記録する。

3つ目の段階が、自己整合的なファイルを監査済みのものに変えます。比較コマンドひとつのコストです。このページの他のすべては、それを実行するための準備です。