これからスマートコントラクトを実装したいエンジニアのためのブロックチェーン入門

Pocket

「ブロックチェーン入門講座」で取り上げるトピックについて、ほんの一部分を簡単にまとめました。
スマートコントラクトの実装を本気で考えている方は。ここで予習しておきましょう。

 

ブロックチェーン関連の市場規模は67兆円に。

ブロックチェーンを一言で説明すると、

「正しい記録しかできない、変更できない、削除できない、改ざんできない、壊れても自動修復される、落ちない、みんなに合意された情報だけが有効とされる、ネットワーク共有型のデータベース」です。

 

ブロックチェーンの利用用途として、

1.地域通貨のような「価値の流通」
2.電子カルテのような権利証明行為の非中央集権化
3.C2Cオークションのような高効率シェアリング
4.ダイヤモンドトラッキングのようなオープンなサプライチェーン
5.プロセス・取引の全自動化・効率化

などがあげられます。

ブロックチェーンでお金を移動する仕組みとは

ブロックチェーンは、銀行口座のようなお金の動向を一覧表にして記憶する 仕組みは持っていません。
かわりに公開鍵暗号の鍵に対応する「ウォレットアドレス」と呼ばれる仕組みがあります。
取引データは公開されますが、これを自由に操作するには、宛先に指定されたウォレットアドレスに対応する秘密鍵を持っている人だけになります。

ウォレットアドレスはどこにも登録しないで使えますし、いくらでも作ることができます。
公開鍵暗号に基づいているので手元のパソコンに計算させて「秘密鍵と公開鍵のペア」さえ作ればできてしまう。
「作られたウォレットアドレスは自分の個人情報とはいっさいリンクしない」ので既存の銀行口座とは決定的に違う点で匿名性が高いと理由とされます。

パブリックチェーンとプライベートチェーン

パブリックチェーンとプライベートチェーンの違いは「ネットワークに参加しているノードの総数が把握できるかどうか」です。
パブリックは誰でも参加可能であるが、プライベートは参加に承認が必要など、参加者が限られます。
この2つでは、「トランザクションを記録する際のアルゴリズム(合意形成アルゴリズム)」で大きな違いがあります。

パブリックチェーンの代表はビットコインです。
最初のパブリックチェーンであるビットコインでは、ノードを運用してくれる人(一般に「マイナー」と呼ばれる)に対して、運用報酬として仮想通貨を直接与える仕組みになっており、正しい選択をする方が経済的に得をするようになっています。
ノードが増えれば増えるほど、システム停止の可能性が低くなり、不正や改ざんに対して強くなります。

ブロックチェーンのメリットとデメリット

ブロックチェーンは、システムが壊されることなく永続的に稼働し続けられ、一度書き込まれたデータをあとから改ざんすることが不可能で、サービス事業者システム管理者ですら、データの改ざんはもちろん、変更もできません。

つまり、商取引を記録する用途には向くが、個人情報などを蓄積する用途にはむかないと言えます。

一方で、利用者は、事業者の信用に依存せず、安心してサービスの利用ができます。
ブロックチェーンは、数学的な理論や情報技術を組み合わせることで、お互いが信用できない者どうしの取引であっても、不正があることを心配すること無く安心して行える。これを「トラストレス」と呼びます。
すでに、中古車の販売、貴金属の売買、アドネットワークなどで活用されています。

ブロックチェーンを使いこなすためには、その特性を知り、一般的なデータベースや分散ストレージなどの外部システムと連携しながら利用する必要があります。

公開鍵と秘密鍵

かつての暗号化方式には、

・紀元前から存在したアルファベットをある数だけずらして読む「シーザー暗号」
・16世紀に発明された、文字の配置を1文字毎に換え、その配列を記したコードブックを鍵とした転置式の「ヴィジュネル暗号」
・これらを組み合わせた、20世紀半ばに登場した機械式の「エニグマ暗号」

などがありました。

「秘密の作り方」(暗号化)と「秘密の解き方」(復号化)について、それぞれの手法と「秘密を解く鍵」がセットになっているのが一般的です。

