這裡將詳細地對示例性實施例進行說明,其示例表示在圖式中。下面的描述涉及圖式時,除非另有表示,不同圖式中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本發明一個或多個實施例相一致的所有實施方式。相反,它們僅是與如所附申請專利範圍中所詳述的、本發明一個或多個實施例的一些態樣相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本發明示出和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本發明所描述的更多或更少。此外,本發明中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本發明中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
圖1是一示例性實施例提供的一種示例環境的示意圖。如圖1所示,示例環境100允許實體參與區塊鏈網路102。區塊鏈網路102可以為公有類型、私有類型或聯盟類型的區塊鏈網路。示例環境100可以包括計算設備104、106、108、110、112和網路114;在一實施例中,網路114可以包括區域網路(Local Area Network,LAN)、廣域網路(Wide Area Network,WAN)、網際網路或其組合,並連接至網站、用戶設備(例如計算設備)和後端系統。在一實施例中,可以通過有線和/或無線通訊方式存取網路114。
在某些情況下,計算設備106、108可以是雲計算系統的節點(未顯示),或者每個計算設備106、108可以是單獨的雲計算系統,包括由網路互連並作為分散式處理系統工作的多台電腦。
在一實施例中,計算設備104~108可以運行任何適當的計算系統,使其能夠作為區塊鏈網路102中的節點;例如,計算設備104~108可以包括但不限於伺服器、桌上型電腦、筆記型電腦、平板電腦計算設備和智慧型手機。在一實施例中,計算設備104~108可以歸屬於相關實體並用於實現相應的服務,例如該服務可以用於對某一實體或多個實體之間的交易進行管理。
在一實施例中,計算設備104~108分別儲存有區塊鏈網路102對應的區塊鏈帳本。計算設備104可以是(或包含)用於提供流覽器功能的網路服務器,該網路服務器可基於網路114提供與區塊鏈網路102相關的視覺化資訊。在一些情況下,計算設備104可以不參與區塊驗證,而是監控區塊鏈網路102以確定其他節點(譬如可以包括計算設備106-108)何時達成共識,並據此產生相應的區塊鏈視覺化用戶介面。
在一實施例中,計算設備104可接收用戶端設備(例如計算設備110或計算設備112)針對區塊鏈視覺化用戶介面發起的請求。在一些情況下,區塊鏈網路102的節點也可以作為用戶端設備,比如計算設備108的用戶可以使用運行在計算設備108上的流覽器向計算設備104發送上述請求。
回應於上述請求,計算設備104可以基於儲存的區塊鏈帳本產生區塊鏈視覺化用戶介面(如網頁),並將產生的區塊鏈視覺化用戶介面發送給請求的用戶端設備。如果區塊鏈網路102是私有類型或聯盟類型的區塊鏈網路,對區塊鏈視覺化用戶介面的請求可以包括用戶授權資訊,在產生區塊鏈視覺化用戶介面併發送給請求的用戶端設備之前,可以由計算設備104對該用戶授權資訊進行驗證,並在驗證通過後返回相應的區塊鏈視覺化用戶介面。
區塊鏈視覺化用戶介面可以顯示在用戶端設備上(例如可顯示在圖1所示的用戶介面116中)。當區塊鏈帳本發生更新時,用戶介面116的顯示內容也可以隨之發生更新。此外,用戶與用戶介面116的交互可能導致對其他用戶介面的請求,例如顯示區塊清單、區塊詳情、交易清單、交易詳情、帳戶清單、帳戶詳情、合約列表、合約詳情或者用戶對區塊鏈網路實施搜尋而產生的搜尋結果頁面等。
圖2是一示例性實施例提供的一種概念架構的示意圖。如圖2所示,該概念架構200包括實體層202、託管服務層204和區塊鏈網路層206。例如,實體層202可以包括三個實體:實體1、實體2和實體3,每個實體都有各自的交易管理系統208。
在一實施例中,託管服務層204可以包括每個事務管理系統208對應的介面210。例如,各個事務管理系統208使用協定(例如超文字傳輸協定安全(HTTPS)等)通過網路(例如圖1中的網路114)與各自的介面210通信。在一些例子中,每個介面210可以提供各自對應的交易管理系統208與區塊鏈網路層206之間的通信連接;更具體地,介面210可與區塊鏈網路層206的區塊鏈網路212通信。在一些例子中,介面210和區塊鏈網路層206之間的通信可以使用遠端程序呼叫(Remote Procedure Calls,RPCs)而實現。在一些例子中,介面210可以向交易管理系統208提供用於存取區塊鏈網路212的API介面。
如本文所述,區塊鏈網路212以對等網路的形式提供,該對等網路包括多個節點214,這些節點214分別用於對塊鏈資料所形成的區塊鏈帳本216進行持久化;其中,圖2中僅示出了一份區塊鏈帳本216,但區塊鏈網路212中可以存在多份區塊鏈帳本216或其副本,比如每一節點214可以分別維護一份區塊鏈帳本216或其副本。
需要指出的是:在本發明中所描述的交易(transaction),是指用戶通過區塊鏈的用戶端創建,並需要最終發佈至區塊鏈的分散式資料庫中的一筆資料。其中,區塊鏈中的交易,存在狹義的交易以及廣義的交易之分。狹義的交易是指用戶向區塊鏈發佈的一筆價值轉移;例如,在傳統的比特幣區塊鏈網路中,交易可以是用戶在區塊鏈中發起的一筆轉帳。而廣義的交易是指用戶向區塊鏈發佈的一筆具有業務意圖的業務資料;例如,運營方可以基於實際的業務需求搭建一個聯盟鏈,依託於聯盟鏈部署一些與價值轉移無關的其它類型的線上業務(比如,租房業務、車輛調度業務、保險理賠業務、信用服務、醫療服務等),而在這類聯盟鏈中,交易可以是用戶在聯盟鏈中發佈的一筆具有業務意圖的業務訊息或者業務請求。
區塊鏈一般被劃分為三種類型:公有鏈(Public Blockchain),私有鏈(Private Blockchain)和聯盟鏈(Consortium Blockchain)。此外,還有多種類型的結合,比如私有鏈+聯盟鏈、聯盟鏈+公有鏈等不同組合形式。其中去中心化程度最高的是公有鏈。公有鏈以比特幣、乙太坊為代表,加入公有鏈的參與者可以讀取鏈上的資料記錄、參與交易以及競爭新區塊的記帳權等。而且,各參與者(即節點)可自由加入以及退出網路,並進行相關操作。私有鏈則相反,該網路的寫入許可權由某個組織或者機構控制,資料讀取許可權受組織規定。簡單來說,私有鏈可以為一個弱中心化系統,參與節點具有嚴格限制且少。這種類型的區塊鏈更適合於特定機構內部使用。聯盟鏈則是介於公有鏈以及私有鏈之間的區塊鏈,可實現“部分去中心化”。聯盟鏈中各個節點通常有與之相對應的實體機構或者組織;參與者通過授權加入網路並組成利益相關聯盟,共同維護區塊鏈運行。
通過區塊鏈網路所採用的分散式架構,以及區塊所採用的鏈式結構,使得資訊可以永久、無篡改地記錄在各個區塊鏈節點統一維護的區塊鏈帳本中。但是,由於區塊鏈帳本完全公開,導致資訊隱私性無法得到保障。例如,任意用戶可以在任意區塊鏈節點上查詢區塊鏈帳本,以獲知某一帳戶持有的資產、某一交易的轉帳額等資訊,而這些可能都是敏感的、需要隱藏的資訊。
處於隱私保護的目的,相關技術中提出了基於承諾的匿名交易或機密交易(Confidential Transaction)方案,可以將每個帳戶持有的資產額、交易所涉及的轉帳額等,均產生為相應的承諾數額,且區塊鏈帳本中僅記載該承諾數額、而非直接記載明文的資產額、交易額等。例如,當採用Pedersen承諾機制時,假定原始數額為t,相應的承諾數額可以為PC(t, r)=r×G+t×H,其中G、H為橢圓曲線上的隨機產生元,r為亂數,並且r的取值僅由帳戶持有者、交易參與者等掌握,使得無關人員僅根據PC(t, r)的取值將無法反推出原始數額t。同時,承諾數額還具有同態特性,使得承諾數額之間可以直接參與計算,譬如PC(t1, r1)-PC(t2, r2)=PC(t1-t2, r1-r2)。但是,區塊鏈節點在驗證交易時無法根據承諾數額確定相關條件是否被滿足,比如交易的匯入額等於匯出額或其他條件,需要提供相關證明信息才可以確保交易順利完成。
此外,用戶在區塊鏈網路中發起交易時需要簽名。例如,當用戶A希望花費自己在區塊鏈中持有的一筆資產時,可以發起一筆區塊鏈交易並使用該用戶A持有的私密金鑰x_j進行簽名。相應地,通過該用戶A所持私密金鑰x_j對應的公開金鑰P_j,即可對上述簽名進行驗證。但是,對簽名的直接驗證也暴露了用戶A為相應簽名的簽名方,從而導致了用戶A的隱私洩露。
出於保護簽名方身份的目的,相關技術中提出了基於環簽名的處理方案,用戶A可以將自身持有的公開金鑰P_j隱藏在一組公開金鑰(P_1,……,P_n)中,其中公開金鑰P_1~P_j-1、P_j+1~P_n分別屬於其他用戶;然後,用戶A通過自身持有的私密金鑰x_j和上述的一組公開金鑰(P_1,……,P_n)產生簽名,那麼驗證方能夠驗證簽名是由上述的一組公開金鑰(P_1,……,P_n)中的某一公開金鑰對應的私密金鑰所產生,但是並不能夠確定具體為哪一公開金鑰,從而通過上述的一組公開金鑰(P_1,……,P_n)對簽名方的身份實現了隱藏。
可以理解的是:當上文描述為(P_1,……,P_n)的形式時,雖然看似是從P_1開始、P_n結束的一組公開金鑰,但實際上對於驗證方而言並不能夠確定各個公開金鑰之間的順序,使得這組公開金鑰對驗證方而言相當於呈現為無首尾的環形結構,因而稱為環簽名。
雖然環簽名方案可以對簽名方的身份進行隱藏,但是應用於區塊鏈網路的交易場景時,會導致出現“雙花”問題。例如,區塊鏈網路可以採用UTXO(Unspent Transaction Output,未花費的交易輸出)模型進行資產管理:用戶持有的區塊鏈資產均被記錄為相應交易的輸出,每筆交易以一個或多個未花費的交易輸出作為其輸入,並相應產生一個或多個輸出。典型的,UTXO被應用於比特幣及其衍生的密碼貨幣所採用。當環簽名方案被應用在基於UTXO模型的區塊鏈網路時,同一筆資產可能被多筆交易分別引用,但由於簽名方的身份被環簽名方案所隱藏,使得驗證方無法檢查出同一筆資產被重複引用,從而造成“雙花”問題。
因此,相關技術中提出了對上述環簽名方案的改進方案,稱為可連結環簽名(Linkable Spontaneous Anonymous Group Signature,LSAG),可以產生用於對簽名方進行標記的key-image(金鑰鏡像),但並不會暴露該簽名方在簽名所用的一組環簽名中所對應的公開金鑰,從而既能夠確保對簽名方的身份隱藏,又能夠基於key-image解決“雙花”問題。
以門羅幣(Monero)為例。門羅幣採用UTXO(Unspent Transaction Output,未花費的交易輸出)模型實現資產管理,該模型下的所有資產均為相應區塊鏈交易的交易輸出,且區塊鏈網路上產生的所有資產被統一管理,其中每一資產均存在唯一對應的公私密金鑰對,用戶可以通過持有的公私密金鑰對來花費相應的資產。例如,當簽名方(如匯款交易中的匯款方)持有的某一資產對應於私密金鑰x_j、公開金鑰P_j時,可以按照公式I=x_j×Hash(P_j)產生相應的key-image,那麼只要該資產先前被花費過,區塊鏈節點就會記錄有相同取值的key-image,從而據此識別出“雙花”問題。
但是,由於每份資產均存在唯一對應的公私密金鑰對,使得一筆交易包含多份資產的情況下,就需要相應的多組公私密金鑰對,例如當一筆交易包含m份資產時,簽名方需要維護m組公私密金鑰對,極大地造成了公私密金鑰對的維護成本。
為此,本發明提出了新的技術方案,使得簽名方僅需要維護一組公私密金鑰對,便可針對涉及多份資產的交易產生可連結環簽名,並且能夠滿足機密交易對證明信息的需求,下面將結合實施例進行描述。
圖3是一示例性實施例提供的一種採用環簽名的機密區塊鏈交易的實現方法的流程圖。如圖3所示,該方法應用於用戶端設備,可以包括以下步驟:
步驟302,確定匯款交易M的所有參與者,每一參與者在區塊鏈帳本上存在對應的帳戶,帳戶內包括取值被記錄為相應承諾值的收入餘額、資產額被記錄為資產承諾的若干資產。
區塊鏈帳本包含區塊鏈網路中所有用戶對應的帳戶,並通過帳戶對相應用戶持有的資金進行維護。譬如圖4是一示例性實施例提供的一種帳戶之間實現資產轉移的示意圖,該圖4中示出了匯款方對應的帳戶A_j和某一收款方對應的帳戶A_e。以帳戶A_j為例,該帳戶所採用的帳戶模型包括:“收入餘額”部分和“資產”部分。
收入餘額部分與相關技術中諸如乙太坊等採用的帳戶模型相似,用於直接累計資金數額。例如,當收入餘額對應的資金數額為如圖4所示的Ar_j時,出於對該資金數額進行保密的目的,實際上在區塊鏈帳本上記錄為該資金數額Ar_j對應的承諾數額,比如根據資金數額Ar_j和亂數r_Ar_j產生的承諾數額為PC(Ar_j, r_Ar_j)。由於亂數r_Ar_j的存在,使得資金數額Ar_j產生的承諾數額PC(Ar_j, r_Ar_j)具有隨機性,除了掌握亂數r_Ar_j的匯款方之外,其他用戶僅能夠看到承諾數額PC(Ar_j, r_Ar_j),且無法據此反推出相應的資金數額Ar_j。
而資產部分與UTXO模型相似,用於分別管理若干資產。例如,資產部分可以包含如圖4所示的資產ID_j_1、ID_j_2等。其中,ID_j_1、ID_j_2等為相應資產的資產標識,以用於區分各個資產,而這些資產的資產額分別為t_j_1、t_j_2等,但出於對資產額保密的目的,實際上在區塊鏈帳本上記錄為資產額對應的承諾數額,比如根據資產額t_j_1和亂數r_j_1產生的承諾數額為PC(t_j_1, r_j_1)、根據資產額t_j_2和亂數r_j_2產生的承諾數額為PC(t_j_2, r_j_2)等。其中,區塊鏈帳本上可以採用類似於[標識,資產承諾]的形式對資產部分的各個資產進行記錄,比如可以記錄為如圖4所示的[ID_j_1, PC(t_j_1, r_j_1)]、[ID_j_2, PC(t_j_2, r_j_2)]等,本發明並不對此進行限制。其中,由於亂數r_j_1- r_j_2的存在,使得資產額t_j_1-t_j_2產生的承諾數額PC(t_j_1, r_j_1)-PC(t_j_2, r_j_2)具有隨機性,除了掌握亂數r_j_1- r_j_2的匯款方之外,其他用戶僅能夠看到承諾數額PC(t_j_1, r_j_1)-PC(t_j_2, r_j_2),且無法據此反推出相應的資產額t_j_1-t_j_2。
與上述帳戶A_j類似,如圖4所示的帳戶A_e同樣包括收入餘額部分和資產部分,其中收入餘額部分在區塊鏈帳本上記錄為根據資金數額Ar_e和亂數r_Ar_e產生的承諾數額為PC(Ar_e, r_Ar_e),資產部分在區塊鏈帳本上記錄為 [ID_e_1, PC(t_e_1, r_e_1)]、[ID_e_2, PC(t_e_2, r_e_2)]等,其中ID_e_1、ID_e_2為資產標識,承諾數額PC(t_e_1, r_e_1)由資產額t_e_1和亂數r_e_1產生、承諾數額PC(t_e_2, r_e_2)由資產額t_e_2和亂數r_e_2產生。
當然,區塊鏈帳本上並不一定採用[標識,資產承諾]的形式記錄資產。例如,當存在多種資產類型時,可以採用類似於[類型,標識,資產承諾]的形式對資產進行記錄和儲存,那麼在計算資產額、執行交易等過程中,需要考慮資產類型所帶來的影響,比如不同類型的資產之間存在資產額的比例換算等。再者,除了直接記錄“資產承諾”之外,還可以同時儲存其他資訊;以資產ID_j_1為例,可以記錄為[ID_j_1, E(t_j_1, r_j_1)],其中E(t_j_1, r_j_1)=[PC(t_j_1, r_j_1), E(t_j_1), E(r_j_1)],E(t_j_1)和E(r_j_1)分別為資產額t_j_1和亂數r_j_1對應的同態密文,可由匯款方的同態加密公開金鑰(對公開金鑰P_j進行同態加密得到)分別對資產額t_j_1和亂數r_j_1進行加密後得到。為了便於理解,下文均以[標識,資產承諾]的資產形式進行舉例說明。
步驟304,根據參與者中的真實匯款方對應帳戶內的待花費資產ID_j_1~ID_j_m、虛假匯款方i對應帳戶內的掩護資產ID_i_1~ID_i_m,以及參與者中的各個收款方對應的轉帳額的承諾值,組裝匯款交易M。
如前所述,待花費資產ID_j_1~ID_j_m在區塊鏈帳本上可以記錄為[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)],掩護資產ID_i_1~ID_i_m在區塊鏈帳本上可以記錄為[ID_i_1, PC(t_i_1, r_i_1)]~[ID_i_m, PC(t_i_m, r_i_m)],其中r_j_1~r_j_m、r_i_1~r_i_m為亂數。
通過在參與者中同時包含真實匯款方、虛假匯款方i,並且基於真實匯款方對應帳戶內的待花費資產ID_j_1~ID_j_m、虛假匯款方i對應帳戶內的掩護資產ID_i_1~ID_i_m來組裝匯款交易M,再加上下文中產生的可連結環簽名,使得虛假匯款方i可以對真實匯款方進行身份隱藏,使得其他用戶無法確定究竟在“真實匯款方和虛假匯款方i”中的哪個用戶支出了資產。
待花費資產ID_j_1~ID_j_m可以為真實匯款方所持有的任意資產、掩護資產ID_i_1~ID_i_m可以為虛假匯款方i所持有的任意資產。當然,在實際選取待花費資產ID_j_1~ID_j_m時,還需要參考匯款交易M涉及的匯款額,並確保待花費資產的資產額之和不小於匯款額。匯款額為匯款方需要向各個真實收款方轉帳的數額,這些數額由真實匯款方與各個真實收款方預先協商確定,也可以由真實匯款方自行確定。
從匯款交易M的款項輸入角度而言,涉及到真實匯款方和虛假匯款方的角色,而從款項輸出角度而言,涉及到真實收款方與虛假收款方的角色。在這些角色中,部分角色之間可能存在一定重疊。
對於真實匯款方和虛假匯款方而言,根據真實匯款方對應帳戶內的待花費資產ID_j_1~ID_j_m、虛假匯款方i對應帳戶內的掩護資產ID_i_1~ID_i_m來組裝匯款交易M,再加上下文中產生的可連結環簽名,使得虛假匯款方i可以對真實匯款方進行身份隱藏,使得其他用戶無法確定究竟在“真實匯款方和虛假匯款方i”中的哪個用戶支出了資產。這裡,虛假匯款方可以包括除真實匯款方之外的參與者,比如該虛假匯款方可以包括匯款交易M的真實收款方,譬如當真實匯款方為用戶A、真實收款方為用戶B和用戶C時,通過將用戶B和用戶C配置為虛假匯款方,不僅可使用戶B、用戶C對用戶A進行身份隱藏,甚至由於用戶B和用戶C同時屬於“匯款方”和“收款方”,從而帶來更強的迷惑作用。再比如,虛假匯款方可以包括除真實匯款方和真實收款方之外的參與者,譬如當真實匯款方為用戶A、真實收款方為用戶B和用戶C時,可以將不相干的用戶D配置為虛假匯款方,以用於對用戶A進行身份隱藏。又比如,虛假匯款方可以同時包括上述的真實收款方和其他用戶,譬如當真實匯款方為用戶A、真實收款方為用戶B和用戶C時,可以將用戶B、用戶C和用戶D配置為虛假匯款方,以用於對用戶A進行身份隱藏。
對於真實收款方與虛假收款方而言:
在一實施例中,匯款交易M的收款方可以僅包含真實收款方。一種情況下,當不存在找零時,真實收款方僅包含初始匯款對象,即最初確定與真實匯款方進行交易的對象,此時滿足待花費資產ID_j_1~ID_j_m對應的資產額t_j_1~t_j_m之和與各個初始匯款對象對應的轉帳額之和恰好相等,即不存在找零。另一種情況下,而當存在找零時,真實收款方包含真實匯款方和初始匯款對象,真實匯款方對應的轉帳額為待花費資產ID_j_1~ID_j_m對應的資產額t_j_1~t_j_m之和與各個初始匯款對象對應的轉帳額之和的差值,即找零額。
在另一實施例中,除了真實收款方之外,匯款交易M的收款方還可以包括虛假收款方。一種情況下,該虛假收款方可以包括真實匯款方,但此時不存在找零。另一種情況下,該虛假收款方可以包括除真實匯款方和真實收款方之外的參與者。而通過將虛假收款方對應的轉帳額設為0,可以避免對真實收款方的影響,同時由於所有收款方的轉帳額均為相應的同態密文,因而虛假收款方可以對真實收款方實現身份隱藏。
根據實際情況,可以僅通過虛假匯款方對真實匯款方進行身份隱藏,也可以進一步通過虛假收款方對實際收款方進行身份隱藏。在一實施例中,匯款交易M的參與者可以同時包括真實匯款方、真實收款方和區別於兩者的掩護方,這些用戶組成共n個參與者,並且該n個參與者均同時參與匯款交易的匯款與收款:對於真實匯款方而言,真實收款方和掩護方均為虛假匯款方;對於真實收款方而言,真實匯款方和掩護方均為虛假收款方,從而同時對真實匯款方和真實收款方進行身份隱藏。而且,由於每個參與者均同時參與匯款和收款,因而可以使得匯款方與收款方之間實現身份混淆,從而進一步增加身份隱藏的可靠性。
假定匯款交易M的收款方為Q_1~Q_u,對應的轉帳額分別為t’_1~t’_u,其中1≤u≤n。在匯款交易M中,與前述待花費資產對應的資產額t_j_1~t_j_m相類似的,轉帳額t’_1~t’_u在匯款交易M中被分別記錄為對應的轉帳額承諾PC(t’_1, r’_1)~PC(t’_u, r’_u),r’_1~r’_u為亂數。其中,亂數r’_1~r’_u可由真實匯款方確定,並通過諸如鏈下通道告知相應的收款方(通常僅需要告知真實收款方),使得收款方可以基於亂數r’_1~r’_u進行驗證,比如真實收款方w可以驗證PC(t’_w, r’_w)= t’_w×G+ r’_w×H是否成立。
在機密交易中,需要證明匯款交易M中的轉帳額t’_1~t’_u都不小於0。真實匯款方可以利用相關技術中的零知識證明技術,為轉帳額t’_1~t’_u分別產生相應的範圍證明RP_1~RP_u,以用於證明t’_1≥0~t’_u≥0,並將這些範圍證明RP_1~RP_u添加至匯款交易M的交易內容中。其中,所採用的零知識證明技術可以為區間證明(Range Proof)技術,譬如Bulletproofs方案等,本發明並不對此進行限制。
步驟306,根據真實匯款方所持私密金鑰x_j、公開金鑰P_j和虛假匯款方i所持公開金鑰P_i,為所述匯款交易M產生可連結環簽名,所述可連結環簽名中包含金鑰鏡像I_1~I_m,且金鑰鏡像I_1~I_m的取值與真實匯款方的私密金鑰x_j、公開金鑰P_j和資產標識ID_j_1~ID_j_m相關。
真實匯款方需要維護一組公私密金鑰對,比如私密金鑰x_j和公開金鑰P_j。在確定這組公私密金鑰對之前,需要取定一個數域Z_q和該數域上的一條橢圓曲線,比如橢圓曲線Ed25519等,令G、H為該橢圓曲線的兩個隨機的產生元,其中|G|=p為一個大素數(譬如不小於某一預設數值),並在數值範圍(0, p)中選取真實匯款方的私密金鑰x_j,相應的公開金鑰為P_j=x_j×G。對於其他參與者而言,均通過類似的方式確定出各自唯一對應的公私密金鑰對。
金鑰鏡像I_1~I_m與真實匯款方提供的待花費資產ID_j_1~ID_j_m之間一一對應,分別用於驗證相應的待花費資產是否已花費,從而解決“雙花”問題。其中,由於金鑰鏡像I_1~I_m的取值與相應資產的資產標識ID_j_1~ID_j_m相關,使得即便所有金鑰鏡像均採用同一組公私密金鑰對(即真實匯款方的私密金鑰x_j和公開金鑰P_j),也可以基於資產標識ID_j_1~ID_j_m之間的取值差異,確保產生的金鑰鏡像I_1~I_m之間完全不同,因而無需為每一資產分別維護一組公私密金鑰對,可以在解決“雙花”問題的同時,使得每一帳戶所需維護的公私密金鑰對的數量與交易所含的資產數量無關。例如,I_d=x_j×Hash_G(P_j, ID_j_d),d∈[1, m];其中,Hash_G()為上述橢圓曲線到其自身的雜湊函數。
根據待花費資產對應的資產承諾PC(t_j_1, r_j_1)~PC(t_j_m, r_j_m),以及前述的轉帳額承諾PC(t’_1, r’_1)~PC(t’_u, r’_u),可以計算得到P’’_j= [PC(t_j_1, r_j_1)+…+PC(t_j_m, r_j_m)]-[PC(t’_1, r’_1)+…+PC(t’_u, r’_u)];以及,根據待花費資產對應的亂數r_j_1~r_j_m、轉帳額對應的亂數r’_1~r’_u,可以計算得到r’’= (r_j_1+...+r_j_m)- (r’_1+...+r’_u);以及,根據待花費資產對應的資產額t_j_1~t_j_m、轉帳額t’_1~t’_u,可以計算得到t’’=(t_j_1+…+t_j_m)- (t’_1+…+t’_u)。那麼,如前所述的同態特性,可以確定P’’_j=PC(r’’, t’’)=r’’×G+t’’×H。又由於真實匯款方需要確保t_j_1+…+t_j_m= t’_1+…+t’_u,使得t’’=0,因而可以確定P’’_j= r’’×G。
那麼,從形式上可以看出上述的“P’’_j= r’’×G”與公私密金鑰對之間的關係“P_j=x_j×G”相似,並且如下文所述,虛假匯款方i必然滿足P’’_i≠r’’×G,因而可以將r’’視為對應於真實匯款方的一種私密金鑰、P’’_j為r’’對應的公開金鑰,而為了區別於真實匯款方對應的公私密金鑰對,可以將r’’視為真實匯款方對應的偽私密金鑰、P’’_j視為真實匯款方對應的偽公開金鑰。類似地,可以將P’’_i視為虛假匯款方i對應的偽公開金鑰;例如,可以計算得到虛假匯款方i對應的參數P’’_i=[PC{i, 1}+…+PC{i, m}]-[PC(t’_1, r’_1)+…+PC(t’_u, r’_u)],i∈[1, j-1]∪[j+1, n]。同時,可以計算得到虛假匯款方i所持的m份資產對應的資產額之和與轉帳額t’_1~t’_u之和的差值t’’_i,以及可以計算得到虛假匯款方i所持的m份資產對應的亂數之和與轉帳額t’_1~t’_u對應的亂數r’_1~r’_u之和的差值r’’_i。
基於同態特性可以確定P’’_i=r’’_i×G+t’’_i×H≠r’’×G。可見,參數P’’_j和r’’均唯一對應於真實匯款方、參數P’’_i唯一對應於虛假匯款方i,因而可以將r’’視為真實匯款方對應的偽私密金鑰、P’’_j視為真實匯款方對應的偽公開金鑰,以及將P’’_i視為虛假匯款方i對應的偽公開金鑰。
根據真實匯款方對應的私密金鑰x_j、公開金鑰P_j、偽私密金鑰r’’、偽公開金鑰P’’_j,虛假匯款方i對應的公開金鑰P_i、偽公開金鑰P’’_i,為匯款交易M產生可連結環簽名,可以高效、緊湊地實現下述兩方面的驗證功能:一方面,由於偽公開金鑰P’’_j與偽私密金鑰r’’之間滿足P’’_j=r’’×G、偽公開金鑰P’’_i與偽私密金鑰r’’之間滿足P’’_i≠r’’×G,所以當根據偽私密金鑰r’’、偽公開金鑰P’’_j和P’’_i產生可連結環簽名時,如果該可連結環簽名通過驗證,就能夠證明在偽公開金鑰(P’’_1,……,P’’_n)中存在某一偽公開金鑰的取值等於r’’×G,並且這個偽公開金鑰對應於前述的t’’=0,能夠使得匯款交易M的輸入與輸出等額;另一方面,當根據真實匯款方對應的私密金鑰x_j、公開金鑰P_j和虛假匯款方i對應的公開金鑰P_i產生可連結環簽名時,如果該可連結環簽名通過驗證,就能夠證明該可連結環簽名是由公開金鑰(P_1,……,P_n)中的某一公開金鑰對應的私密金鑰進行簽名得到,從而在不暴露真實匯款方身份的前提下,完成身份驗證。當然,在不考慮驗證匯款交易M的輸入與輸出是否相等的情況下,也可以直接根據真實匯款方對應的私密金鑰x_j、公開金鑰P_j和虛假匯款方i對應的公開金鑰P_i產生可連結環簽名,而不需要利用真實匯款方對應的偽私密金鑰r’’、偽公開金鑰P’’_j和虛假匯款方i對應的偽公開金鑰P’’_i,本發明並不對此進行限制。
除了上述的金鑰鏡像I_1~I_m之外,真實匯款方還可以根據偽私密金鑰r’’和偽公開金鑰P’’_j產生的金鑰鏡像I_(m+1)= r’’×Hash_G(P’’_j),從而與金鑰鏡像I_1~I_m構成共m+1個金鑰鏡像,共同用於解決“雙花”問題。實際上,由於偽私密金鑰r’’和偽公開金鑰P’’_j的取值都具有隨機性,使得不同交易產生的偽私密金鑰r’’和偽公開金鑰P’’_j必然不同,所以在根據偽私密金鑰r’’和偽公開金鑰P’’_j產生金鑰鏡像I_(m+1)時,可使金鑰鏡像I_(m+1)與相應交易之間形成一一對應關係,因而通過將金鑰鏡像I_(m+1)與歷史金鑰鏡像進行比較,以識別出針對匯款交易M的重放(replay)問題:如果金鑰鏡像I_(m+1)存在相同的歷史金鑰鏡像,就表明匯款交易M發生了重放。
步驟308,向區塊鏈網路提交簽名後的匯款交易M;其中,在交易完成後,各個收款方對應帳戶內的收入餘額增加相應的轉帳額,金鑰鏡像I_1~I_m被添加至歷史金鑰鏡像集合,且所述待花費資產ID_j_1~ID_j_m在區塊鏈帳本上被保持記錄為真實匯款方對應帳戶內的資產。
區塊鏈節點在收到匯款交易M後,可以將金鑰鏡像I_1~I_m與歷史金鑰鏡像集合進行比對,以確定歷史金鑰鏡像集合中是否存在與金鑰鏡像I_1~I_m相同的歷史金鑰鏡像。歷史金鑰鏡像集合用於儲存先前已花費的資產對應的金鑰鏡像。如果存在與金鑰鏡像I_1~I_m中的某一金鑰鏡像相同的歷史金鑰鏡像,表明該金鑰鏡像對應的資產已經被花費,即出現了“雙花”問題,應當阻止匯款交易M的執行。而如果金鑰鏡像I_1~I_m不屬於歷史金鑰鏡像集合,則表明金鑰鏡像I_1~I_m對應的資產ID_j_1~ID_j_m均未被花費,在其他交易執行條件被滿足的情況下,可以執行匯款交易M;並且,當匯款交易M完成後,金鑰鏡像I_1~I_m對應的資產ID_j_1~ID_j_m均被花費,因而需要將金鑰鏡像I_1~I_m添加至歷史金鑰鏡像集合中,以用於後續檢測與金鑰鏡像I_1~I_m相關的“雙花”問題。
在諸如乙太坊所採用的帳戶模型中,當匯款方通過交易花費一筆款項後,相應帳戶內的帳戶餘額隨即發生更新,即扣除被花費的款項額,從而確保帳戶餘額的準確性。但在本發明的技術方案中,在匯款交易M完成後,雖然真實匯款方對應帳戶內的資產ID_j_1~ID_j_m被花費,但是並不立即對真實匯款方對應帳戶進行更新,即無需立即刪除真實匯款方對應帳戶內的資產ID_j_1~ID_j_m,使得任意用戶通過區塊鏈帳本查詢真實匯款方對應帳戶時,不會在匯款交易M完成後察覺到資產變化,避免基於資產變化而暴露真實匯款方在匯款交易M中承擔的真實身份。同時,雖然真實匯款方對應帳戶內同時包含已花費和未花費的資產,但是基於對上述歷史金鑰鏡像集合的維護,可以確保真實匯款方實際僅能夠對未花費的資產進行花費,並準確檢測出真實匯款方對已花費的資產所實施的“雙花”操作。
當然,為了避免帳戶內累積的資產過多、增加區塊鏈節點的維護成本,也為了方便各個用戶對自身帳戶內資產進行管理,用戶可以對自身帳戶內的已花費資產進行清理。以上述的真實匯款方為例,該真實匯款方可以向區塊鏈網路發起資產刪除請求,以從區塊鏈帳本中刪除該真實匯款方已花費的至少一部分資產;例如,真實匯款方可以指定所需刪除的資產對應的資產標識,或者真實匯款方可以指定一時間段(可以指定時間段的兩側端點;如果僅指定左側端點,則時間段為從該左側端點對應時刻至今;如果僅指定右側端點,則時間段為從帳戶創建至該右側端點對應時刻)並刪除該時間段內產生或被花費的所有資產。
在匯款交易M完成後,轉帳額被分別匯入每一收款方的帳戶中。而由於本發明中採用如圖4所示的帳戶模型,使得轉帳額實際被匯入相應帳戶中的“收入餘額”,使得收入餘額增加相應的轉帳額。其中,對於虛假收款方而言,由於虛假收款方對應的轉帳額為0,因而虛假收款方對應帳戶的收入餘額相當於沒有發生數值變化,並且由於轉帳額被增加至“收入餘額”部分而非“資產”部分,所以不會造成虛假收款方對應帳戶內出現資產額為0的資產,避免造成帳戶的維護成本上升。
基於上述描述可知,真實匯款方產生的匯款交易M可以包括下述交易內容:
1)真實匯款方、虛假匯款方i及其資產:{[P_1:ID_1_1, …, ID_1_m], [P_2: ID_2_1, …, ID_2_m], …, [P_n:ID_n_1, …, ID_n_m]},其中P_1~P_n分別為真實匯款方和虛假匯款方的公開金鑰,比如真實匯款方對應的公開金鑰P_j、虛假匯款方i對應的公開金鑰P_i,i∈[1, j-1]∪[j+1, n]。
2)收款方及其轉帳額:{[Q_1,PC(t’_1, r’_1)], [Q_2, PC(t’_2, r’_2)],…,[Q_u,PC(t’_u, r’_u)]}。
3)範圍證明RP_1~RP_u。
當然,匯款交易M還可以包含區塊鏈網路中所需的其他交易內容,可以參考相關技術中的相關要求,此處不再一一列舉。
然後,真實匯款方可以針對上述匯款交易M的交易內容進行雜湊計算,而參數M可以表徵計算得到的雜湊值,且真實匯款方可以針對該雜湊值M產生可連結環簽名。當然,真實匯款方也可以直接針對整個交易內容產生可連結環簽名,這可能帶來相對更大的計算量。
基於如圖4所示的帳戶模型,當參與者對應帳戶內的資產不足時,可以從對應帳戶內的收入餘額劃分出至少一部分,以用於產生相應的資產。而圖4所示的帳戶模型還可以進一步變化:例如,圖5是一示例性實施例提供的一種帳戶模型的示意圖;如圖5所示,在圖4所示的包含“收入餘額”部分和“資產”部分的基礎上,帳戶模型還可以進一步包含“主餘額”部分。以帳戶A_j為例,該帳戶A_j的主餘額對應的資金數額為Ac_j,該資金數額Ac_j在區塊鏈帳本上被記錄為相應的承諾數額PC(Ac_j, r_Ac_j),其中r_Ac_j為亂數;以及,收入餘額被記錄為承諾數額PC(Ar_j, r_Ar_j)。那麼,該帳戶A_j中的主餘額、收入餘額、資產之間的關係可以包括:針對帳戶A_j的匯入資源被合併至收入餘額中,主餘額的至少一部分被劃分以用於創建資產,而收入餘額的至少一部分資金可以轉移至主餘額(譬如可以定期將收入餘額全部併入主餘額)、以對主餘額進行補充,資產用於交易轉帳至其他帳戶,從而實現了資金的流轉。當然,在一些情況下,主餘額也可以用於吸收匯入資金,收入餘額也可以用於創建資產,主餘額的至少一部分資金也可以轉移至收入餘額,本發明並不對此進行限制。上述的資金轉移、資產創建、資產消費等,均需要通過發起相應的區塊鏈交易而實現。
下面結合圖6對根據真實匯款方對應的私密金鑰x_j、公開金鑰P_j、偽私密金鑰r’’、偽公開金鑰P’’_j,虛假匯款方i對應的公開金鑰P_i、偽公開金鑰P’’_i,為匯款交易M產生可連結環簽名的過程進行描述;其中,圖6是一示例性實施例提供的一種產生可連結環簽名的流程圖。如圖6所示,可以包括以下步驟:
步驟602,產生金鑰鏡像I_1~I_(m+1)。
產生金鑰鏡像I_1~I_(m+1)的過程可以參考前述內容,此處不再贅述。
其中,I_d=x_j×Hash_G(P_j, ID_j_d),d∈[1, m];I_(m+1)=r’’×Hash_G(P’’_j)。
步驟604a,計算中間參數L_j_d、R_j_d。
真實匯款方可以從數域Z_q中選取亂數a_d(即a_1~a_m),並按照下述公式計算中間參數L_j_d、R_j_d:
L_j_d =a_d×G
R_j_d =a_d×Hash_G(P_j, ID_j_d)
因此,真實匯款方可以計算得到L_j_d:L_j_1~ L_j_m,以及R_j_d:R_j_1~ R_j_m。
進一步地,真實匯款方可以產生對應於虛假匯款方i的中間參數L_i_d、R_i_d,包括:根據中間參數L_j_d、R_j_d的取值,分別產生中間參數L_i_d、R_i_d,將在下述步驟606~510中進行描述。
步驟604b,計算中間參數L_j_(m+1)、R_j_(m+1)。
真實匯款方可以從數域Z_q中選取亂數a_(m+1),並按照下述公式計算中間參數L_j_(m+1)、R_j_(m+1):
L_j_(m+1) =a_(m+1)×G
R_j_(m+1) =a_(m+1)×Hash_G(P’’_j)
因此,真實匯款方可以計算得到L_j_(m+1)和R_j_(m+1)。進一步地,真實匯款方可以產生對應於虛假匯款方i的中間參數L_i_(m+1)、R_i_(m+1),將在下述步驟606~510中進行描述。
步驟606,計算中間參數L_(j+1)_d~L_n_d、R_(j+1)_d~R_n_d、L_(j+1)_(m+1)~L_n_(m+1)、R_(j+1)_(m+1)~R_n_(m+1)。
當i=j+1~n時,中間參數L_i_d、R_i_d的計算過程符合下述公式:
L_i_d =(s_i_d×G+c_i×P_i) mod p
R_i_d =[s_i_d×Hash_G(P_i, ID_i_d)+c_i×I_d] mod p
同時,中間參數L_i_(m+1)、R_i_(m+1)的計算過程符合下述公式:
L_i_(m+1) =[s_i_(m+1)×G+c_i×P’’_i] mod p
R_i_(m+1) =[s_i_(m+1)×Hash_G(P’’_i)+c_i×I_(m+1)] mod p
在計算過程中,涉及到s_(j+1)_d~s_n_d、s_(j+1)_(m+1)~s_n_(m+1),均為數域Z_q中的亂數。以及,在計算過程中,涉及到c_(j+1)~c_n,其計算過程符合下述公式:c_i=Hash[M, L_(i-1)_1, R_(i-1)_1,……, L_(i-1)_(m+1), R_(i-1)_(m+1)],其中Hash()為從上述橢圓曲線到資料Z_q上的雜湊函數。
在步驟604a-b中已經計算得到L_j_d、R_j_d、L_j_(m+1), R_j_(m+1)的情況下,基於L_j_d、R_j_d計算得到i∈[j+1,n]時的中間參數L_i_d、R_i_d,即上述的L_(j+1)_d~L_n_d、R_(j+1)_d~R_n_d。具體的,首先根據L_j_d、R_j_d、L_j_(m+1), R_j_(m+1)的取值計算得到c_(j+1)=Hash[M, L_j_1, R_j_1,……, L_j_(m+1), R_j_(m+1)],並根據亂數s_(j+1)_d和計算得到的c_(j+1)計算L_(j+1)_d、R_(j+1)_d,即:根據亂數s_(j+1)_1和計算得到的c_(j+1) 計算L_(j+1)_1、R_(j+1)_1,根據亂數s_(j+1)_2和計算得到的c_(j+1) 計算L_(j+1)_2、R_(j+1)_2,……,根據亂數s_(j+1)_m和計算得到的c_(j+1) 計算L_(j+1)_m、R_(j+1)_m;然後根據L_(j+1)_d、R_(j+1)_d的取值計算得到c_(j+2),並根據亂數s_(j+2)_d和計算得到的c_(j+2)計算L_(j+2)_d、R_(j+2)_d;以此類推,直至計算得到L_n_d、R_n_d。
類似地,根據亂數s_i_(m+1)、偽公開金鑰P’’_i、計算得到的c_i和金鑰鏡像I_(m+1),可以分別按照前述公式計算得到中間參數L_(j+1)_(m+1)~L_n_(m+1)、R_(j+1)_(m+1)~R_n_(m+1),此處不再一一贅述。
步驟608,計算中間參數L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)。
中間參數L_1_d、R_1_d的計算過程符合下述公式:
L_1_d=(s_1_d×G+c_1×P_1) mod p
R_1_d=(s_1_d×Hash_G(P_1, ID_1_d)+c_1×I_d) mod p
而中間參數L_1_(m+1)、R_1_(m+1)的計算過程符合下述公式:
L_1_(m+1)=[s_1_(m+1)×G+c_1×P’’_1] mod p
R_1_(m+1)=[s_1_(m+1)×Hash_G(P_1)+c_1×I_(m+1)] mod p
其中,s_1_d和s_1_(m+1)均為數域Z_q中的亂數、c_1=Hash[M, L_n_1, R_n_1,……, L_n_(m+1), R_n_(m+1)]。由於各個中間參數之間符合環形取值規則,因而雖然為了便於描述而將中間參數表達為L_1_d~L_n_d、R_1_d~R_n_d、L_1_(m+1)~L_n_(m+1)、R_1_(m+1)~ R_n_(m+1),但是L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)並非排列在首位,L_n_d、R_n_d、L_n_(m+1)、R_n_(m+1)也並非排列在末位,實際上應當認為L_1_d與L_n_d之間相鄰、R_1_d與R_n_d之間相鄰、L_1_(m+1)與L_n_(m+1)之間相鄰、R_1_(m+1)與R_n_(m+1)之間相鄰。所以,當c_1=Hash[M, L_n_1, R_n_1,……, L_n_(m+1), R_n_(m+1)]時,實質上也符合上述步驟606處所描述的c_i=Hash[M, L_(i-1)_1, R_(i-1)_1,……, L_(i-1)_(m+1), R_(i-1)_(m+1)],即c_1與c_(j+1)~c_n的計算公式一致。
步驟610,計算中間參數L_2_d~L_(j-1)_d、R_2_d~R_(j-1)_d、L_2_(m+1)~L_(j-1)_(m+1)、R_2_(m+1) ~R_(j-1)_(m+1)。
當i=2~j-1時,中間參數L_i_d、R_i_d的計算過程符合下述公式:
L_i_d =(s_i_d×G+c_i×P_i) mod p
R_i_d =(s_i_d×Hash_G(P_i, ID_i_d)+c_i×I_d) mod p
同時,中間參數L_i_(m+1)、R_i_(m+1)的計算過程符合下述公式:
L_i_(m+1) =[s_i_(m+1)×G+c_i×P’’_i] mod p
R_i_(m+1) =[s_i_(m+1)×Hash_G(P’’_i)+c_i×I_(m+1)] mod p
在計算過程中,涉及到s_2_d~s_(j-1)_d、s_2_(m+1)~ s_(j-1)_(m+1),均為數域Z_q中的亂數。以及,在計算過程中,涉及到c_2~c_(j-1),其計算過程符合下述公式:c_i=Hash(M, L_(i-1)_1, R_(i-1)_1,……, L_(i-1)_(m+1), R_(i-1)_(m+1))。
因此,在步驟608中已經計算得到L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)的情況下,可以基於L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)計算得到i∈[2,j-1]時的中間參數L_i_d、R_i_d,即上述的L_2_d~L_(j-1)_d、R_2_d~R_(j-1)_d。具體的,首先根據L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)的取值計算得到c_2,並根據亂數s_2_d和計算得到的c_2計算L_2_d、R_2_d,即:根據亂數s_2_1和計算得到的c_2計算L_2_1、R_2_1,根據亂數s_2_2和計算得到的c_2計算L_2_2、R_2_2,……,根據亂數s_2_m和計算得到的c_2計算L_2_m、R_2_m;然後根據L_2_d、R_2_d的取值計算得到c_3,並根據亂數s_3_d和計算得到的c_3計算L_3_d、R_3_d;以此類推,直至計算得到L_(j-1)_d、R_(j-1)_d。
類似地,根據亂數s_i_(m+1)、偽公開金鑰P’’_i、計算得到的c_i和金鑰鏡像I_(m+1),可以分別按照前述公式計算得到中間參數L_2_(m+1)~L_(j-1)_(m+1)、R_2_(m+1) ~R_(j-1)_(m+1),此處不再一一贅述。
步驟612,產生可連結環簽名。
基於上述步驟的處理過程,可以得到金鑰鏡像I_1,……,I_(m+1)、c_1、s_1_d~s_(j-1)_d、s_(j+1)_d~s_n_d、s_1_(m+1)~s_(j-1)_(m+1)、s_(j+1)_(m+1)~s_n_(m+1),而s_j_d、s_j_(m+1)需要簽名方按照下述公式進行計算得到:
s_j_d=(a_d-c_j×x_j) mod p
s_j_(m+1)=(a_(m+1)-c_j×r’’) mod p
其中,雖然上述公式中將c_j的取值劃分為2種情況,但首先參數j的取值實際上是固定的,比如參數j的取值固定為1或者固定為[2,n]中的某一數值,這一點應當與上述的參數i、e區分開(參數i存在n-1個取值,分別為1~j-1和j+1~n,參數e存在m個取值,分別為1~m);同時,與上文對c_1的描述相類似的:由於各個中間參數之間符合環形取值規則,因而雖然為了便於描述而將中間參數表達為L_1_d~L_n_d、R_1_d~R_n_d、L_1_(m+1)~L_n_(m+1)、R_1_(m+1)~R_n_(m+1),但是L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)並非排列在首位,L_n_d、R_n_d、L_n_(m+1)、R_n_(m+1)也並非排列在末位,實際上應當認為L_1_d與L_n_d之間相鄰、R_1_d與R_n_d之間相鄰、L_1_(m+1)與L_n_(m+1)之間相鄰、R_1_(m+1)與R_n_(m+1)之間相鄰。所以,當c_1=Hash(M, L_n_1, R_n_1,……, L_n_(m+1), R_n_(m+1))時,實質上也符合c_j=Hash(M, L_(j-1)_1, R_(j-1)_1,……, L_(j-1)_(m+1), R_(j-1)_(m+1))。
因此,真實匯款方可以產生環簽名[I_1,…, I_(m+1), c_1, s_1_1,…, s_1_(m+1),…, s_n_1,…, s_n_(m+1)],其中包含金鑰鏡像I_1~I_(m+1)、亂數s_i_1~ s_i_(m+1)、衍生數值s_j_1~ s_j_(m+1)和c_1。
圖7是一示例性實施例提供的另一種採用環簽名的機密區塊鏈交易的實現方法的流程圖。如圖7所示,該方法應用於區塊鏈節點,由區塊鏈節點對圖3所示實施例中產生的可連結環簽名進行驗證,以及對匯款交易M實施其他必要的驗證操作,可以包括以下步驟:
步驟702,接收匯款交易M,所述匯款交易M的每一參與者在區塊鏈帳本上存在對應的帳戶,帳戶內包括取值被記錄為相應承諾值的收入餘額、資產額被記錄為資產承諾的若干資產;其中,所述匯款交易M由參與者中的真實匯款方根據自身對應帳戶內的待花費資產ID_j_1~ID_j_m、虛假匯款方i對應帳戶內的掩護資產ID_i_1~ID_i_m以及參與者中的各個收款方對應的轉帳額的承諾值組裝產生。
如前所述,本發明採用“帳戶”形式對用戶持有的資產進行管理。在如圖4所示的帳戶模型中,帳戶包括“收入餘額”部分和“資產”部分;在如圖5所示的帳戶模型中,帳戶包括“收入餘額”部分、“資產”部分和“主餘額”部分。其中,“收入餘額”和“主餘額”對應的資金數額在區塊鏈帳本上均被記錄為相應的承諾數額,“資產”部分所含每一資產的資產額在區塊鏈帳本上也被記錄為相應的承諾數額。具體可以參考前述結合圖4或圖5的相關描述,此處不再贅述。
對於“資產”而言,以待花費資產ID_j_1~ID_j_m為例,ID_j_1~ID_j_m為資產標識,以用於區分不同資產;假定待花費資產ID_j_1~ID_j_m的資產額為t_j_1~t_j_m,那麼區塊鏈帳本上可以記錄為資產額t_j_1~t_j_m對應的資產承諾PC(t_j_1, r_j_1)~PC(t_j_m, r_j_m),r_j_1~r_j_m為亂數。由於亂數r_j_1~r_j_m的存在,使得數額t_j_1~t_j_m產生的資產承諾PC(t_j_1, r_j_1)~PC(t_j_m, r_j_m)具有隨機性,除了掌握亂數r_j_1~r_j_m的真實匯款方之外,其他用戶僅能夠看到資產承諾PC(t_j_1, r_j_1)~PC(t_j_m, r_j_m),且無法據此反推出相應的資產額t_j_1~t_j_m。
類似地,對於掩護資產ID_i_1~ID_i_m而言,ID_i_1~ ID_i_m為資產標識,以用於區分不同資產;假定掩護資產ID_i_1~ID_i_m的資產額為t_i_1~t_i_m,那麼區塊鏈帳本上可以記錄為資產額t_i_1~t_i_m對應的資產承諾PC(t_i_1, r_i_1)~PC(t_i_m, r_i_m),r_i_1~r_i_m為亂數。例如,虛假匯款方1持有掩護資產ID_1_1~ID_1_m,相應的資產額為t_1_1~t_1_m,那麼區塊鏈帳本上可以記錄為資產額t_1_1~t_1_m對應的資產承諾PC(t_1_1, r_1_1)~PC(t_1_m, r_1_m),r_1_1~r_1_m為僅虛假匯款方1持有的亂數。
舉例而言,區塊鏈帳本上可以採用類似於[標識,資產承諾]的形式對資產進行記錄和儲存。例如,上述的待花費資產ID_j_1~ID_j_m可以被記錄為[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)]、虛假匯款方i對應的掩護資產ID_i_1~ID_i_m 可以被記錄為[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}]。當然,此處僅為示例,區塊鏈帳本實際可以採用其他形式。例如,當存在多種資產類型時,可以採用類似於[類型,標識,資產承諾]的形式對資產進行記錄和儲存,那麼在計算資產額、執行交易等過程中,需要考慮資產類型所帶來的影響,比如不同類型的資產之間存在資產額的比例換算等。再者,除了直接記錄“資產承諾”之外,還可以同時儲存其他資訊;以待花費資產ID_j_m為例,可以記錄為[ID_j_m, E(t_j_m, r_j_m)],其中E(t_j_m, r_j_m)=[PC(t_j_m, r_j_m), E(t_j_m), E(r_j_m)],E(t_j_m)和E(r_j_m)分別為資產額t_j_m和亂數r_j_m對應的同態密文,可由真實匯款方的同態加密公開金鑰(對公開金鑰P_j進行同態加密得到)分別對資產額t_j_m和亂數r_j_m進行加密後得到。為了便於理解,下文均以[標識,資產承諾]的資產形式進行舉例說明。
從匯款交易M的款項輸入角度而言,涉及到真實匯款方和虛假匯款方的角色,而從款項輸出角度而言,涉及到真實收款方與虛假收款方的角色。在這些角色中,部分角色之間可能存在一定重疊。
對於真實匯款方和虛假匯款方而言,根據真實匯款方對應帳戶內的待花費資產ID_j_1~ID_j_m、虛假匯款方i對應帳戶內的掩護資產ID_i_1~ID_i_m來組裝匯款交易M,再加上下文中產生的可連結環簽名,使得虛假匯款方i可以對真實匯款方進行身份隱藏,使得其他用戶無法確定究竟在“真實匯款方和虛假匯款方i”中的哪個用戶支出了資產。這裡,虛假匯款方可以包括除真實匯款方之外的參與者,比如該虛假匯款方可以包括匯款交易M的真實收款方,譬如當真實匯款方為用戶A、真實收款方為用戶B和用戶C時,通過將用戶B和用戶C配置為虛假匯款方,不僅可使用戶B、用戶C對用戶A進行身份隱藏,甚至由於用戶B和用戶C同時屬於“匯款方”和“收款方”,從而帶來更強的迷惑作用。再比如,虛假匯款方可以包括除真實匯款方和真實收款方之外的參與者,譬如當真實匯款方為用戶A、真實收款方為用戶B和用戶C時,可以將不相干的用戶D配置為虛假匯款方,以用於對用戶A進行身份隱藏。又比如,虛假匯款方可以同時包括上述的真實收款方和其他用戶,譬如當真實匯款方為用戶A、真實收款方為用戶B和用戶C時,可以將用戶B、用戶C和用戶D配置為虛假匯款方,以用於對用戶A進行身份隱藏。
對於真實收款方與虛假收款方而言:
在一實施例中,匯款交易M的收款方可以僅包含真實收款方。一種情況下,當不存在找零時,真實收款方僅包含初始匯款對象,即最初確定與真實匯款方進行交易的對象,此時滿足待花費資產ID_j_1~ID_j_m對應的資產額t_j_1~t_j_m之和與各個初始匯款對象對應的轉帳額之和恰好相等,即不存在找零。另一種情況下,而當存在找零時,真實收款方包含真實匯款方和初始匯款對象,真實匯款方對應的轉帳額為待花費資產ID_j_1~ID_j_m對應的資產額t_j_1~t_j_m之和與各個初始匯款對象對應的轉帳額之和的差值,即找零額。
在另一實施例中,除了真實收款方之外,匯款交易M的收款方還可以包括虛假收款方。一種情況下,該虛假收款方可以包括真實匯款方,但此時不存在找零。另一種情況下,該虛假收款方可以包括除真實匯款方和真實收款方之外的參與者。而通過將虛假收款方對應的轉帳額設為0,可以避免對真實收款方的影響,同時由於所有收款方的轉帳額均為相應的同態密文,因而虛假收款方可以對真實收款方實現身份隱藏。
根據實際情況,可以僅通過虛假匯款方對真實匯款方進行身份隱藏,也可以進一步通過虛假收款方對實際收款方進行身份隱藏。在一實施例中,匯款交易M的參與者可以同時包括真實匯款方、真實收款方和區別於兩者的掩護方,這些用戶組成共n個參與者,並且該n個參與者均同時參與匯款交易的匯款與收款:對於真實匯款方而言,真實收款方和掩護方均為虛假匯款方;對於真實收款方而言,真實匯款方和掩護方均為虛假收款方,從而同時對真實匯款方和真實收款方進行身份隱藏。而且,由於每個參與者均同時參與匯款和收款,因而可以使得匯款方與收款方之間實現身份混淆,從而進一步增加身份隱藏的可靠性。
假定匯款交易M的收款方為Q_1~Q_u,對應的轉帳額分別為t’_1~t’_u,其中1≤u≤n。在匯款交易M中,與前述待花費資產對應的資產額t_j_1~t_j_m相類似的,轉帳額t’_1~t’_u在匯款交易M中被分別記錄為對應的轉帳額承諾PC(t’_1, r’_1)~PC(t’_u, r’_u),r’_1~r’_u為亂數。其中,亂數r’_1~r’_u可由真實匯款方確定,並通過諸如鏈下通道告知相應的收款方(通常僅需要告知真實收款方),使得收款方可以基於亂數r’_1~r’_u進行驗證,比如真實收款方w可以驗證PC(t’_w, r’_w)= t’_w×G+ r’_w×H是否成立。
在匯款交易M完成後,轉帳額被分別匯入每一收款方的帳戶中。而由於本發明中採用如圖4或圖5所示的帳戶模型,使得轉帳額實際被匯入相應帳戶中的“收入餘額”,使得收入餘額增加相應的轉帳額。其中,對於虛假收款方而言,由於虛假收款方對應的轉帳額為0,因而虛假收款方對應帳戶的收入餘額相當於沒有發生數值變化,並且由於轉帳額被增加至“收入餘額”部分而非“資產”部分,所以不會造成虛假收款方對應帳戶內出現資產額為0的資產,避免造成帳戶的維護成本上升。
步驟704a,獲取所述匯款交易M的可連結環簽名包含的金鑰鏡像I_1~I_m,所述金鑰鏡像I_1~I_m的取值與真實匯款方的私密金鑰x_j、公開金鑰P_j和資產標識ID_j_1~ ID_j_m相關。
真實匯款方需要維護一組公私密金鑰對,比如私密金鑰x_j和公開金鑰P_j。在確定這組公私密金鑰對之前,需要取定一個數域Z_q和該數域上的一條橢圓曲線,比如橢圓曲線Ed25519等,令G、H為該橢圓曲線的兩個隨機的產生元,其中|G|=p為一個大素數(譬如不小於某一預設數值),並在數值範圍(0, p)中選取真實匯款方的私密金鑰x_j,相應的公開金鑰為P_j=x_j×G。對於其他參與者而言,均通過類似的方式確定出各自唯一對應的公私密金鑰對。
金鑰鏡像I_1~I_m與真實匯款方提供的待花費資產ID_j_1~ID_j_m之間一一對應,分別用於驗證相應的待花費資產是否已花費,從而解決“雙花”問題。其中,由於金鑰鏡像I_1~I_m的取值與相應資產的資產標識ID_j_1~ID_j_m相關,使得即便所有金鑰鏡像均採用同一組公私密金鑰對(即真實匯款方的私密金鑰x_j和公開金鑰P_j),也可以基於資產標識ID_j_1~ID_j_m之間的取值差異,確保產生的金鑰鏡像I_1~I_m之間完全不同,因而無需為每一資產分別維護一組公私密金鑰對,可以在解決“雙花”問題的同時,使得每一帳戶所需維護的公私密金鑰對的數量與交易所含的資產數量無關。例如,I_d=x_j×Hash_G(P_j, ID_j_d),d∈[1, m];其中,Hash_G()為上述橢圓曲線到其自身的雜湊函數。
區塊鏈節點在收到匯款交易M後,可以將金鑰鏡像I_1~I_m與歷史金鑰鏡像集合進行比對,以確定歷史金鑰鏡像集合中是否存在與金鑰鏡像I_1~I_m相同的歷史金鑰鏡像。歷史金鑰鏡像集合用於儲存先前已花費的資產對應的金鑰鏡像。如果存在與金鑰鏡像I_1~I_m中的某一金鑰鏡像相同的歷史金鑰鏡像,表明該金鑰鏡像對應的資產已經被花費,即出現了“雙花”問題,應當阻止匯款交易M的執行。而如果金鑰鏡像I_1~I_m不屬於歷史金鑰鏡像集合,則表明金鑰鏡像I_1~I_m對應的資產ID_j_1~ID_j_m均未被花費,在其他交易執行條件被滿足的情況下,可以執行匯款交易M;並且,當匯款交易M完成後,金鑰鏡像I_1~I_m對應的資產ID_j_1~ID_j_m均被花費,因而需要將金鑰鏡像I_1~I_m添加至歷史金鑰鏡像集合中,以用於後續檢測與金鑰鏡像I_1~I_m相關的“雙花”問題。
步驟704b,驗證所述可連結環簽名,所述可連結環簽名由真實匯款方根據自身所持的私密金鑰x_j、公開金鑰P_j和虛假匯款方i所持的公開金鑰P_i而產生;其中,當所述可連結環簽名通過驗證時,所述匯款交易M被確認為輸入與輸出等額。
可連結環簽名可以由真實匯款方直接根據自身對應的私密金鑰x_j、公開金鑰P_j和虛假匯款方i對應的公開金鑰P_i產生,而不需要利用下述真實匯款方對應的偽私密金鑰r’’、偽公開金鑰P’’_j和虛假匯款方i對應的偽公開金鑰P’’_i。此時,如果該可連結環簽名通過驗證,就能夠證明該可連結環簽名是由公開金鑰(P_1,……,P_n)中的某一公開金鑰對應的私密金鑰進行簽名得到,從而在不暴露真實匯款方身份的前提下,完成身份驗證。
可連結環簽名可以由展示匯款方根據自身對應的私密金鑰x_j、公開金鑰P_j、偽私密金鑰r’’、偽公開金鑰P’’_j,以及虛假匯款方i對應的公開金鑰P_i、偽公開金鑰P’’_i而產生。其中,偽公開金鑰P’’_j= [PC(t_j_1, r_j_1)+…+PC(t_j_m, r_j_m)]-[PC(t’_1, r’_1)+… +PC(t’_u, r’_u)]、偽私密金鑰r’’=(r_j_1+...+r_j_m)-(r’_1+...+r’_u)。同時,根據虛假匯款方i持有資產[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}],真實匯款方可以計算出掩護方i對應的偽公開金鑰P’’_i=[PC{i, 1}+…+PC{i, m}]-[PC(t’_1, r’_1)+…+PC(t’_u, r’_u)],i∈[1, j-1]∪[j+1, n]。可連結環簽名的產生過程可以參考圖6所示的實施例,此處不再贅述。而區塊鏈節點通過對該可連結環簽名進行驗證,可以高效、緊湊地實現下述兩方面的驗證功能:一方面,由於偽公開金鑰P’’_j與偽私密金鑰r’’之間滿足P’’_j=r’’×G、偽公開金鑰P’’_i與偽私密金鑰r’’之間滿足P’’_i≠r’’×G,所以當根據偽私密金鑰r’’、偽公開金鑰P’’_j和P’’_i產生可連結環簽名時,如果該可連結環簽名通過驗證,就能夠證明在偽公開金鑰(P’’_1,……,P’’_n)中存在某一偽公開金鑰的取值等於r’’×G,並且這個偽公開金鑰對應於前述的t’’=0,能夠使得匯款交易M的輸入與輸出等額;另一方面,當根據真實匯款方對應的私密金鑰x_j、公開金鑰P_j和虛假匯款方i對應的公開金鑰P_i產生可連結環簽名時,如果該可連結環簽名通過驗證,就能夠證明該可連結環簽名是由公開金鑰(P_1,……,P_n)中的某一公開金鑰對應的私密金鑰進行簽名得到,從而在不暴露真實匯款方身份的前提下,完成身份驗證。
步驟706,當滿足交易執行條件時,執行所述匯款交易M,使各個收款方對應帳戶內的收入餘額增加相應的轉帳額;所述交易執行條件包括:所述金鑰鏡像I_1~I_m不屬於歷史金鑰鏡像集合、所述可連結環簽名通過驗證;其中,所述金鑰鏡像I_1~I_m在交易完成後被添加至所述歷史金鑰鏡像集合,且所述待花費資產ID_j_1~ID_j_m在區塊鏈帳本上被保持記錄為真實匯款方對應帳戶內的資產。
在諸如乙太坊所採用的帳戶模型中,當匯款方通過交易花費一筆款項後,相應帳戶內的帳戶餘額隨即發生更新,即扣除被花費的款項額,從而確保帳戶餘額的準確性。但在本發明的技術方案中,在匯款交易M完成後,雖然真實匯款方對應帳戶內的資產ID_j_1~ID_j_m被花費,但是並不立即對真實匯款方對應帳戶進行更新,即無需立即刪除真實匯款方對應帳戶內的資產ID_j_1~ID_j_m,使得任意用戶通過區塊鏈帳本查詢真實匯款方對應帳戶時,不會在匯款交易M完成後察覺到資產變化,避免基於資產變化而暴露真實匯款方在匯款交易M中承擔的真實身份。同時,雖然真實匯款方對應帳戶內同時包含已花費和未花費的資產,但是基於對上述歷史金鑰鏡像集合的維護,可以確保真實匯款方實際僅能夠對未花費的資產進行花費,並準確檢測出真實匯款方對已花費的資產所實施的“雙花”操作。
當然,為了避免帳戶內累積的資產過多、增加區塊鏈節點的維護成本,也為了方便各個用戶對自身帳戶內資產進行管理,用戶可以對自身帳戶內的已花費資產進行清理。以上述的真實匯款方為例,該真實匯款方可以向區塊鏈網路發起資產刪除請求,以從區塊鏈帳本中刪除該真實匯款方已花費的至少一部分資產;例如,真實匯款方可以指定所需刪除的資產對應的資產標識,或者真實匯款方可以指定一時間段(可以指定時間段的兩側端點;如果僅指定左側端點,則時間段為從該左側端點對應時刻至今;如果僅指定右側端點,則時間段為從帳戶創建至該右側端點對應時刻)並刪除該時間段內產生或被花費的所有資產。
可連結環簽名中還可以包含金鑰鏡像I_(m+1),該金鑰鏡像由真實匯款方根據自身對應的偽私密金鑰r’’和偽公開金鑰P’’_j、虛假匯款方i對應的偽公開金鑰P’’_i產生,例如I_(m+1)= r’’×Hash_G(P’’_j)。如前所述,金鑰鏡像I_(m+1)與相應交易之間存在一一對應的關係,因而通過將金鑰鏡像I_(m+1)與歷史金鑰鏡像進行比較,以識別出針對匯款交易M的重放(replay)問題:如果金鑰鏡像I_(m+1)存在相同的歷史金鑰鏡像,就表明匯款交易M發生了重放。那麼,交易執行條件還可以包括:金鑰鏡像I_(m+1)不屬於歷史金鑰鏡像集合。
當真實匯款方對應於公開金鑰P_j、虛假匯款方i對應於公開金鑰P_i時,交易執行條件還可以包括:資產ID_k_d歸屬於公開金鑰P_k的所有方,k∈[1, n]、d∈[1, m]。換言之,區塊鏈節點可以對各個資產的歸屬情況進行驗證。
在機密交易中,區塊鏈節點還可以驗證匯款交易M中的轉帳額t’_1~t’_u是否均不小於0。而轉帳額承諾PC(t’_1, r’_1)~PC(t’_u, r’_u)是真實匯款方根據轉帳額t’_1~t’_u、亂數r’_1~r’_u而產生,且轉帳額t’_1~t’_u和亂數r’_1~r’_u只有真實匯款方和收款方Q_1~Q_u掌握,因而驗證方需要通過匯款交易M所含的範圍證明RP_1~RP_u實施驗證操作,以確定轉帳額t’_1~t’_u是否滿足t’_1≥0~t’_u≥0,其中範圍證明RP_1~RP_u由真實匯款方產生並添加至匯款交易M中。那麼,交易執行條件還可以包括:所有轉帳額均不小於0。
下面結合圖8對步驟704b中驗證可連結環簽名的過程進行描述;其中,圖8是一示例性實施例提供的一種驗證可連結環簽名的流程圖。如圖8所示,可以包括以下步驟:
步驟802,驗證標識ID_k_d對應的資產是否歸屬於公開金鑰P_k的持有方,k∈[1, n]、d∈[1, m]。
驗證方可以為區塊鏈網路中的區塊鏈節點,該區塊鏈節點在收到真實匯款方提交的匯款交易M後,可以對該匯款交易M的環簽名進行驗證;類似地,每一區塊鏈節點均會收到該匯款交易M,並作為驗證方而實施驗證。其中,匯款交易M可以由用戶端設備發送至驗證方,或者匯款交易M可由某一驗證方從用戶端設備收到後轉發至其他驗證方,或者匯款交易M可由某一驗證方從另一驗證方處收到後轉發至其他驗證方。
驗證方作為區塊鏈節點而維護有全量的區塊鏈帳本,使得驗證方可以獲知每一用戶的資產持有情況。匯款交易M中涉及到用戶k(對應於公開金鑰P_k)持有的資產ID_k_d,而驗證方可以基於維護的資產持有情況來分別驗證每一公開金鑰P_k與相應資產ID_k_d之間的對應關係是否成立,即公開金鑰P_k的持有者是否擁有標識ID_k_d對應的m份資產。如果每一公開金鑰P_k與相應陣列中的標識ID_k_d之間的對應關係均成立,可以繼續執行後續步驟;如果某一標識對應的資產並不屬於公開金鑰P_k的持有方,驗證方可以判定匯款交易M無效,而無需繼續執行後續的步驟804~708。
步驟804,根據s_k_1~s_k_(m+1)依次計算L_k_1~ L_k_(m+1)、R_k_1~R_k_(m+1)。
步驟806,根據L_n_1~L_n_(m+1)、R_n_1~R_n_(m+1)計算c_1’,驗證c_1’是否等於c_1。
驗證方可以根據環簽名所含的亂數和/或其衍生數值,計算中間參數L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1)、L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),以驗證中間參數L_j_d與L_i_d之間是否符合環形取值規則、中間參數R_j_d與R_i_d之間是否符合環形取值規則、中間參數L_j_(m+1)與L_i_(m+1)之間是否符合環形取值規則、中間參數R_j_(m+1)與R_i_(m+1)之間是否符合環形取值規則。
例如,當環簽名所含的亂數和/或其衍生數值包括:s_1_1~s_1_(m+1),… ,s_n_1~s_n_(m+1)、c_1時,中間參數L_j_d與L_i_d之間的環形取值規則可以包括:
L_k_d=(s_k_d×G+c_k×P_k) mod p,h∈[1, n]
中間參數L_j_(m+1)與L_i_(m+1)之間的環形取值規則包括:
L_k_(m+1) =[s_k_(m+1)×G+c_k×P’’_k] mod p
中間參數R_j_d與R_i_d之間的環形取值規則包括:
R_k_d=[s_k_d×Hash_G(P_k, ID_k_d)+c_k×I_d] mod p
中間參數R_j_(m+1)與R_i_(m+1)之間的環形取值規則包括:
R_k_(m+1) =[s_k_(m+1)×Hash_G(P’’_k)+c_k×I_(m+1)] mod p
那麼,驗證方可以首先根據s_1_d、c_1、G、P_1和p產生L_1_d,即L_1_1~ L_1_m,以及根據s_1_d、c_1、P_1、ID_1_d、I_d和p產生R_1_d,即R_1_1~ R_1_m;以及,驗證方根據s_1_(m+1)、c_1、G、P’’_1和p產生L_1_(m+1),根據s_1_(m+1)、c_1、P’’_1、I_(m+1)和p產生R_1_(m+1)。
然後,驗證方可以根據M、L_1_d、R_1_d、L_1_(m+1)和R_1_(m+1)產生c_2,並根據s_2_d、c_2、G、P_2和p產生L_2_d,根據s_2_d、c_2、P_2、ID_2_d、I_d和p產生R_2_d,根據s_2_(m+1)、c_2、G、P’’_2和p產生L_2_(m+1),以及根據s_2_(m+1)、c_2、P’’_2、I_(m+1)和p產生R_2_(m+1);以此類推,直至驗證方根據M、L_(n-1)_d、R_(n-1)_d、L_(n-1)_(m+1)和R_(n-1)_(m+1)產生c_n,並根據s_n_d、c_n、G、P_n和p產生L_n_d,根據s_n_d、c_n、P_n、ID_n_d、I_d和p產生R_n_d,根據s_n_(m+1)、c_n、G、P’’_n和p產生L_n_(m+1),以及根據s_n_(m+1)、c_n、P’’_n、I_(m+1)和p產生R_n_(m+1)。
進一步地,驗證方可以按照上述針對c_k的計算公式,計算得到c_1’=Hash[M, L_n_1, R_n_1,……, L_n_(m+1), R_n_(m+1)]。之所以此處採用c_1’,是為了區分於環簽名所含的c_1,那麼驗證方可以將該c_1’與環簽名所含的c_1進行比較:如果c_1’與c_1相等,表明上述的環形取值規則被滿足,可以確定:1)在偽公開金鑰P_1~P_n中,存在一個偽公開金鑰使得匯款交易M的匯入額等於匯出額;2)環簽名由公開金鑰P_1~P_m中的某一公開金鑰對應的私密金鑰產生。而如果c_1’與c_1不相等,表明1)和2)中至少一個不成立,該匯款交易M被確認為無效,無需繼續執行下述步驟808。
步驟808,驗證範圍證明RP_1~RP_u。
驗證方從匯款交易M的交易內容中獲取範圍證明RP_1~RP_u並驗證,以確定相應的轉帳額t’_1~t’_u是否均滿足不小於0。如果滿足,則轉入步驟810,否則匯款交易M被確認為無效,無需繼續執行下述步驟810。
步驟810,驗證金鑰鏡像I_1~I_(m+1)是否已存在。
在一實施例中,驗證方可以將金鑰鏡像I_1~I_(m+1)與歷史金鑰鏡像進行比較,從而確定金鑰鏡像I_1~ I_(m+1)是否已存在。如果金鑰鏡像I_1~I_(m+1)中的任一金鑰鏡像已存在對應的歷史金鑰鏡像,可以判定匯款交易M無效;如果金鑰鏡像I_1~I_(m+1)均不存在對應的歷史金鑰鏡像,可以判定匯款交易M有效,可以執行該匯款交易M、完成匯款操作。
圖9是一示例性實施例提供的一種設備的示意結構圖。請參考圖9,在硬體層面,該設備包括處理器902、內部匯流排904、網路介面906、記憶體908以及非揮發性記憶體910,當然還可能包括其他業務所需要的硬體。處理器902從非揮發性記憶體910中讀取對應的電腦程式到記憶體908中然後運行,在邏輯層面上形成採用環簽名的機密區塊鏈交易的實現裝置。當然,除了軟體實現方式之外,本發明一個或多個實施例並不排除其他實現方式,比如邏輯器件抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯器件。
請參考圖10,在軟體實施方式中,該採用環簽名的機密區塊鏈交易的實現裝置可以包括:
參與者確定單元1001,確定匯款交易M的所有參與者,每一參與者在區塊鏈帳本上存在對應的帳戶,帳戶內包括取值被記錄為相應承諾值的收入餘額、資產額被記錄為資產承諾的若干資產;
交易組裝單元1002,根據參與者中的真實匯款方對應帳戶內的待花費資產ID_j_1~ID_j_m、虛假匯款方i對應帳戶內的掩護資產ID_i_1~ID_i_m,以及參與者中的各個收款方對應的轉帳額的承諾值,組裝匯款交易M;
簽名產生單元1003,根據真實匯款方所持私密金鑰x_j、公開金鑰P_j和虛假匯款方i所持公開金鑰P_i,為所述匯款交易M產生可連結環簽名,所述可連結環簽名中包含金鑰鏡像I_1~I_m,且金鑰鏡像I_1~I_m的取值與真實匯款方的私密金鑰x_j、公開金鑰P_j和資產標識ID_j_1~ID_j_m相關;
交易提交單元1004,向區塊鏈網路提交簽名後的匯款交易M;其中,在交易完成後,各個收款方對應帳戶內的收入餘額增加相應的轉帳額,金鑰鏡像I_1~I_m被添加至歷史金鑰鏡像集合,且所述待花費資產ID_j_1~ID_j_m在區塊鏈帳本上被保持記錄為真實匯款方對應帳戶內的資產。
可選的,所述虛假匯款方包括:除真實匯款方和真實收款方之外的參與者;或者,所述虛假匯款方包括:除真實匯款方之外的參與者。
可選的,所述收款方包括真實收款方和虛假收款方;其中,虛假收款方對應的轉帳額為0。
可選的,當不存在找零時,所述真實收款方包括:初始匯款對象;當存在找零時,所述真實收款方包括:初始匯款對象和所述真實匯款方;其中,所述虛假收款方包括:除真實收款方之外的參與者。
可選的,
參與者對應帳戶內的資產包括:由對應帳戶內的收入餘額的至少一部分劃分而產生的資產;或者,
參與者對應帳戶內還包括主餘額,所述主餘額在區塊鏈帳本上被記錄為相應的承諾值;其中,參與者對應帳戶內的資產包括:由對應帳戶內的主餘額的至少一部分劃分而產生的資產。
可選的,當參與者對應帳戶內包括主餘額時,對應帳戶內的收入餘額還在合併命令的指示下被合併至對應帳戶內的主餘額。
可選的,通過下述公式計算所述金鑰鏡像I_1~I_m:
I_d=x_j×Hash_G(P_j, ID_j_d),d∈[1, m];
其中,Hash_G()為橢圓曲線到其自身的雜湊函數。
可選的,還包括:
證明產生單元1005,針對所述匯款交易M的各個收款方對應的轉帳額,分別產生相應的範圍證明,所述範圍證明被組裝至所述匯款交易M中,以用於證明相應的轉帳額不小於0。
可選的,簽名產生單元1003具體用於:
根據待花費資產ID_j_1~ID_j_m對應的資產額t_j_1~t_j_m、亂數r_j_1~r_j_m和資產承諾PC(t_j_1, r_j_1)~PC(t_j_m, r_j_m),以及收款方Q_1~Q_u對應的轉帳額t’_1~t’_u、亂數r’_1~r’_u和轉帳額承諾PC(t’_1, r’_1)~PC(t’_u, r’_u),確定對應於真實匯款方的偽公開金鑰P’’_j= [PC(t_j_1, r_j_1)+…+PC(t_j_m, r_j_m)]-[PC(t’_1, r’_1)+…+PC(t’_u, r’_u)]、對應於真實匯款方的偽私密金鑰r’’= (r_j_1+...+r_j_m)- (r’_1+...+r’_u),u≥1;
根據掩護資產ID_i_1~ID_i_m對應的資產承諾PC{i, 1}~PC{i, m},確定對應於虛假匯款方i的偽公開金鑰P’’_i=[PC{i, 1}+…+PC{i, m}]-[PC(t’_1, r’_1)+…+PC(t’_u, r’_u)],i∈[1, j-1]∪[j+1, n];
根據真實匯款方對應的私密金鑰x_j、公開金鑰P_j、偽私密金鑰r’’、偽公開金鑰P’’_j,虛假匯款方i對應的公開金鑰P_i、偽公開金鑰P’’_i,為所述匯款交易M產生可連結環簽名。
可選的,還包括:
鏡像產生單元1006,根據真實匯款方對應的偽私密金鑰r’’、偽公開金鑰P’’_j,產生金鑰鏡像I_(m+1)= r’’×Hash_G(P’’_j);其中,所述可連結環簽名還包含所述金鑰鏡像I_(m+1)。
可選的,簽名產生單元1003具體用於:
分別產生對應於真實匯款方的中間參數L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1),以及對應於虛假匯款方i的中間參數L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),d∈[1, m];其中,中間參數L_j_d與L_i_d之間符合環形取值規則、中間參數L_j_(m+1)與L_i_(m+1)之間符合環形取值規則、中間參數R_j_d與R_i_d之間符合環形取值規則、中間參數R_j_(m+1)與R_i_(m+1)之間符合環形取值規則,且中間參數L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1)、L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1)的取值與至少一個被選取的亂數和/或其衍生數值相關;
根據被選取的亂數和/或其衍生數值,產生針對所述匯款交易M的可連結環簽名。
可選的,
P_j =x_j×G,G為橢圓曲線的基點,|G|=p且p為素數,0<x_j<p;
產生對應於真實匯款方的中間參數L_j_d、R_j_d,包括:根據在所述橢圓曲線所處的數域Z_q中選取的亂數a_d,計算中間參數L_j_d、R_j_d,使得L_j_d=a_d×G、R_j_d=a_d×Hash_G(P_j, ID_j_d);其中,Hash_G()為從所述橢圓曲線到其自身的雜湊函數;
產生對應於真實匯款方的中間參數L_j_(m+1)、R_j_(m+1),包括:根據在所述橢圓曲線所處的數域Z_q中選取的亂數a_(m+1),計算中間參數L_j_(m+1)、R_j_(m+1),使得L_j_(m+1)=a_(m+1)×G、R_j_(m+1)= a_(m+1)×Hash_G(P’’_j);
產生對應於虛假匯款方i的中間參數L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),包括:根據中間參數L_j_d、R_j_d的取值,產生中間參數L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),使得L_i_d =(s_i_d×G+c_i×P_i) mod p、R_i_d =(s_i_d×Hash_G(P_i, ID_i_d)+c_i×I_d) mod p、L_i_(m+1) =[s_i_(m+1)×G+c_i×P’’_i] mod p、R_i_(m+1) =[s_i_(m+1)×Hash_G(P’’_i)+c_i×I_(m+1)] mod p,I_d=x_j×Hash_G(P_j, ID_j_d)、I_(m+1)=r’’×Hash_G(P’’_j);其中,s_i_1~ s_i_(m+1)為數域Z_q中的亂數,當i=1時c_1=Hash(M, L_n_1, R_n_1,……, L_n_(m+1), R_n_(m+1))、當i∈[2,j-1]∪[j+1,n]時c_i=Hash(M, L_(i-1)_1, R_(i-1)_1,……, L_(i-1)_(m+1), R_(i-1)_(m+1)),Hash()為從所述橢圓曲線到數域Z_q的雜湊函數;
被選取的亂數和/或其衍生數值包括:亂數s_i_1~ s_i_(m+1)、衍生數值c_1、衍生數值s_j_1~ s_j_(m+1);其中,s_j_d=(a_d-c_j×x_j) mod p、s_j_(m+1)= [a_(m+1)-c_j×r’’] mod p,當j的取值被確定為1時c_j=Hash(M, L_n_1, R_n_1,……, L_n_(m+1), R_n_(m+1))、當j的取值被確定為屬於[2, n]時c_j=Hash(M, L_(j-1)_1, R_(j-1)_1,……, L_(j-1)_ (m+1), R_(j-1)_ (m+1))。
可選的,還包括:
資產刪除單元1007,向區塊鏈網路發起資產刪除請求,以從區塊鏈帳本中刪除所述真實匯款方對應帳戶內已花費的至少一部分資產。
圖11是一示例性實施例提供的一種設備的示意結構圖。請參考圖11,在硬體層面,該設備包括處理器1102、內部匯流排1104、網路介面1106、記憶體1108以及非揮發性記憶體1110,當然還可能包括其他業務所需要的硬體。處理器1102從非揮發性記憶體1110中讀取對應的電腦程式到記憶體1108中然後運行,在邏輯層面上形成採用環簽名的機密區塊鏈交易的實現裝置。當然,除了軟體實現方式之外,本發明一個或多個實施例並不排除其他實現方式,比如邏輯器件抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯器件。
請參考圖12,在軟體實施方式中,該採用環簽名的機密區塊鏈交易的實現裝置可以包括:
交易接收單元1201,接收匯款交易M,所述匯款交易M的每一參與者在區塊鏈帳本上存在對應的帳戶,帳戶內包括取值被記錄為相應承諾值的收入餘額、資產額被記錄為資產承諾的若干資產;其中,所述匯款交易M由參與者中的真實匯款方根據自身對應帳戶內的待花費資產ID_j_1~ID_j_m、虛假匯款方i對應帳戶內的掩護資產ID_i_1~ID_i_m以及參與者中的各個收款方對應的轉帳額的承諾值組裝產生;
鏡像獲取單元1202,獲取所述匯款交易M的可連結環簽名包含的金鑰鏡像I_1~I_m,所述金鑰鏡像I_1~I_m的取值與真實匯款方的私密金鑰x_j、公開金鑰P_j和資產標識ID_j_1~ID_j_m相關;
簽名驗證單元1203,驗證所述可連結環簽名,所述可連結環簽名由真實匯款方根據自身所持的私密金鑰x_j、公開金鑰P_j和虛假匯款方i所持的公開金鑰P_i而產生;其中,當所述可連結環簽名通過驗證時,所述匯款交易M被確認為輸入與輸出等額;
交易執行單元1204,當滿足交易執行條件時,執行所述匯款交易M,使各個收款方對應帳戶內的收入餘額增加相應的轉帳額;所述交易執行條件包括:所述金鑰鏡像I_1~I_m不屬於歷史金鑰鏡像集合、所述可連結環簽名通過驗證;其中,所述金鑰鏡像I_1~I_m在交易完成後被添加至所述歷史金鑰鏡像集合,且所述待花費資產ID_j_1~ID_j_m在區塊鏈帳本上被保持記錄為真實匯款方對應帳戶內的資產。
可選的,所述虛假匯款方包括:除真實匯款方和真實收款方之外的參與者;或者,所述虛假匯款方包括:除真實匯款方之外的參與者。
可選的,所述收款方包括真實收款方和虛假收款方;其中,虛假收款方對應的轉帳額為0。
可選的,當不存在找零時,所述真實收款方包括:初始匯款對象;當存在找零時,所述真實收款方包括:初始匯款對象和所述真實匯款方;其中,所述虛假收款方包括:除真實收款方之外的參與者。
可選的,
參與者對應帳戶內的資產包括:由對應帳戶內的收入餘額的至少一部分劃分而產生的資產;或者,
參與者對應帳戶內還包括主餘額,所述主餘額在區塊鏈帳本上被記錄為相應的承諾值;其中,參與者對應帳戶內的資產包括:由對應帳戶內的主餘額的至少一部分劃分而產生的資產。
可選的,還包括:
餘額合併單元1205,當參與者對應帳戶內包括主餘額時,根據參與者發出的合併命令,將對應帳戶內的收入餘額合併至對應帳戶內的主餘額。
可選的,所述金鑰鏡像I_1~I_m由匯款方通過下述公式計算得到:
I_d=x_j×Hash_G(P_j, ID_j_d),d∈[1, m];
其中,Hash_G()為橢圓曲線到其自身的雜湊函數。
可選的,還包括:
範圍驗證單元1206,根據匯款交易M所含的範圍證明,驗證各個收款方對應的轉帳額是否均不小於0;
其中,所述交易執行條件還包括:各個收款方對應的轉帳額均不小於0。
可選的,所述交易執行條件還包括:資產ID_k_d歸屬於公開金鑰P_k的所有方,k∈[1, n]、d∈[1, m]、i∈[1, j-1]∪[j+1, n]。
可選的,所述可連結環簽名由真實匯款方根據對應於自身的私密金鑰x_j、公開金鑰P_j、偽私密金鑰r’’和偽公開金鑰P’’_j,以及對應於虛假匯款方i的公開金鑰P_i和偽公開金鑰P’’_i而產生,偽公開金鑰P’’_j= [PC(t_j_1, r_j_1)+…+PC(t_j_m, r_j_m)]-[PC(t’_1, r’_1)+…+PC(t’_u, r’_u)]、偽私密金鑰r’’= (r_j_1+...+r_j_m)- (r’_1+...+r’_u)、偽公開金鑰P’’_i=[PC{i, 1}+…+PC{i, m}]-[PC(t’_1, r’_1)+…+PC(t’_u, r’_u)],i∈[1, j-1]∪[j+1, n];
其中,資產標識ID_j_1~ID_j_m對應於資產額t_j_1~t_j_m、亂數r_j_1~r_j_m和資產承諾PC(t_j_1, r_j_1)~PC(t_j_m, r_j_m),掩護資產ID_i_1~ID_i_m對應於資產承諾PC{i, 1}~PC{i, m},收款方Q_1~Q_u對應於轉帳額t’_1~t’_u、亂數r’_1~r’_u和轉帳額承諾PC(t’_1, r’_1)~PC(t’_u, r’_u),u≥1。
可選的,所述可連結環簽名還包括金鑰鏡像I_(m+1) = r’’×Hash_G(P’’_j);
其中,所述交易執行條件還包括:金鑰鏡像I_(m+1)不屬於所述歷史金鑰鏡像集合。
可選的,真實匯款方根據對應於自身的私密金鑰x_j、公開金鑰P_j、偽私密金鑰r’’、偽公開金鑰P’’_j,虛假匯款方i對應的公開金鑰P_i、偽公開金鑰P’’_i,分別產生對應於真實匯款方的中間參數L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1),以及對應於虛假匯款方i的中間參數L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),並根據與中間參數L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1)、L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1)的取值相關的亂數和/或其衍生數值而產生所述可連結環簽名,d∈[1, m];簽名驗證單元1203具體用於:
根據所述環簽名所含的亂數和/或其衍生數值,計算中間參數L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1)、L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),以驗證中間參數L_j_d與L_i_d之間是否符合環形取值規則、中間參數L_j_(m+1)與L_i_(m+1)之間是否符合環形取值規則、中間參數R_j_d與R_i_d之間是否符合環形取值規則、中間參數R_j_(m+1)與R_i_(m+1)之間是否符合環形取值規則。
可選的,
P_j =x_j×G,G為橢圓曲線的基點,|G|=p且p為素數,0<x_j<p;
所述環簽名所含的亂數和/或其衍生數值包括:s_k_1~s_k_(m+1)、c_1,k∈[1, n];
中間參數L_j_d與L_i_d之間的環形取值規則包括:L_k_d =(s_k_d×G+c_k×P_k) mod p;其中,s_k_d屬於所述橢圓曲線所處的數域Z_q,Hash()為從所述橢圓曲線到數域Z_q的雜湊函數;
中間參數L_j_(m+1)與L_i_(m+1)之間的環形取值規則包括:L_k_(m+1) =[s_k_(m+1)×G+c_k×P’’_k] mod p;其中,s_k_(m+1)屬於數域Z_q;
中間參數R_j_d與R_i_d之間的環形取值規則包括:R_k_d =(s_k_d×Hash_G(P_k, ID_k_d)+c_k×I_d) mod p,I_d被包含於所述環簽名中;
中間參數R_j_(m+1)與R_i_(m+1)之間的環形取值規則包括:R_k_(m+1) =[s_k_(m+1)×Hash_G(P’’_k)+c_k×I_(m+1)] mod p,I_(m+1)被包含於所述環簽名中;
其中,當h=1時c_1=Hash(M, L_n_1, R_n_1,……, L_n_(m+1), R_n_(m+1))、當h∈[2, n]時c_k=Hash(M, L_(h-1)_1, R_(h-1)_1,……, L_(h-1)_(m+1), R_(h-1)_(m+1))。
可選的,還包括:
資產刪除單元1207,根據任一參與者向區塊鏈網路發起的資產刪除請求,從區塊鏈帳本中刪除所述任一參與者對應帳戶內已花費的至少一部分資產。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、蜂巢式電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
在一個典型的配置中,電腦包括一個或多個處理器 (CPU)、輸入/輸出介面、網路介面和記憶體。
記憶體可能包括電腦可讀介質中的非永久性記憶體,隨機存取記憶體(RAM)和/或非揮發性記憶體等形式,如唯讀記憶體(ROM)或快閃記憶體(flash RAM)。記憶體是電腦可讀介質的示例。
電腦可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存介質的例子包括,但不限於相變記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、電可擦除可程式設計唯讀記憶體(EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、磁盒式磁帶、磁片儲存、量子記憶體、基於石墨烯的儲存介質或其他磁性存放裝置或任何其他非傳輸介質,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀介質不包括暫存電腦可讀媒體(transitory media),如調變的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本發明特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在圖式中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
在本發明一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本發明一個或多個實施例。在本發明一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指並包含一個或多個相關聯的列出專案的任何或所有可能組合。
應當理解,儘管在本發明一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本發明一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於確定”。
以上所述僅為本發明一個或多個實施例的較佳實施例而已,並不用以限制本發明一個或多個實施例,凡在本發明一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明一個或多個實施例保護的範圍之內。