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

【最新 – ブロックチェーンを理解するためのおすすめ本 – 入門から活用事例まで】も確認する

基本的なブロックチェーン技術とセキュリティの考え方を学ぶ

ブロックチェーンの技術的な理解とセキュリティを意識した開発の仕方がテーマになっている本です。これからブロックチェーンを利用したサービスを開発しようと考えているエンジニア向けの内容となっており、イーサリアムなどの仕組みや脆弱性を減らすためのポイントなどについても書かれています。

田篭 照博 (著)
出版社 : 技術評論社 (2017/10/27)、出典:出版社HP

はじめに

本書は、昨今注目を集めているブロックチェーンを活用して、新たなアプリケーションを開発しようとしているエンジニアを対象としています。ブロックチェーンはまだまだ未成熟な技術が故にセキュリティプラクティスも十分に知れわたっておらず、ちょっとした考慮漏れにより脆弱性を生み出してしまい、多大な被害を受けてしまうリスクがあります。そのため、セキュリティに懸念がありビジネス応用へ踏み出せない企業が多いのも現状です。

ブロックチェーンの仕組みそのものはさまざまな暗号技術の上に成り立っており、従来のアプリケーションよりもセキュリティレベルが高い側面もあります。しかし、ブロックチェーンを活用する場合は、ブロックチェーンの上に独自アプリケーションを開発する必要があり、十分なセキュリティ対策を行わずに、スピード重視でリリースしてしまうと、脆弱性を突かれ多大な被害を生み出してしまう危険性があります。

そこで、本書ではブロックチェーンを安心に利用できるようにセキュリティに重きを置いた内容になっています。特にセキュリティが懸念されるのがスマートコントラクトと呼ばれる、ブロックチェーン上で実行可能な誰でも自由に開発できるプログラムの脆弱性です。ブロックチェーンを活用したアプリケーションは、スマートコントラクトの開発を伴うのが一般的になると考えられますが、スマートコントラクトは脆弱性を生みやすいうえに、常に攻撃者に晒されるというリスクが付きまといます。

実際に、スマートコントラクトの脆弱性に起因した被害事例は複数あり、例えば、2016年の「The DAO事件」と呼ばれる事例では、当時の価値にして約52億円、2017年7月の「Parityのマルチシグウォレット」と呼ばれるスマートコントラクトの脆弱性では当時の時価にして約34億円の被害がありました。

ブロックチェーンに限りませんが、新しい技術を利用する場合は、表面的な概念だけではなく、それぞれの要素技術の深い知識が要求されます。そのため、本書では紙面が許す限り、個々の要素の詳細を説明することに努めています。

筆者自身、ブロックチェーンを初めて技術レベルで理解した際には、その技術の高さと、ブロックチェーンがもたらすパラダイムシフトの可能性について、技術者として奮い立つほどの衝撃を受けました。しかし、The DAO事件のような事例によって、ブロックチェーンそのものが「危険なもの」として扱われ、せっかくの素晴らしい技術が敬遠されてしまうのは看過できません。

そこで、このような被害を防ぎ、ブロックチェーンの普及に少しでも貢献したいと考え、本書を執筆するに至りました。本書がブロックチェーンの理解と、ブロックチェーンを活用したセキュアなアプリケーション開発の一助になればと願います。

2017年7月
田篭照博

田篭 照博 (著)
出版社 : 技術評論社 (2017/10/27)、出典:出版社HP

本書の構成

本書の目的は、単に動くスマートコントラクトを開発するだけではなく、セキュリティレベルの高い堅牢なスマートコントラクトの開発ができるようになることです。実際に、Part3とPart4でスマートコントラクトを開発していますが、前提としてブロックチェーンに関する一定レベルの知識も必要になってきます。そのため、本書の構成はブロックチェーンそのものを理解したうえで、堅牢なスマートコントラクトの開発手法について学ぶ流れになっています。

Part1: ブロックチェーンと関連技術
ブロックチェーンの概要を説明して、全体像を把握できるようにしています。また、ブロックチェーンの理解に欠かせない、暗号技術も簡単に説明しています。

Part2: ビットコインネットワーク
ビットコインネットワークの仕組みについて、「ウォレット」「トランザクション」「ブロック」「コンセンサスアルゴリズム」といった構成要素に分解し、仕様レベルまで踏み込んで説明します。すでに多くのブロックチェーンネットワークが存在していますが、ビットコインネットワークを理解することは非常に重要です。本Partでブロックチェーンの基礎力をつけてください。

Part3: Ethereumとスマートコントラクト開発
ブロックチェーンネットワークのEthereum(イーサリアム)の仕組みを説明します。基本的な概念はビットコインネットワークと同じところも多いので、主にその違いを説明しています。また、Ethereumを実際にコマンドを介して操作することで、ここまで説明してきたブロックチェーンの知識についてさらに深く理解できるはずです。さらに本PartではEthereum上で動くサンプルプログラムをいくつか用意しています。

Part4: スマートコントラクトのセキュリティ
堅牢なスマートコントラクトを開発するためのセキュリティプラクティスと、脆弱性の仕組みや攻撃手法についてサンプルを通じて説明します。脆弱なコード例、攻撃方法、コードの修正という構成になっていて、実際に体験いただくことで深い理解を得られるでしょう。最後の章では実際にブロックチェーン関連で過去にあった脆弱性の事例を紹介し、ブロックチェーンを活用したサービスのセキュリティ対策について考察しています。

なお、本書に掲載したサンプルソースは、本書のサポートページよりダウンロードできますので、ご利用ください。
URL http://gihyo.jp/book/2017/978-4-7741-9353-3

田篭 照博 (著)
出版社 : 技術評論社 (2017/10/27)、出典:出版社HP

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

