Ethereum Wallet 調査
Ethereum の Wallet のセキュリティをどう担保するか
Wallet とは暗号通貨を、保持、送受信する機能を持つもの。
いくつか種類があり、Walletの認証に用いる鍵を管理する手法が異なっている。
ウォレットの種類
トランザクションをどう扱うか
フルノード型
全てのブロックとトランザクションを取得して検証する。
全部のトランザクションを持ってるので、容量がめっちゃ必要。
Ethereum だと1TBの容量が必要らしい
SPVクライアント(Light Client)
自分に関するトランザクションを取得して検証する。
ブロックヘッダーのみを保持するので、容量が少なくて済む。
Ethereumでは、Light Clientは現在開発中っぽい。
Light client protocol · ethereum/wiki Wiki · GitHub
APIクライアント(Remote Client)
送金に必要な秘密鍵をどう管理するか
サーバで持つ場合
事業者が責任を持つ。
そのため、事業者のサーバが落ちたら利用できないし、事業者側がハックされたときどうしようもできない。
ユーザ的には管理は楽。
クライアントで持つ場合
事業者が鍵を管理する必要がないので、セキュリティ要件が低くなる。
一方で、ユーザはバックアップとかしとかないと、なくしたら二度とアクセス(利用)できないなど、気にすることが増える。
持ち方にはいくつかある。 - クライアントウォレット:スマホとかPCに持つ。 - ハードウェアウォレット:専用の機器を利用する。財布みたいなもの。 - ペーパーウォレット:紙に持つ
参考: DroidKaigi 2019 - いかにしてビットコインを扱うか / ゆいき (@yuikijp) [JA] - YouTube
サーバ側で鍵を管理する
サーバ側で鍵を管理する場合、セキュリティをしっかりと担保する必要がある。
どう言った技術を利用するべきか
注釈
サーバ側での管理をすると、サービス事業者が許可しないと取引を行えない。 ということは、中央による管理となるから、ブロックチェーンの思想に合ってない気もする。
Multi Sig
簡単にいうと、例えば、鍵を3つに分けて、分けた鍵が2つ揃わないと、鍵として利用できないようにするということ。 ユーザ側が2つ、事業者側が1つもつようにすると、ユーザは自分だけで取引可能。事業者側だけでは取引できない。 一方で、ユーザ側が鍵を1つ盗まれても、事業者側の鍵と一緒に使わないと取引できないので安心。
詳しくはこちら! Multisig(マルチシグ)って何? - ビットコインダンジョン2.0
Ethereumでの実装
Ethereumでは、Multisigを実装するために、Contractを作成している。
List of MultiSig Wallet Smart contracts on Ethereum
それを作成するためには、Contractに精通した技術者がいないとセキュリティ担保が難しそう。
Gnosis MultiSig Wallet(ノーシス・マルチシグ・ウォレット)とセキュリティへのコミットメント
LGPLライセンスだったから、下記のContractを真似すれば実装はできそうだけど、知識がなさすぎて怖い。 GitHub - gnosis/MultiSigWallet: Allows multiple parties to agree on transactions before execution.
二段階認証
実装したのでまとめた Rails & Mongoid で二段階認証実装 - okadak1990’s blog
感想
一旦調べた感じ、MultisigをEthereumで用いるには、知識が必要で、下手に実装した場合セキュリティホールになりそう。
クライアントに持たせる形にするか、二段階認証とかで最低限の担保をしてサーバー側で持たせるかが現実的なところかと思う。
ブロックチェーンの思想的には、動画にあった通りクライアントに持ってもらった方がいいと思う。
ただ、金額が少量な場合(サービスの初期段階)は、サーバー側で持つ方針の方が、管理コストをユーザーが払わないで済むという点から良いのかなとも思う。
難しい...