ハッシュアルゴリズム
ハッシュアルゴリズムは、あらゆるサイズの入力データを固定サイズの出力(ハッシュ)に変換する数学的関数であり、データの整合性、パスワードの保存、およびブロックチェーンのコンセンサスに使用されます。
ハッシュアルゴリズムは、任意の入力を受け取り、ハッシュまたはダイジェストと呼ばれる固定長の出力を生成する基本的な暗号プリミティブです。それらは、決定的(同じ入力は常に同じ出力を生成する)、計算が高速、そして逆転が不可能(一方向関数)であるように設計されています。
暗号学的ハッシュ関数は、追加の特性を満たす必要があります。衝突耐性(同じハッシュを持つ2つの入力を見つけるのが難しい)、原像耐性(ハッシュから入力を見つけるのが難しい)、および雪崩効果(小さな入力の変更が大きな出力の変更を引き起こす)。
主要なアルゴリズムには、SHA-256(Bitcoin、広く使用されている)、Keccak-256(Ethereum)、SHA-3(NIST標準)、Blake2/Blake3(高速、安全)、およびPoseidon(ZKフレンドリー)があります。異なるアルゴリズムは、セキュリティ、速度、およびゼロ知識証明などの特定の用途への適合性においてトレードオフを提供します。
ブロックチェーンでの使用には、プルーフ・オブ・ワークのマイニング、データ整合性のためのマークルツリー、アドレス生成、トランザクションID、およびコミットメントスキームが含まれます。ハッシュを理解することは、ブロックチェーンのセキュリティと開発にとって不可欠です。
graph LR
Center["ハッシュアルゴリズム"]:::main
Pre_cryptography["cryptography"]:::pre --> Center
click Pre_cryptography "/terms/cryptography"
Pre_mathematics["mathematics"]:::pre --> Center
click Pre_mathematics "/terms/mathematics"
Rel_proof_of_work["proof-of-work"]:::related -.-> Center
click Rel_proof_of_work "/terms/proof-of-work"
Rel_digital_signatures["digital-signatures"]:::related -.-> Center
click Rel_digital_signatures "/terms/digital-signatures"
classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
linkStyle default stroke:#4b5563,stroke-width:2px;
🧒 5歳でもわかるように説明
Generated ELI5 content
🤓 Expert Deep Dive
Generated expert content
❓ よくある質問
なぜハッシュを逆転させて元の入力を取得できないのですか?
ハッシュ関数は任意の量の入力を固定サイズの出力に圧縮するため、多くの可能な入力が各ハッシュにマッピングされます(情報は失われます)。また、逆転を計算上不可能にする数学的複雑さで設計されています。これは原像耐性と呼ばれます。
Bitcoinはどのハッシュアルゴリズムを使用していますか?
Bitcoinは、プルーフ・オブ・ワークのマイニングとトランザクションハッシュにSHA-256(SHA-256d、実際にはダブルSHA-256)を使用し、アドレス生成にSHA-256と組み合わせたRIPEMD-160を使用します。これらの選択は、セキュリティ、パフォーマンス、および既知の攻撃に対する耐性のバランスをとっています。
ハッシュ関数が「ZKフレンドリー」であるとはどういう意味ですか?
PoseidonやPedersenなどのZKフレンドリーなハッシュ関数は、ゼロ知識証明回路内で使用された場合に効率的になるように設計されています。SHA-256のような従来のハッシュは、証明するのにコストがかかるビット単位の操作を使用するため、ZK証明では高価です。ZKフレンドリーなハッシュは、証明システムに固有の算術演算を使用します。