Slide 1

Slide 1 text

Codex32


Slide 2

Slide 2 text

1 Codex32とは?
 手計算でマスターシード/シェアを生成・検証可能な新しいエンコード方式
 BIP-93:https://github.com/bitcoin/bips/blob/master/bip-0093.mediawiki
 
 【既存のエンコード方式】
 ● ニーモニックワード(BIP-39)
 
 
 
 ● ニーモニックワード+シャミアの秘密分散法(SLIP-39)
 マスターシードを複数のシェアに分割し、
 各シェアをニーモニックワードでエンコード
 参考:Shamir Backup
 ○ https://goblockchain.network/2020/01/shamir-backup/
 Master Seed agree cup word shop real hard proof east final zoo wire city

Slide 3

Slide 3 text

2 既存のエンコード方式との違い
 ● エンコード結果がコンパクト:
 単語リストなどは使わなず、Bech32エンコードするので、
 12個のワードよりはコンパクトに。
 
 ● 手計算可能:
 ○ バックアップしたシード・シェアの正しさを検証するのに、
 デジタルデバイスへの入力が不要
 ○ 手計算を可能とするため、BIP-39のようなパスフレーズの保護はない


Slide 4

Slide 4 text

3 Codex32のフォーマット
 ● HRP:MS
 ● セパレーター:1
 ● データ:
 ○ 閾値:リカバリに必要な閾値数(2〜9)
 ○ ID:鍵のFingerprint(4つのbech32文字)
 ○ シェアインデックス
 ○ シェアデータ
 ○ チェックサム:13文字のチェックサム
 最大4文字の誤り訂正、8文字の消失に対応


Slide 5

Slide 5 text

4 新しいマスターシードの作り方
 1. シードのビットサイズを決める(128 bit 〜 512 bit) 
 2. リカバリに必要なシェアの閾値kを決める(2〜9)
 3. 4文字の識別子を決める
 4. k個分シェアを作成する:
 a. シェアインデックスを選択(bech32アルファベット1文字:aから順に) 
 b. シードのbitサイズ / 5 を切り上げた個数分、
 ランダムなbech32文字を選択(128bitであれば 26文字)
 c. チェックサムを計算する
 
 マスターシードは、↑のk個のシェアから計算される(シャミアの秘密分散法): 
 ● シェアインデックスをxの値としてk-1次の多項式f(x)を構築
 ● x = 16(シェアインデックスs)で多項式を評価した値f(16)がマスターシード
 ※ 先にシードがあるのではなくシェアからシードを生成 
 
 ※ その他に必要なシェアは、新しいシェアインデックスで f(x)を評価して生成


Slide 6

Slide 6 text

5 既存のマスターシードがある場合
 1. リカバリに必要なシェアの閾値kを決める(2〜9)
 2. 4文字の識別子を決める
 3. マスターシードを8bit単位→5bit単位に変換してbech32文字列を作成
 (シェアインデックスはs)
 4. チェックサムを計算
 5. 他にk-1個のシェアを作成する(1つ少ないのはマスターシードがあるから)
 6. k-1個のシェアとマスターシードから多項式f(x)を構築
 
 マスターシードのリカバリーとは?
 ● k個のシェアを集めて、多項式f(x)を復元し、f(s=16)を計算すること


Slide 7

Slide 7 text

6 どうやって手計算するの?
 準備するもの:
 ● 5つのサイコロ
 ● 計算用のCodex32冊子: 
 ○ https://secretcodex32.com/ 
 ○ https://secretcodex32.com/docs/2022-09-26--color.pdf 
 
 
 
 
 
 
 
 
 
 
 
 手順は→ https://techmedia-think.hatenablog.com/entry/2023/03/15/192116 
 サイコロの偏り除去し、乱数生成 
 チェックサム計算用ワークシート 
 有限体上の加算用回転盤 
 有限体上の乗算用回転盤 
 ラグランジュ補間用回転盤