仮想通貨を安全に管理する方法として複数人の秘密鍵で資産を管理するマルチシグという方法があります。これとは対照的に1つの秘密鍵を複数のデータに分けるシャミアの秘密分散法というものもあります。
これらの利用方法についてメリット・デメリットをまとめたいと思います。
- 複数の秘密鍵を使ったマルチシグの仕組み
- 秘密鍵を複数に分割するシャミアの秘密分散法
複数の秘密鍵を使ったマルチシグの仕組み
Bitcoinでは複数の秘密鍵を使ったマルチシグの方法が一般的ですがその方法はP2SHを使って実現しています。
Bitcoinのマルチシグの仕組み
秘密鍵から公開鍵を導出し、それぞれの公開鍵のハッシュ値とOP_CHECKMULSIGをP2SHのRedeem Scriptに使用します。このRedeem Scriptからマルチシグアドレスを生成し、このアドレスに仮想通貨を送ります。
マルチシグアドレスに送られた資産は複数の秘密鍵がないと送金できない仕組みになっています。
例えば2 of 3のマルチシグの場合、登録した公開鍵に対応する秘密鍵の2つの署名があればBitcoinを送金することができます。
マルチシグのメリット
それぞれの秘密鍵を共有したり、漏洩したりすることがなければマルチシグアドレスに紐づく資産を動かすことは絶対にできません。
2 of 3であれば1つの秘密鍵を無くしても残り2つの秘密鍵で送金することができます。
秘密鍵を複数に分割するシャミアの秘密分散法
Bitcoinのマルチシグの仕組みを頭に入れてシャミアの秘密分散法について考えたいと思います。
シャミアの秘密分散法の簡単な説明
Bitcoinでは複数の秘密鍵を使ってマルチシグアドレスに紐づいた資産を動かすことができますが、シャミアの秘密分散法では秘密鍵自体を複数のデータに分けます。
元の秘密鍵を生成するには分割時に決めた閾値分のデータを使用することで復元することができます。例えば分割時に閾値を5に決めて、秘密鍵を10個のデータに分けた場合、5つのデータを使って元の秘密鍵を生成することができます。
どちらの方法も実現したいことは同じだけどやり方が違うということです。
シャミアの秘密分散法のメリット
この方法の何が便利かというと、どんな仮想通貨であっても同じ仕組みを使って秘密鍵を分割することができることです。分割した秘密鍵は別々に管理することでハッキングリスクを下げることができます。
例えばBitcoinのマルチシグの仕組みは他の仮想通貨ではそのまま使用することができません。Ethereumでマルチシグの仕組みを実現するにはスマートコントラクトを実装しなければならず、通貨ごとにマルチシグを導入するには手間がかかってしまいます。
なお、過去にはEthereumのマルチシグを実装したスマートコントラクトにバグが含まれていたため多額の資産が盗まれた事例もあり、個別にマルチシグの仕組みを実装するのは安全ではありません。
このように各通貨でマルチシグを対応するには各通貨の仕組みを理解しなければ安全なマルチシグを実現することはできません。
シャミアの秘密分散法のデメリットは分割前の秘密鍵生成者をトラストしなければならない
シャミアの秘密分散法は秘密鍵を複数のデータに分けるので元の秘密鍵を生成した人は秘密鍵を知ることができます。生成した人が不正(元の秘密鍵を破棄せず隠し持っているなど)をする可能性があるので信頼しなければなりません。
生成した秘密鍵を分割したら破棄すればいいのですが、実際に破棄したとしても本当に破棄したかチェックするというのは不可能なんじゃないかなと思います。
Bitcoinのマルチシグの場合、必ず各々が秘密鍵を生成し、その秘密鍵の公開鍵を使ってマルチシグアドレスを作るので、漏洩さえしなければ秘密鍵が知られることはないです。
シャミアの秘密分散法では第三者と一緒に資産を管理する場合は向かない方法です。一つの事業者で単純に鍵を分けて管理するということならそこまで問題ないかもですが、それでも元の秘密鍵を生成する人はいるわけで個人的にはあまり使いたくないなと思いました。
もしかしたら解釈が間違っているかもなので指摘いただければと思います。本日は以上です。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す