一款數據加密共享與簽名方案


最近在研究區塊鏈的時候關注了一下加密技術,小有心得,於是設計了一款數據加密共享與簽名的方案,希望能夠為做電子合同,數據存證,數據共享的朋友有所幫助吧。

業務場景

一、電子合同

Alice和Bob需要簽訂一個合同,而Charlie是中介,也需要在看到該合同上並簽字,而Dave是外人,不參與這個合同的簽訂,所以不允許看到合同的內容。

二、數據存證

Alice和Bob在網上玩剪刀石頭布的游戲,由於沒有第三方的參與,所以Alice必須告訴Bob她已經做出了選擇,但是同時又不能告訴Bob她具體出的是什么,Bob同樣也是要告訴Alice他已經做出了選擇,而又告訴她具體選擇是什么。在雙方都確認對方做出了選擇后,然后各自公布自己的選擇,並且可以驗證對方公布的結果是不是跟之前告之的一致。

三、數據共享

Alice、Bob和Charlie是同事,他們在使用同一個公司網盤共享文件。現在有一個機密項目只有Alice和Bob在參與,他們希望繼續通過公司網盤共享文件,但是同時也不希望Charlie能夠看到他們共享的文件中的內容。后來新同事Dave加入到了該機密項目中,又希望Dave能夠看到共享的文件內容。

涉及的密碼學

1.對稱加密

也就是說用明文通過密鑰的加密后得到密文,使用同樣的密鑰就可以把密文解密為明文。常用的對稱加密算法是3DES。

2.非對稱加密

密鑰是有一對(2個,1個叫公鑰,1個叫私鑰),使用公鑰加密的信息,只有對應的私鑰才能解密;使用私鑰加密的信息,只有對應的公鑰才能解密。公鑰是可以公開出來的,私鑰需要自己保存,不能讓其他人知道。目前主要的非對稱加密算法有RSA和橢圓曲線加密算法ECC。

3.哈希

哈希算法是一種摘要算法,對於任意長度的輸入,都輸出相同長度的結果,並且輸出結果對輸入具有敏感性,也就是說輸入只是一個小小的變化,就會引起輸出巨大的不同。另外哈希算法還需要扛對撞,也就是說我們不能輕易找到兩個不同的輸入,使得他們的哈希輸出相同。常用的哈希算法有MD5, SHA256

4.數字簽名

數字簽名就是將哈希算法與非對稱加密算法結合的一個最好應用。對於一條明文消息M,我們需要對其進行簽名,那么首先就是計算該消息的摘要,也就是哈希值,得到H(M),然后再用我們的私鑰對這個哈希值進行加密,結果就是數字簽名。任何人拿到消息M和數字簽名后,都可以用我們的公鑰對數字簽名進行解密,將解密結果與消息M的哈希值進行對比,如果相同,就說明M沒有被更改,同時該簽名也是我們簽署的,而不可能是別人偽造的簽名。

電子合同的簽名方案

1.准備

每個用戶都有自己的私鑰和公鑰,私鑰由於私密性,所以需要加密保存,用戶只有輸入自己設置的口令后才能解密出自己的私鑰。而用戶的公鑰則公開在系統上,所有用戶都可訪問。

2.加密合同

Alice現在准備好合同文件M,由於隱私的考慮,所以需要對合同文件加密,而這里加密采用的是對稱加密算法,密鑰是隨機生成的,加密后的合同文件為密文M。Alice希望合同的乙方Bob還有就是中介Charlie能夠看到這個合同(當然Alice本人也需要能看到合同),所以她將這個隨機密鑰用各自的公鑰進行加密,加密后生成了3個密文:密文A、密文B、密文C。現在Alice就可以將加密后的合同密文M以及密文A、密文B、密文C放到網上。

3.簽名合同

Alice不需要對明文的合同M進行簽名,她需要的是在密文M上進行簽名,也就是說先計算出密文M的哈希值“H(密文M)”,然后用自己的私鑰A對該哈希值進行加密,這樣就能得到簽名A。現在Alice把簽名A也放在網上,因為Alice的公鑰是公開的,所以任何人都可以用公鑰A來解密簽名A,從而驗證密文M的哈希值是否和解密相同。

image

4.解密合同

Bob作為合同的乙方,在收到Alice上傳並簽名的合同后,他首先需要驗證合同的簽名A是否正確,如果正確則說明該合同確實是Alice簽名的,而且沒有被篡改過。但是網上存在的合同是密文M,那么Bob該怎么查看合同內容呢?因為Bob有自己的私鑰,他可以解鎖出解密文件的隨機密鑰,用這個密鑰再去解密加密文件,就能夠看到原始文件了。

image

5.加簽合同

接下來Bob需要加簽合同,那么他的做法和步驟3簽名合同是類似的,只需要用自己的私鑰對密文進行簽名,然后把簽名放到網絡上即可。

【上面的文章是我在整理電腦時發現當年寫了,沒有發布的,現在稍作修改發布出來,希望對大家有所幫助。】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM