Processing math: 0%

2019年10月13日日曜日

ゼロ知識証明CL署名1

ゼロ知識証明の基礎を説明した。基礎でできることは、y=g^xを満たすxの値を伝えずに、xを知っていることを証明する、ということにすぎない。この証明が何の役に立つのか、が疑問になるだろう。実際のところ、役に立つようにするには、工夫が必要になる。その工夫の一つは、CL署名スキームである。これは、「私は署名を持っている」というようなステートメントを証明し、コミットされた値に対する署名を作成するための署名スキームである。なお、日本語で書かれているページでは、Ontologyテクニカルホワイトペーパーが参考になる。

CL署名の基本スキームは、鍵生成とメッセージ空間、署名アルゴリズム、検証アルゴリズムの4つから成り立つ。まず、それを述べる。

鍵生成
p=2p'+1, q=2q'+1p, q, p', q'が素数であるものを算出する。そして、n=pqを計算する(長さはl_n)。さらに、乱数a, b, cを生成する。そして、公開鍵PK=(n, a, b, c)、秘密鍵SK=pとする。
※なお、p, qは安全素数と呼ばれる。 ※a, b, c \in QR_n(平方剰余の集合)に限定。QR_n \subseteq {\mathbb{Z}_n}^*{\mathbb{Z}_n}^*は、{1, 2, ..., n-1}を意味する。b^2 \equiv a \bmod nを満たす\exists b \in {\mathbb{Z}_n}^*を満たすa \in {\mathbb{Z}_n}^*
メッセージ空間
メッセージ空間mは長さl_mのバイナリストリングである。つまり、0以上2^{l_m}未満の値であるということ。
署名アルゴリズム
e > 2^{l_m+1}で長さl_e=l_m+2を満たす素数eを算出する。また、長さがl_s=l_n+l_m+lであるランダム数sを生成する。lはセキュリティパラメータである。そして、以下を満たすvを計算する。 \begin{align} v^e \equiv a^mb^sc \bmod n \end{align}
検証アルゴリズム
(e, s, v)がメッセージmの署名である。そして、v^e \equiv a^mb^sc \bmod n2^{l_c} > e > 2^{l_c}-1をチェックする。
なぜ、これで検証ができているのか、それを次に説明する。

0 件のコメント:

コメントを投稿