Hash Function - 改竄の検出を支える 3 つの耐性
ハッシュ関数は、任意の長さのデータを固定長の値に変換する関数です。変換後の値をハッシュ値と呼びます。ここで扱うのは、その中でも改竄の検出に耐える性質を持つ暗号学的ハッシュ関数で、通信のエラー検出だけを目的とした関数(CRC、Cyclic Redundancy Check など)は対象外です。SHA-256 の内部の計算手順も扱いません。 ...
ハッシュ関数は、任意の長さのデータを固定長の値に変換する関数です。変換後の値をハッシュ値と呼びます。ここで扱うのは、その中でも改竄の検出に耐える性質を持つ暗号学的ハッシュ関数で、通信のエラー検出だけを目的とした関数(CRC、Cyclic Redundancy Check など)は対象外です。SHA-256 の内部の計算手順も扱いません。 ...
Shamir’s Secret Sharing(SSS)は、1 つの Secret を n 個の Share に分け、そのうち異なる任意の k 個以上で復元できる秘密分散方式です。復元に必要な個数 k を閾値(threshold)と呼び、(k, n) threshold scheme と表します。 ...
デジタル署名は、秘密鍵の持ち主だけが作れて、対になる公開鍵を持つ誰もが検証できるデータです。メッセージに署名を添えると、受け取った側は「秘密鍵の持ち主がこのメッセージを承認した事」と「メッセージが署名の後に書き換えられていない事」を確かめられます。ここで説明するのは、署名の役割と使われ方です。楕円曲線の数学的な計算手順には踏み込みません。 ...
Timed-release Cryptography(時限公開暗号)は、将来の条件が成立するまで、あらかじめ作成した暗号文を復号できないようにする仕組みです。方式の前提が守られていれば、暗号化した本人も条件成立前には復号できません。 ...
鍵の長さを 256 bit にしても、その鍵を作った seed(種。生成器に最初に与える値)の取り得る値が 15 bit 分しかないなら、攻撃者が試す鍵は 32768 通りです。暗号の安全性は攻撃者がその値を当てられない事に支えられていて、当てられない値を作るのが乱数の役目です。 ...
同じ鍵と同じ nonce で、内容の違う 2 通のメッセージを暗号化すると、攻撃者は 2 通の平文の関係を計算できます。改竄の検出のために暗号文に添える認証タグも、その鍵で作った物は信用できなくなります。鍵は漏れておらず、暗号文の形式も普段通りで、受信側の復号も成功します。起きたのは、毎回変えるはずだった値が 1 つ重なった事だけです。 ...
Hash Function(ハッシュ関数)とは、長さの異なるデータを固定長の値へ変換する関数です。変換後の値をハッシュ値と呼びます。 SHA-256(Secure Hash Algorithm 256)はハッシュ関数の 1 つで、仕様上扱える範囲であれば、入力の長さに関係なく 256 bit のハッシュ値を返します。1 byte のファイルと、0 で埋めた 64 MiB のファイルで、この事を確かめます。 ...
Merkle Tree(マークルツリー、ハッシュ木)は、データの並びを 2 つずつハッシュ関数で畳み込み、最後に 1 つの値にまとめる木構造です。まとまった 1 つの値をルートハッシュと呼びます。全件を持つ側は、データ 1 件と少数のハッシュだけを渡して、その 1 件が並びに確かに含まれていた事を相手に検証させられます。 ...
Merkle Tree の構築方法は 1 通りに決まっていません。奇数の葉をどう組むか、葉と内部ノードをどうハッシュするか、葉をどう並べるかは、それぞれのプロトコルが決める設計事項です。ルートハッシュが何を保証しているのかは、この規則を決めて初めて確定します。 ...