現代密碼學之零知識證明

2021-10-16 01:11:54 字數 3617 閱讀 5088

reference

什麼是零知識證明?

涉及驗證者和驗證者的一種協議,使驗證者能夠使驗證者相信某個語句是真的,而不透露任何其他資訊。

換句話說,零知識證明就是向你證明我知道某件事的同時,不會向你暴漏這個事情的任何資訊。

舉乙個經典的例子:

finding wally

這個人是 wally

我們要在下面這張圖上找到wally

假設我已經找到wally了,我要怎麼向沒找到wally的你證明我找到了,同時我又不告訴你wally具體在哪。

我要怎麼做呢?

首先我要找一張比這個圖大好幾倍的黑布如果這張圖有一張a4紙那麼大,那麼黑布可以有桌子那麼大。

之後,我在這個黑布上挖乙個洞,洞的大小要可以正好露出wally。

然後,我要向你證明黑布後有且只有上面那張圖。

最後,我將圖以任意方向和角度放在黑布上,同時將wally漏在黑布上的洞中。

這樣我就可以既不像你暴漏wally所在的任何資訊,又能像你證明我找到了wally。

是不是賊有趣?

零知識證明在密碼學理論中十分重要,因為好多密碼演算法本質上就是那個蓋在上的「黑布」。

zk宣告證明

•使驗證者相信乙個陳述是真實的,而不產生任何其他資訊。

zk知識證明

•使驗證者相信他知道乙個秘密,例如,他知道離散對數logg(y)。

· 完備性(completeness):alice 在有知識的情況下可以通過 bob 的驗證。

· 可靠性(soundness):alice 在沒有知識的情況下不能通過 bob 的驗證。

· 零知識(zero-knowledge):alice 在互動的過程中不會洩露關於知識的任何資訊。

fix g, q, g as in elgamal encryption

• secret key w ∈ ℤq

• public key h = g^w mod p

這個模型做的是什麼呢?

左邊的sender要向右邊的receiver證明他知道秘鑰w,但是又不向receiver洩漏任何關於w的資訊。

所以他要通過這個演算法來向對方證明。

首先,他在groupq中任選乙個r。

計算a等於g的r次方之後將a發給receiver。

receiver收到a後在groupq中任選乙個c並將c發給sender。

sender計算s=cw+r並將s傳送個給receiver,在這裡s把w成功隱藏了。

最後receiver計算h的c次方乘a是否等於g的s次方。如果是,那麼就可以知道sender其實是知道w的。

在commitment schemes中,我們需要模擬「安全信封」這一過程。

在第一階段—承諾階段(虛線以上),sender將他的message放在信封中給receiver,receiver需要給信封裡的message蓋章證明其真實有效,但是sender不想要receiver開啟信封檢視message。

在第二階段—證明階段,(虛線以下)只有receiver在得到sender的允許或授權後,才可以開啟信封檢視裡面的m。

secure commitment

需要同時防範惡意傳送方(malicious sender)和惡意接收方(malicious receiver)

所以我們的演算法需要

「hiding」 (malicious receiver)

•接受者在承諾階段對m一無所知

• 「binding」 (malicious sender)

• 不能讓sender 在第二階段生產的commitment在解開信封時,讓receiver看到的m』與第一階段放入信封的m不同。

這個看起來貌似很繞,在後面結合實際的演算法就可以很清楚的理解了。

對於密碼學這一領域來說我們只需要考慮computational security。

什麼是computational security?

就是說通過演算法/數學公式來實現上面的hiding和binding。

g,q,g,h是public的,m是想隱藏的資訊。

g的r次方作為c1。

h的r次方乘m作為c2。

在第二階段sender再把r,m給receiver來驗證第一階段中信封裡的m是多少。

那麼ddh的安全性如何呢?

hiding 符合elgamal加密的ind-cpa-security,我們認為這個hiding是computational security的。

binding 是完美的,我們可以任務receiver沒有任何機會作弊(作弊可以是在第一階段提前知道m的內容)。

g,q,g,h是public的,m是想隱藏的資訊。

c是g的x次方乘h的r次方。

那麼dl的安全性如何呢?

我們認為hiding是完美的,

因為給定乙個commitment c,每個值x都同樣可能是c中commitment的值。

舉例而言, 在給定x、r和任意的x』時存在乙個r』使得

binding 是computational security的,因為這個演算法安全是基於離散對數問題(dl)的。如果這個離散對數問題很難被解決,那麼這個演算法就是安全的。如果sender有能力解決這個dl問題,那麼他將有機會作弊。

wenbo mao, modern cryptography, prentice-hall, 2003.

jonathan katz and yehuda lindell, introduction to modern cryptography, 2nd edition, crc press, 2015.

w stallings, cryptography and network security, fourth (or later) edition, prentice hall, 2006.

j. pieprzyk, t, hardjono and j. seberry, cryptography: an introduction to computer security,

springer verlag, 2003.

guo, f., susilo, w., mu, y. introduction to security reduction, springer, 2018.

現代密碼學(一

0x01.分組密碼 0x02.分組密碼基本設計原則 安全原則 1.混亂 代替密碼 2.發散 移位密碼 實現原則 0x03.分組密碼設計方法 1.乘積密碼 例項 2.迭代密碼 通過簡單的密碼函式或者簡單的密碼,多次迭代,轉換為更複雜的密碼。迭代密碼常見的模型有s p模型 代替 置換網路 feistel...

現代密碼學之DES詳解

下面是初始置換 如何操作的呢?在ip中我們先把原資料的第一位放在第58位上,第二位放到第50位上。把64位的輸入全部按照 置換。置換完畢後我們就可以進入到後面的round演算法中去了,在輸出的時候我們要通過ip 1將原資料還原。可以看到在ip 1中,我們將在第58位的位元組重新放回到第一位中,將第5...

現代密碼學之橢圓曲線ECC

橢圓曲線乘法 橢圓曲線結合 elgamal cryptosystem計算例子展示 手算帶步驟 判斷乙個橢圓曲線上有幾個點 reference ecc是由victor miller and neal koblitz1985引入的。對於dsa,rsa,我們需要很大的金鑰長度,而ecc只需要特別餓小的金鑰...