徐度康 沈蘇彬
(1.南京郵電大學計算機學院;2.南京郵電大學通信與網絡技術國家工程研究中心 江蘇南京 210046)
現如今,慈善捐贈在受到人們關注的同時,也面臨著信任危機。傳統的捐贈活動需要依賴慈善平臺的中心化管理,存在求助難辨真假的問題,例如:多個慈善平臺上出現了謊報求助信息進行詐捐的現象。對于捐贈,由于依靠慈善平臺的中心化管理,存在篡改捐贈信息以及捐贈流向不透明的問題,例如某慈善機構出現了私自挪用捐款并篡改、謊報捐贈信息的不良行為。因此如何保證慈善捐贈過程中的求助信息和捐贈信息可信是目前需要解決的問題[1]。
區塊鏈在中本聰發表的比特幣論文[2]中首次引入,可用于信任管理。為了解決中心化管理模式下求助數據和捐贈數據缺乏真實性以及易遭篡改等問題,可將區塊鏈技術與慈善捐贈相結合,使原先由慈善機構集中管理的記錄求助信息和捐贈信息的賬本,變為由所有參與方共同管理,參與方可以共同對求助和捐贈數據進行真實性驗證,并且賬本中記錄的求助和捐贈數據難以篡改,從而解決以上問題。
目前已有一些將區塊鏈技術和慈善捐贈結合的相關研究,一是為了保證捐贈的真實性,利用區塊鏈上發行的加密貨幣進行捐贈。二是利用區塊鏈記錄具體的捐贈結果,保證捐贈結果不會遭到篡改。目前,工作主要注重于對利用區塊鏈對捐贈情況進行管理,對需要進行籌款的求助項目,仍然是依靠中心化的管理方式,這樣求助數據缺乏真實性且易遭篡改,若求助數據不真實,那就無法保證捐贈的真實。因此,該文首先對去中心化模式下如何保證求助數據的真實性進行研究,在此基礎上再研究如何保證捐贈數據可信。相比于現有工作,該文提出了一種雙鏈結構,研究了如何保證求助數據和捐贈數據的真實可信,設計了存儲求助和捐贈交易的區塊結構、交易的驗證機制和成鏈機制。
LI Y 等人[3]介紹了螞蟻區塊鏈平臺上幫助聽障兒童重獲新生、和再障說分手等慈善項目,雖然螞蟻區塊鏈平臺上已有多個公益項目上線,但在該平臺上線的項目均是慈善組織開展的公益項目,依賴于中心化的管理。JAYASINGBE D 等人[4]從技術的角度提出搭建基于區塊鏈的慈善籌款平臺,利用比特幣、智能合約以及多重簽名技術進行善款籌集。NOR R M等人[5]提出了一個用于災區援助的基于區塊鏈技術的捐贈系統,整個平臺搭建在以太坊之上,平臺上的所有交易均通過智能合約進行,但它要求用戶必須運行一個完整的以太坊節點,并且擁有以太幣作為資本,存在一定的局限性。SIRISHA N S 等人[6]描述了基于區塊鏈的捐款跟蹤平臺,該平臺基于區塊鏈技術對捐贈的運作進行核算,使公眾和捐助者能夠跟蹤每一筆捐款資金的來源、時間和對象。
以上研究大多依靠比特幣系統或以太坊系統,使用系統上發行的加密貨幣進行捐贈,使捐贈結果不可篡改。部分研究不依靠具體的加密貨幣進行捐贈,只是將捐贈的具體結果記錄在區塊鏈賬本中,并使用加密貨幣作為激勵。然而這些研究中對于求助項目大多都是依靠中心化的管理方式,求助數據大多存儲在數據庫中,在這樣集中式的管理方式下,求助數據的真實性難以保證,求助數據也易遭篡改,并且捐贈依賴于加密貨幣,缺少一定的實用性。
該文的主要問題為去中心化模式下,如何保證求助數據和捐贈數據的真實性。
目前求助數據主要依靠中心化的管理方式集中存儲和發布,求助數據的真實性難以保證,也易遭到篡改。且求助數據大多需要依靠人工填寫,之后需要依靠相關部門對求助人的情況進行核實,通過后才能代表求助是真實的。譚文安等人[7]使用保證金的方式來懲罰發布虛假求助的行為,即在發布求助的時候需要繳納一定的保證金,如驗證發現求助是虛假的,則扣除保證金。使用區塊鏈來對求助數據進行可信管理,首先需要利用數字簽名技術保證求助數據是由求助方本人發布,其次需要相關專業人員作為區塊鏈的參與方,共同負責對求助數據進行真實性驗證,如果驗證通過則表示求助數據真實,才可以將該求助發布到區塊鏈。
捐贈數據大多也是依靠中心化的慈善機構進行管理,捐款先由捐贈方流向慈善機構,再由慈善機構流向求助方,捐贈數據由慈善機構集中存儲和發布,捐贈數據的真實性和完整性難以保證。在將捐贈數據記錄到區塊鏈之前,首先需要保證該捐贈交易對應的求助是真實的,其次需要保證該捐贈交易是真實的。對于保證捐贈對應的求助是真實的,根據上文的分析,如果某個求助已經被發布到區塊鏈,則該求助通過了相關專業人員的審核。因此,可以在區塊鏈中查詢相關求助,查詢到則代表求助真實。對如何保證捐贈交易是真實的,如果使用區塊鏈上的加密貨幣進行捐贈,則捐贈交易在上鏈前依靠區塊鏈本身就可以驗證真偽,如果不使用區塊鏈上的加密貨幣進行捐贈,則捐贈交易需要依靠相關支付接口來驗證該轉賬交易是否真實發生了。在確保捐贈交易真實后,才可以將其發布到區塊鏈。
該文需要利用區塊鏈對求助和捐贈數據進行可信管理,對于需要進行可信管理的求助數據和捐贈數據,它們在數據結構上存在差異,并且各自的真實性驗證方式也不同。使用單鏈式結構難以實現對求助和捐贈數據的相關真實性驗證和管理。目前已有對于使用多鏈結構進行可信管理的研究,例如:李芳等人[8]提出一種基于雙鏈式的云制造系統,用于管理企業之間需要共享的信息。該文針對慈善捐贈領域,為了對求助和捐贈數據進行可信管理,提出了一種雙鏈式的結構,一個區塊鏈為求助信息鏈,用于管理求助數據,另一個為捐贈信息鏈,用于管理捐贈數據,兩條區塊鏈之間具有映射關系,對于捐贈信息鏈上的每一個捐贈交易,都對應求助信息鏈上的一個求助交易。在確定了雙鏈結構后,需要設計存儲求助和捐贈數據的區塊結構。該文設定每個區塊的區塊體中僅存儲一筆交易,將交易的哈希值直接存放在區塊頭中。交易發生任何篡改都會在通過該區塊的哈希值反映。圖1是該方案的區塊結構圖。

