私は最近、Solidityを再学習し、詳細を統合し、初心者が使用できる「Solidity Minimalist Primer」を書いています(プログラミングの人は別のチュートリアルを見つけることができます)、週に1〜3回更新しています。
すべてのコードとチュートリアルはgithub:github.com/AmazingAng/WTFSolidityでオープンソースです。
ハッシュ関数は、任意の長さのメッセージを固定長の値 (ハッシュとも呼ばれます) に変換する暗号化の概念です。 この講演では、ハッシュ関数とそのSolidityでの応用について簡単に紹介しましょう
優れたハッシュ関数には、次の特性があります。
単方向性:入力メッセージからハッシュへの順方向操作は単純で一意に決定されますが、逆は非常に困難であり、ブルートフォースによってのみ列挙できます。
感度: 入力メッセージは、ハッシュに対して少し大きく変化します。
効率: 入力メッセージからハッシュへの操作は効率的です。
均質性: 各ハッシュが取得される確率は、ほぼ同じである必要があります。
耐衝撃性: 弱い耐衝撃性: メッセージ x が与えられた場合、別のメッセージ x’ を見つけると、hash(x) = hash(x’) が困難になります。
強い耐衝突性: 任意の x と x’ を見つけると、hash(x) = hash(x’) が困難になります。
データの一意の識別子を生成する
暗号署名
安全な暗号化
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 つの異なる文字列引数を取り、それらのハッシュが同じかどうかを判断します。
この講演では、ハッシュ関数とは何か、Solidityで最も一般的に使用されているハッシュ関数であるKeccak256の使い方を紹介しました。
11.45K 人気度
19.98K 人気度
13.67K 人気度
7.14K 人気度
96.02K 人気度
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の使い方を紹介しました。