どうも、月見(@Suzuka14144156)です。
私は、ブロックチェーンに関する研究をしており、本ブログでは仮想通貨/暗号資産の情報を整理して発信しています。
今回は、Pythonでブロックチェーンを実際に実装していきたいと思います。
参考にした講座は以下のUdemyの講座です。
こちらの講座は、Pythonでスクラッチでブロックチェーンを実装するというものです。
Pythonの中級者以上の向けの講座となっています。
ブロックチェーンだけでなく、クラスを使ったコーディングを覚えたい方にもオススメの講座だと思います。
前回までの私の記事は、こちらです。
今回は、前回からの続きですので、お読みでない方は、ぜひ参考にしてみてください。
【Python】ブロックチェーンの実装_1 クラスの定義
【Python】ブロックチェーンの実装方法_2 hashの定義
【Python】ブロックチェーンの実装方法_3 トランザクションの定義
【Python】ブロックチェーンの実装方法_4 Proof of Workの定義
【Python】ブロックチェーンの実装方法_5 マイニングの実装
今回は、秘密鍵と公開鍵とウォレットの実装です。
秘密鍵と公開鍵とウォレットとは
秘密鍵
- 暗号鍵とは、データの暗号化や復号を行う際、計算手順に与える短い符号のこと。
公開鍵
- 公開鍵とは、通信を暗号化するときに使うキーのこと。
ウォレット
- ウォレットとは、暗号資産をプールする場所です
- 「公開鍵」を知っているだけでは他のウォレットに暗号資産を移転させることは不可
- 暗号資産を移転させるには、「秘密鍵」を知っている必要がある
秘密鍵と公開鍵とウォレットの実装
wallet.py
from ecdsa import NIST256p
from ecdsa import SigningKey
class Wallet(object):
def __init__(self):
self._private_key = SigningKey.generate(curve=NIST256p)
self._public_key = self._private_key.get_verifying_key()
@property
def private_key(self):
return self._private_key.to_string().hex()
@property
def public_key(self):
return self._public_key.to_string().hex()
if __name__ == '__main__':
wallet = Wallet()
print(wallet.private_key)
print(wallet.public_key)
実行結果は、以下です。
d8fff8457ac5748b7dd1de4a1fb99a9d5938684f97afff0ed7bddfc322de5535
9802788c6eeb5d46cd297a8dbab1d193e45237711d423f1c4665bc15620ec68738b3880c8e555f81cbe88a6026dbd8b188adc1ecb6c52b365404d8a44221cf68
ecdsa
楕円曲線DSA(だえんきょくせんDSA、Elliptic Curve Digital Signature Algorithm、Elliptic Curve DSA、楕円DSA、ECDSA)は、Digital Signature Algorithm (DSA) について楕円曲線暗号を用いるようにした変種である。
https://ja.wikipedia.org/wiki/%E6%A5%95%E5%86%86%E6%9B%B2%E7%B7%9ADSA
- 下の図のような形が、ecdsaです
- 秘密鍵と公開鍵は一対の関係
- ビットコインの場合、その関係性を決定づけるのが、ecdsa(NIST256p)
公開鍵と秘密鍵によってSignatureを生成します。
ここらへんの詳細は、以下が参考になるので共有します。
https://citp-forum.ipsj.or.jp/wp-content/uploads/2018/09/CITP_report2017_05_akane.pdf
今回の記事は、以上です。
ありがとうございました。
コメント