ゼロ知識証明: DDH を前提とした ZKP

ゼロ知識証明: DDH を前提とした ZKP

無題 - 3

画像

Diffie-Hellman部分

私たちはまだ秘密 (秘密) キーを保持していることを証明する必要がありますが、これは非常に典型的な状況です。では、ペギーがまだ秘密鍵を保持していることをビクターに証明できるように、ビクターとペギーを証明インフラストラクチャにどのようにバインドするのでしょうか? これを行うには、Diffie-Hellman キーを交換して Victor と Peggy をバインドします。

DDH には、 ⟨ gg a*、 *g bg^{ab }⟩で構成されるタプルがあります。ここで、 a と b は秘密です。g a と g bの値が両当事者によって交換された後、 g^{ab} が生成されるはずです。

画像

チャウム・ペダーセン区間

ペギーが証明者でビクターが検証者である場合、ペギーは秘密の値 a を知っていることを示す必要があります。Chaum-Pedersen ZKP を使用して、ビクターはペギーに秘密を保護するための ZKP を生成するように依頼します。このプロセスでは、彼女は g^a (mod p) の値を Victor に送信します。Victor がまだ値を知っていることを証明する必要がある場合、彼はチャレンジ値を送信します。その後、Alice はランダムな値 ® を生成します。 y_1=g r および y_2=B r を返します。次に、Victor はgz=A^s y_1 (mod p) と B z=C s y_2 (mod p) が等しいかどうかをチェックします。

画像

ビクターとペギーが秘密を交換した後、ビクターは g^a (mod p) を保持し、ペギーは g^b (mod p) を保持します。ゼロ知識証明の場合は、次のように開始します。

画像

Peggy は秘密値aを持ち、A = g^aを生成します。Victor の秘密の値はbで、B = g^bが生成されます。ABを交換し、 Diffie Hellman メソッドを使用してCを生成します。

ビクターはペギーに次のような誓約を送ります。

画像

Peggy はランダムな値 ® を計算します。

画像

彼女はビクターにこう送った。

画像

と:

画像

ペギーは次のメッセージも送信します。

画像

ビクターは次のことを確認します。

画像

と:

画像

これらすべてが真実であれば、ペギーは秘密 (a) を知っていることが証明されたことになります。なぜなら:

画像

コード

コードは次のようになります。

import random
import libnum
import sys

bitsize=128
if (len(sys.argv)>1):
    bitsize=int(sys.argv[1])
      
p=libnum.generate_prime(bitsize)
s=random.getrandbits(bitsize)
g=2
a=random.getrandbits(bitsize)
b=random.getrandbits(bitsize)
c=random.getrandbits(bitsize)

r=random.getrandbits(bitsize)
A=pow(g,a,p)
B=pow(g,b,p)
C=pow(g,a*b,p)

y1=pow(g,r,p)
y2=pow(B,r,p)

z=(r+a*s) % (p-1)


print("== Chaum-Pederson ZKP with DDH ==")
print("p=",p)
print("a=",a)
print("A=g^a (mod p)=",A)
print("b=",b)
print("B=g^a (mod p)=",B)
print("ab=",a*b)
print("C=g^{ab} (mod p)=",C)


print("\nProof: g^z = A^s y1")
val1= pow(g,z,p)
val2=(pow(A,s,p)*y1) % p
print("Val1=",val1)
print("Val2=",val2)

if (val1==val2):
    print("- Proof verified")
    
print("\nProof: B^z = C^s y2")
val3= pow(B,z,p)
val4=(pow(C,s,p)*y2) % p

print("Val3=",val3)
print("Val4=",val4)

if (val3==val4):
    print("- Proof verified")

256 ビット素数の実行例は次のとおりです。

== Chaum-Pederson ZKP ==
p= 71808837207067558396943502247178805470599306337269585872075038503116361400603
a= 36623398984913964172485596625205226031763309121917034188846578869320021978402
A=g^a= 32096207796582799691444233880948982714496908564580085529419678203181985482397
b= 31626404664308059618102781249870451013488637545242770934698960204990436278054
B=g^a= 22868249499514124460303251323889043821880224466294750444534923941031732565838
ab= 1158266436479298052448345755868228483694002563526288816181771624565721107667448582344993414115064433575649547672009235534272667805336831732117954454589708
C=g^{ab}= 8021151953795073005899136029637476282156155200732630284950825682466003109726
Proof: g^z = A^s y1
Val1= 9590670516289397297344719778854690756344241363231213529959870845950311348445
Val2= 9590670516289397297344719778854690756344241363231213529959870845950311348445

- Proof verified
Proof: B^z = C^s y2
Val3= 56336209634019548929170814618015392124101293159018455662661735618180853220223
Val4= 56336209634019548929170814618015392124101293159018455662661735618180853220223

- Proof verified

結論は

ネットワーク セキュリティの唯一の方向性は、ゼロ トラスト モデルです。機密情報のデータ漏洩を防ぐ 1 つの方法は、これらの秘密を保存するのではなく、ランダムなオラクルに置き換えることです。たとえこれらの神託が漏洩したとしても、本当の秘密は漏洩しません。私が概説したアプローチでは、使用証明の生成された値をハッシュすることで、NI-ZKP (非インタラクティブ ZKP) に簡単に変換できます。

出典:https://medium.com/asecuritysite-when-bob-met-alice/hellman-pedersen-and-chaum-zkps-with-the-decional-diffie-hellman-ddh-assumption-4ed7d4a3220d

だいたい

ChinaDeFi - ChinaDeFi.com は研究主導型の DeFi イノベーション組織であり、ブロックチェーン開発チームでもあります。毎日、世界中の500以上の質の高い情報源からの約900のコンテンツから、より深く体系的で、最速のスピードで中国市場に同期して意思決定を提供するコンテンツを探します。副資材。

Layer 2 Daoist Friends - Layer 2 に興味のあるブロックチェーン技術愛好家や研究アナリストを歓迎します。Gavin (WeChat: chinadefi) に連絡して、Layer 2 によってもたらされる着陸の機会について話し合ってください。WeChatパブリックアカウント「分散型金融コミュニティ」にご注目ください。

画像

おすすめ

転載: blog.csdn.net/chinadefi/article/details/126032887
おすすめ