論計算機加密演算法的原理與實踐
本期論文我們來簡單討論一下計算機加密演算法的原理與實踐。
友情提示:不要看到論文二字就嚇跑了,其實讀懂一篇高水平的論文是非常簡單滴!
經常上網的童鞋肯定都知道,現在電腦和手機的安全實在是太重要了。很久很久以前,就有一個不懂數據安全的小伙,他叫陳冠希,後來的故事大家都知道了。
怎麼才能保護好重要的數據呢?有個重要的方法就是加密。經常聽說各種加密演算法、數字證書啥的,那到底計算機是如何加密的呢?讀完這篇論文你就明白了。
簽名演算法
簽名演算法不是領工資的時候把自己的名字寫到「簽名」一欄里。這裡的簽名是對消息內容做個計算,得到一個特徵碼,用這個特徵碼作為簽名。
搞個簽名有啥用?
我們來看發生在教室里的一個真實故事。
小明(性別:男)對女神小紅仰慕已久,終於在上課的時候鼓足勇氣在數學書背面寫了幾句話,舉起來希望女神能看見。無奈女神坐得離他比較遠,於是小明委託死黨老王(老王坐在小明和女神中間位置)複製一下自己的消息,這樣小明就表白成功了:
然而老王有個特點就是特別不靠譜,加上眼神不好,結果把「xiao ming」抄成了「xiao ning」,讓女神誤以為是班長小寧對自己表白了:
經過這次慘痛的教訓,小明決定給消息加上一個簽名,這樣如果老王抄錯了,女神核對簽名就會發現這個問題:
可見簽名就是用來判斷消息是否被修改過。如果消息被修改了,計算出來的簽名就和原始簽名對不上。
在計算機中,經常用MD5或者SHA1作為簽名演算法,你看到的一串亂七八糟的數字d41d8cd9...就是MD5簽名。經常用迅雷在網上亂下軟體的童鞋,可以用專門的軟體計算下載文件的MD5簽名,再去官網對比,如果一致,說明軟體沒有被篡改過。
但是簽名演算法不是加密演算法,不能用來加密,它的作用是防篡改。
對稱加密演算法
如果用一個密碼把消息加密,解密的時候還用這個密碼,這種加密演算法就是對稱加密演算法。
小明自從勾搭上女神後,經常上課的時候給女神傳紙條,當然必須通過中介老王。
沒想到老王其實對女神也垂涎已久,他偷偷改了小明的紙條,結果一下課女神就要和小明絕交:
小明用了九牛二虎之力終於向女神解釋明白了。不過要繼續傳紙條,始終繞不開老王,怎麼辦?小明用手機幾番搜索,終於找到了AES加密演算法!
AES加密就是用一個密碼把消息加密成密文,對方再用同一個密碼解密。因為用的密碼是同一個,所以稱為對稱加密。
小明和女神約定用女神的生日做密碼:
然而身經百戰的老王很快就猜出了密碼。難道要定期更換一個新密碼?
如果每次都用一個隨機密碼,那老王不就猜不到了?小明想到了這個好辦法,不禁為自己的機智點贊!
但是,每次傳紙條前,隨機密碼怎麼告訴女神?通過老王告訴她?呵呵!
小明又陷入了沉思。
DH密鑰交換演算法
數學課代表提醒小明:你現在面臨的問題是,通信雙方需要約定一個密碼,但是又必須通過一個不安全的信道傳遞密碼,所以你需要DH密鑰交換演算法喔!
原來學數學這麼有用!小明趕快惡補了Diffie-Hellman密鑰交換演算法,一看非常簡單!
首先,小明先選一個素數和一個底數,例如,素數p=23,底數g=5(底數可以任選),再選擇一個秘密整數a=6,計算A=g^a mod p=8,然後傳紙條給女神:p=23,g=5,A=8;
女神收到紙條後,也選一個秘密整數b=15,然後計算B=g^b mod p=19,並傳紙條告訴小明:B=19;
小明自己計算出密碼s=B^a mod p=2,女神也自己計算出密碼s=A^b mod p=2,因此,小明和女神最終協商的密碼s為2。
而這一切都發生在老王的眼皮底下,他卻無法計算出小明和女神協商的密碼:
中間人攻擊
既然老王無法獲知小明和女神協商的密碼,他就換了一個思路:小明要協商密碼的時候,老王就假裝自己是女神,和女神協商密碼的時候,老王假裝自己是小明,這樣,老王成功地使用了中間人攻擊得到了密碼!
非對稱加密
小明再次向數學課代表求助。
「看來對付老王這種高手,你得用RSA非對稱加密了。」數學課代表緩緩地說,「你和女神各自生成自己的公鑰和私鑰,然後把公鑰公開,比如寫在教室後面的黑板上,如果你要給女神發信息,你就用她的公鑰加密,再用你的私鑰簽個名,她用自己的私鑰解密信息,再用你的公鑰驗證簽名。老王沒有你倆的私鑰,沒法解密也沒法篡改!」
小明興奮地和女神生成了各自的RSA公鑰和私鑰。這下小明再也不用擔心老王了,從上課開始,小明就開始用RSA演算法對紙條的內容進行加密計算。由於RSA演算法計算量非常大,直到下課小明也沒有算完。
數學課代表拍了拍小明的肩膀,說:「加密這個事,還得用計算機算。學點JavaScript,你就可以直接寫代碼讓計算機幫你加密了!點這裡,直接學習如何用JavaScript實現加解密!」
推薦閱讀:
※如何看待王福重每本新書籤名需300元?
※我八年QQ簽名彙集
※你用過最喜歡的簽名是什麼?
※王偉傑簽名設計謝謝
※吳龍章 簽名設計。謝謝?