書籍概要

堅牢なシステム開発/運用を実現するための ビットコイン[技術]入門

著者
発売日
更新日

概要

本書は,最初に構築されたブロックチェーンネットワークである「ビットコインネットワーク」の解説書です。利用される技術(暗号,アドレス,トランザクション,ブロック)をご自身で手を動かしながら習得できる構成です。さらに,後半ではマルチシグ(MultiSig)やコールドウォレットなどをいかに有効活用するかなど,セキュリティ対策のあるべき姿をシステムアーキテクチャや運用設計の観点から説明しています。

こんな方におすすめ

  • ブロックチェーンの技術や具体的な開発/運用方法,セキュリティ問題/対策に興味のある方
  • ビットコインのシステム開発を企画している方

サンプル

目次

Part1 ブロックチェーンと関連技術
Chapter1 ブロックチェーンの全体像

  • 1.1 ブロックチェーン
  • 1.2 ビットコインネットワーク
  • 1.3 Ethereum
  • 1.4 ブロックチェーンネットワークの構成要素
  • 1.5 ビットコインネットワークの全体図
  • 1.6 BIP(Bitcoin Improvement Proposals)

Chapter2 ビットコインネットワークを利用するための環境準備

  • 2.1 Ubuntuのインストール
  • 2.2 Bitcoin Explorerのインストール
  • 2.3 Bitcoin Coreのインストール
  • 2.4 初期セットアップとtestnetへの接続

Chapter3 ビットコインネットワークを理解するための暗号技術

  • 3.1 ハッシュ関数
  • 3.2 公開鍵暗号
  • 3.3 楕円曲線
  • 3.4 デジタル署名
  • 3.5 ECDSAの署名と検証の詳細

Part2 ビットコインネットワーク
Chapter4 鍵,アドレス,ウォレット

  • 4.1 所有権を特定する「鍵」と「錠」
  • 4.2 鍵を管理する「ウォレット」
  • 4.3 ウォレットの種類
  • 4.4 送金先となるアドレス
  • 4.5 秘密鍵/公開鍵のフォーマット
  • 4.6 非決定性ウォレットと決定性ウォレット
  • 4.7 階層的決定性ウォレット(HDウォレット)
  • 4.8 拡張鍵
  • 4.9 強化導出鍵
  • 4.10 ニモニックコード
  • 4.11 BIP 0044のHDウォレット

Chapter5 トランザクション

  • 5.1 トランザクションのライフサイクル
  • 5.2 トランザクションの概要
  • 5.3 トランザクションの構造
  • 5.4 UTXOと残高
  • 5.5 Locking ScriptとUnlocking Script
  • 5.6 トランザクションの署名ロジック
  • 5.7 トランザクションの識別子(TXID)
  • 5.8 トランザクションの置換(Replace by Fee)

Chapter6 ブロックとブロックチェーン

  • 6.1 ブロックの構造と識別子
  • 6.2 ブロックからトランザクションを検索する(マークルツリー)

Chapter7 マイニングとコンセンサスアルゴリズム

  • 7.1 ビザンチン将軍問題と分散型コンセンサス
  • 7.2 PoW(Proof-Of-Work)
  • 7.3 トランザクションの集積
  • 7.4 マイナーの報酬トランザクション(coinbaseトランザクション)
  • 7.5 チェーンの分岐(フォーク)
  • 7.6 51%攻撃

Chapter8 Segregated Witness

  • 8.1 SegWitが導入された背景
  • 8.2 トランザクションのデータ構造の変化
  • 8.3 ブロックサイズの計算方法の変更
  • 8.4 witness version と witness program
  • 8.5 P2WPKH(Pay to Witness Pubkey Hash)
  • 8.6 P2WSH(Pay to Witness Script Hash)
  • 8.7 P2SH-P2WPKH
  • 8.8 P2SH-P2WSH
  • 8.9 SegWitトランザクションの署名方法
  • 8.10 SegWitのアドレス
  • 8.11 SegWitのcoinbaseトランザクション

Chapter9 P2P

  • 9.1 ノードの発見とP2Pへの参加
  • 9.2 メッセージのタイプとデータ
  • 9.3 ハンドシェイク
  • 9.4 トランザクションの伝搬

Part3 ビットコインネットワークを体験しよう
Chapter10 ウォレット

  • 10.1 ウォレットを操作するための準備
  • 10.2 ウォレットファイルのダンプとバックアップ
  • 10.3 アドレスの生成
  • 10.4 HDウォレットの確認
  • 10.5 マルチウォレットの利用

