今日は6月に紹介したOpendimeに関連する記事です。秘密鍵を知ることのできない状態のOpendimeからマルチシグアドレスの作成に必要な公開鍵だけ取り出すツールを開発したので、Opendimeが可能にする独特のマルチシグ運用についてお話したいと思います。

ツールはこちらです:

https://trustless-services.com/opendime-pubkey.html
GitHub: https://github.com/katokishin/opendime-pubkey

Opendimeとは

詳しく知りたい方は、6月に寄稿させていただいた記事をご覧下さい。

https://bitcoin-research.jp/opendime-trustless-key-transfer


まとめると、Opendimeとは
・ユーザーによる初回セットアップ時に秘密鍵を生成
・物理的に破損(「開封」)しないと秘密鍵を知ることができない
・上記の性質によって、未開封ならトラストレスに秘密鍵を譲渡できる

という性質を持ったUSBデバイスです。製造元はカナダのCoinkite社というビットコインマキシマリスト企業で、それらしく製造元が不正をしていないことを検証するために様々なファイルやスクリプトも搭載されています。ここの共同創設者の@nvk氏は前にアマチュア無線でビットコインのトランザクションを送ったりしてましたね。

ツールの使い方

上述したとおり、Opendimeには検証用のファイルがいくつか入っています。その中に、秘密鍵生成時にランダムに選ばれたナンスをメッセージとした署名を格納したverify.txt、verify2.txtという2つのファイルがあります。

このうち、verify2.txtの中身をツールのテキストボックスに貼り付けるだけで、署名を検証するのと同じ手順で公開鍵を逆算します。(ビットコインの秘密鍵によるメッセージ署名では、平文のメッセージとアドレス、署名を元に公開鍵を逆算して、逆算した公開鍵がそのアドレスに対応するものと検証することで、あるアドレスの所有者が秘密鍵を用いてそのメッセージに署名したと検証できます。)

Opendime自体がトラストレスを尊重する人たちの間で人気のプロダクトなので、当然オープンソースにしました。ただのJavascriptなので通信もノードも必要ありませんし、完全にローカルで実行されるので当方に情報は一切渡りません。Bitbankのジョナサン氏らが開発したbitcoinjs-messageというライブラリを転用したシンプルなコードなので、興味がある人はGitHubで見てみて下さい。

Opendimeがどうマルチシグの運用を変えるか

未開封のOpendimeの「誰も秘密鍵を取り出せない」「トラストレスに秘密鍵を譲渡できる」という性質をマルチシグの鍵に活用したとき、どのような運用が可能になるか考えてみます。

未使用の鍵は譲渡できる
→例えば役員5人がそれぞれ会社のマルチシグアドレスの鍵を持っていて、出金にそのうち数人の署名が必要な状況を考えます。Opendimeは開封前であれば保有者さえ秘密鍵を知らないので、役員の交代に合わせてOpendime自体を引き継ぐことで、新しいマルチシグアドレスを作り直すことなく管理を継続できます。ブロックチェーンを監視しても管理体制の変更があったことは検知できません。

秘密鍵を取り出せない
→サイバーセキュリティ面での心配事がなくなり、物理的にOpendimeにアクセスされることのみ対策すればよいので安全に保管することがかなり簡単です。また、前述した譲渡を可能にする性質でもあります。一方で、開封時には平文の秘密鍵がテキストファイルに格納されるので、トランザクションへの署名自体はオフラインのパソコンで行うべきです。

ハードウェアウォレットと比較しての利点
→ハードウェアウォレットと違い、シードを控えることができないので、アキレス腱となりうるシードの管理が不要になります。一方で、バックアップがとれないので単体での多額の保管は少し不安が残ります。(マルチシグの鍵としては破損や故障を前提に余裕を持った運用をすれば問題ないと思います。感覚としてかなり頑丈だとは思いますが。)

また、ハードウェアウォレットと比べてデバイス自体のコストは1つあたり15ドルとかなり安く、送金時にも署名に使用しなかった未開封のOpendimeは次のマルチシグアドレスの作成に使い回せるので、あまり頻繁な送金を必要としないマルチシグアドレスに向いているのではないでしょうか。

マルチシグがどうOpendimeを使いやすくするか

上記のマルチシグ運用上のメリットからくる価値のほかに、今回のツールは個人によるOpendime自体の利用価値も向上させます。Opendimeは秘密鍵をバックアップできないので、多額の保管には向かないと前述しましたが、マルチシグ化することでデバイスの破損や紛失、盗難に対策しつつ、シードの管理不要でコールドストレージとして利用することができます。

あくまで送金は一回きりが前提のデバイスなので頻繁に送金をする用途には向きませんが、長期的に保管するという意味ではハードウェアウォレットを同じシードで2つ作成してシードを破棄するのと同じ効果がより低価格で生まれると考えています。

おわりに

今回開発した簡単なツールで、Casaなどが提供するようなマルチシグ支援サービスが安価に実現できると思います。公開鍵を取り出すことでOpendimeの用途が大きく広がるのではないでしょうか。