圖1 區塊結構圖
求助信息鏈的參與方有求助方以及具有專業審核能力的監管方,主要對發布的求助數據進行核實。求助交易指求助方根據自身的需求構造出相應的求助請求數據,主要包括賬戶地址address、求助金額money、求助原因reason、求助證明proof 以及使用計劃plan。對于該交易的驗證主要是由監管方驗證這些信息是否真實并且符合法律法規的要求,這里為了方便進行討論,規定只需驗證該求助交易是否包含求助方的數字簽名,以及求助的金額是否符合范圍。
區塊鏈是一個去中心化的公用賬本[9],運用共識機制保證鏈上數據的一致性。該文中使用私有鏈,設計的交易發布方式是由交易發起方直接產生可以驗證交易真偽的區塊并廣播,有其他參與方進行驗證,采用實用拜占庭容錯作為共識機制。
接下來將梳理求助交易的上鏈算法,上鏈的含義是指交易先被組裝進區塊,通過共識機制的運行,若區塊中包含的交易數據能通過其他節點驗證,該區塊將被鏈接到當前的區塊鏈中。求助方先構造求助交易組裝成區塊并廣播,其他節點驗證區塊是否可以解密簽名,驗證該區塊中指向前區塊的哈希值是否正確,驗證求助金額是否在規定范圍內。驗證通過就認為該交易是可信的,附上簽名再次廣播。根據實用拜占庭容錯機制,若新區塊通過至少2/3參與方節點的驗證就將該區塊加入鏈中。求助交易上鏈算法的基本描述如圖2所示。

