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

最近在研究區塊鏈的時候關注了一下加密技術,小有心得,因而設計了一款數據加密共享與簽名的方案,但願可以爲作電子合同,數據存證,數據共享的朋友有所幫助吧。算法

業務場景

1、電子合同

Alice和Bob須要簽定一個合同,而Charlie是中介,也須要在看到該合同上並簽字,而Dave是外人,不參與這個合同的簽定,因此不容許看到合同的內容。網絡

2、數據存證

Alice和Bob在網上玩剪刀石頭布的遊戲,因爲沒有第三方的參與,因此Alice必須告訴Bob她已經作出了選擇,可是同時又不能告訴Bob她具體出的是什麼,Bob一樣也是要告訴Alice他已經作出了選擇,而又告訴她具體選擇是什麼。在雙方都確認對方作出了選擇後,而後各自公佈本身的選擇,而且能夠驗證對方公佈的結果是否是跟以前告之的一致。區塊鏈

3、數據共享

Alice、Bob和Charlie是同事,他們在使用同一個公司網盤共享文件。如今有一個機密項目只有Alice和Bob在參與,他們但願繼續經過公司網盤共享文件,可是同時也不但願Charlie可以看到他們共享的文件中的內容。後來新同事Dave加入到了該機密項目中,又但願Dave可以看到共享的文件內容。加密

涉及的密碼學

1.對稱加密

也就是說用明文經過密鑰的加密後獲得密文,使用一樣的密鑰就能夠把密文解密爲明文。經常使用的對稱加密算法是3DES。設計

2.非對稱加密

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

3.哈希

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

4.數字簽名

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

電子合同的簽名方案

1.準備

每一個用戶都有本身的私鑰和公鑰,私鑰因爲私密性,因此須要加密保存,用戶只有輸入本身設置的口令後才能解密出本身的私鑰。而用戶的公鑰則公開在系統上,全部用戶均可訪問。it

2.加密合同

Alice如今準備好合同文件M,因爲隱私的考慮,因此須要對合同文件加密,而這裏加密採用的是對稱加密算法,密鑰是隨機生成的,加密後的合同文件爲密文M。Alice但願合同的乙方Bob還有就是中介Charlie可以看到這個合同(固然Alice本人也須要能看到合同),因此她將這個隨機密鑰用各自的公鑰進行加密,加密後生成了3個密文:密文A、密文B、密文C。如今Alice就能夠將加密後的合同密文M以及密文A、密文B、密文C放到網上。io

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簽名合同是相似的,只須要用本身的私鑰對密文進行簽名,而後把簽名放到網絡上便可。

【上面的文章是我在整理電腦時發現當年寫了,沒有發佈的,如今稍做修改發佈出來,但願對你們有所幫助。】

相關文章
相關標籤/搜索