Chapter11 P2PKH,P2SH

  • 11.1 P2PKH
  • 11.2 P2SH

Chapter12 P2WPKH,P2WSH

  • 12.1 P2WPKH
  • 12.2 P2WSH

Chapter13 P2SH-P2WPKH,P2SH-P2WSH

  • 13.1 P2SH-P2WPKH
  • 13.2 P2SH-P2WSH

Chapter14 Locktime,Replace by Fee

  • 14.1 Locktime
  • 14.2 Replace by Feeを試してみよう

Chapter15 ブロック

  • 15.1 ブロックを確認しよう
  • 15.2 coinbaseトランザクションを確認しよう
  • 15.3 ブロックハッシュを計算しよう
  • 15.4 マークルルートを計算しよう

Chapter16 オリジナルウォレットで送金しよう

  • 16.1 オリジナルウォレットでTXを生成・署名してみよう
  • 16.2 P2Pのプロトコルを実装してトランザクションを送信する

Part4 セキュリティ
Chapter17 ホットウォレットのセキュリティ

  • 17.1 秘密鍵をホットウォレットとするか検討する
  • 17.2 拡張公開鍵の利用時の注意点
  • 17.3 一定額を超えたらコールドウォレットで保管する
  • 17.4 秘密鍵を公開サーバに保管しない
  • 17.5 侵入経路を断つ
  • 17.6 セグメントを分ける
  • 17.7 許可する通信/起動するサービスを最小限にする
  • 17.8 OSのユーザを適切に分ける
  • 17.9 ファイルのアクセス権限を最小限にする
  • 17.10 内部端末からの攻撃への対策
  • 17.11 内部犯行対策も行う
  • 17.12 マルチシグで秘密鍵を分散する
  • 17.13 バックアップサイトやDRサイトのアクセスコントロール
  • 17.14 JSON-RPCにIDとパスワードを設定する
  • 17.15 通信の暗号化と注意点
  • 17.16 ウォレットの暗号化
  • 17.17 不正の検知・遮断
  • 17.18 監査ログの取得
  • 17.19 リリース前に本番で使うウォレットを生成しない

Chapter18 コールドウォレットのセキュリティ

  • 18.1 外部の人間によるウォレットへのアクセス
  • 18.2 ハードウェアウォレット接続端末への攻撃
  • 18.3 担当者のアクセスコントロール
  • 18.4 ニモニックコードの取り扱い
  • 18.5 ホットウォレット/コールドウォレットセキュリティの総括

Chapter19 その他のセキュリティ事項

  • 19.1 ユーザのプライバシーを守る
  • 19.2 リスクとスピードのバランスに鑑みて承認回数を決定する
  • 19.3 クライアントアプリの脆弱性と鍵管理
  • 19.4 ECDSAパラメータの使い回しによる秘密鍵の漏洩

サポート

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2018年10月10日最終更新)

P.84 図4-9-1の左から2番目の箱内

00 || 親公開鍵 || インデックス
00 || 親秘密鍵 || インデックス

P.290 図17-2-5の左から2番目の箱内

00 || 親公開鍵 || インデックス
00 || 親秘密鍵 || インデックス

(以下2018年7月19日更新)

P.60 リスト4-4-1の下から5~4行目のコメント

# 剰余
# 剰余とBase58を連結して先頭に追加
# 商と剰余を計算
# 剰余をBase58化して先頭に追加

P.61 リスト4-4-2の下から6行目のコメント

# 除外した1の数だけ0を先頭に追加
# 除外した1の数だけ00を先頭に追加

P.102 図5-3-2の説明文の4行目

ビットコインワーク
ビットコインネットワーク

P.163 コマンド10-3-3のキャプション

P2SH(P2PKH)アドレスを生成
P2SH-P2WPKHのアドレスを生成

P.182 本文下から2行目

送信
送金

P.182 コマンド11-1-12のキャプション

送信元のアドレスを確認
送金元のアドレスを確認

P.190 コマンド11-1-24のキャプション

署名済みトランザクションをbcit decoderawtransationで確認
署名済みトランザクションをbcit decoderawtransactionで確認

ダウンロード

本書のコマンドとリストをダウンロードできます。次のファイルをダウンロードして解凍すると「commnad」と「list」フォルダがあります。

ダウンロード
BitCoin20180720.zip(約60KB)

commnadフォルダには,各Chapterのファイルがあります。listフォルダには,リスト番号別のフォルダがあります。なお,コマンド4-10-1で利用する「en.txt」もlistフォルダにあります。

商品一覧