圖2 求助交易上鏈算法
捐贈鏈的參與方有求助方和捐贈方。捐贈交易就是指捐贈方給求助方捐款這一操作,捐贈交易描述了具體的捐贈情況,根據需求設計捐贈交易內容主要包括支付編號tid、捐助賬戶address’、捐贈金額money、求助賬戶address 以及求助交易的哈希值hash。其他參與方需要對捐贈交易進行驗證,根據之前的分析,首先需要利用求助信息鏈驗證求助是否真實存在,接著需要驗證捐贈是否真實,這里使用捐贈鏈上的加密貨幣進行捐贈,則需要驗證捐贈方的賬戶余額是否大于捐贈金額。
對于捐贈信息鏈的共識機制,同樣采用實用拜占庭容錯作為共識機制。對捐贈交易的上鏈算法,捐助方根據求助鏈上的求助交易進行捐贈,完成后構造捐助交易并組裝到區塊,將區塊廣播,其他節點驗證區塊是否可以解密簽名,驗證該區塊中指向前區塊的哈希值是否正確,驗證捐贈是否真實,利用求助信息鏈驗證對應的求助交易是否存在。捐贈交易上鏈算法的基本描述具體見圖3。

圖3 捐贈交易上鏈算法
對于實驗環境,考慮如何實現對等網絡,如何發布交易,如何使用智能合約,如何實現界面交互。主流的區塊鏈開發平臺有以太坊[10]和超級賬本。以太坊的工具包web3j,可以實現發起交易,調用智能合約等操作。該文使用以太坊作為實驗平臺,借助其完成該方案中私有鏈環境的搭建。在完成實驗環境的搭建后,使用Java語言對上文提到的上鏈算法進行了實現。
若求助數據符合真實性驗證的要求,即由求助方本人發布,求助金額在規定范圍,則可以通過驗證,最終求助發布成功,如圖4 所示。否則求助發布失敗。如果發布的捐助符合真實性驗證的要求,則該捐贈可以通過真實性驗證,最終捐贈發布成功,如圖5 所示。否則捐贈發布失敗。由于該方案采用了雙鏈結構,因此和單鏈結構相比,在交易發布的效率上有一定的提升,如圖6所示。

圖4 求助發布成功

圖5 捐贈發布成功

圖6 單鏈和雙鏈模式下交易發布時間對比
上述仿真實驗說明了在交易合法的情況下,求助交易和捐助交易都可以成功通過真實性驗證并且存儲到區塊鏈中,在交易不符合要求時,交易無法通過真實性驗證,從而導致上鏈的失敗。并且采用雙鏈結構具有更快的交易上鏈效率。
該文針對目前傳統慈善捐贈的中心化管理可能存在的信任問題,提出了基于區塊鏈的去中心化捐助的區塊設計、區塊鏈結構設計以及基于區塊鏈的去中心化捐助方法設計,通過在以太坊平臺上進行仿真實驗,最終驗證了所提出的結構設計和方法設計的可行性與正確性。后續的工作是深入研究現有的共識算法,選擇更加適合該課題的共識算法,完善該文所設計的基于區塊鏈的去中心化可信捐助方法。