- 區塊鏈應用開發指南:業務場景剖析與實戰
- 熊麗兵 董一凡等
- 878字
- 2022-07-28 20:18:06
3.1 拋磚引玉:初識零知識證明
3.1.1 為什么會有零知識證明?
前面已經學習過,在使用私鑰/公鑰體系時,永遠不應該暴露私鑰,因為任何獲得私鑰的第三方都能夠解密其獲得的每一條加密消息。下面來考慮一種情況:
常規密碼在大部分數據庫中都存儲為哈希(Hash),而不是明文。這里哈希指一個函數,會把一個輸入轉換成另一個唯一的字符串數據,從而掩飾或隱藏原始數據。
在哈希函數中,實際上幾乎不可能從哈希函數創建的惟一字符串反推出原始數據。例如,系統可以使用keccak256哈希算法,將密碼“HappyLearningZKP”哈希為0x8d73 022c3e12c1c41d5bdbeb0bac5574b814301c5353fc72b135a09ccc764f0f。
看看這種字母和數字的組合,即使知道哈希算法并使用強大的算力,也無法倒推出原始密碼“HappyLearningZKP”。重要的是,哈希函數在定義上是決定性的,這意味著相同的輸入總是會得到相同的輸出。因此,如果一個網站將我們的密碼存儲為0x8d7 3022c3e12c1c41d5bdbeb0bac5574b814301c5353fc72b135a09ccc764f0f,那么當我們輸入“HappyLearningZKP”時,該網站可以通過對其哈希,并與存儲在數據庫中的哈希值進行比較,來檢查我們是否輸入了正確的密碼。
在上面的情景中,請注意:雖然網站不會存儲我們的明文密碼,但我們仍然需要通過一個安全通道與網站共享密碼,這樣才能證明你知道你的正確密碼。
如果可以向網站證明我們知道正確的密碼,而又不必向它共享或透露該密碼,那不是更好嗎?或者再進一步:證明以前的那個你就是現在你說的這個你?
總體來說,這種方法代表了當今大多數行業驗證信息的方式——需要提供信息來驗證它,需要重新執行計算來驗證它是否完整地正確執行。比如,如果銀行想批準一筆從我們的賬戶到另一賬戶的電子匯款,銀行必須在轉賬前檢查你的賬戶,來確認你的賬戶中有足夠的錢,以此證明我們不是在花費你實際不擁有的錢。同樣,如果你想證明自己的身份,你必須提供你的社會安全號碼或政府簽發的其他身份證明。
而在另一些情況下,不需要知道知識的細節就可以檢查結果。例如,供應商甲的出價是否高于供應商乙?供應商乙不應該看到供應商甲的出價,同樣,很可能雙方都不想向客戶以外的第三方披露自己的出價。這時,通過零知識證明的方式,監管或審計機構可以得知,供應商甲的出價低于供應商乙。
這就是零知識證明:一方(證明者)能夠向另一方(驗證者)證明,自己擁有某一條特定的信息,而又無須披露該信息是什么。
- 企業數字化創新引擎:企業級PaaS平臺HZERO
- Test-Driven Development with Mockito
- 計算機信息技術基礎實驗與習題
- 大數據算法
- Enterprise Integration with WSO2 ESB
- OracleDBA實戰攻略:運維管理、診斷優化、高可用與最佳實踐
- 數據庫原理與應用(Oracle版)
- 企業級數據與AI項目成功之道
- 數據庫技術實用教程
- 網站數據庫技術
- Python數據分析與挖掘實戰(第3版)
- PostgreSQL指南:內幕探索
- Mastering LOB Development for Silverlight 5:A Case Study in Action
- 爬蟲實戰:從數據到產品
- 區塊鏈+:落地場景與應用實戰