メモログ

electrum-monaでマルチシグアドレスを生成する

Mona_ample_1237
2018/01/27 01:07


〇目的

本記事ではMonacoinのウォレットアプリであるelectrum-monaを使用してマルチシグアドレスを生成、利用する為に必要な手順、そしてその運用についてを説明します。自分のMonacoinをなるべく安全に保管するための一つの方法として知っておくべきだと思ったのでメモログに備忘録がてら書きます。

electrum-monaって何?という方はぜひこちらのメモログを↓

初めてのモナコインシリーズ「Electrum-mona前編」

マルチシグって何?については本記事で解説します。

  • 本文中でこのようになってる部分は知っておくとより良いかなという補足内容です。飛ばしても一応構いません。

〇マルチシグって何?

マルチシグとは、bitFlyerのビットコイン用語集から引用すると、

通常のビットコインアドレスとは違い、マルチシグのアドレスはビットコインを送付するために複数の署名が必要です。

必要な署名の数は「2/3」のように分数で表されます。この場合「事前に作られた3つのプライベートキーの内、2つのキーでの署名が必要」という意味になります。

だそうです(ビットコインはモナコインに置き換えて読んでね)

おそらく"複数の署名"という部分にはてな?が付く人が多いのではないでしょうか

モナコインの送金を行う際には秘密鍵と呼ばれる自分しか知らない(他の人が知ってはいけない)特殊な鍵(データ)を使って、自分が持ってるコインを自分が送金するんだよ~といった風に証明=署名をします。その際には、秘密鍵は一つだけしか用いないのが普通です。アドレスと秘密鍵は一対一対応。

しかし送金に必要な秘密鍵が一つだけの場合、そのたった一つがクラッキングなどで誰かに盗まれてしまうと、秘密鍵に紐づけられた自分のコインはすべて盗まれたも同然です。盗人は悠々とあなたのものだったはずのコインを自分のアドレスに送金してしまうでしょう。

そこで、秘密鍵を複数にしようとしたのがマルチシグ(マルチシグネチャ)です。上の引用文の例では、秘密鍵=プライベートキーを3つ生成しておいてそのうちの2つがないと送金できない、という意味になります。アドレスひとつに対して秘密鍵は3つ存在してそのうちの2つが必要。秘密鍵の1つがたとえ盗まれたとしても、必要な数は2つなので盗人はコインを送金することが出来ません。

マルチシグは秘密鍵の紛失に対しても有効です。普通のアドレスの場合、秘密鍵を1つ無くせばそれだけでコイン紛失ですが引用文のように「2/3」にしておけば1つ無くしても残り2つがあるのでコインは無事です。

このようにマルチシグはコイン管理においてセキュリティを高める方法として非常に有効です。その分手間も増えるので普段使いには向かないところもありますが少しの手間で大きな安全性を得られるのであれば十分検討に値すると思います。というか個人的には長期ホールド分だけでもいいからやった方がいいと思います。

ただしマルチシグを用いたモナコインの管理はやや複雑でわかっておくべきことがそれなりにあります。本記事で必要なことは書いたはずと思いますが自分で理解しようとすることも忘れないようにお願いします。仮想通貨は自己責任。

  • 今回はelectrum-monaを用いてモナコインのマルチシグアドレスを生成しますが他の通貨でもマルチシグを使えるものはあるのでぜひ調べてみるといいと思います。

〇マルチシグアドレスを生成しよう

ようやく本題です。electrum-monaを使用したことがある前提で解説します。使ったことがない方は上で紹介した記事を読んで普通のアドレスでelectrum-monaを使ってみてからマルチシグに挑戦してください。その方が理解も早いと思います。

electrum-monaを起動したら上部のFile->New/Restoreをクリックします。日本語にしてる人も多いと思うので下図参照。

Electrum-mona walletという画面が出ます。ここでwalletデータファイルの名前を決めます。既存のwalletファイルと被らないように入力、確認したら次に進みます。すると入力した名前の画面が出ます。デフォルトではStandard walletが選択されていますが作りたいのはマルチシグアドレスですからMulti-signature walletを選択して次に進みます。

