本發(fā)明涉及環(huán)簽名技術(shù)、橢圓曲線算法及區(qū)塊鏈技術(shù),尤其涉及一種基于環(huán)簽名的區(qū)塊鏈匿名交易方法。
背景技術(shù):
區(qū)塊鏈技術(shù),區(qū)塊鏈是一種新型去中心化協(xié)議,能安全地存儲數(shù)字貨幣交易或其他數(shù)據(jù),信息不可偽造和篡改,區(qū)塊鏈上的交易確認由區(qū)塊鏈上的所有節(jié)點共同完成,由共識算法保證其一致性,區(qū)塊鏈上維護一個公共的賬本,用于存儲區(qū)塊鏈網(wǎng)絡上所有用戶的余額,公共賬本位于存儲區(qū)塊上任何節(jié)點可見,從而保證其不可偽造和篡改。
環(huán)簽名是一種特殊的密碼學簽名,它能夠證明簽名者擁有一個對應特定集合公鑰的私鑰,而不會暴露出簽名者的身份(該私鑰對應哪個公鑰)。該方法可以使簽名者隱藏在一個集體中從而達到匿名效果,其技術(shù)特點要點是:當用戶在轉(zhuǎn)賬時可以利用環(huán)簽名來識別簽名者身份,驗證時只需要知道簽名者所在的集合,不需暴露用戶的實際公鑰,因此用戶的真實得到隱藏。針對傳統(tǒng)的區(qū)塊鏈交易的交易信息完全公開導致交易雙方的身份暴露無遺的問題,環(huán)簽名技術(shù)的應用可以使區(qū)塊鏈上的用戶實現(xiàn)匿名轉(zhuǎn)賬功能。
橢圓曲線算法,橢圓曲線算法是一種非對稱的加密算法,橢圓曲線的密鑰生成算法執(zhí)行時會生成一對公私鑰。在區(qū)塊鏈上用戶的賬戶地址就是公鑰,用戶的私鑰就是其對應的私鑰。本發(fā)明使用橢圓曲線算法產(chǎn)生一個目標地址作為合約的轉(zhuǎn)賬地址,目標地址是由發(fā)送者產(chǎn)生的隨機數(shù)結(jié)合接收者的公鑰生成的,只有交易接收者才能獲得目標地址的私鑰,因此,區(qū)塊鏈上除了交易發(fā)送者的其他用戶無法得知接收者的真實身份。同樣,針對傳統(tǒng)的區(qū)塊鏈交易的交易信息完全公開導致交易雙方的身份暴露無遺的問題,該方法的應用可以使區(qū)塊鏈上的用戶實現(xiàn)匿名收賬功能。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是針對現(xiàn)有技術(shù)的不足,提供一種基于環(huán)簽名的區(qū)塊鏈匿名交易方法。
本發(fā)明的目的是通過以下技術(shù)方案來實現(xiàn)的:在一個區(qū)塊鏈網(wǎng)絡上,交易發(fā)起方通過一個中間合約賬戶實現(xiàn)匿名轉(zhuǎn)賬功能,交易接收方通過一個由發(fā)送者生成的目標地址實現(xiàn)匿名收賬功能。交易雙方的整個匿名交易過程,包括如下步驟:
1)交易準備過程,交易發(fā)送者調(diào)用一個特定的智能合約方法,給合約地址轉(zhuǎn)賬,合約存儲轉(zhuǎn)賬金額,并隨機返回一個公鑰環(huán),該公鑰環(huán)包含發(fā)送者的公鑰;
2)生成目標地址,發(fā)送者產(chǎn)生一個隨機數(shù),并利用接收者的公鑰通過橢圓曲線算法生成目標地址P和參數(shù)R,目標地址P=H(r*B)*G+B,參數(shù)R=r*G;各個參數(shù)含義如下:
G:橢圓曲線算法特定參數(shù),橢圓曲線上的一個基點;
H():一種hash算法;
r:發(fā)送者生成的隨機數(shù);
B:接收者的公鑰,B=b*G,b為接收者的私鑰,一般是一串十六進制數(shù)字,此算法不可逆,即只能通過b得到B;
該步驟生成的目標地址P,除了接收者外,包括發(fā)送者在內(nèi)的其他人無法獲得目標地址的私鑰;
3)生成環(huán)簽名,發(fā)送者利用自己的私鑰和步驟1)中的公鑰環(huán),對一組交易信息進行環(huán)簽名,其中交易信息包括步驟2)中生成的目標地址和參數(shù)R;
4)發(fā)送環(huán)簽名,發(fā)送者將簽名連同其簽名內(nèi)容發(fā)送給合約;
5)驗證環(huán)簽名,合約將對接收到的環(huán)簽名進行驗證,驗證成功則會執(zhí)行操作6),驗證失敗則不執(zhí)行操作;
6)執(zhí)行合約轉(zhuǎn)賬,合約將公鑰環(huán)對應的存儲金額從合約賬戶轉(zhuǎn)賬給目標地址,并在交易信息中附帶參數(shù)R,發(fā)送者完成匿名轉(zhuǎn)賬;
7)接收者獲得轉(zhuǎn)賬金額:接收者通過查詢最新產(chǎn)生的區(qū)塊上的所有合約發(fā)起的交易信息,提取每筆交易信息中的參數(shù)R進行以下運算:
P’=H(b*R)*G+B,
判斷得到的P’與交易信息中的目標地址是否一致,若一致,則該交易是發(fā)送給自己的,接收者可以進行以下運算得到目標地址P的私鑰x;
x=H(b*R)+b,
接收者擁有了目標賬戶的公私鑰,完成匿名收賬;到此,接收者可以對目標賬戶進行任意操作,即接收者接受到了轉(zhuǎn)賬金額,交易完成。這里,我們利用發(fā)送者產(chǎn)生的目標地址很好的隱藏了接收者的真實身份,即實現(xiàn)了區(qū)塊鏈上交易的匿名收賬。
否則,可以得知該段時間沒有發(fā)送給自己的交易。
進一步地,所述的步驟1)中合約收到轉(zhuǎn)賬后返回一個公鑰環(huán),其中合約首先會存儲發(fā)送者的轉(zhuǎn)賬金額,并隨機生成特定數(shù)量的公鑰,公鑰環(huán)由這些隨機生成的公鑰和發(fā)送者的公鑰組成。
進一步地,所述的步驟3)中,發(fā)送者發(fā)起交易時,用自己的私鑰和步驟1)返回的公鑰環(huán)對交易信息進行環(huán)簽名,此處運用算法為環(huán)簽名的簽名算法,環(huán)簽名算法的特性是環(huán)中任意成員生成的環(huán)簽名都可以通過這個公鑰環(huán)進行簽名驗證,不需要對應的公鑰來驗證簽名。
進一步地,所述的步驟5)中環(huán)簽名的驗證過程,合約接收到交易發(fā)送者發(fā)送的簽名信息,利用合約中的存儲的公鑰環(huán)對簽名進行環(huán)簽名驗證,環(huán)簽名驗證算法可以在合約內(nèi)實現(xiàn);智能合約作為區(qū)塊鏈上的一種去中心化應用的形式存在,智能合約一經(jīng)部署就無法更改,區(qū)塊鏈上的所有用戶都可以調(diào)用合約方法,合約方法由合約創(chuàng)建者構(gòu)建,合約內(nèi)容存儲在區(qū)塊鏈上,其內(nèi)容完全公開。將發(fā)送者的轉(zhuǎn)賬金額和公鑰環(huán)對應存儲在合約上,這樣區(qū)塊鏈上的其他用戶就無法得知這筆金額對應的哪個賬戶,即實現(xiàn)了區(qū)塊鏈上交易的匿名轉(zhuǎn)賬。
本發(fā)明的有益效果是:本發(fā)明在區(qū)塊鏈上對用戶的轉(zhuǎn)賬過程使用環(huán)簽名技術(shù),以及在用戶收賬過程中產(chǎn)生一個本不存在的目標賬戶用于收賬,這在滿足區(qū)塊鏈本身的技術(shù)特性的同事實現(xiàn)了交易的匿名轉(zhuǎn)賬和匿名收賬功能。傳統(tǒng)區(qū)塊鏈上的交易過程,交易雙方的身份信息隨交易信息一起被記錄在區(qū)塊鏈上,交易雙方的地址完全公開,這保證了區(qū)塊鏈上信息的不可偽造和篡改,但同時暴露了用戶交易記錄信息。為保護用戶的交易隱私,本發(fā)明在交易轉(zhuǎn)賬過程中用環(huán)簽名對交易發(fā)起者進行身份認證,這樣交易發(fā)起者隱藏在一組公鑰環(huán)中,從而使發(fā)送者的身份隱藏;在交易收賬過程中使用一個臨時產(chǎn)生的目標地址作為轉(zhuǎn)賬目標賬戶,即使有人可以追蹤交易記錄,也無法得知收賬人的真實身份。本發(fā)明有效地解決了傳統(tǒng)區(qū)塊鏈上的交易隱私問題。
附圖說明
圖1是交易準備過程;
圖2是發(fā)送者執(zhí)行匿名交易的過程;
圖3是接收者的匿名收賬過程。
具體實施方式
下面根據(jù)附圖和具體實施例詳細描述本發(fā)明,本發(fā)明的目的和效果將變得更加明顯。
如圖1-3所示,本發(fā)明基于環(huán)簽名的區(qū)塊鏈匿名交易方法,包括如下步驟:
1)交易準備過程,如圖1所示,交易發(fā)送者調(diào)用一個特定的智能合約方法,給合約地址轉(zhuǎn)賬,合約存儲轉(zhuǎn)賬金額,并隨機返回一個公鑰環(huán),該公鑰環(huán)包含發(fā)送者的公鑰;
2)生成目標地址,發(fā)送者產(chǎn)生一個隨機數(shù),并利用接收者的公鑰通過橢圓曲線算法生成目標地址P和參數(shù)R,目標地址P=H(r*B)*G+B,參數(shù)R=r*G;各個參數(shù)含義如下:
G:橢圓曲線算法特定參數(shù),橢圓曲線上的一個基點;
H():一種hash算法;
r:發(fā)送者生成的隨機數(shù);
B:接收者的公鑰,B=b*G,b為接收者的私鑰,一般是一串十六進制數(shù)字,此算法不可逆,即只能通過b得到B;
該步驟生成的目標地址P,除了接收者外,包括發(fā)送者在內(nèi)的其他人無法獲得目標地址的私鑰;
3)生成環(huán)簽名,發(fā)送者利用自己的私鑰和步驟1)中的公鑰環(huán),對一組交易信息進行環(huán)簽名,其中交易信息包括步驟2)中生成的目標地址和參數(shù)R;
4)發(fā)送環(huán)簽名,發(fā)送者將簽名連同其簽名內(nèi)容發(fā)送給合約;
5)驗證環(huán)簽名,合約將對接收到的環(huán)簽名進行驗證,驗證成功則會執(zhí)行操作6),驗證失敗則不執(zhí)行操作;
6)執(zhí)行合約轉(zhuǎn)賬,合約將公鑰環(huán)對應的存儲金額從合約賬戶轉(zhuǎn)賬給目標地址,并在交易信息中附帶參數(shù)R,發(fā)送者完成匿名轉(zhuǎn)賬;
7)接收者獲得轉(zhuǎn)賬金額:接收者通過查詢最新產(chǎn)生的區(qū)塊上的所有合約發(fā)起的交易信息,提取每筆交易信息中的參數(shù)R進行以下運算:
P’=H(b*R)*G+B,
判斷得到的P’與交易信息中的目標地址是否一致,若一致,則該交易是發(fā)送給自己的,接收者可以進行以下運算得到目標地址P的私鑰x;
x=H(b*R)+b,
接收者擁有了目標賬戶的公私鑰,完成匿名收賬;到此,接收者可以對目標賬戶進行任意操作,即接收者接受到了轉(zhuǎn)賬金額,交易完成。這里,我們利用發(fā)送者產(chǎn)生的目標地址很好的隱藏了接收者的真實身份,即實現(xiàn)了區(qū)塊鏈上交易的匿名收賬。
否則,可以得知該段時間沒有發(fā)送給自己的交易。
進一步地,所述的步驟1)中合約收到轉(zhuǎn)賬后返回一個公鑰環(huán),其中合約首先會存儲發(fā)送者的轉(zhuǎn)賬金額,并隨機生成特定數(shù)量的公鑰,公鑰環(huán)由這些隨機生成的公鑰和發(fā)送者的公鑰組成。
進一步地,所述的步驟3)中,發(fā)送者發(fā)起交易時,用自己的私鑰和步驟1)返回的公鑰環(huán)對交易信息進行環(huán)簽名,此處運用算法為環(huán)簽名的簽名算法,環(huán)簽名算法的特性是環(huán)中任意成員生成的環(huán)簽名都可以通過這個公鑰環(huán)進行簽名驗證,不需要對應的公鑰來驗證簽名。
進一步地,所述的步驟5)中環(huán)簽名的驗證過程,合約接收到交易發(fā)送者發(fā)送的簽名信息,利用合約中的存儲的公鑰環(huán)對簽名進行環(huán)簽名驗證,環(huán)簽名驗證算法可以在合約內(nèi)實現(xiàn);智能合約作為區(qū)塊鏈上的一種去中心化應用的形式存在,智能合約一經(jīng)部署就無法更改,區(qū)塊鏈上的所有用戶都可以調(diào)用合約方法,合約方法由合約創(chuàng)建者構(gòu)建,合約內(nèi)容存儲在區(qū)塊鏈上,其內(nèi)容完全公開。將發(fā)送者的轉(zhuǎn)賬金額和公鑰環(huán)對應存儲在合約上,這樣區(qū)塊鏈上的其他用戶就無法得知這筆金額對應的哪個賬戶,即實現(xiàn)了區(qū)塊鏈上交易的匿名轉(zhuǎn)賬。
下面用一個區(qū)塊鏈交易實例來說明具體實施方式:
模擬用戶A向用戶B轉(zhuǎn)賬的交易,交易發(fā)起人A,交易接受者B,A生成的目標地址P。A將交易金額轉(zhuǎn)賬給一個特定智能合約,然后合約向目標賬戶地址轉(zhuǎn)賬,最后B取得目標地址的私鑰完成收賬。具體描述如下:
首先,A在正式發(fā)起交易之前應當將交易金額存儲到特定的智能合約中,如圖1所示,交易準備完成后,A將獲得從合約方法返回的一個公鑰環(huán)。發(fā)起交易時,A將生產(chǎn)一個新的目標地址并附帶參數(shù)R,然后A將利用環(huán)簽名算法對目標地址的相關(guān)信息進行簽名操作,并將簽名發(fā)送給合約,如圖2所示。合約收到簽名信息后,將會對環(huán)簽名進行驗證來判斷簽名者的身份是否正確。合約向目標賬戶轉(zhuǎn)賬完成后,此時B必須進過收賬操作才能獲取轉(zhuǎn)賬金額。如圖3所示,B會查詢最近區(qū)塊鏈上已經(jīng)完成的交易,當然只會查詢由合約發(fā)起的交易。然后B可以通過交易信息中附帶的參數(shù)R解出目標賬戶的地址及其私鑰,從而擁有目標賬戶的控制權(quán),即完成收賬操作。