根據值 加密後的值 算出key 公開金鑰加密

2021-10-11 23:13:24 字數 2669 閱讀 7012

當代密碼學的核心是「公開金鑰加密」( public-key cryptography )。我們先來聊聊公開金鑰加密的定義,然後介紹一下它的兩大應用,最後簡要介紹一下兩個公開金鑰加密的演算法。本文的目的是梳理清楚學習密碼學的大思路,以便在後續文章中,遇到橢圓曲線,rsa ,加密通訊,數字簽名這些術語的時候,起碼知道它們的大致歸屬。

先來聊公開金鑰加密的定義。公開金鑰加密也稱為」非對稱加密「,加密和解密的時候使用不同的秘鑰,也就是 key ,其中乙個是公鑰,是可以公開出去的,另外乙個是私鑰,要嚴格保密。

但是公開金鑰加密的應用其實不侷限於加密。公開金鑰加密要實現的功能有兩個:乙個是保密,傳送者用接收者的公鑰去加密資訊,接收者就用自己的私鑰去解密資訊。另外乙個功能就是認證,發出資訊的人用自己的私鑰去進行數字簽名來簽署資訊,這樣任何人拿到公鑰之後都可以去確認資訊是不是由私鑰持有人發出的。總之,公開金鑰加密有兩個應用,乙個是加密通訊,另外乙個是數字簽名。

公開金鑰加密的安全性基於基本的數學原理。公鑰和私鑰首先應該是有數學聯絡的,不然所謂的解密和簽名操作也就不可能實現了,但是同時不能由公鑰去算出私鑰,如果可以算出來,那麼安全性就喪失了。所以加密演算法都是基於一些目前無解的數學問題,或者叫單向函式,例如整數分解或者離散對數。具體的演算法有 rsa 和 ecc 等。什麼叫單向函式呢?8616460799 是兩個數相乘得到的,給這兩個數,可以很容易算出結果,但是如果給出結果,要分解出兩個乘數,就是乙個數學上還沒有解決的問題,叫做」整數分解「問題。換句話說,如果有一天整數分解問題解決了,攻擊者就可以把公鑰分解,那麼私鑰就很容易被算出來了,基於整數分解的加密演算法也就失效了。

稍微總結一下,公開金鑰加密的應用方向有兩個,乙個是加密通訊,另外乙個是數字簽名。公開金鑰加密之所以可行,底層源於數學原理。

接下來,我們聊聊加密通訊和數字簽名的基本原理。

先說加密通訊。bob 需要先在自己的機器上生成公鑰和私鑰,然後把自己的公鑰傳送給 alice 。這樣,alice 就可以給 bob 發資訊了。alice 會用 bob 的公鑰把資訊加密得到密文,密文傳輸過程中如果被截獲是不用擔心的,因為只有 bob ,或者說只有私鑰才能解密密文。這就是加密通訊的基本過程。使用乙個形象的比喻,alice 要給 bob 寫信,首先需要知道 bob 家的位址,而公鑰就是位址。alice 的信送到 bob 的郵箱裡之後,只有 bob 用自己的郵箱鑰匙,才能拿到信,所以私鑰就是郵箱鑰匙。

再說數字簽名。alice 要在網上簽署乙份合同,所以她就用私鑰去簽署合同,這樣能生成一段資料,這個資料就是數字簽名了。然後 alice 把公鑰公布給所有人,這樣任何人都可以用公鑰去解密數字簽名,解密成功,也就證明了這份合同的確是 alice 簽署的。同時,如果有人篡改了這份合同,那麼解密過程也會失敗,所以說數字簽名還有防止篡改的功能。要注意,數字簽名過程中,合同本身並沒有被加密。我們也來做乙個形象的比喻。alice 寫一封信給家裡人,寫好之後,用自己的印章給信封加上蠟封。家人收到信之後,根據蠟封上的圖案就能判斷信是 alice 寫的,同時蠟封沒有損壞,表示信沒有被拆開篡改過。數字簽名就相當於這個蠟封。

這就是公開金鑰加密的兩大應用了,加密通訊和數字簽名。

最後我們來聊聊公開金鑰加密的具體演算法的誕生,最知名的演算法有兩個,乙個是 rsa 演算法,乙個是 ecc 演算法。

rsa 演算法是開山鼻祖。1970 年,一位英國密碼學家預見了「無秘密加密」的可能性,公鑰加密思想產生了。公鑰加密的比對稱加密有明顯優勢,因為通訊之前,雙方不用傳遞密碼,只需要傳遞公鑰即可,而公鑰不是秘密,被截獲也不會影響通訊安全。之後幾年,人們開發了 rsa 演算法,第一次真正實現了這個想法。rsa 演算法標誌著公開金鑰加密真正誕生了。rsa 演算法的安全性基於整數分解問題,具體來說就是根據大素數相乘的結果,不可能被反向分解的數學原理。rsa 的詳細內容,後續文章中會有介紹。

後來,人們發明了另外一種加密演算法叫做 ecc ,也就是橢圓曲線演算法。世界上不可解的數學問題並不是只有整數分解乙個,ecc 就是基於另外乙個問題:離散對數。乙個加密演算法的安全性取決於,由公鑰去運算私鑰的難度。畢竟私鑰的位數是有限的,所以即使用暴力搜尋的方式,也肯定是能夠算出來的。而且各種單向函式雖然無解,但是不代表不能縮小求解範圍,所以不同的演算法其實安全性還是有差別的。而 ecc 用離散對數原理,同樣的 key 長度,安全性比 rsa 更高。位元幣就是用 ecc 來生成位址和私鑰。這裡你可能會有疑問,為何不能把私鑰位數盡量弄長一些呢?的確,越長就越安全,但是同時執行效率也低,所以實際使用中還是要保證一種平衡的。

這裡我們要記住的是,加密演算法很多,但是最重要的就是 rsa 和 ecc 兩個,同時加密演算法跟雜湊演算法是兩個東西,所以 sha1 ,md5 這些雜湊演算法跟 rsa 和 ecc 根本不是一類運算,不要弄混淆。

公開金鑰加密的簡單介紹就是這些了。要記住的是:首先公開金鑰加密是基於單向函式的數學原理開發出來的,主要由兩個應用,乙個是加密通訊,乙個是數字簽名。最著名的公開金鑰加密的演算法有兩個,乙個是 rsa 乙個是 ecc 。

參考:

filcloud 幫你迅速了解 ipfs 領域的熱點技術和應用

HashMap中如何根據key算出元素的儲存位置

jdk7中,根據object型別的key計算出其在陣列中的下標位置,hashmap的資料結構是陣列 鍊錶。由2個方法hash object key 和indexfor int h,int length 來實現。hash 該方法主要是將object轉換成乙個整型。indexfor 該方法主要是將has...

vue中key值與react中key值的區別

兩者演算法比較不同 分別對olds olde s e兩兩做samevnode比較,有四種值,舊集合的開頭和結束 olds,olde 新集合的開頭和結束 s e 當其中兩個能匹配上那麼真實dom中的相應節點會移到vnode相應的位置,這句話有點繞,打個比方 大意就是每次比較四個key值,匹配上的就移動...

自定義函式 根據相同的key合併值

刪除測試表 drop table test 建立測試表 create table test fcode varchar 10 fname varchar 20 刪除臨時表 drop table temp 建立臨時表 create table temp fkey varchar 10 fvalue v...