すると下図のように円グラフのようなものが出てきます。

上の青いバーを動かすといくつの鍵を生成するかが決まります。

下の青いバーを動かすと送金するためにいくつの鍵を必要とするかが決まります。

今回は「2/3」としましょう。上が3で下が2に設定したら次に進みます。

Add cosigner(1 of 3)という画面が出ます。デフォルトのCreate a new seedのまま次に進みます。Choose seed typeという画面が出ます。デフォルトのStandardのまま次に進みます。このときsegwitにはしないでください。

  • segwitは新しい規格で現在(2018/1/26)対応しているウォレットはごくごく限られています。気になる方は調べて見たら面白いかもしれませんが今回はStandardです。

すると発芽してる種みたいな画像とともに英語が12単語出てきます。これはシードと言って秘密鍵の大本になる、文字通りの種です。これをひとまずメモ帳にでもコピーしておきましょう。すると今コピーした単語を求められるのでペーストして次に進みます。Master Public Keyが表示されるのでこれもメモ帳にコピーしておきましょう。

そして次に進むと……Add cosigner (2 of 3)と表示されました。ここでいったん現在のウィンドウを×ボタンで閉じてください。そして混乱するかもしれませんが、今と同じことを最初から繰り返してウィンドウを閉じたら、もう一度同じことを繰り返してください。やや煩雑ですがつまりこのようにして3つ分のシードを作成する必要があります。

今書いた通りのことを正しく行った場合、あなたのメモ帳には3種類のシードと3種類のMaster Public Keyがコピーされていて、画面には下図のようにAdd cosigner(2 of 3)が表示されているはずです。

ここまできてようやく先に進めます。デフォルトのEnter cosigner keyのまま次に進み、Add Cosigner 2の欄に先ほど2回目にコピーしたPublic Master Keyを貼り付けます。続いてAdd cosigner (3 of 3)となるのでそのまま進んで一番最初にコピーしたPublic Master Keyを貼り付けます。するとパスワードの設定を求められます。Walletファイルを扱う際のパスワードなので忘れず設定しましょう。

するとようやく、見慣れた画面が出てきました。画面上部に[2of3]と表示されていると思います。

アドレスを見てみると普段のMから始まるアドレスと違ってPから始まっています。このアドレスがモナコインのマルチシグアドレスだよーということを表しています。

  • ちなみにbitbank.ccの入金用アドレスもPから始まるのでマルチシグアドレスですね。このマルチシグアドレスは新しいアドレス形式なので対応しているシステムと対応していないシステムがあります。Zaif.jpからbitbank.ccにモナコインを直接送金することが出来ないのはこの理由からです。Monappy等の対応しているウォレットを経由して入金しましょう。

ただし(2回目)まだ終わっていません。もう少しそれぞれのことを理解しないときちんと保管できません。複雑な分しっかり理解していないとモナコイン復旧できなかったー……なんてことにもなりかねません。

〇データのおさらい

ここで今までに出てきたデータについて整理をします。

秘密鍵 署名に必要なデータ。Seedから複数生成、復元することが出来る。

Public Master Key ウォレットを復旧する際に必要となるがSeedさえわかれば復元できる。

Walletデータ 自分でつけた名前のウォレットデータ。Seedや他の署名のPublic Master Keyのデータが含まれる。Seedさえわかれば復旧できる。

Seed 秘密鍵とPublic Master Keyを生み出す元となるデータ。これさえあればウォレットの復旧が出来る。逆に言うと最も大事にしないといけないデータ

