這裡將詳細地對示例性實施例進行說明,其示例表示在圖式中。下面的描述涉及圖式時,除非另有表示,不同圖式中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本說明書一個或多個實施例相一致的所有實施方式。相反,它們僅是與如所附申請專利範圍中所詳述的、本說明書一個或多個實施例的一些態樣相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本說明書示出和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本說明書所描述的更多或更少。此外,本說明書中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本說明書中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
圖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,確定匯款方所持的m份待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)]。
如前所述,出於對所持資產進行保密的目的,匯款方和其他任意使用者所持有的資產,在區塊鏈帳本上均記錄為相應的承諾數額、而非直接記錄明文的資產數額。以待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_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_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC (t_j_m, r_j_m)]的形式對相應的資產進行了列舉,但在區塊鏈帳本上並不一定採用[標識,資產承諾]的形式進行記錄和儲存,比如可以採用其他形式或進一步包含其他資訊等,本說明書並不對此進行限制。
當採用相關技術中的UTXO模型時,諸如上述的匯款方或下述的收款方、掩護方等,每一使用者均可以存在一組公私密金鑰對,這組公私密金鑰對唯一對應於相應的使用者。同時,雖然並未針對每一使用者建立帳戶、沒有基於帳戶對使用者持有的資產進行管理,而是對所有資產進行統一管理,但是透過在公私密金鑰對與資產之間建立關聯關係,相當於可以透過公私密金鑰對有效管理使用者持有的資產,其效果相當於針對每一使用者建立了帳戶並基於帳戶對使用者持有的資產進行管理,並且使用者此時僅需維護一組公私密金鑰對,而不同資產之間則透過資產標識予以區分,無需針對每一資產分別維護一組公私密金鑰對。
當然,本說明書也可以採用“帳戶”形式實現資產管理。例如,可以借鑒UTXO模型和相關技術中諸如乙太坊等採用的帳戶模型,實現了基於“帳戶”形式的資產管理模型,即資產帳戶模型。資產帳戶模型可以為每一使用者分別生成對應的帳戶,並基於帳戶對使用者持有的資產進行管理。譬如圖4是一示例性實施例提供的一種資產帳戶模型的示意圖,該圖4所示為匯款方對應的帳戶A_j。與上述的帳戶模型不同的是,帳戶A_j中並非直接記錄匯款方的帳戶餘額,而是記錄了匯款方持有的資產,比如資產[ID_j_1, PC(t_j_1, r_j_1)]、[ID_j_2, PC(t_j_2, r_j_2)]等,這些資產之間可以透過一一對應的資產標識予以明確區分。同時,基於帳戶A_j的存在,使得匯款方只需要維護對應於該帳戶A_j的一組公私密金鑰對,比如私密金鑰x_j、公用金鑰P_j,即可針對該帳戶A_j下的所有資產進行統一管理,而無需為每一資產分別維護一組公私密金鑰對、區別於門羅幣採用的技術方案,可以極大地降低匯款方和其他使用者對於公私密金鑰對的維護成本。
當採用UTXO模型時,每一資產為相應的歷史交易的交易輸出。而資產帳戶模型中維護的資產可以存在多種類型。例如,與UTXO模型相類似的,資產帳戶模型中的資產可以為相應的歷史交易的交易輸出,比如待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)]為匯款方先前參與的歷史交易形成的交易輸出,且匯款方在這些交易中處於“收款方”的角色,再比如資產[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}]為掩護方i先前參與的歷史交易形成的交易輸出,且掩護方i在這些交易中處於“收款方”的角色。再例如,與帳戶模型相類似的,資產帳戶模型可以存在相應的帳戶餘額,並主動對該帳戶餘額的至少一部分進行劃分,以形成具有一定資產額的資產,比如待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)]被從匯款方對應的帳戶餘額中劃分而生成、資產[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}]被從掩護方i對應的帳戶餘額中劃分而生成。對於資產由帳戶餘額中劃分生成的情況,可以將所有資產餘額均劃分為相應的資產進行管理,也可以將部分帳戶餘額劃分為資產、剩餘的帳戶餘額仍以數值的形式進行維護(圖4中未示出這一數值)。
在匯款方所持有的所有資產中,待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)]可以為匯款方所持有的任意資產。當然,在實際選取待花費資產時,還需要參考匯款交易M涉及的匯款額,並確保待花費資產的資產額之和不小於匯款額。
步驟304a,根據收款方Q_1~Q_u對應的轉帳額t’_1~t’_u,獲取對應於匯款方的偽公用金鑰P”_j、偽私密金鑰r”。
前述的匯款額為匯款方需要向各個收款物件匯款的數額,這些數額由匯款方與各個收款物件預先協商確定,也可以由匯款方自行確定。其中,收款物件與上述的收款方Q_1~Q_u之間存在一定的對應關係。其中u≥1,表明可以存在一個或多個收款方。
在一些情況下,資產額t_j_1~t_j_m之和與匯款物件對應的轉帳額之和恰好相等,此時收款對象與收款方Q_1~Q_u等同,即收款方Q_1~Q_u均為收款物件,匯款物件對應的轉帳額即為上述的轉帳額t’_1~t’_u。在另一些情況下,資產額t_j_1~t_j_m之和並不恰好等於匯款對象對應的轉帳額之和,而是資產額t_j_1~t_j_m之和大於匯款對象對應的轉帳額之和,此時將差額(數額t_j_1~t_j_m之和減去匯款對象對應的轉帳額之和)作為匯款方的找零額,並將匯款方添加為某一個收款方,從而由u-1個匯款物件和匯款方自身組成收款方Q_1~Q_u。可見,無論是否存在找零額,都需要確保t_j_1+…+t_j_m= t’_1+…+t’_u,使得匯款交易M的匯入額與匯出額相等。
在匯款交易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是否成立,以及交易完成後對得到的轉帳額承諾PC(t’_w, r’_w)對應的資產進行管理等。
根據待花費資產對應的資產承諾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。
如前所述,匯款方只需要維護一組公私密金鑰對。在確定這組公私密金鑰對之前,需要取定一個數域 Z_q 和該數域上的一條橢圓曲線,比如橢圓曲線 Ed25519等,令 G、H 為該橢圓曲線的兩個隨機的生成元,其中|G|=p為一個大素數(譬如不小於某一預設數值),並在數值範圍(0, p)中選取匯款方的私密金鑰x_j,相應的公用金鑰為P_j=x_j×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對應的偽公用金鑰。
步驟304b,根據選取的掩護方i所持的m份資產[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}],獲取對應於掩護方i的偽公用金鑰P”_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對應的偽公用金鑰。
步驟306,根據匯款方對應的私密金鑰x_j、公用金鑰P_j、偽私密金鑰r”、偽公用金鑰P”_j,掩護方i對應的公用金鑰P_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、偽私密金鑰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)中的某一公用金鑰對應的私密金鑰進行簽章得到,從而在不暴露匯款方身份的前提下,完成身份驗證。
金鑰鏡像I_1~I_m與匯款方提供的待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_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()為上述橢圓曲線到其自身的雜湊函數。
除了上述的金鑰鏡像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發生了重放。
在機密交易中,除了交易的匯入額與匯出額相等之外,還需要一些其他的證明信息,比如證明匯款交易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方案等,本說明書並不對此進行限制。
因此,匯款方生成的匯款交易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。
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生成可鏈接環簽章。當然,匯款方也可以直接針對整個交易內容生成可鏈接環簽章,這可能帶來相對更大的計算量。
下面結合圖5對可鏈接環簽章的生成過程進行描述;其中,圖5是一示例性實施例提供的一種生成可鏈接環簽章的流程圖。如圖5所示,可以包括以下步驟:
步驟502,生成金鑰鏡像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)。
步驟504a,計算中間參數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,將在下述步驟506~510中進行描述。
步驟504b,計算中間參數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),將在下述步驟506~510中進行描述。
步驟506,計算中間參數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上的雜湊函數。
在步驟504a-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),此處不再一一贅述。
步驟508,計算中間參數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)]時,實質上也符合上述步驟506處所描述的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的計算公式一致。
步驟510,計算中間參數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))。
因此,在步驟508中已經計算得到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),此處不再一一贅述。
步驟512,生成環簽章。
基於上述步驟的處理過程,可以得到金鑰鏡像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。
圖6是一示例性實施例提供的另一種區塊鏈中實現機密交易的方法的流程圖。如圖6所示,該方法應用於區塊鏈節點,由區塊鏈節點對圖3所示實施例中生成的可鏈接環簽章進行驗證,以及對匯款交易M實施其他必要的驗證操作,可以包括以下步驟:
步驟602,獲取匯款交易M的可鏈接環簽章包含的金鑰鏡像I_1~I_m,所述金鑰鏡像I_1~I_m的取值與匯款方的私密金鑰x_j、公用金鑰P_j和資產標識ID_j_1~ID_j_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)],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)為資產承諾。當然,區塊鏈節點上僅維護資產對應的資產標識和資產承諾,而並不會直接維護明文的資產額和亂數。只有匯款方自身才會掌握其所持資產的資產額和亂數,其他使用者則無法獲知,從而實現對資產資訊的隱藏。
如前所述,匯款方僅維護一組公私密金鑰對,即私密金鑰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]。相應地,區塊鏈節點可以保存所有已花費交易所含的金鑰鏡像,即歷史金鑰鏡像。同時,區塊鏈節點可以將上述的金鑰鏡像I_1~I_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發生了重放。
步驟604,驗證所述可鏈接環簽章,所述可鏈接環簽章由匯款方根據對應於自身的私密金鑰x_j、公用金鑰P_j、偽私密金鑰r”和偽公用金鑰P”_j,以及對應於掩護方i的公用金鑰P_i和偽公用金鑰P”_i而生成;當所述可鏈接環簽章通過驗證時,資產額t_j_1~t_j_m之和被確定為與收款方Q_1~Q_u對應的轉帳額t’_1~t’_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)。同時,根據掩護方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]。其中,PC(t’_1, r’_1)~PC(t’_u, r’_u)為轉帳額承諾、r’_1~r’_u為亂數。
對於可鏈接環簽章的生成過程,可以參考圖3、圖5等所示的實施例,此處不再贅述。
如前所述,通過驗證可鏈接環簽章,可以高效、緊湊地實現下述兩方面的驗證功能:一方面,由於偽公用金鑰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)中的某一公用金鑰對應的私密金鑰進行簽章得到,從而在不暴露匯款方身份的前提下,完成身份驗證。
步驟606,當滿足交易執行條件時,執行所述匯款交易M;其中,所述交易執行條件包括:所述金鑰鏡像I_1~I_m不同於歷史金鑰鏡像、所述可鏈接環簽章通過驗證。
如前所述,可鏈接環簽章中還可能包含金鑰鏡像I_(m+1);相應的,交易執行條件還可以包括:金鑰鏡像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。那麼,交易執行條件還可以包括:所有轉帳額均不小於0。
下面結合圖7對可鏈接環簽章的驗證過程進行描述;其中,圖7是一示例性實施例提供的一種驗證可鏈接環簽章的流程圖。如圖7所示,可以包括以下步驟:
步驟702,驗證標識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無效,而無需繼續執行後續的步驟704~708。
步驟704,根據s_k_1~s_k_(m+1)依次計算L_k_1~ L_k_(m+1)、R_k_1~R_k_(m+1)。
步驟706,根據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被確認為無效,無需繼續執行下述步驟708。
步驟708,驗證範圍證明RP_1~RP_u。
驗證方從匯款交易M的交易內容中獲取範圍證明RP_1~RP_u並驗證,以確定相應的轉帳額t’_1~t’_u是否均滿足不小於0。如果滿足,則轉入步驟710,否則匯款交易M被確認為無效,無需繼續執行下述步驟710。
步驟710,驗證金鑰鏡像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、完成匯款操作。
圖8是一示例性實施例提供的一種設備的示意結構圖。請參考圖8,在硬體層面,該設備包括處理器802、內部匯流排804、網路介面806、內部記憶體808以及非揮發性記憶體810,當然還可能包括其他業務所需要的硬體。處理器802從非揮發性記憶體810中讀取對應的電腦程式到內部記憶體808中然後運行,在邏輯層面上形成區塊鏈中實現機密交易的裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖9,在軟體實施方式中,該區塊鏈中實現機密交易的裝置可以包括:
資產確定單元91,針對匯款方與收款方之間的匯款交易M,確定匯款方所持的m份待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)];其中,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)為資產承諾;
第一獲取單元92,根據收款方Q_1~Q_u對應的轉帳額t’_1~t’_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);其中,PC(t’_1, r’_1)~ PC(t’_u, r’_u)為轉帳額承諾、r’_1~r’_u為亂數,u≥1;
第二獲取單元93,根據選取的掩護方i所持的m份資產[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];
簽章單元94,根據匯款方對應的私密金鑰x_j、公用金鑰P_j、偽私密金鑰r”、偽公用金鑰P”_j,掩護方i對應的公用金鑰P_i、偽公用金鑰P”_i,為所述匯款交易M生成可鏈接環簽章,所述可鏈接環簽章中包含金鑰鏡像I_1~I_m,且所述金鑰鏡像I_1~I_m的取值與匯款方的私密金鑰x_j、公用金鑰P_j和資產標識ID_j_1~ID_j_m相關。
可選的,還包括:
證明生成單元95,生成轉帳額t’_1~t’_u對應的範圍證明RP_1~RP_u,以添加至所述匯款交易M中;其中,所述範圍證明RP_1~RP_u用於證明t’_1≥0~t’_u≥0。
可選的,透過下述公式計算所述金鑰鏡像I_1~I_m:
I_d=x_j×Hash_G(P_j, ID_j_d),d∈[1, m];
其中,Hash_G()為橢圓曲線到其自身的雜湊函數。
可選的,還包括:
鏡像生成單元96,根據匯款方對應的偽私密金鑰r”、偽公用金鑰P”_j,生成金鑰鏡像I_(m+1)= r”×Hash_G(P”_j);其中,所述可鏈接環簽章還包含所述金鑰鏡像I_(m+1)。
可選的,
所述待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)]、所述資產[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}]為相應的歷史交易的交易輸出;或,
所述待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)]被從匯款方對應的帳戶餘額中劃分而生成、所述資產[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}]被從掩護方i對應的帳戶餘額中劃分而生成。
可選的,簽章單元94具體用於:
分別生成對應於匯款方的中間參數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))。
圖10是一示例性實施例提供的一種設備的示意結構圖。請參考圖10,在硬體層面,該設備包括處理器1002、內部匯流排1004、網路介面1006、內部記憶體1008以及非揮發性記憶體1010,當然還可能包括其他業務所需要的硬體。處理器1002從非揮發性記憶體1010中讀取對應的電腦程式到內部記憶體1008中然後運行,在邏輯層面上形成區塊鏈中實現機密交易的裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖11,在軟體實施方式中,該區塊鏈中實現機密交易的裝置可以包括:
鏡像獲取單元1101,獲取匯款交易M的可鏈接環簽章包含的金鑰鏡像I_1~I_m,所述金鑰鏡像I_1~I_m的取值與匯款方的私密金鑰x_j、公用金鑰P_j和資產標識ID_j_1~ID_j_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)],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)為資產承諾;
簽章驗證單元1102,驗證所述可鏈接環簽章,所述可鏈接環簽章由匯款方根據對應於自身的私密金鑰x_j、公用金鑰P_j、偽私密金鑰r”和偽公用金鑰P”_j,以及對應於掩護方i的公用金鑰P_i和偽公用金鑰P”_i而生成;當所述可鏈接環簽章通過驗證時,資產額t_j_1~t_j_m之和被確定為與收款方Q_1~Q_u對應的轉帳額t’_1~t’_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),掩護方i持有資產[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}]、P”_i=[PC{i, 1}+…+PC{i, m}]-[PC(t’_1, r’_1)+…+ PC(t’_u, r’_u)],PC(t’_1, r’_1)~ PC(t’_u, r’_u)為轉帳額承諾、r’_1~r’_u為亂數,i∈[1, j-1]∪[j+1, n] ,u≥1;
交易執行單元1103,當滿足交易執行條件時,執行所述匯款交易M;其中,所述交易執行條件包括:所述金鑰鏡像I_1~I_m不同於歷史金鑰鏡像、所述可鏈接環簽章通過驗證。
可選的,還包括:
範圍驗證單元1104,根據匯款交易M所含的範圍證明RP_1~RP_u,驗證轉帳額t’_1~t’_u是否滿足t’_1≥0~ t’_u≥0;
其中,所述交易執行條件還包括:滿足t’_1≥0~ t’_u≥0。
可選的,所述金鑰鏡像I_1~I_m由匯款方透過下述公式計算得到:
I_d=x_j×Hash_G(P_j, ID_j_d),d∈[1, m]。
可選的,所述可鏈接環簽章還包括金鑰鏡像I_(m+1) = r”×Hash_G(P”_j);
其中,所述交易執行條件還包括:金鑰鏡像I_(m+1)不同於歷史金鑰鏡像。
可選的,
所述待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)]、所述資產[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}]為相應的歷史交易的交易輸出;或,
所述待花費資產[ID_j_1, PC(t_j_1, r_j_1)]~[ID_j_m, PC(t_j_m, r_j_m)]被從匯款方對應的帳戶餘額中劃分而生成、所述資產[ID_i_1, PC{i, 1}]~[ID_i_m, PC{i, m}]被從掩護方i對應的帳戶餘額中劃分而生成。
可選的,所述交易執行條件還包括:資產ID_k_d歸屬於公用金鑰P_k的所有方,k∈[1, n]、d∈[1, m]。
可選的,匯款方根據對應於自身的私密金鑰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];簽章驗證單元1102具體用於:
根據所述環簽章所含的亂數及/或其衍生數值,計算中間參數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))。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、蜂巢式電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
在一個典型的配置中,電腦包括一個或多個處理器 (CPU)、輸入/輸出介面、網路介面和內部記憶體。
內部記憶體可能包括電腦可讀媒體中的非永久性記憶體,隨機存取記憶體 (RAM) 及/或非揮發性內部記憶體等形式,如唯讀記憶體 (ROM) 或快閃記憶體(flash RAM)。內部記憶體是電腦可讀媒體的示例。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變記憶體 (PRAM)、靜態隨機存取記憶體 (SRAM)、動態隨機存取記憶體 (DRAM)、其他類型的隨機存取記憶體 (RAM)、唯讀記憶體 (ROM)、電可抹除可程式設計唯讀記憶體 (EEPROM)、快閃記憶體或其他內部記憶體技術、唯讀光碟唯讀記憶體 (CD-ROM)、數位多功能光碟 (DVD) 或其他光學儲存器、磁盒式磁帶、磁片儲存、量子記憶體、基於石墨烯的儲存媒體或其他磁性存放裝置或任何其他非傳輸媒體,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀媒體不包括暫態媒體 (transitory media),如調變的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在圖式中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
在本說明書一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本說明書一個或多個實施例。在本說明書一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“及/或”是指並包含一個或多個相關聯的列出專案的任何或所有可能組合。
應當理解,儘管在本說明書一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本說明書一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於上下文,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於確定”。
以上所述僅為本說明書一個或多個實施例的較佳實施例而已,並不用以限制本說明書一個或多個實施例,凡在本說明書一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本說明書一個或多個實施例保護的範圍之內。