数学理論をベースとした現代の暗号の方式は、大きくわけて、共通鍵暗号方式と公開鍵暗号方式にわかれます。
ブロックチェーンの実装によく使われているのは「公開鍵暗号(RSA」です。
また、鍵の長さが他の公開鍵暗号と比べても短くて済む「楕円曲線暗号(ECDSA)」がよく使われています。

公開鍵暗号は、「特定の人を指名して、その人だけが所定の操作を可能とする」仕組みを作ることに適しています。
ブロックチェーンでの応用でいえば、「あるコインを特定の人に送付して、その人だけが使えるようにする」するために利用されているのが公開鍵暗号の仕組みになります。

ハッシュ関数

ブロックチェーン技術を語るうえで、もっとも重要な技術が「一方向ハッシュ関数」です。
ハッシュ関数は「任意の入力値を与えた場合に、どんな値が返ってくるのかが、予測できない」という特徴を持ちます。

ブロックチェーン関連のプロジェクトでもっともポピュラーなのは「SHA256」と呼ばれるアルゴリズムを利用したハッシュ関数です。

 

SHA256の特徴は

・1バイトでも、1ビットでも、違う値が入力されると全く関連性のない値が得られる。
・それは誰が実行しても同じ値が得られる。
・長さの異なる文字列を与えても、常に一定の桁数となる。
・SHA2-256というハッシュ関数の場合、データ量に関わらず16進数表記で64桁と固定されている。

 

などがあげられ、セキュリティ強度については、

・故意に衝突を起こすことはとても困難
・衝突確率は、SHA2-256は、2の256乗分の1(天文学的数字)
・旧バージョンのSHA1の衝突の発見はGoogleが見つけ計算回数は900京回以上、一般的なCPUで6500年、GPUを使っても110年かかるとレポートされている。
・SHA3-256というさらに強度が高いアルゴリズムもブロックチェーンに実装され始めている。

とされています。

組織内部の不正を、身分をばらさずに密告する方法「リング署名」

署名者があるグループの構成員のうちの1人であることを証明することはできるが、誰によるものかはわからない、という特徴を持つ技術です。この技術は匿名通貨に応用されておりますが、マネーロンダリング利用が懸念とされています。(例:DASH、Monero、Zcash)

暗号を解かずに計算や検索を行う方法「秘匿計算」

金融取引で「秘匿計算」と呼ばれる技術があります。
ブロックチェーン関連では「エニグマ」と呼ばれる、取引データを暗号化したまま、スマートコントラクトを実現して契約を自動履行させるプロジェクトが開始されています。
秘匿計算(秘匿検索)の分野では日本国内の研究が世界でも先行しています。

双方向通信を必要とせずに個人認証を行える「シュノア署名」

電子署名の主流はDSA、ECDSAですが、近年注目を集めているのは「シュノア署名」 というものです。
ビットコインでもスケーラビリティの問題解決でシュノア署名の採用が行われる予定。数ある電子署名方法のなかでももっともコンパクトで、複数の署名を1つに統合できます。
つまり、複数人の署名が必要となるマルチシグネチャ方針を用いる取引では威力を発揮し、データ量を大幅に削減することができます。

シュノア署名を使うと、インターネット接続がなくてもQRコードやNFC、Bluetoothを 使って当事者間で決済できます。

P2P分散システムとは?

ブロックチェーンは、P2P分散ネットワーク上の分散システムをとっています。

一部のノードが故障/停止しただけでは全体が影響受けることが少なく、 障害規模が大きくなればなるほど耐障害性に優れていくのが特徴です。

ちなみにBitCoinの世界中のノードは7500~8000台のノードが稼働しており、システム停止は一度もありません。(※遅延は発生しています)

P2Pのメリットとして、事故でシステム全体が止まるリスクがきわめて少なく、長期的に安定稼働でき、どこかのノードが壊れたくらいでは影響がないことに対して、P2Pのデメリットとして、科学計算のクラスタリングのような「ノードを増やせば増やすほど性能が上がる」用途には不向き、ノードが増えれば増えるほど、「バケツリレー」の量が増えパフォーマンスが悪くなる、システムを止めたくても気軽に止められないため、悪い情報が流れると削除できない点があげられます。

合意形成とは?

ブロックチェーンでは、全ノードが同じ計算を行います。
各ノードの計算処理が終わったら確認(合意)を行う必要があります。

合意形成の基本は多数決ですが、ビットコインのようなパブリックブロックチェーンでは、ノードの加入・離脱・故障・休 止がいつどこで起こるか分からないため、多数決に必要なノード総数が把握できません。

プライベートなブロックチェーンでは、リーダーを決めて合意を行うパターンが合理的ですが、パブリックブロックチェーンでは、リーダーが不要の合意形成が必要で、全体を合意する術として「経済的なインセンティブ」を与える方法が発明されました。

この合意形成手法を「Proof of Work」「Proof of Stake」 と呼んでいます。

不特定多数の合意形成を実現する「Proof of Work」

Proof of Work(マイニング)とは、

1. ノードは、トランザクションプールに蓄積されている取引データを何十、何百と取り出す
2. 前のブロックのハッシュ値と、タイムスタンプをブロックに詰める
3. さらに「ナンス」と呼ばれる適当な数字を入れながら、そのブロックのハッシュ値の先頭に所定の数だけ「0」が並ぶのを発見するまで計算しつつける。

「0」が並ぶ「ナンス」の発見競争を「Proof of Work」と呼び、「0」の並びを発見し たノードは「コインの新規発行」が認められるという仕組みになっており、鉱山からコインを掘り当てているように見えるため、別名「マイニング」とも呼ばれています。

Proof of Workの問題を解決した「Proof of Stake」

Proof of Workはコンピューターリソースと電力消費の面から、エコロジーではないという大きな問題があります。
この問題を解決しようとした分散型合意形成アルゴリズムが「Proof of Stake」です。
合意形成時に経済合理性による判断を行う。

Proof of Stakeのインセンティブ方式では、
コインエイジ(=コインの保有量×コインの保有量)が大きくなる採掘権を提供する者ほど、採掘に掛かる難易度が低くなる方式で、採掘速度を速くしてエネルギー消費量を減らせる措置が講じられています。

ウォレットの仕組み

ウォレットアドレスには「秘密鍵」と「公開鍵」があります。

公開鍵のウォレットアドレスは「お金を受け取るためのアドレス」「お金の送り先のアドレス」です。
それに対して、秘密鍵のアドレスは取引に署名するためのウォレットアドレスで、外部に漏れてはいけないアドレスです。

なお、ウォレットアドレスはオフラインで生成可能です。
まず、256ビット分の情報量を持った乱数を生成し、それに対して、秘密鍵と公開鍵のキーペアが生成されます。

ビットコインの場合、そのウォレットアドレスは「1」ではじまる27~34文字の英数字でなりたっており、Base58という方式でエンコードされています。

ブロックチェーンの世界では「トランザクション」は「取引」を意味します。
取引の際、帳簿の連続性を保つために、コイン総数から送金分を引いたコインを自分宛に送っています。

トランザクションが扱える取引は「送金」だけではありません。
お金の取引をせずに、何らかの短いメッセージを記録するということも可能です。

これを利用したのが、ビットコインの拡張領域を利用した派生コインで、「カラードコイン」と呼ばれ、80バイト程度のメッセージをトランザクションに付与可能、「NEM」などの仮想通貨で利用されています。

ウォレットアドレスの未使用残高「UTXO」

ウォレットアプリが表示する残高の正体は、ウォレットアドレスアプリが管理するたくさんのウォレットアドレスに含まれる未使用残高をすべて合計したもので、この未使用残高をUTXO(Unspent Transaction Output)と呼びます。

スマートコントラクトとは

1997年にニック・スザボが提唱した言葉で、自動的に契約を履行する仕組みをスマートコントラクトといいます。

ブロックチェーンの世界では「契約成立のために必要な条件が記された取引内容が、ブロックチェーン上に改ざん困難な状態で記録されており、そこに書かれた条件が満たされると、 自動的に成立するトランザクション」と捉えています。

スマートコントラクトをプログラミングできるブロックチェーンは、Ethereum(イーサリアム)、Hyperledger Fabric(ハイパーレジャー・ファブリック)、R3 Cordaなどがあります。

スマートコントラクト開発言語としては、イーサリアムではSolidity(専用言語)、Python、ハイパーレジャー・ファブリックではGo、Java、R3 CordaではKotlin(Javaから派生)が利用されます。

自立分散型組織(DAO/DAC)の概念

組織運営をスマートコントラクトに任せるという発想があります。

DAO(Decentralized Autonomous Organization)は自立分散型組織。
DAC(Decentralized Autonomous Company)は非中央集権型自立分散型企業の略です。

Ethereumブロックチェーンが「支配者不在」「非中央集権」といったアナーキズム的な スローガンによって強く支持されてきた経緯があり、Code is Law(コードは法)という考え方が根底にあります。

なお、外部からブロックチェーンに取り込んだ情報は、ワールドステート(世界の状態)として、神のお告げ(神託)のようにみんなで信じることにする。この考えを「オラクル」といいます。

新しい資金調達方法「ICO」について

ICO(Initial Coin Offering)は、企業や事業が仮想通貨やトークンを発行し資金調達する手法です。

主に下記の4パターンが考えられます。

1. エクイティ型(種類株:株式などを発行する資金調達方法)
2. デット型(公募債:返済義務のある形の資金調達方法)
3. サービス利用権との引き換え型
4. リソースを区分所有する権利を証券化する型

 

これからもっと学ぶには

ビットコインとブロックチェーン ~暗号通貨を支える技術~

堅牢なスマートコントラクト開発のため のブロックチェーン[技術]入門


ブロックチェーンアプリケーション開発 の教科書

 

 

ブロックチェーン入門講座を開催中

座学編

 

実装編

 

実際にスマートコントラクトを実装してみました。

 

実装編では、自分のパソコンにGethをインストールして、プライベートブロックチェーンを作成し、イーサリアムをマイニングしてみました。

 

ブラウザでSolidityを実行できる環境「Remix」とGethとの接続
をしてみました。

 

ブロックチェーン入門講座では、オレオレトークンの発行まで体験することができます。

ぜひ次回開催はこちらで、確認してくださいね ↓

ブロックチェーン入門講座「スマートコントラクトを実装しよう♩」

 

ikiben