大事なことなので2回言いますがメモ帳にコピーしてもらったSeed、それがすべての大元となるデータであり、それさえあれば復旧できるけどそれゆえに最も大事なデータです。後で紹介しますがこれの保存方法を最も考えなければいけません。

  • ところでこれを読んでる方の中には、3つの秘密鍵を生成するんじゃなかったの?Seedなの?といった風に思ってる方がいるかもしれません。そうです、生成するのはまず3つのSeedですが、そのうちの1つと残りの2つのPublic Master Keyを先ほどのようにelectrum-monaに入力すると入力したデータを基にした秘密鍵が内部で生成されてアドレスと紐づけられます。このときPublic Master KeyとそのSeedから生成される秘密鍵も必要!という感じに紐づけられます。

〇送金してみよう

マルチシグアドレスから送金してみましょう。そのために表示されたP頭のアドレスに少量のモナコインをどこかから入れてください。sendからいつものように送金しようとすると……

赤線の部分を見てください。ステータスが"部分的に署名された"という意味のことが書いています。そして横には(1/2)の記述が。これはつまりこの送金を行うには署名が2つ必要だけど今はそのうちの1つしか署名されてないよ、ということです。なのでもう1つの秘密鍵で署名しなければなりません。あとで署名するために左下のCopyから適当な場所に保存してください。保存されたそのファイルの中に今1つ目の鍵で署名した送金データが入っています。

そのためには、残った2つのSeedのうち1つを選んでwalletを作成してそちらも使って署名する必要があります。現在のwalletを作成した際は3つめのSeedを新規作成したすぐあとに作りましたが今回は必要なSeedもPublic Master Keyもそろっています。そこで最初と同じくFile->New/Restoreをクリックするところからスタートして、新しいwalletデータの名前を入力し、Multi-signature walletを選んだら、次の画像のようにseedをすでに持っているを選択します。

そのあとの流れは先ほどと同じです。ただしseedに入力するのは1番目か2番目に生成したseedで、Public Master Keyに入力するのは他のseedの分です。最後まで完了するとおなじみの画面が表れますがアドレスを見てください。最初に作成したwalletと全く同じアドレスが並んでいるのがわかると思います。先ほどと同じseedの組み合わせによるwalletが作成できたことを示しています。違うアドレスが並んでいる場合何かが間違っています。

ではようやく送金です。上部のTools->Load Transaction->From fileをクリック

 

先ほど保存したtxn拡張子の送金データを開きましょう。すると先ほど一回署名したときと同じような画面が出てきました。

Signをクリックして署名しましょう。これでようやくこの送金は有効な状態となります。あとはその右のBroadcastをクリックすればトランザクションがネットワークに伝わって送金完了です。

 

実はもっと簡単に送金できる

上記の送金では片方で署名したデータをもう片方に移して署名して~とかなり面倒な手順を踏みました。しかし、実はもっと簡単に送金できます。walletを作成する際の2つめ3つめの入力をcosigner keyではなくcosigner seedにして、Public Master Keyではなくseedを入力すればいいのです。この手順で作成したwalletを使用すれば一回の送金操作で必要分の署名を行うことができます。先ほどの面倒な操作は必要ありません。

  • 最初からそっち教えろよと言われそうですが、Public Maser Keyで説明したほうが理解が深まると思ったので。1つのwalletで送金が行えるということはそのwalletデータが流出すれば他者が送金できてしまうということです。walletデータ自体をどこかに保存しておく場合にはこの形式で作成したものではマルチシグにした意味がありません。なので本記事の最初に作成したような、cosiger keyを入力したwalletデータを用いる必要があります。

〇実運用を考えてみよう

3回もseedを生成して2回もseedとPublic Master Keyからwalletを作成したので手順もわかったと思いますが、seedさえあればPublic Master Keyさらにはwalletは復旧できます。送金するにはseedを集めて入力してwalletを作成して初めて送金できるようになることも。

不可能なレベルでは全然ないので個人の感覚次第だとは思いますが、これを普段使いのウォレットとして使用するのはやや面倒です。なので少なくとも僕は長期ホールド分のモナコインをマルチシグのアドレスに入れてしまってMonappyや等に普段使いのモナコインを入れています。つまりマルチシグアドレスに入れたモナコインはちょっとやそっとでは動かさないくらいの気持ちなのでそのseedもちょっとやそっとでは手に届かないようにしてしまうのがよいと思われます。

