灵魂画手:漫画图解 SSH
OpenSSL 本身是一個(gè)軟件庫,這個(gè)軟件被廣泛的應(yīng)用在系統(tǒng)服務(wù)器當(dāng)中,他的主要功能是在網(wǎng)絡(luò)通信的過程中,保證數(shù)據(jù)的一致性以及數(shù)據(jù)傳輸過程中的安全性。軟件本身是由C語言編寫,這使得他具備了跨平臺(tái)的特性,OpenSSL 主要包括如下三大功能:
-
加解密: OpenSSL 具有豐富的加解密算法庫,支持不同的加解密方式以及存儲(chǔ)秘鑰的方式,如對(duì)稱加密,非對(duì)稱加密,信息摘要等內(nèi)容
-
SSL 協(xié)議: OpenSSL 實(shí)現(xiàn)了 SSL 協(xié)議的的 SSLv2 和 SSLv3,支持了其中絕大部分算法協(xié)議
-
證書操作: OpenSSL 自身提供了一種文本數(shù)據(jù)庫,支持證書的管理功能,包括證書秘鑰的產(chǎn)生、請求產(chǎn)生、證書簽發(fā)、吊銷和驗(yàn)證等功能。
加解密的幾種形式
加解密的形式通常分為以下幾種:
-
對(duì)稱加密算法
-
非對(duì)稱加密算法
-
不可逆加密算法
-
下面我們挨個(gè)來看這些加密算法。
對(duì)稱算法
對(duì)稱算法是指信息的發(fā)送方和接收方使用同一份秘鑰去加解密數(shù)據(jù)。AES、DES 等都是常用的對(duì)稱加密算法。
對(duì)稱算法的優(yōu)點(diǎn)是加解密的速度快,適合對(duì)于大數(shù)據(jù)量加密。缺點(diǎn)是因?yàn)橹挥幸粋€(gè)秘鑰,所以秘鑰管理困難,只要暴露了,就很容易破解加密后的信息。
非對(duì)稱算法
非對(duì)稱算法是指信息的發(fā)送方和接收方分別持有一份秘鑰。一份公開發(fā)布,稱公鑰;一份私有,稱秘鑰。秘鑰可以導(dǎo)出對(duì)應(yīng)的公鑰。RSA、DSA 等是常用的非對(duì)稱加密算法。
一般情況下,信息發(fā)送者用公開密鑰去加密,而信息接收者則用私用密鑰去解密。公鑰機(jī)制靈活,但加密和解密速度卻比對(duì)稱密鑰加密慢得多。不同的使用場景下,也會(huì)衍生出其他的使用方法,比如私鑰加密,公鑰解密。
RSA 加解密算法
RSA 是一個(gè)流行的非對(duì)稱加密算法, 生成公私鑰內(nèi)容如下:
# 生成秘鑰 OpenSSL genrsa -out test.key 1024 # 從秘鑰中導(dǎo)出公鑰 OpenSSL rsa -in test.key -pubout -out test_pub.key # 公鑰加密文件 echo "test" > hello OpenSSL rsautl -encrypt -in hello -inkey test_pub.key -pubin -out hello.en # 私鑰解密文件 OpenSSL rsautl -decrypt -in hello.en -inkey test.key -out hello.de不可逆加密算法
不可逆加密算法主要用于校驗(yàn)文件的一致性,摘要算法就是其中一種。常用的摘要算法有 MD5。
摘要算法
摘要算法用來把任何長度的明文以一定規(guī)則變成固定長度的一串字符。在做文件一致性校驗(yàn)的時(shí)候,我們通常都是先使用摘要算法,獲得固定長度的一串字符,然后對(duì)這串字符進(jìn)行簽名。接收者接收到文件后,也會(huì)執(zhí)行一遍摘要算法后再簽名。前后數(shù)據(jù)一致,則表示文件在傳輸過程沒有被竄改。
base64
特別需要注意的是,base64 不是加密算法,它是編碼方式。 它可以方便傳輸過程 ASCII 碼和二進(jìn)制碼之間的轉(zhuǎn)換。類似于圖片或者一些文本協(xié)議,在傳輸過程中通常可以使用 base64 轉(zhuǎn)換成二進(jìn)制碼進(jìn)程傳輸。
SSH 加密流程
-
客戶端發(fā)送自己的密鑰 ID 給服務(wù)器端
-
服務(wù)器在自己的 authorized_keys 文件中查找是否存在此 ID 的公鑰
-
如果有,則服務(wù)器生成一個(gè)隨機(jī)數(shù),用當(dāng)前 ID 的公鑰加密
-
服務(wù)器將加密后的隨機(jī)數(shù)發(fā)給客戶端
-
客戶端用私鑰解密該隨機(jī)數(shù),然后在本地為隨機(jī)數(shù)做 MD5 加密
-
客戶端將該 MD5 哈希發(fā)給服務(wù)器端
-
服務(wù)器端為一開始自己生成的隨機(jī)數(shù)也做一個(gè) MD5 哈希,然后用通訊通道“公共的密鑰”將該哈希加密,再跟客戶端發(fā)來的內(nèi)容進(jìn)行對(duì)比。如果雙方內(nèi)容一致,則通過驗(yàn)證,開放訪問權(quán)限給客戶端
深入了解 OpenSSL 后,其對(duì)密碼學(xué)技術(shù)的功能支持會(huì)讓你激動(dòng)不已,如果有興趣可以更加深入地了解其中的內(nèi)容以及試驗(yàn)不同加密方式在不同場景中的使用。放個(gè)小預(yù)告: 后續(xù)還會(huì)推出一篇用 pyo3 來給 python 編寫 rsa 正反向加解密模塊的文章。
總結(jié)
以上是生活随笔為你收集整理的灵魂画手:漫画图解 SSH的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源浪潮下程序员的职业规划和成长
- 下一篇: 性能优化:如何更快地接收数据