加密數字貨幣(錢包)原理:
1、央行(錢包發行權威機構)持有一個唯一保密私鑰,在給用戶開錢包賬號的時候,央行用自己這個唯一保密私鑰對每個用戶錢包的公鑰進行加密(注意不是指紋簽名,只能原文非對稱加密,因為要用央行公鑰進行解密還原用戶公鑰的);
2、央行在給每個用戶生成錢包時候給用戶錢包中存盤3個固定不變資訊和3個可變資訊:
①、央行自己的唯一公開公鑰(給每個用戶都是一樣的,用戶用這個央行公鑰互相進行驗證是合法錢包);
②、用戶錢包自己唯一的私鑰;
③、用戶錢包的公鑰用央行私鑰加密后的密文(可以用央行存盤在每個人錢包里面的央行公鑰進行解密還原出用戶的公鑰,交易的時候由對方用戶執行解密操作以驗證錢包的合法性)。
④、最后一次交易對方的③
⑤、用戶余額串聯入最后一次交易對方的⑥用對方的私鑰加密運算后的密文(用戶可以用①做兩次解密運算查看自己的余額,但無法篡改)
⑥、單向遞增的一個數字,每次交易加1,最新值被原文串聯入交易對方的余額串進行加密存入對方的⑤
交易的程序設想如下:
1、互驗身份(防偽造錢包賬戶)
交易開始雙方互傳③,用自己的①進行解密,解密出對方的公鑰,然后隨機出一短文本串,傳給對方要求對方用對方自己的②進行加密并把密文傳回給自己,自己用前面剛解密出的對方公鑰進行解密核對,核對成功即完成雙方身份確認。
2、得到對方的④和⑤,用本地①做兩次解密運算,就可知道對方當前的貨幣余額,判斷交易是否可完成,可完成繼續下一步
3、用對方的余額加/減交易額后得出新的余額,串聯上自己的⑥最新值,用自己的私鑰進行加密運算的密文作為對方新的⑤,加上自己的③作為對方新的④,一起回傳給對方。
4、得到對方回傳的新的④和⑤之后,做兩次解密運算,驗證新的余額是否是本次交易后自己的新的余額
5、余額確認無誤后,把新的④和⑤合起來用自己的私鑰加密傳給對方,以供對方驗證自己確證無誤收到了3的回傳。
6、收款方必須在5驗證成功后才能確實覆寫存盤自己新的第3步回傳的④和⑤,否則超時后取消交易反饋用戶收錢失敗
7、付款方如果等待鎖定賬戶一段時間后(比如5秒后)還沒收到5的驗證訊息的情況下也覆寫存盤自己新的第3步回傳的④和⑤(這個設定主要是對抗最后第5步這個確認程序訊息傳遞給付款方有可能被付款用戶惡意單向阻斷)
8、在進行第5步的時候,若網路確實斷開,會導致付款方單向付款而收款方收款失敗,這個時候可以進行用戶干預的重傳收款流程:收款方完成1相互確認后,讀取付款方新的④和⑤,驗證付款方的④是否等于自己的③,成功后解密出⑤中的單向數字,只有等于自己當前的⑥,才能繼續完成收款方的23456程序。
備注:如果付款方阻斷收款方第3、4步傳回的報文,收款方也得不到第5步傳來的確認包,所以第6步收款方也收不到錢。
備注:銀行柜臺用人民幣劃款進入數字錢包的程序也是前面的交易程序,由銀行的數字錢包向央行用等額人民幣購買數字貨幣后,再在柜臺劃給用戶的數字錢包。
整個交易程序都在封裝嚴密破損即毀的特制芯片中完成,交易雙方報文傳輸程序公開透明且不需在線,交易程序不懼黑客截獲攻擊,也不懼各種作弊手段,要支持多種貨幣可以在⑤中增加多種貨幣標簽區分,相應的交易程序增加貨幣類屬即可。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231807.html
標籤:智能硬件