たとえば、それぞれのseedをテキストファイルに書き込んでパスワードをかけて圧縮する。それを物理的に違うPCに置いたりクラウドストレージに預けたら手元のPCからは痕跡をなくしてwalletデータも削除する。こうすればそのアドレスに入っているモナコインは各クラウドストレージやPCのセキュリティを突破、かけられているパスワードも突破、そこまでしないと手の届かない存在になります。

あとはseedを物理的にノートなどに書き込んでしまっておくことも考えられます。復旧がさらに面倒にはなりますがパスワードなどで管理しておくのが怖い場合それもありでしょう。ただし自宅が燃えたらおしまいです。金庫なら大丈夫かもしれませんけど。

seedの管理の方法は人によって向き不向きがあるかもしれません。どちらにしても大事なのはseedを絶対に流出させないこと、自分がわかる方法で分散して保管しておくことです。もちろん、1つseedが流出しても大丈夫なのがマルチシグですが念には念を入れましょう。

〇注意点

electrum-monaを用いてマルチシグアドレスを構築する際に注意点がとりあえず他にも3つあります。関係のある人が多そうな方から書きますが全部目を通してください。

1.この記事を読んでマルチシグアドレスに挑戦していただけるのは嬉しいですが、本番の高額モナを入れてしまう前に、少額のモナを入れてseedからの復旧、送金の手順をおさらいして実際にやってみましょう。出来たら別のPC等別の環境でも同じように復旧できることを確認してから処理したほうがよいと思います。本番の前に本番と同じ流れで練習、仮想通貨を扱う上で基本です。

2.walletを開いてWallet->seedをクリックするとseedを確認することが出来ます。なので万が一seedがわからなくなってもwalletを開くことさえできれば確認できるのですが、このseed、wallet作成時に最初に入力したseedの値しか表示しません。そのあとに入力した2つの分は表示されず、確認することも出来ません。なのでやはりseedをどうやって保存するかを考えましょう。

3.ハードウェアウォレットのTREZORでelectrum-monaを使用している方がいると思いますがTrezorを使ってマルチシグは作成しないでください。現状では不具合が発生するようです。
最新ver(3.1.3.1)からTREZORでマルチシグを作成しての利用が可能になりました。しかしこちらも一度送金や復元を試してから利用しましょう。2018/5/9編集

 

〇おわりに

かなり長く細かい記事になってしまいましたが、ある程度把握しておかないと正しく扱うことが難しい仕組みなのでこのようになりました。しかしセキュリティは大事です!

個人の仮想通貨資産を狙うウィルスが出回る可能性は十分にありますしそれ以前に、取引所に置いておくことのリスクを例の件で目の当たりにしたと思います。クラッカーにとって、新興の企業が多いにもかかわらず莫大な資産が蓄えられている取引所はいいターゲットだと個人的には思います。

自分で仮想通貨を管理することは確かにハードルが高いのですがそれを乗り越えて自分で管理するだけの意味があると思います。知識が増えれば仮想通貨についてセキュリティ以外でもわかることも増えますし。

  • 1692
  • 15.42768228

@WakiyamaP
2018/05/09 07:43:12

trezorでのマルチシグについて最新のバージョンでは可能になりました。

@Mona_ample_1237
2018/01/27 01:49:49

わかりらないところや間違ってるぞ!ってところがあったらコぜひメントお願いします。


Mona_ample_1237さんのおすすめメモログ!

投げモナありがとうございます。 お絵描きします。 Twitterはこちら...
Twitterのロゴマーク

スポンサーリンク
PR

@WakiyamaP
2018/05/09 07:43:12

trezorでのマルチシグについて最新のバージョンでは可能になりました。

@Mona_ample_1237
2018/01/27 01:49:49

わかりらないところや間違ってるぞ!ってところがあったらコぜひメントお願いします。

モナゲして応援しよう!

Loginすることで、モナゲが可能になります。