Solidity入門|第28回:ハッシュ

私は最近、Solidityを再学習し、詳細を統合し、初心者が使用できる「Solidity Minimalist Primer」を書いています(プログラミングの人は別のチュートリアルを見つけることができます)、週に1〜3回更新しています。

すべてのコードとチュートリアルはgithub:github.com/AmazingAng/WTFSolidityでオープンソースです。

ハッシュ関数は、任意の長さのメッセージを固定長の値 (ハッシュとも呼ばれます) に変換する暗号化の概念です。 この講演では、ハッシュ関数とそのSolidityでの応用について簡単に紹介しましょう

ハッシュの性質

優れたハッシュ関数には、次の特性があります。

単方向性:入力メッセージからハッシュへの順方向操作は単純で一意に決定されますが、逆は非常に困難であり、ブルートフォースによってのみ列挙できます。

感度: 入力メッセージは、ハッシュに対して少し大きく変化します。

効率: 入力メッセージからハッシュへの操作は効率的です。

均質性: 各ハッシュが取得される確率は、ほぼ同じである必要があります。

耐衝撃性: 弱い耐衝撃性: メッセージ x が与えられた場合、別のメッセージ x’ を見つけると、hash(x) = hash(x’) が困難になります。

強い耐衝突性: 任意の x と x’ を見つけると、hash(x) = hash(x’) が困難になります。

ハッシュアプリ

データの一意の識別子を生成する

暗号署名

安全な暗号化

ケッカック256

Keccak256関数は、Solidityで最も一般的に使用されるハッシュ関数であり、非常に簡単に使用できます。

データの一意の識別子を生成する

keccak256 を使用して、データの一意の識別子を生成できます。 たとえば、uint、string、addressなど、いくつかの異なるタイプのデータがある場合、abi.encodePackedメソッドを使用してそれらをエンコードし、keccak256を使用して一意のIDを生成できます。

耐衝撃性が弱い

keccak256を使って、先ほどお話しした弱い耐衝撃性、つまり、メッセージxが与えられた場合、別のメッセージx’を見つけるとhash(x) = hash(x’)が難しくなることを実証しましょう。

メッセージ0xAAが与えられると、ハッシュが等しくなるように別のメッセージを見つけようとします。

10回試して、運が良ければ衝突できるかどうかを確認できます。

強い耐衝撃性

keccak256を使って、前述の強い耐衝突性、つまり任意に異なるxとx’を見つけ、hash(x)=hash(x’)を困難にすることを実証してみましょう。

関数 strong を構築し、string1 と string2 の 2 つの異なる文字列引数を取り、それらのハッシュが同じかどうかを判断します。

10回試して、運が良ければ衝突できるかどうかを確認できます。

まとめ

この講演では、ハッシュ関数とは何か、Solidityで最も一般的に使用されているハッシュ関数であるKeccak256の使い方を紹介しました。

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • リポスト
  • 共有
コメント
0/400
コメントなし
  • ピン