YottaChain加密后去重的秘密

識數(shù)據(jù)加密和數(shù)據(jù)去重都對區(qū)塊鏈存儲起到?jīng)Q定性的作用。加密后去重的核心問題在于數(shù)據(jù)的授權。即 A 存儲的數(shù)據(jù),當 B 也要存儲相同的數(shù)據(jù)時,如何將 A 的數(shù)據(jù)授權給 B 使用而且還不影響 A 的數(shù)據(jù)安全性。YottaChain通過其創(chuàng)始人王東臨的TruPrivacy專利,解決了這個問題。
2015 年,TruPrivacy 技術在全球最大黑客大會 DefCon 上公開懸賞驗證,在敞開服務器任黑客自由出入并給黑客提供管理賬戶權限的前提下,全球頂級黑客聯(lián)手都未能偷走服務器上存儲的用戶數(shù)據(jù),無人領取高額現(xiàn)金獎勵。其專利可查詢2015 年 10 月 20 日授權的 9164926B2 號美國專利,2016 年 4 月 13 日授權的 2024272 號中國專利,2016 年 9 月 19 日授權的 2830282 號歐洲專利。

我們看下在YottaChain的白皮書里面針對這塊的算法說明就一目了然了。


文件加密存儲過程
采用這種機制時,除了用戶權限表外,還要維護一個全局的元數(shù)據(jù)表,記錄明文 Hash 和密文 Hash的對應關系,在寫入數(shù)據(jù)時要先查詢是否存在相同 Hash 的數(shù)據(jù),如果沒有該項再存:

  1. Hash(Data) →Hdata 計算明文 Hash
  2. If CheckDup(Hdata) = TRUE goto 11 如果已經(jīng)存在相同的數(shù)據(jù),轉(zhuǎn)到第 11 步
  3. RandomSym()→Stk 隨機生成對稱密鑰作為文件的存儲密鑰
  4. Enc(Stk, Data)→EncData 用存儲密鑰加密文件
  5. Hash(EncData) →Henc 計算密文 Hash
  6. GenKey(Data) →Sdata 從數(shù)據(jù)明文生成對稱密鑰,可以用數(shù)據(jù)明文加鹽之后計算 Hash 值的方式生成。之所以要加鹽是因為明文 Hash 是一個公開的值,不加鹽的話不擁有數(shù)據(jù)明文的人也能獲得該密鑰。為了保證
    一致性,鹽值可以是一個固定的算法生成,例如先做第一次 Hash 作為
    鹽值,然后加鹽后再計算第二次 Hash 作為對稱密鑰,兩次 Hash 可以
    采用不同的算法。
  7. Enc(Hdata, Stk) →EncStk’ 以數(shù)據(jù)明文生成的對稱密鑰來加密存儲密鑰。
    這是非?!霸幃悺钡囊徊剑悦魑淖鳛槊荑€,密鑰作為明文來加密,大
    多數(shù)人看這個算法的時候都以為寫反了,實際上就是專門這么設計的,
    而且這一步可是 TruPrivacy 的核心步驟。
  8. PutStatic(EncData) 將加密數(shù)據(jù)存入到持久化靜態(tài)存儲
  9. PutMeta(Hdata, Henv,EncStk) 將密文 Hash 和明文加密的存儲密鑰記錄
    在全局元數(shù)據(jù)表中,記錄在明文 Hash 項下
  10. Goto 14
  11. GetMeta(Hdata) →Henv,EncStk’ 從全局元數(shù)據(jù)表中取出密文 Hash 和明文加密后的存儲密鑰
  12. GenKey(Data) →Sdata 以同樣算法從數(shù)據(jù)明文生成對稱密鑰
  13. Dec(Sdata, EncStk’) →Stk 用該對稱密鑰解密出存儲密鑰
  14. Enc(Spub, Stk) →EncStk 以用戶的加密公鑰加密存儲密鑰
  15. PutPri(Hdata,EncStk) 將加密公鑰加密后的存儲密鑰存入到用戶權限列表, 記錄在明文 Hash 項下

文件讀取過程
在 Get 數(shù)據(jù)的時候,從全局元數(shù)據(jù)表中從明文 Hash 取出對應的密文 Hash,通過密文 Hash 中從持久化靜態(tài)存儲中取出密文,從權限列表中取出加密后的存儲密鑰,以用戶的加密私鑰對加密后的存儲密鑰進行解密獲得存儲密鑰,用存儲密鑰對加密數(shù)據(jù)進行解密,獲得數(shù)據(jù)明文。

  1. GetMeta(Hdata)→Henc 從全局元數(shù)據(jù)表中通過明文Hash獲取到密文Hash
  2. GetPri(Hdata)→EncStk 從權限列表中通過明文 Hash 獲取到加密公鑰加密的存儲密鑰
  3. GetStatic(Henc)→EncData 用密文 Hash 從持久化靜態(tài)存儲中取出密文
  4. Dec(Sprv, EncStk)→Stk 以用戶的加密私玥對用戶加密公鑰加密后的存儲密鑰進行解密獲得存儲密鑰
  5. Dec(Stk, EncData)→Data 解密獲得文件數(shù)據(jù)
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容