【文字起こし】ビットコインウォレットサービスのセキュリティについて

この文章は[日本デジタルマネー協会公式チャンネル主催](https://www.youtube.com/channel/UCM2gdZtahid-hO0acRDWI1Q)で「開かれたビットコインウォレットのセキュリティについて」に関する文字起こしです。ビットコイン関連の情報を継続的に入手したい場合はチャンネルのフォローを推奨します。わかりにくい所は若干補足を入れていますがご了承ください。

*引用元*
**講師**【[ジョナサン・アンダーウッド氏](https://www.facebook.com/jonathan.underwood.790)】
**元動画**【[YouTube](https://www.youtube.com/watch?v=AG0CyiNP4uU)】
**スライド**【[slideshare](http://www.slideshare.net/JonathanUnderwood/ss-46881933)】

# ウォレットを使う重要性
取引所はウォレットではありません。Mt.Goxの事件のようにサーバー上のホットウォレットは常に盗難の可能性がつきまといます。ビットコインの保存、特に高額な場合はウォレットを使いましょう。

# 各プロダクトの評価項目
**鍵の管理**
鍵が安全に保管されているかの評価になります。実行OS上の他のソフトによってメモリ上で読み取られないかの評価や、鍵の一部をサーバーに預けていないか、オフラインで鍵を生成できるか、などの評価対象になります。また鍵のバックアップ複雑なファイル操作なしに簡単に取れるか、複数の鍵(送受信をたんさんするようになるとすぐに必要になる)を管理できるかも評価の対象になります。

**ブロックチェイン認証**
「ブロックチェイン送金状態の確認がどのようにされているか」の評価になります。生のブロックチェインをすべて受信して自身のトランザクションを見つけ出すには多くのリソースと実装が必要になるため、従来のクライアントでは**プロダクト固有のサーバー**を建てて自身のトランザクションを抜粋して送るようになっていることがあります。この場合、サーバーがダウンしてしまった場合、トランザクションの状態を確認できません。また後述するプライバシーの問題もあります。**ブロックチェイン認証**が可になっているプロダクトはこの問題を解決しています。具体的にはウォレット自身が**SPVノード**(受信専用のノード)として動作して、複数の生ノードに対してピアし、特定のフィルター(この場合は自身のトランザクションを識別するヘッダー情報)にマッチする情報だけを自身に送ってもらう仕組みを備えています。

**オープンソースと信頼性**
プロダクトの安全性が暗号技術以外に頼っている場合は、ハッキングなどによって乗っ取られる可能性があります。オープンソースのプロダクトであることは、常にセキュリティ上の懸念を指摘される環境にあるため、コードをすべて開示しても安全性に影響がないと言う指標になります。ただしオープンソースになって間もないプロダクトはセキュリティーの懸念が払拭されていないため信頼性の評価を落としています。またオープンソースであることは不正に鍵をサーバーに送っていない、裏で意図としない動作をしていない証拠にもなります。

**環境+セキュリティー依存度**
実行環境がセキュリティ的に強固であるか評価、例えば実行環境OSが他アプリからのメモリアクセスを許しているかや、マルウェアなどへの耐性があるか、などをします。しかし環境のセキュリティ的な弱さをプロダクト構造で補っている場合は別の評価になります。

**プライバシー**
ウォレットによる送金をサーバーにやらせたり、ブロックチェイン認証をサーバー経由でやっている場合、ウォレットに紐づくアドレスのすべての送受信記録、接続したIP、時間が記録される可能性があります。プロダクト側がログを取っていないと明言していてもこれは証明することができないので、スキーム上プライバシーに懸念のある場合は不可になります。

#プロダクトの評価
## bread wallet(ブレッドウォレット)-対応端末:iOS
**【鍵の管理】**(評価:優良◎)
iPhoneのA5以降(iPhone4S以降)のセキュアアンクレイブ(安全な演算ができるプロセッサ領域)に秘密鍵のシードを保存しています。この情報は本体のパスワードやTouchIDで暗号化されていてユーザー以外読み取ることが出来ません。またバックアップも12個の英語の単語を控えるだけでできます。
**【ブロックチェイン認証】**(評価:優良◎)
SPVノードとしてダウンして特定のサーバーの状態に依存しません。
**【オープンソースと信頼性】**(評価:良◯)
全てのソースコードがオープンソースになっています。ソースコードを読むことですばらしい知恵を分けて頂いた気分になれます。優良◎にしなかった理由は、リードデペロッパのAaron Voisine曰く「iPhoneを信用しなければなぜiPhoneを持っているのか」の現れているようにiPhoneに信用を置く必要があるからです。App sotreのアプリはAppleデジタル署名があれば新しいものを公開できるため、Appleがコードをいじって不正なバージョンのウォレットを公開するリスクがあります。今後Appleがオープンソースの開発署名も確認するような話は出ているので改善される可能性があります。
**【環境+セキュリティー依存度】**(評価:良◯)
iPhoneのiOSは一つのアプリが他のアプリにアクセスするのが禁じられていること(iOS上での制約とAppleの審査の基準で)やサンドボックス環境きっちりしているので安全ではありますが、前述のようにAppleに信頼を置く必要が有るため良◯に留めています。
**【プライバシー】**(評価:良◯)
中間サーバーなどを利用していないので良◯としています。ただしSPVノード自体のプライバシーが最近疑問視されているため優良にはしていません。
**【備考】**
自分自身もナンバーワンウォレットとして支払いなどにも使っています。ただし貯金用のウォレットは別のプロダクトを使っています。

## mycelium(マイセリュウム)-対応端末:Android、iOS
**【鍵の管理】**(評価:良◯)
Androidである以上、他のアプリからウォレットのメモリへのアクセスができるため良◯に留めています。メモリ上では暗号化してシードを保存していますが完全に安全とは言えません。パスワードは四桁以上設定できるため長いパスワードを設定することを推奨します。オープンソースであるため鍵を他に送っていないことは保証できます。
**【ブロックチェイン認証】**(評価:不可×/良◯-SPVモード時)
現在のβ版ではSPVモードが実装が検討されているが、Google PayのバージョンではSPVモードが利用できず、プロダクトのサーバーを介してしかブロックチェイン認証ができないため不可×としています。
**【オープンソースと信頼性】**(評価:良◯)
オープンソースで、長い間信頼されて利用されているプロダクトなので可◯としています。
**【環境+セキュリティー依存度】**(評価:可△)
前述の通りAndroidなので可△としています。
**【プライバシー】**(評価:不可×/良◯-SPVモード時)
前述の通り普通に利用する限りではSPVモードが利用できず、サーバーを介した接続になるので不可×としています。ログを取っていないと公言してはいるが保証はできません。
**【備考】**
Android版では評価の高いプロダクトだったが、iPhone版はAndroid版の開発チームが関与してしらず外注会社が作ったものなので大きなバグが見つかっていたりしています。なのでまだiPhone版は様子見です。

## Electrum(エレクトリュウム)-対応端末:Android、Windows、OS X、Linux
**【鍵の管理】**(評価:優良◎)
完全にオフラインで動かす事ができます。具体的にオフラインで新規ウォレットの作成、それらに紐づくマスタ公開鍵の抽出、未署名取引のインポートと、署名取引のエクスポートができます。これらを利用して取引の秘密鍵による署名をオフライン用専用PCで、管理系の作業をオンライン用PCで行うように分担することができます。具体的には完全にオフラインのクリーンなPCで秘密鍵を作成し、複数の秘密鍵に紐づくマスタ公開鍵を作ります。これをオンラインに繋がったPCにインストールすることで、公開鍵だけでアドレスの口座の系の操作ができます。そして実際に送信が必要になった時には未証明の空の取引をUSBメモリに入れ、オフライン用のPCで署名して再び戻すと言う形で、マルウェアなどから隔離された非常にセキュアな署名プロセスをすることができます。ただし、たくさんの機能があって直感的にわかりにくいため初心者にはおすすめできません。
**【ブロックチェイン認証】**(評価:可△)
自前のサーバーを建てることができるが、一般ユーザーとしてはプロダクトのサーバーを介してブロックチェイン認証をすることが想定されるため可△としています。
**【オープンソースと信頼性】**(評価:優良◎)
3年ほど続いているオープンソースのウォレットのため、すごい信頼性があります。黎明期前は高い人気があったがギーク向けで技術的に尖っているプロダクトのため広まりにくい状況にあります。
**【環境+セキュリティー依存度】**(評価:可△)
PCは他プログラムからのメモリアクセスやOS自身の脆弱性、マルウェアの影響などがあり非常にセキュリティ的に危険なので本当は不可×ですが、LinuxやOS Xなど複数のプラットホームに対応していることや、オフラインの管理法があるので可△に昇格させています。
**【プライバシー】**(評価:可△)
前述の通りプロダクトのサーバーを介するため可△としています。
**【備考】**
多くのプラットホームに対応しています。セキュリティ的にはオフライン管理がベストなため、大量のビットコインを保管する人には必ず進めているプロダクトです。個人的に貯金用に使っています。以前は自分自身も開発に参加していました。

## Ninki Wallet(ニンキウォレット)-対応端末:iOS、Android、Windows、OS X、Linux
**【鍵の管理】**(評価:良◯)
2-of-3のマルチシグネチャを採用しています。これはひとつのアドレスに3つの秘密鍵を持ち、そのうち2つの鍵により署名されれば送金ができるシステムです。このプロダクトの場合、1つ目はプロダクトサーバ、2つ目がウォレットが持ち、3つ目がウォレット作成時にオフライン用バックアップ用に表示されます。これにより、プロダクトサーバに一日あたりの送金上限額を予め設定し盗難されても全額移動できない状態にして後でプロダクトサーバからアカウントの再発行をしたり、万が一プロダクトが廃止になってもウォレットの鍵とバックアップの鍵を合わせることでアドレスから資金が移動できます。プロダクト側が鍵を持つことになりますが、1つの鍵だけでは送金できないで良◯としています。
**【ブロックチェイン認証】**(評価:不可×)
ブロックチェイン認証は全部プロダクトサーバーの情報を信頼するので不可×です。
**【オープンソースと信頼性】**(評価:可△)
オープンソースですが、出たばかりのプロダクトで、プロジェクトの規模も小さく、ソースのコミットの粒度も低いため可△としています。
**【環境+セキュリティー依存度】**(評価:優良◎)
二段認証方式やGoogle2FAによる認証、マルチシグネチャによる認証とセキュリティが分散されているのでPCなどでも安全に利用できますので優良◎としています。
**【プライバシー】**(評価:不可×)
取引は全部プロダクトサーバーを仲介するので不可×です。
**【備考】**
PCではChromeブラウザのインストールをする必要があります。自分の知り合いが開発しています。

## 質疑応答
上級者向けの断片的な情報もあるため[元動画](https://www.youtube.com/watch?v=AG0CyiNP4uU)を視聴してください。裏話や有益な情報もあるので試聴することをおすすめします。

## 謝辞
有益なお話をして頂いた[ジョナサン・アンダーウッドさん](https://www.facebook.com/jonathan.underwood.790)ありがとうございました。
この記事が参考になった方は、ジョナサン・アンダーウッドさんのビットコインアドレスに少額でもいいので寄付をしていただくと、今後の活動の励みになります。
【寄付用アドレス】1CYUbyddUv4pk82Ew8DCJDiUwArLQp61H1