上一篇介紹了什麼是同態隱藏。假設取,則
能夠經過
和
計算出來:.net
實際上,不單單支持加法,支持全部"線性組合"的同態隱藏,好比:3d
須要注意的是,上面的加法和乘法運算都是模p運算。cdn
假設如今有一個d次多項式,其中的係數
是Alice須要保護的祕密。根據上面的特性,咱們能夠計算出
:blog
如今Bob想來驗證Alice是否是真的知道這些祕密,因而他決定隨機指定一個數,要求Alice計算
等於多少。可是,Bob不想直接把
的值告訴Alice,也就是說,這個
是Bob的祕密。顯然,這又須要一次同態隱藏,也就是說,Bob把下面這些值提供給Alice:ip
而後Alice就能夠根據上面的公式計算的值:it
最終的效果是:在Bob不知道P(X)中的係數是多少,而Alice也不知道s等於多少的狀況下,完成多項式的驗證。這就是所謂的"多項式盲計算"。io
下面舉個例子來加深理解,假設:class
Bob想驗證這一點上的
的值,那麼他須要提供這2個值:
基礎
而後Alice根據這3個值計算的值而後返回給Bob:bfc
最後,咱們來看一下是否是真的等於5:
實際上,這背後依賴的理論基礎是Schwartz-Zippel引理:在一個很大的集合中隨機選擇一組數,知足某個多項式取值的機率幾乎爲0。所以,隨機選一個點,而後在Alice不知道該點的值的狀況下,提供多項式的值以供Bob驗證。
那麼問題來了:Bob怎麼驗證Alice提供的的值對不對呢?且聽下回分解。