Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Shamir Backup

Shamir Backup

GBEC動画解説コンテンツのスライドです。
https://goblockchain.network/2020/01/shamir-backup/

shigeyuki azuchi

January 14, 2020
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1. Shamir Backupの概要
 2. シャミアの秘密分散法
 3. SLIP-0039
 a. 2段階のシェアの分割
 b.

    シェアのフォーマット定義
 c. シェアのニーモニック変換
 1 今日話すこと
 Shamir Bakcup

  2. 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

  3. 3 Shamir Backupの利用イメージ
 ① Shamir Backupのウォレットを作成
 ② 生成するシェアの数を指定 
 ③

    閾値を指定
 ④ 1つのシェア毎に生成される20個のワードを記録 
 Share
 Share
 Share
 Share
 Share
 各シェアを分散して保存 シェアが閾値分集まればリカバリー可能 ※ Shamir Backupに使われるワードリストは、通常の バックアップで使われるものとは異なる。
  4. 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個より少ないと復元できない 

  5. 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が計算できるので
  6. 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

  7. 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

  8. 8 まとめ
 • TrezorのShamir Backupはシャミアの秘密分散法を利用して
 マスターシークレットを分散管理するための仕組み。
 • ウォレット間で相互運用性を担保するためSLIP-0039で標準化の提案。
 ※実際に標準化されるかは他のウォレットの採用次第なところも。
 ◦

    2段階のシェアの分割をサポート
 ◦ シェア⇔ニーモニックの変換仕様を定義
 • 秘密分散法自体は広く利用されており、暗号通貨の秘密鍵管理以外にも
 多くの応用がある。
 ◦ 単純にマスターシークレットを復元するのではなく、閾値署名と
 組み合わせることで、t-of-nの閾値署名の署名値を導出することも可能。