24 / 736HASH

Hash

暗号学的な指紋

データを比較し、変更を見つけるための短いデジタルの指紋。

ハッシュは、ファイルや Bitcoin の取引などのデータに対して計算した結果です。同じデータを同じ方法で処理すれば、同じ指紋になります。暗号学的ハッシュは、同じ結果になる別のデータや、与えられた結果になる入力を見つけにくくするよう設計されています。元データを暗号化したコピーではありません。

インストール用のファイルをダウンロードしたとします。配布元が確認用の指紋を公開していれば、同じアルゴリズムで手元のファイルの指紋を計算します。結果が違えばデータは同じではなく、破損、すり替え、変更などが考えられます。逆に信頼できる指紋と一致すれば、正しいコピーを得たという強い裏付けになります。ファイル全体を手作業で比べる必要はありません。例えば SHA-256 の結果は 256 ビットで、通常は 64 桁の十六進数で表します。短いメッセージでも大きなファイルでも長さは同じです。 [1] [3]

重要なのは、比較する指紋の入手元です。攻撃者がウェブサイトのファイルと公開ハッシュを両方すり替えれば、二つは一致します。ハッシュの計算に秘密の鍵は不要で、公開データなら誰でも計算できます。そのため、鍵の保有者がデータを証明するデジタル署名とは違います。Bitcoin Core のダウンロード検証では、ファイルのハッシュだけでなく、指紋一覧の署名と署名鍵の信頼性も確認します。ハッシュ単独で作者、プログラムの安全性、文書の真実性を証明することはできません。 [3]

ハッシュには「復号」という逆の手順がありません。固定長の結果にファイルの全内容は入らないため、バックアップにはなりません。ただし、どんな入力でも安全に隠せるという意味ではありません。短くよく使われるパスワードをハッシュした場合、攻撃者はありそうなパスワードを試して指紋を比較できます。関数を逆に解かなくても、入力を当てればよいのです。したがって、高速なハッシュだけでは強いパスワードや安全なパスワード保存専用の方式の代わりにはなりません。 [1] [5]

preimage(原像)の探索では、指定された指紋を作るデータを探します。衝突の探索では、同じハッシュになる異なる入力が二つ見つかればよく、結果はあらかじめ指定されません。固定長の結果より入力の候補のほうが多いため、衝突は数学的には存在します。暗号学的な安全性は、そうした例を現実的に見つけられないことにあり、不可能であることではありません。また、ハッシュは一つのアルゴリズム名ではなく、すべてのハッシュ関数が暗号学的安全性を目的としているわけではありません。 [1]

Bitcoin はハッシュを取引の識別、ブロックの接続、採掘作業の検証に使います。ただし、計算方法は用途ごとに異なります。ブロックヘッダーのハッシュは SHA-256 を二度使い、HASH160 は SHA-256 と RIPEMD-160 を組み合わせます。Tagged hash はタグを使って計算の用途を分けます。自分で結果を検証するには、正しいアルゴリズムと正確な入力バイト、つまりデータの基本単位が必要です。文字列「61」のバイト列は、ASCII の文字 a を表す十六進値 61 の一バイトとは異なります。表示された表記をハッシュすることと、データそのものをハッシュすることは別の計算なのです。 [2] [4]

理解を深めるには、この項目とあわせて次もお読みください SHA-256, Proof of Work, Block Header, トランザクション, Merkle Tree, Bitcoin. 次の項目からも参照されています SHA-256, Nonce, HTLC, Hashcash.

DOC · 001NIST FIPS 180-4: Secure Hash Standard一次資料 DOC · 002Bitcoin Core v29.0: hash constructions一次資料 DOC · 003Bitcoin Core: Verify your download一次資料 DOC · 004BIP340: tagged hashes一次資料 DOC · 005NIST SP800-63B: Password verifiers一次資料
改訂日: 一次資料を優先 · 投資助言ではありません