Slide 1

Slide 1 text

【Bitcoin】Shamir Backup


Slide 2

Slide 2 text

1. Shamir Backupの概要
 2. シャミアの秘密分散法
 3. SLIP-0039
 a. 2段階のシェアの分割
 b. シェアのフォーマット定義
 c. シェアのニーモニック変換
 1 今日話すこと
 Shamir Bakcup


Slide 3

Slide 3 text

Trezor Model Tが新しい秘密鍵のバックアップ方法として
 Samir Backup機能を導入
 https://blog.trezor.io/shamir-backup-the-revolution-of-private-keys-backup-is-here-858687ed7fe7
 
 
 
 
 
 
 
 
 
 
 ● マスターシードをシャミアの秘密分散法を利用して複数のシェアに分割。
 ● 分割したシェアは20個の単語で表現される。
 ● ユーザーが予め指定した数分のシェアを集めるとマスターシードが復元可能。
 (例:2-of-3, 3-of-5など)
 2 TrezorのShamir Bakcup


Slide 4

Slide 4 text

3 Shamir Backupの利用イメージ
 ① Shamir Backupのウォレットを作成
 ② 生成するシェアの数を指定 
 ③ 閾値を指定
 ④ 1つのシェア毎に生成される20個のワードを記録 
 Share
 Share
 Share
 Share
 Share
 各シェアを分散して保存 シェアが閾値分集まればリカバリー可能 ※ Shamir Backupに使われるワードリストは、通常の バックアップで使われるものとは異なる。

Slide 5

Slide 5 text

4 シャミアの秘密分散法とは?
 秘密の値をN個のシェアに分割し、そのシェアをT個集めると秘密の値を
 復元できる暗号技術の一種。
 
 1. シェアの数Nと閾値Tを決める。
 2. T-1次の多項式を生成する。
 f(x) = a t-1 ・xt-1 + a t-2 ・xt-2 + a t-3 ・xt-3 + … a 1 ・x+ s
 a t-1 〜a 1 の係数はランダムに決定、通常、定数項f(0)=sが秘密の値
 3. 生成した多項式を使ってシェア(x, f(x))を作成する。
 4. シェアをT個集めると、そのシェアから多項式を復元できるため、
 復元した多項式から秘密の値sが分かる。
 ※ T個より少ないと復元できない 


Slide 6

Slide 6 text

5 シャミアの秘密分散法とは?
 1. シェアの数N=5と閾値3を決める。
 2. T-1=2次の多項式を生成する(秘密の値=35)。
 f(x) = 23・x2 + 15・x + 35
 3. 生成した多項式を使って5つのシェアを作成する。
 (3, 287), (18, 7757), (31, 22603), (11, 2983), (22, 11497)
 4. シェアを3個集めると、そのシェアから多項式を復元できる。
 287 = 9a + 3b + c
 2983 = 121a + 11b + c 
 22603 = 961a + 31b + c 
 
 ラグランジュ補完を利用することでT個のシェアからT-1次の多項式を
 求める事ができる。
 f(x) = 23・x2 + 15・x + 35 a, b, cが計算できるので

Slide 7

Slide 7 text

6 SLIP-0039
 シャミアの秘密分散法を利用する際の標準化および
 シェアのニーモニックへの変換方法を定義した仕様
 https://github.com/satoshilabs/slips/blob/master/slip-0039.md
 
 ● 2段階のシェア分割
 
 
 2つのシェアで
 シークレットを復元したい Share A
 Share B
 2つのシェアが破損した場合 
 ● 5人の友人の内3人
 ● 6人の家族の内2人
 のシェアがあればシークレットを復元でき るようにしたい
 友人
 家族
 Share
 Share
 Share
 Share
 Share
 Share
 Share
 Share
 Share
 Share
 Share
 シェアの分割を2段階で行う 
 1. 2-of-4でシェアを分割
 シェアA, B, C, D
 2. A, Bはアリスが保持
 3. Cをさらに3-of-5で分割し友人に配布 
 4. Dをさらに2-of-6で分割し家族に配布 
 
 ※ 友人が全員共謀してもシークレットは復元できない。 
 ※ 家族が全員共謀してもシークレットは復元できない。 
 ※ 友人と家族が共謀した場合、シークレットは復元できる。 
 
 2段階にしない場合は、最初に単一グループのシェアを作成し、それをN 個のシェアに分割する。 
 Share C
 Share D


Slide 8

Slide 8 text

7 SLIP-0039
 ● シェアのフォーマットを定義
 
 
 
 
 ● シェアをニーモニックワードに変換
 シェアを10bit毎のセグメントに分割し、それをワードリストのインデックスとして利用 し、ニーモニックワードに変換する。
 https://github.com/satoshilabs/slips/blob/master/slip-0039/wordlist.txt 
 マスターシークレットが128 bitsの場合、20ワードになる。
 ● パスフレーズを用いたマスターシークレットの暗号化
 ● シークレットは多項式f(255)の値となる。
 
 識別子
 反復指数
 グループ
 インデックス
 グループ
 閾値
 グループ数
 メンバー
 インデックス x
 メンバー閾値
 パディングされた
 シェア f(x)
 チェックサム
 15 bits
 5 bits
 4 bits
 4 bits
 4 bits
 4 bits
 4 bits
 パディング+ 
 8n bits
 30 bits


Slide 9

Slide 9 text

8 まとめ
 ● TrezorのShamir Backupはシャミアの秘密分散法を利用して
 マスターシークレットを分散管理するための仕組み。
 ● ウォレット間で相互運用性を担保するためSLIP-0039で標準化の提案。
 ※実際に標準化されるかは他のウォレットの採用次第なところも。
 ○ 2段階のシェアの分割をサポート
 ○ シェア⇔ニーモニックの変換仕様を定義
 ● 秘密分散法自体は広く利用されており、暗号通貨の秘密鍵管理以外にも
 多くの応用がある。
 ○ 単純にマスターシークレットを復元するのではなく、閾値署名と
 組み合わせることで、t-of-nの閾値署名の署名値を導出することも可能。