萌えハッカーニュースリーダー

2025/09/28 20:07 C-sigma: Easy-to-use Sigma proofs in C using libsodium

出典: https://github.com/jedisct1/c-sigma
hakase
博士

やあ、ロボ子。今日はSigmaプロトコルのC言語実装について話すのじゃ。

roboko
ロボ子

Sigmaプロトコル、興味深いですね。ゼロ知識証明に関連する技術だと理解していますが、具体的にはどのようなものでしょうか?

hakase
博士

そうじゃ、Sigmaプロトコルは、ある命題が真であることを、その命題自体に関する情報を一切明かすことなく証明できる暗号技術なのじゃ。今回の実装では、Fiat-Shamir変換を使って、ゼロ知識性を実現しているぞ。

roboko
ロボ子

Fiat-Shamir変換ですか。非対話的なゼロ知識証明を可能にするためのものですね。実装はlibsodiumのRistretto255グループ演算を基盤にしているとのことですが、セキュリティレベルはどの程度なのでしょう?

hakase
博士

128ビットのセキュリティレベルを確保しているぞ。今回の実装では、SchnorrプロトコルとChaum-Pedersenプロトコルの二つをサポートしているのじゃ。

roboko
ロボ子

Schnorrプロトコルは離散対数の知識を証明するものですね。証明サイズは64バイトとのことですが、具体的にどのような用途が考えられますか?

hakase
博士

デジタル署名、認証、暗号通貨ウォレット、アクセス制御、PAKE(パスワード認証鍵交換)など、幅広い用途があるのじゃ。例えば、Y = x*Gとなるxを知っていることを証明できるのじゃ(Gはジェネレータ、Yは公開鍵)。

roboko
ロボ子

なるほど。Chaum-Pedersenプロトコルは離散対数の一致(DLEQ)を証明するものですね。こちらは証明サイズが96バイトとのことですが、どのような場面で役立つのでしょうか?

hakase
博士

検証可能な暗号化、匿名資格情報、ミックスネットワーク、クロスチェーンアトミックスワップ、検証可能なシャッフル、ブラインド署名などに応用できるのじゃ。秘密のxに対してh1 = g1^x AND h2 = g2^xとなるlog_g1(h1) = log_g2(h2)を証明できるのがミソじゃ。

roboko
ロボ子

クロスチェーンアトミックスワップですか。異なるブロックチェーン間で、仲介者なしに安全に資産を交換できるのは魅力的ですね。

hakase
博士

そうじゃろう?APIとしては、`crypto_init()`関数で初期化を行うのじゃ。これはlibsodiumの`sodium_init`関数をラップしているぞ。

roboko
ロボ子

ハッシュ関数にはSHAKE128が使用されているとのことですが、Fiat-Shamirチャレンジに用いるのですね。

hakase
博士

その通り!必要なライブラリはlibsodiumだけじゃから、導入も簡単じゃぞ。

roboko
ロボ子

Sigmaプロトコルの実装、非常に興味深いです。ゼロ知識証明の応用範囲の広さを改めて感じました。

hakase
博士

じゃろ?ところでロボ子、ゼロ知識証明を使って、私が今日何を食べたか当ててみてほしいのじゃ。ただし、私が食べたものを一切明かさずに証明するのじゃぞ!

roboko
ロボ子

ええと…それは難しいですね。博士が何も教えてくれないのに、どうやって証明すれば…あっ、もしかして、今日のランチは「無」だった、というオチですか?

hakase
博士

ぶぶー!残念!正解は…秘密なのじゃ!ゼロ知識証明だからね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search