1. 程式人生 > >golang[34]-區塊鏈-對稱加密與非對稱加密

golang[34]-區塊鏈-對稱加密與非對稱加密

對稱加密

對稱金鑰加密(英語:Symmetric-key algorithm)又稱為對稱加密、私鑰加密、共享金鑰加密,是密碼學中的一類加密演算法。這類演算法在加密和解密時使用相同的金鑰,或是使用兩個可以簡單地相互推算的金鑰。事實上,這組金鑰成為在兩個或多個成員間的共同祕密,以便維持專屬的通訊聯絡。與公開金鑰加密相比,要求雙方獲取相同的金鑰是對稱金鑰加密的主要缺點之一。

常見的對稱加密演算法有DES、3DES、AES、Blowfish、IDEA、RC5、RC6。

對稱加密的速度比公鑰加密快很多,在很多場合都需要對稱加密。

非對稱加密

公開金鑰加密(英語:Public-key cryptography),也稱為非對稱加密(英語:asymmetric cryptography),是密碼學的一種演算法,它需要兩個金鑰,一個是公開金鑰,另一個是私有金鑰;一個用作加密的時候,另一個則用作解密。使用其中一個金鑰把明文加密後所得的密文,只能用相對應的另一個金鑰才能解密得到原本的明文;甚至連最初用來加密的金鑰也不能用作解密。由於加密和解密需要兩個不同的金鑰,故被稱為非對稱加密;不同於加密和解密都使用同一個金鑰的對稱加密。雖然兩個金鑰在數學上相關,但如果知道了其中一個,並不能憑此計算出另外一個;因此其中一個可以公開,稱為公鑰,任意向外發布;不公開的金鑰為私鑰,必須由使用者自行嚴格祕密保管,絕不透過任何途徑向任何人提供,也不會透露給要通訊的另一方,即使他被信任。

基於公開金鑰加密的特性,它還提供數字簽名的功能,使電子檔案可以得到如同在紙本檔案上親筆簽署的效果。

公開金鑰基礎建設透過信任數字證書認證機構的根證書、及其使用公開金鑰加密作數字簽名核發的公開金鑰認證,形成信任鏈架構,已在TLS實現並在全球資訊網的HTTP以HTTPS、在電子郵件的SMTP以STARTTLS引入。

非對稱加密過程

在數學上,d(c(x))=x,讓我們使用典型的愛麗絲與鮑伯假設來解釋:

愛麗絲與鮑伯事先互不認識,也沒有可靠安全的溝通渠道,但愛麗絲現在卻要透過不安全的網際網路向鮑伯傳送資訊
愛麗絲撰寫好原文,原文在未加密的狀態下稱之為明文 x
鮑伯使用密碼學安全偽隨機數生成器產生一對金鑰,其中一個作為公鑰為 c,另一個作為私鑰 d
鮑伯可以用任何方法傳送公鑰c 給愛麗絲,即使伊夫在中間竊聽到 c 也沒問題
愛麗絲用公鑰c 把明文 x 進行加密,得到密文c(x)
愛麗絲可以用任何方法傳輸密文c(x) 給鮑伯,即使伊夫在中間竊聽到密文 c(x)也沒問題
鮑伯收到密文,用私鑰d 對密文進行解密 d(c(x)),得到愛麗絲撰寫的明文x
由於伊夫沒有得到鮑伯的私鑰d,所以無法得知明文 x
如果愛麗絲丟失了她自己撰寫的原文x,在沒有得到鮑伯的私鑰d 的情況下,她的處境將等同伊夫,即無法透過鮑伯的公鑰c 和密文c(x)重新得到原文x

對比

對稱金鑰加密牽涉到金鑰管理的問題,尤其是金鑰交換,它需要作者和讀者在通訊之前先透過另一個安全的渠道交換共享的金鑰,才可以安全地把密文透過不安全的渠道傳送;對稱金鑰一旦被竊,其所作的加密將即時失效;而在網際網路,如果通訊雙方分隔異地而素未謀面,則對稱加密事先所需要的“安全渠道”變得不可行;非對稱加密則容許加密公鑰隨便散佈,解密的私鑰不發往任何使用者,只在單方保管;如此,即使公鑰在網上被截獲,如果沒有與其匹配的私鑰,也無法解密,極為適合在網際網路上使用。
另一方面,公鑰解密的特性可以形成數字簽名,使資料和檔案受到保護並可信賴;如果公鑰透過數字證書認證機構籤授成為電子證書,更可作為數字身份的認證,這都是對稱金鑰加密無法實現的。
不過,公鑰加密在在計算上相當複雜,效能欠佳、遠遠不比對稱加密;因此,在一般實際情況下,往往通過公鑰加密來隨機建立臨時的對稱祕鑰,亦即對話鍵,然後才通過對稱加密來傳輸大量、主體的資料

image.png