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

Codex32

 Codex32

GBECの解説動画の資料です。
https://goblockchain.network/2023/06/codex32/

shigeyuki azuchi

October 17, 2023
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

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

    View full-size slide

  2. 2
    既存のエンコード方式との違い

    ● エンコード結果がコンパクト:

    単語リストなどは使わなず、Bech32エンコードするので、

    12個のワードよりはコンパクトに。


    ● 手計算可能:

    ○ バックアップしたシード・シェアの正しさを検証するのに、

    デジタルデバイスへの入力が不要

    ○ 手計算を可能とするため、BIP-39のようなパスフレーズの保護はない


    View full-size slide

  3. 3
    Codex32のフォーマット

    ● HRP:MS

    ● セパレーター:1

    ● データ:

    ○ 閾値:リカバリに必要な閾値数(2〜9)

    ○ ID:鍵のFingerprint(4つのbech32文字)

    ○ シェアインデックス

    ○ シェアデータ

    ○ チェックサム:13文字のチェックサム

    最大4文字の誤り訂正、8文字の消失に対応


    View full-size slide

  4. 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)を評価して生成


    View full-size slide

  5. 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)を計算すること


    View full-size slide

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

    サイコロの偏り除去し、乱数生成 

    チェックサム計算用ワークシート 

    有限体上の加算用回転盤 

    有限体上の乗算用回転盤 

    ラグランジュ補間用回転盤 


    View full-size slide