Tessera是一個無狀態(tài)的java系統(tǒng)讼油,主要用來保證Quorum中的加密澡匪、解密和私有交易的分布式努溃。
每個Tessera節(jié)點:
- 生成和保存許多公私鑰對
- 自我管理劲装,通過公鑰和盡可能少的節(jié)點鏈接凌那,在通過自己鏈接的這些節(jié)點進而發(fā)現(xiàn)整個網(wǎng)絡(luò)的所有節(jié)點
- 提供公開和私密的API通訊接口:
- 私密API-主要用于Quorum內(nèi)部的通訊
- 公開API-主要用于Tessera節(jié)點之間的通訊
- 基于多種信任模型提供雙向SSL通訊兼雄,包括TLS證書、TOFU(Trust On First Use)帽蝶、白名單赦肋、證書授權(quán)等
- 支持IP 白名單
- 可以連接任何支持JDBC的SQL數(shù)據(jù)庫
一、Tessera 工作流程
上圖展示的流程是Quorum一筆私密交易的流程励稳,這筆交易只有參與者A與參與者B知道佃乘,C并不是這筆交易的成員。
A 向Quorum節(jié)點發(fā)送一筆交易驹尼,注明具體的交易payload趣避,并且設(shè)置
privateFor
字段的值為A(可選)和B的公鑰A的Quorum節(jié)點將這筆交易發(fā)送給自己配套的Tessera Node A的
交易管理器
,交易管理器存儲交易的payloadTessera Node A的
交易管理器
把這筆交易發(fā)給Enclave
組件新翎,Enclave
組件進行交易發(fā)起者(A)的身份校驗(私鑰簽名和公鑰校驗)并且加密payload-
Enclave
的加密過程:隨機生成一個主鑰 RMK和一個隨機數(shù)
根據(jù)上一步生成的RMK和隨機數(shù)加密交易payload
-
遍歷交易參與方(在本例中是A和B)
3.1針對每個參與方:根據(jù)
Enclave
和每個參與方的公鑰程帕,生成共享秘鑰;生成一個隨機數(shù)地啰。3.2根據(jù)共享秘鑰和隨機數(shù)加密RMK愁拭。這樣保證了每個加密RMK對每一個交易參與方是獨一無二的,并且只能由該參與方讀取
返回第二小步生成的加密payload和第三小步生成的所有加密RMKs給
交易處理器
A的
交易處理器
計算加密載荷的哈希值并且在數(shù)據(jù)庫中存儲(加密payload, hash, 加密RMKs)A的
交易管理器
通過HTTPS向B的交易管理器
發(fā)送加密payload亏吝,和專門給B的共享鑰匙+隨機數(shù)敛苇。B接收到以后回復(fù)Ack/Nack。A的
交易管理器
在收到B的接收回復(fù)后顺呕,將交易的hash值發(fā)送給A的Quorum節(jié)點枫攀,Quorum節(jié)點會用hash值替換原有的交易payload并且將交易的V值改為37或38,向其他節(jié)點表明這是一筆私有交易隨后這筆交易會利用原有的Etherum P2P通信在節(jié)點之間同步
一個包含該交易的塊被打包出來株茶,并發(fā)送給網(wǎng)絡(luò)中的所有節(jié)點
在處理塊時来涨,所有的節(jié)點都會處理這條交易,發(fā)現(xiàn)交易V值為37或38启盛,Quorum節(jié)點會把交易的內(nèi)容(Hash值)發(fā)給自己對應(yīng)的Tessera節(jié)點的
交易處理器
蹦掐,交易處理器根據(jù)hash值查找自己的數(shù)據(jù)庫技羔,看自己是否能夠解密該筆交易因為C不是這筆交易的參與反,所有C的Quorum節(jié)點會收到
交易處理器
的NotARecipient
回復(fù)卧抗,然后C會跳過這筆交易藤滥,并且不會改變自己的Priviate stateDB。A和B的
交易處理器
會發(fā)現(xiàn)自己能夠處理這筆交易社裆,因此會調(diào)用Enclave
拙绊,向其傳入加密payload,加密的秘鑰和交易簽名等泳秀。Enclave
驗證交易簽名标沪,然后用Enclave
存儲的私鑰解密獲得RMK,再用RMK解密payload獲得交易明文嗜傅。A和B的
交易處理器
將解密后的交易內(nèi)容發(fā)送給EVM執(zhí)行執(zhí)行智能合約金句。本次智能合約的執(zhí)行只會更新Quorum節(jié)點的Private stateDB。(備注:一旦交易被執(zhí)行以后吕嘀,這條執(zhí)行記錄就被廢棄了违寞,如果想要讀取交易內(nèi)容必須重新按上述流程走一遍Quorum私有交易)
二、Tessera節(jié)點配置說明
因為配置文件不涉及本身Tessera的架構(gòu)和概念說明偶房,因此這里不做展開坞靶。感興趣的讀者可以直接閱讀官方文檔,查看每一配置項的說明
三蝴悉、Tessera服務(wù)
本節(jié)會再詳細展開說明關(guān)于交易處理器
、Enclave
相關(guān)的概念
1 交易處理器
交易處理器在整個私有交易流程中起到的作用可以查看本章第一節(jié)瘾敢,這里總結(jié)概括一下拍冠,交易處理器主要有以下幾個作用:
- Tessera節(jié)點P2P網(wǎng)絡(luò)的基礎(chǔ),Tessera節(jié)點是通過交易處理器模塊進行節(jié)點間通訊的
- 和
Enclave
組件之間進行payload加密/解密的溝通 - 向數(shù)據(jù)庫存儲和讀取數(shù)據(jù)(注意簇抵,Tessera節(jié)點的數(shù)據(jù)庫是通過JDBC外掛的)
- 和Quorum節(jié)點進行溝通
注意庆杜,交易處理器必須通過Enclave進行數(shù)據(jù)的加密解密,本身不能訪問任何公私鑰碟摆,也不能進行任何的數(shù)據(jù)加密和解密晃财,最大程度保證了數(shù)據(jù)的安全性。
另外Tessera在啟動時典蜕,可以通過-Dspring.profiles.active=enable-sync-poller
指定是否啟用數(shù)據(jù)恢復(fù)功能断盛。啟用該功能以后,Tessera節(jié)點每連接上一個新的節(jié)點都會發(fā)送一個“resend request”請求愉舔,收到該請求的節(jié)點會將自己數(shù)據(jù)庫中的交易數(shù)據(jù)再次發(fā)送給每個交易參與方钢猛。(收到請求的節(jié)點并不會用交易數(shù)據(jù)回復(fù)發(fā)送請求的節(jié)點,因為發(fā)送請求的節(jié)點不一定是交易參與方)
2 Enclave
Enclave更像是一個接收命令處理數(shù)據(jù)的黑盒轩缤,Enclave可以以軟件形式存在也可以以硬件的形式存在命迈,無論是哪一種形式贩绕,其目的都是為了保證信息只在Enclave內(nèi)部,不會被惡意攻擊盜取壶愤。
Tessera Enclave主要的作用是進行數(shù)據(jù)的加密/解密淑倾,已經(jīng)公私鑰對的生成和管理。這就保證了在程序中有一個安全的地方可以進行數(shù)據(jù)的加密解密處理征椒,同時敏感信息不會流入程序內(nèi)存被不必要的參與方讀取娇哆。如果采用硬件Enclave,也保證程序能夠以更小的體積運行在一個安全環(huán)境中陕靠。
Enclava存儲的數(shù)據(jù):
- 公私鑰訪問
- 交易參與方的公鑰(這部分信息不涉及敏感數(shù)據(jù)迂尝,其實可以放到
交易管理器中
) - 默認連接節(jié)點(Tessera節(jié)點,不是Quorum)的公鑰
Enclave可以處理的請求:
- 獲取默認連接節(jié)點(Tessera節(jié)點)的公鑰
- 為每筆交易提供forwarding keys(推送公鑰)
- 當前Enclave保存的所有公鑰
- 為給定發(fā)送者和參與者的交易載荷加密
- 為給定參與者的交易載荷加密
- 對指定接受者/發(fā)送者的交易解密
- 為已經(jīng)存在的交易載荷增加參與者
其實Enclave的安全性主要在于它只能同Tessera節(jié)點的交易管理器通訊剪芥,其他組件無法連接Enclave
Enclave可以和交易處理器部署在本地垄开,Enclave也可以部署在遠程,提供Restful接口税肪,交易處理器通過HTTP連接溉躲。
四、Tessera使用說明
主要包括API和command命令行益兄, 這里不做過多展開锻梳,感興趣的讀者可以自己查看Quorum官方文檔
五、從Constellation的數(shù)據(jù)遷移
Constellation和Tessera實際上起到的是同樣的作用净捅,只不過Constella是基于Haskell的程序而Tessera是基于Java開發(fā)的疑枯。
有關(guān)Constellation的具體內(nèi)容會在下一章節(jié)中介紹。