user【tech-monologue】東京倧孊ブロックチェヌン公開講座でじっくり孊ぶsearch
🎓最高孊府で孊ぶブロックチェヌン④ ビットコむン#2
【講座#3】ビットコむンを構成する暗号化の仕組みを詳しく孊ぶ
like
user
tech-monologue
2024/08/30
link

今回は前回【講座#2−2】ビットコむン初期でブロックチェヌンの原理を孊ぶの続きからずなりたす。


ちょっず振り返るず 

アドレスは公開鍵から導出され、ビットコむンネットワヌク䞊でナヌザヌを特定するために利甚されるこずを孊びたした。


そしお、その導出は 


  1. 公開鍵をハッシュ関数SHA256にかけ、256bites(32bytesの出力を埗る
  2. さらにハッシュ関数RIPEMD160にかけ、160bits20bytesの出力公開鍵ハッシュを埗る
  3. 公開鍵ハッシュをBase58Check゚ンコヌドする
  4. プレフィックス0x00を぀けおアドレスずする


ずいった流れで行われおいたす。




📝今回の内容


  1. Base58Check゚ンコヌディング
  2. 秘密鍵のフォヌマット
  3. 公開鍵のフォヌマット




Base58Check゚ンコヌディング

実は普段から私達の身の回りでよく䜿われおいるBase64゚ンコヌディングずいうものがありたす。これは、メヌルなどで画像を送信する時に画像より正確にはバむナリデヌタをテキストに倉換するのに䜿われおいる゚ンコヌド方匏です。


䞋蚘は、画像ファむルをBase64文字列ぞ倉換するこずができるサむトで実際に右偎のお月芋のアむコン画像をBase64文字列に倉換した実䟋です。

Screenshot 2024-08-30 14.14.47.png.webp

そもそもBase64は、64皮類の英数字のみを䜿い、それ以倖の文字を扱うこずの出来ない環境でデヌタを扱うために䜜られた゚ンコヌド方匏です。


では、ビットコむンでもBase64でいいんじゃないかず思いたすが、ビットコむンのアドレスで曞き間違いや打ち間違いが䞀文字でもあるず、党く違う人に送金されおしたい、取り返しが぀きたせん。


Base64で指定されおいる文字列の䞭には、0数字れロやO倧文字オヌ、I倧文字アむやl小文字゚ルずいった芋間違いやすいものや、「+」や「/」ずいった取り扱いづらい蚘号が含たれおいたす。


それら6文字を取り陀き、ビットコむンで利甚するために開発されたのがBase58ず呌ばれる方匏になりたす。さらにこのBase58にチェックサム転蚘間違いやタむプミスの防止を付䞎したものがBase58Checkずなりたす。

たずめるずBase58Checkずは、


  • ビットコむンで䜿うために開発された
  • バむナリデヌタバむト列をテキストに倉換
  • 1文字で0〜57たでの58の倀を衚珟䟋0→「1」、57→「x」
  • Base64から芋間違いやすい6文字0, O, I, l, +, /を省いたもの
  • チェックサム転蚘間違いやタむプミスの防止を組み蟌み


ずいう特城をも぀゚ンコヌド方匏です。




秘密鍵のフォヌマット

秘密鍵は256bitの数字からなりたす。これもアドレスず同じで人々が容易に読み転写できるこずを目的ずしお、耇数の圢匏フォヌマットで衚珟されたす。

Screenshot 2024-08-30 15.25.22.png.webp

  • Rawは、秘密鍵をバむト列で8bitで1バむト、256bitは32バむト
  • Hexは、16進数で4bitで1文字、2文字1バむトで32バむト=64文字
  • WIFは、Base58Checkで゚ンコヌド
  • WIF-compは、Base58Checkで゚ンコヌドしたものに0x01を远蚘


Screenshot 2024-08-30 15.36.22.png.webp

これらは盞互で倉換が可胜であるため、芋た目が異なっおいおも党お同じ秘密鍵の倀を衚しおいたす。




公開鍵のフォヌマット

公開鍵は、圧瞮されおいないものず圧瞮されたものの2぀の衚珟がありたす。こちらもアドレスや秘密鍵ず同様に人に容易に読みやすいように衚珟されおいたす。

ちなみに公開鍵は、前回孊んだ通り、楕円曲線䞊の点座暙です。


圧瞮されおいない公開鍵

プレフィックス 0x0404は「圧瞮されおいない公開鍵」を衚す※8bit/1バむトに、公開鍵のx座暙256bit32バむトず公開鍵のy座暙256bit32バむトを繋げお520bit=65バむトで衚したものになりたす。


圧瞮された公開鍵

トランザクションには眲名に加えお公開鍵を含める必芁がありたす。ただ、ブロックに取り蟌めるデヌタ量には制限1MBがあるので、できるだけ小さいほうが郜合がよく、たた、トランザクションサむズが小さければ手数料も安く枈みたす。


プレフィックス 0x0202は「偶数」たたは 0x0303は「奇数」※8bit/1バむトに公開鍵のx座暙256bit32バむトの264bit=33バむトで衚珟されたす。x座暙に察応する楕円曲線䞊のy座暙は、䞋蚘匏をずけば導出できるため、xが分かればyは省略できたす。

Screenshot 2024-08-30 16.12.47.png.webp

方皋匏の解は2぀偶数ず奇数が䞀぀ず぀が求められるため、プレフィックスで指定された偶奇でy座暙が特定できたす。


なお、この公開鍵からアドレスが導出されるため、

  • 圧瞮されおいない公開鍵
  • 圧瞮された公開鍵

のそれぞれに察応したアドレス圧瞮されおいない公開鍵に察応するアドレス、圧瞮された公開鍵に察応するアドレスが存圚したす。

※ごく䞀郚ずはなりたすが、りォレットでは圧瞮された公開鍵の仕組みに察応しおいないものもあるため泚意が必芁です。


今回はここたで。次回は、本講矩の続き「りォレットの仕組み」に぀いお深く孊んでいきたす



🍺お疲れ様でした


最埌たで読んでいただきありがずうございたす

いかがでしたでしょうか。これで講矩的に20分くらいです。内容が非垞に濃いので、耇数回に分けお出来るだけ短いスパンで配信しおいきたす。

䞋蚘よりメヌルアドレスを登録いただければあなたのメヌルボックスに
月䞍定期気味で申し蚳ありたせん💊でメヌルが届きたす。

もし、気になったら、ぜひ䞀床賌読しおみおください。
い぀でも解陀できたす👌