區塊鏈中的密碼學:非對稱加密
本文由幣乎(bihu.com)優質內容計劃支持
在區塊鏈世界中,我們都能經常看到一個詞,叫非對稱加密,究竟什麼是非對稱加密呢?
非對稱加密,又稱為公開密鑰加密,是密碼學的一種演算法,它需要兩個密鑰,一個是公開密鑰,另一個是私有密鑰;一個用作加密的時候,另一個則用作解密;
由私鑰可以推算出公鑰,但是知道公鑰,在實際情況中不可能推算出私鑰,所以公鑰是公開的,而私鑰由用戶自行秘密保管。
非對稱加密類似於一個公開的郵箱,投遞口是任何人都可以寄信進去的,這可視為公鑰;而只有郵箱主人擁有鑰匙可以打開郵箱,這就視為私鑰。
在了解非對稱加密前,我們需要了解什麼是對稱加密?
對稱加密,也稱為單密鑰加密,是指採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密。
用一個現實世界上的例子是,一個傳統保管箱,開門和關門都是使用同一條鑰匙,這是對稱加密;
但是對稱加密在互聯網中傳輸信息,就會產生兩個問題:
沒有創建安全通道前,如何實現安全通訊?
這是一個先有雞還是先有蛋的問題,如果在先發送加密數據,但是不知道解密密鑰,無法正確解密數據;如果先明文發送密鑰,這種加密又有什麼意義呢?
如何確保是由發送人發出的信息?
在這個虛擬的互聯網中,就算把數據加密,但是如果黑客劫持了你的網路,發送加密信息,這種數據又有什麼意義呢?
為了解決這兩個問題,所以產生了非對稱加密,這個加密思想是 1974 年由 Merkle 提出,1976 年由斯坦福大學的兩位教授 Diffie 和 Hellman 完善。
我們先來看看第一個問題,如何實現安全通訊?
維基百科上舉了一個愛麗絲與鮑伯的例子:
愛麗絲與鮑伯事先互不認識,也沒有可靠安全的溝通渠道,但愛麗絲現在卻要通過不安全的互聯網向鮑伯發送信息
愛麗絲撰寫好原文,原文在未加密的狀態下稱之為明文 x
鮑伯使用密碼學偽隨機數產生一對密鑰,其中一個作為公鑰為 c,另一個作為私鑰 d
鮑伯可以用任何方法發送公鑰 c 給愛麗絲,即使黑客在中間竊聽到 c 也沒問題
愛麗絲用公鑰 c 把明文 x 進行加密,得到密文 c(x)
愛麗絲可以用任何方法傳輸密文 c(x) 給鮑伯,即使伊夫在中間竊聽到密文 c(x) 也沒問題
鮑伯收到密文,用私鑰 d 對密文進行解密 d(c(x)),得到愛麗絲撰寫的明文 x
由於黑客沒有得到鮑伯的私鑰 d,所以無法得知明文 x
這個過程簡單來說就是公鑰加密明文 c(x) 只有用私鑰才能解密,即 d(c(x)),最終得出了明文 x。
我們再來看第二個問題,如何確保是由發送人發出的信息?
如果某一用戶使用他的私鑰加密明文,任何人都可以用該用戶的公鑰解密密文;由於私鑰只由該用戶自己持有,故可以肯定該文件必定出自於該用戶。
這就引申了一個概念叫:數字簽名,即只有信息的發送者才能產生的,別人無法偽造的數據,這段數據同時也是對信息的發送者,發送信息真實性的一個有效證明。
由此可見非對稱加密的優點:
創建了一個信息安全通道
為信息發送者提供數字身份的認證
但是缺點也很明顯,計算太複雜,性能欠佳。
常見的公鑰加密演算法有:RSA、橢圓曲線加密演算法、ElGamal等等,使用最廣泛的是RSA演算法。
由公鑰為什麼不能推算出私鑰呢?RSA 演算法又究竟是怎麼實現的呢?這個問題比較複雜,有興趣可以去看一下,華南理工大學的計算機網路安全課程公開密鑰密碼學。
※什麼是比特幣的交易?是賬戶餘額的加減嗎?
※關於程序員生涯的思考,30 歲以後的碼農們該何去何從?
TAG:帶你學本書 |