はじめに
仮想通貨のウォレットを持っていると、不規則な長い文字列をよく見ると思います。
Ethereumで使われるアドレスの生成過程について調べている中で、下記のような記述を見つかりました。
1.秘密鍵からECDSAで公開鍵(64バイト)を生成
2.公開鍵をハッシュ関数Keccak-256に通し文字列(32バイト)を得る
3.最初の12バイトを消し20バイトのアドレスになる
4.そのアドレスにprefixの0xを加えることで最終的なアドレスを得る(0x5eD8Cee6b63b1c6AFce3AD7c92f4fD7E1B8fAd9F)
参考:秘密鍵から公開鍵そしてアドレスが生成されるまでの流れ【仮想通貨】
keccak256がどのような関数なのか確かめるために触ってみました。
目次
keccak256とは
keccak256はEthereumが用いる標準ハッシュ関数です。
読み方は(ケチャック)と読みます。
keccak256によるハッシュ化はpycryptodomeというライブラリを用いることで実装できるそうです。
https://pypi.org/project/pycryptodome/
今回はGoogle Colaboratoryでkeccak256によるハッシュ関数の出力を行いました。
Pythonによるkeccak256によるハッシュ値の出力
#ライブラリのインストール
!pip install pycryptodome
from Crypto.Hash import keccak
import binascii
keccak256 = keccak.new(data=b'hello', digest_bits=256).digest()
print("Keccak256:", binascii.hexlify(keccak256))
出力として下記のハッシュ値が出力されました。
Keccak256: b'1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8'