はじめに
本書の構成

Part1 : ブロックチェーンと関連技術
Chapter1 ブロックチェーンの全体像
1.1 : ブロックチェーン
ブロックチェーンとは
ビットコインとは
1.2 : ビットコインネットワーク
1.3 : Ethereum
1.4 : ブロックチェーンネットワークの構成要素
P2P(ピア・ツー・ピア)
参加者
トランザクション(取引)
ブロック
分散台帳
マイニング

Chapter2 ブロックチェーンを理解するための暗号技術
2.1 : ハッシュ関数
SHA-256
RIPEMD-160
HASH160
2.2 : 公開鍵暗号
2.3 : 楕円曲線暗号
楕円曲線
加算
倍算
秘密鍵と公開鍵の生成方法
2.4 : デジタル署名
デジタル署名と検証の流れ

Part2 : ビットコインネットワーク
Chapter3 お金のように扱える仕組み
3.1 : 所有者を特定する「鍵」と「錠」
3.2 : 送金先となる「アドレス」
Base58Checkエンコード
アドレスを生成する流れ
3.3 : 鍵を管理する「ウォレット」
3.4 : ウォレットの種類
パソコン上のウォレット
モバイルウォレット
取引所のウォレット
ペーパーウォレット
ハードウェアウォレット

Chapter4 トランザクション
4.1 : トランザクションのライフサイクル
4.2 : トランザクションの概要
送金の流れ(例)
4.3 : トランザクションの構造
Locktimeフィールド
4.4 : UTXOと残高
4.5 : Locking ScriptとUnlocking Script
スクリプトの検証の仕組み
トランザクションの一部に署名する
Pay to Pubkey
MultiSig (Pay to MultiSig)
Pay to Script Hash (P2SH)
OP_RETURN

Chapter5 ブロックとブロックチェーン
5.1 : ブロックの構造と識別子
5.2 : ブロックからトランザクションを検索する(マークルツリー)
マークルツリー

Chapter6 マイニングとコンセンサスアルゴリズム
6.1 : ビザンチン将軍問題と分散型コンセンサス
6.2 : Proof-Of-Work
問題を解く=Nonceを見つけること
総当たりでNonceを試す
検証する
改ざんが極めて困難な理由
6.3 : トランザクションの集積
6.4 : マイナーの報酬トランザクション(coinbaseトランザクション)
6.5 : チェーンの分岐(フォーク)
トランザクションが同時に発行された場合
6.6 : 51%攻撃

Part3 : Ethereumとスマートコントラクト開発
Chapter7 Ethereumとビットコインネットワークの主な違い
7.1 : Ethereumの特徴
流通通貨
スマートコントラクト
アカウント
ブロックのデータ構造
ステート(状態)の遷移
アカウントに紐づく情報
トランザクション、メッセージ、コール
Gas
7.2 : ネットワークの種類
パブリックネット
プライベートネット
テストネット

Chapter8 スマートコントラクト開発の準備とSolidityの基本文法
8.1 : 環境構築
gethのインストール
Genesisブロックの作成とgethの起動
アカウントの作成
gethコンソールでよく使うコマンド
8.2 : Ethereumの公式ウォレット(Mist Wallet)
インストールと起動(Windowsの場合)
インストールと起動(macOSの場合)
Mist Walletアプリケーション
8.3 : Remix-Solidity IDE
8.4 : Solidity言語仕様
アクセス修飾子

Chapter9 スマートコントラクトの用途別サンプル
9.1 : サンプル(その1)―HelloEthereum
新しいコントラクトをデプロイする
ソースコードを記述してコントラクトを指定する
コントラクトを生成する
Provide maximum feeとパスワードの設定
CONTRACTS画面から遷移する
トランザクションを発行する
コントラクトの情報を表示する
トランザクションを実行する
Mist Wallet上でトランザクションの変更結果を確認する
9.2 : サンプル(その2)―クラウドファンディング用のコントラクト
コントラクトを生成する
キャンペーンに成功するケース
キャンペーンに失敗するケース
9.3 : サンプル(その3)―名前とアドレスを管理するコントラクト
動作を確認する
9.4 : サンプル(その4)―IoTで利用するスイッチを制御するコントラクト
コントラクトの利用の流れ
動作を確認する
9.5 : サンプル(その5)―ECサイトで利用するコントラクト
9.6 : サンプル(その6)―オークションサービスで利用するコントラクト
9.7 : サンプル(その7)―抽選会で利用するコントラクト

Part4 : スマートコントラクトのセキュリティ
Chapter10 スマートコントラクトのセキュリティプラクティス
10.1 : Condition-Effects-Interactionパターン
10.2 : Withdrawパターン(push vs pull)
push型のパターン
pull型のパターン
10.3 : Access Restrictionパターン
事例
10.4 : Mortalパターン
10.5 : Circuit Breakerパターン

Chapter11 スマートコントラクトの脆弱性の仕組みと攻撃
11.1 : Reentrancy問題
攻撃を受ける側のコントラクト
攻撃する側のコントラクト
一連の流れ
割り当てるアドレス
Reentrancy問題を体験する
イベントを確認する
修正後の結果
11.2 : Transaction-Ordering Dependence (TOD)
11.3 : Timestamp Dependence
11.4 : 重要情報の取り扱い
11.5 : オーバーフロー

Chapter12 事例から学ぶブロックチェーンのセキュリティ
12.1 : サードパーティの脆弱性(Solidity脆弱性)
12.2 : クライアントアプリの脆弱性と鍵管理(Jaxx脆弱性)
注意点

おわりに
参考図書
索引

田篭 照博 (著)
出版社 : 技術評論社 (2017/10/27)、出典:出版社HP