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

Linkable Spontaneous Anonymous Group Signatures...

Linkable Spontaneous Anonymous Group Signatures (LSAG) in Monero

GBECの解説動画の資料です。
https://goblockchain.network/2020/11/lsag/

shigeyuki azuchi

November 28, 2020
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. 1 LSAGとは?
 Moneroの初期に、送信者を秘匿するために開発されたリング署名スキーム 
 Linkable Spontaneous Anonymous Group Signatures 


    
 正確には、https://eprint.iacr.org/2004/027.pdf
 のLinkabilityが、同じリングメンバーに対して有効だったものを
 Adam Backが↓で
 https://bitcointalk.org/index.php?topic=972541.msg10619684#msg10619684
 異なるリングメンバーに対してもLinkabilityが有効になるように
 拡張した署名スキームがベース
 ※ RingCTの導入に伴い、MLSAGが使用され、現在はCLSAGが利用可能
 https://web.getmonero.org/library/Zero-to-Monero-2-0-0.pdf

  2. 2 送信者を秘匿する方法
 Tx
 Input A
 TXO 1
 TXO 2
 ユーザーが保有するUTXO

    
 TXO 3
 ・・・
 Key Image
 Ring Signature
 Input B
 TXO 4
 ・・・
 Blockchain
 TXO Database
 送金時に送金に使用するUTXOと同額のコインを持つTXOを
 ブロックチェーン上からランダムにサンプリングし、
 デコイとしてインプットに混合し、実際に使用するコインを
 難読化する。
 【リング署名】
 特定の公開鍵のセットの内、いずれかの公開鍵に対応する秘密鍵で作ら れた署名であることは証明できるが、それがどの公開鍵に
 対応する秘密鍵であるかは分からないという特性を持つ署名方式。
 
 ※ どれが使われたか送信者以外分からないため、BitcoinのようなUTXO管理も不可能

  3. 3 LSAGの特性
 • Signer Ambiguity
 外部の観察者は、署名者がリングのメンバーであることを判断できる必要があるが、 
 それがどのメンバーかまでわかる必要はない。 
 


    • Linkability
 同じ秘密鍵を使って2つの異なるメッセージに対して署名した場合、 
 その2つのメッセージはリンクされる。 
 
 • Unforgeability
 攻撃者は(極僅かな確率を除いて)、署名を偽造できない 
 =適切な秘密鍵を持っていない者は有効な署名を作ることができない。 
 
 暗号通貨では、特にLinkabilityが重要(二重使用を防ぐため)
 

  4. 4 LSAGの署名生成
 リングサイズ=3(P 1 =x 1 G、P 2 = x

    2 G、P 3 = x 3 G)について
 リング署名を生成する。実際の署名者は P 2 = x 2 G。
 
 1. キーイメージ I = x 2 Hp(P 2 )を生成する。
 2. ランダムな数値α、r 1 、r 3 を生成する(r 2 以外)。
 3. チャレンジ c 3 =H(m|αG|αHp(P 2 ))を計算する。
 4. 残りのチャレンジを計算 
 a. c 1 =H(m|r 3 G+c 3 P 3 |r 3 Hp(P 3 )+c 3 I)
 b. c 2 =H(m|r 1 G+c 1 P 1 |r 1 Hp(P 1 )+c 1 I)
 5. 最後にr 2 =αーc 2 x 2 を計算
 6. 署名値はσ(m)=(c 1 , r 1 , r 2 , r 3 )
 
 【表記】
 • m:署名対象のメッセージ
 • H():暗号学的ハッシュ関数
 • Hp():楕円曲線上の点を出力するハッ シュ関数
 • G:楕円曲線のベースポイント
 α=r 2 +c 2 x 2 なので、c 3 は
 c 3 =H(m|(r 2 +c 2 x 2 )G|(r 2 +c 2 x 2 )Hp(P 2 ))
 c 3 =H(m|r 2 G+c 2 P 2 |r 2 Hp(P 2 )+c 2 I)
 c 1 とc 2 と同じ構成になる。
 各チャレンジは前のチャレンジを参照するリングを形成する。 
 

  5. 5 LSAGの署名生成
 公開鍵セットP 1 ,P 2 ,P 3 についての循環するSchnorr署名を作れるか?
 •

    s 1 G=R 1 +H(m|R 3 )P 1
 • s 2 G=R 2 +H(m|R 1 )P 2
 • s 3 G=R 3 +H(m|R 2 )P 3 
 
 いずれかの秘密鍵を知っていると(x 2 とする)
 1. R 2 =r 2 Gとする。
 2. ランダムにs 3 を選択する。
 3. R 3 =s 3 GーH(m|R 2 )P 3 を計算し、s 1 をランダムに選択する。
 4. R 1 =s 1 GーH(m|R 3 )P 1 を計算する。
 5. 最後にs 2 をランダムではなく、s 2 =r 2 +H(m|R 1 )x 2 として計算する。
 こうして計算した(H(m|R3),s 1 ,s 2 ,s 3 )があれば↑を作成可能
 かつ、↑だけではどの秘密鍵を使って作られたのか判断できない
 チャレンジハッシュの計算は、1つ前のRを参照る循環構造

  6. 6 LSAGの署名生成
 リングサイズ=3(P 1 =x 1 G、P 2 = x

    2 G、P 3 = x 3 G)について
 リング署名を生成する。実際の署名者は P 2 = x 2 G。
 
 1. キーイメージ I = x 2 Hp(P 2 )を生成する。
 2. ランダムな数値α、r 1 、r 3 を生成する(r 2 以外)。
 3. チャレンジ c 3 =H(m|αG|αHp(P 2 ))を計算する。
 4. 残りのチャレンジを計算 
 a. c 1 =H(m|r 3 G+c 3 P 3 |r 3 Hp(P 3 )+c 3 I)
 b. c 2 =H(m|r 1 G+c 1 P 1 |r 1 Hp(P 1 )+c 1 I)
 5. 最後にr 2 =αーc 2 x 2 を計算
 6. 署名値はσ(m)=(c 1 , r 1 , r 2 , r 3 )
 ※ リングサイズが増えると、その分署名のデータサイズも増える。 
 
 【表記】
 • m:署名対象のメッセージ
 • H():暗号学的ハッシュ関数
 • Hp():楕円曲線上の点を出力するハッ シュ関数
 • G:楕円曲線のベースポイント
 α=r 2 +c 2 x 2 なので、c 3 は
 c 3 =H(m|(r 2 +c 2 x 2 )G|(r 2 +c 2 x 2 )Hp(P 2 ))
 c 3 =H(m|r 2 G+c 2 P 2 |r 2 Hp(P 2 )+c 2 I)
 c 1 とc 2 と同じ構成になる。
 各チャレンジは前のチャレンジを参照するリングを形成する。 
 

  7. 7 LSAGの署名検証
 リングサイズ=3(P 1 =x 1 G、P 2 = x

    2 G、P 3 = x 3 G)について
 リング署名σ(m)=(c 1 , r 1 , r 2 , r 3 )、キーイメージIの検証は、
 
 1. キーイメージ I がGの郡内に存在するかチェックする。 
 2. c’ 2 =H(m|r 1 G+c 1 P 1 |r 1 Hp(P 1 )+c 1 I)を計算する。
 3. c’ 3 =H(m|r 2 G+c’ 2 P 2 |r 2 Hp(P 2 )+c’ 2 I)を計算する。
 4. c’ 1 =H(m|r 3 G+c’ 3 P 3 |r 3 Hp(P 3 )+c’ 3 I)を計算する。
 5. c 1 =c’ 1 が成立すれば署名は有効。 
 
 署名が有効えあれば、さらにキーイメージ Iがこれまでチェーン上で使用されていないかチェックする。 
 (キーイメージI = x 2 Hp(P 2 )から鍵が特定されることはない。) 
 Linkabilityを利用した二重使用のチェック↑ 
 
 【表記】
 • m:署名対象のメッセージ
 • H():暗号学的ハッシュ関数
 • Hp():楕円曲線上の点を出力するハッ シュ関数
 • G:楕円曲線のベースポイント

  8. 8 まとめ
 MoneroではLSAGの以下特徴を利用して匿名性を実現 
 • Signer Ambiguity
 公開鍵セットに対して循環するリング署名を形成することで 
 、匿名セットの創出と署名の秘匿化を実現

    
 • Linkability
 同じ秘密鍵を使った署名をLinkabilityにより検出可能にすることで、
 署名者は秘匿したまま二重使用を防止 
 • Unforgeability
 ただしく秘密鍵を知る者しか、循環するリング署名を作ることができない。 
 
 ※ LSAGが1つの公開鍵セットに対するリング署名なのに対し、複数の公開鍵セットにおいて 
   匿名性を担保するリング署名スキームが MLSAGで、RingCTの導入に伴いMLSAGに切り替わり。
   さらに2020年10月17日のアップグレードで署名サイズをコンパクトにした CLSAGをリリース。