本文簡單介紹密碼編碼學領域的一些基本原理,基本演算法和基本理念。僅針對原先對此領域無甚了解的朋友做入門之用。
加密解密是資訊保安領域的基本技術,加解密系統中的基本概念從下面這張常規加密的簡化模型中就可以知道個大概。
從圖中可以看出,明文輸入在金鑰k1的作用之下,通過加密演算法(如des)轉換成密文,於是可以傳送給通訊的接收方;接收方則可以通過解密演算法以及金鑰k2將密文恢復成明文。
注意通訊內容經加密後,可採用公共通道(如網際網路)傳輸。還應注意金鑰在加解密系統中起著關鍵作用,金鑰本身當然不能直接通過公共通道來傳輸,需要通訊雙方事先約定,通過其它安全通道或安全機制來傳送。
而圍繞著k1和k2,加解密演算法可分為兩大類,一類叫對稱加密,另一類叫非對稱加密。
最基本的加密演算法,如上面提到的des,以及其它一些,比如aes、idea、rc5、rc2,cast-128,blowfish等,都是對稱加密演算法。
對稱加密的「對稱」指的是加密過程和解密過程所用的金鑰是相同的,或者,可以很容易地相互推導出來。
如果對某種演算法(如des)的細節感興趣,可以看看《密碼編碼學與網路安全》或《應用密碼學》等專業書籍。或者看看wiki上的介紹(如des,aes),或者看看也行。但不要被這些嚇著,這些演算法並不十分「複雜」,只是十分「麻煩」。麻煩可以增加破解的難度,而「複雜」則會增加安全性分析的難度。
多數對稱加密演算法就連演算法本身都是對稱的,即完全一樣的演算法(甚至完全一樣的模式)同時用於加密和解密。
基本理念
在加密解密領域,有一項重要的理念叫「輕演算法,重金鑰」,意思是說演算法應該公開,但金鑰要儲存好。演算法公開,全世界的人都可以幫你分析它的安全性,幫你找漏洞,並試圖破解它。如果這樣還是破解不了,那就說明你的演算法基本是安全的,要破解它理論上只能通過「暴力窮舉」之類的方法。而暴力窮舉的難度直接取決於金鑰的長度。這樣,只要金鑰足夠長,你便可以有信心。
反過來想,為什麼不「輕金鑰,重演算法」呢?至少有乙個方面是顯然的:金鑰的選擇餘地更大——64bit的金鑰就可以有2的64次方種組合,約為1.8 * 1019。而對於好的演算法,我們能有這麼多選擇麼?
1019是個什麼概念呢?做個計算,假設你有1000臺伺服器組成的集群,每台伺服器上有8個cpu,每個cpu有4個核且時鐘頻率為2g,再假設處理器可以在1000個時鐘週期內完成某個金鑰的計算及判定。如此,要窮舉64bit的金鑰空間也得9年時間。不過,現代對稱加密演算法好多都採用128位的金鑰了。
一種古老的加密演算法是把英語中的26個字母分別替換成另乙個字母,這種就過於簡單了,甚至窮舉都很容易,更何況還有基於字母概率的破解方法(比如在正常的英文文字中字母「e」出現的頻率最高,看過福爾摩斯探案集的朋友對此或許還有印象。)
指標 判斷乙個加密演算法的好壞有許多指標,除去實現細節方面的以外,至少還有兩項指標值得了解:
1. 雪崩效應
所謂雪崩效應,就是明文和金鑰哪怕只有1bit的改變,都會讓生成的密文產生很大的變化。這顯然有助於抵抗各種基於微小變化的差分分析。
2. 結構及運算簡單
演算法本身要很「麻煩」,但演算法使用的運算要盡量簡單,這有利於安全性分析,有利於加密解密的效率。這樣的演算法甚至用硬體實現都方便。
與對稱加密不同,非對稱加密中加密和解密的金鑰是不同的,且從某個金鑰推導出另乙個金鑰被認為十分困難。
非對稱加密演算法中一般會有乙個私有金鑰kr和乙個公開金鑰ku。兩個金鑰不同且難以相互匯出。
非對稱演算法的主要用途有:加密/解密、數字簽名和金鑰交換等。
由於非對稱加密的效率遠低於對稱加密,因此實際中常用的模式是使用非對稱演算法為通訊雙方傳輸或協商乙個臨時秘鑰。然後雙方通過這個金鑰使用效能更高的對稱加密演算法來通訊。注意協商出來的密協可以是臨時的。這在為金鑰分配提供了很大便利。
如果沒有這樣的機制,可以想象一下,金鑰的分配和儲存是多麼嚴重的問題:金鑰可以保障通訊的安全,那誰又來保障金鑰的安全?還記得諜戰片裡的「xx年xx刻本《康熙字典》」嗎?一旦被敵人知道了金鑰就是這本字典,以及哪天使用哪一頁,後果就可想而知了……
細心的朋友會問:那非對稱加密本身使用的金鑰又如何傳輸呢?別忘了非對稱加密中至少有乙個金鑰可以不用告訴別人,所以這樣做是相對安全的。而實際的金鑰協商機制通常會使用非對稱演算法的某種變形,比這還要靈巧。甚至可以在互不信任的雙方之間協商臨時金鑰。
rsa說到非對稱加密,便自然會講到rsa演算法。在資訊保安領域,rsa演算法是具有劃時代意義的重大發明。它是由麻省理工學院的ronrivest、adishamir和lenadleman於2023年研製並於2023年首次發表的一種演算法。(怎麼這麼多1978?intel發布8086開啟x86紀元也是1978……)
rsa演算法的原理不難理解,但要介紹它還是需要一點點數論基礎,所以我們不打算在這裡討論它的細節了。只說明一點,它的安全性依賴於大整數素因子分解的難度,即已知兩個大素數p和q的乘積n,想要反推出p和q是十分困難的。
橢圓曲線(ecc)
橢圓曲線演算法是另一種非對稱加密演算法。它由於能以更短的金鑰長度(意味著更少的運算量)提供與rsa相當的安全強度而備受青眯。
注意橢圓曲線並非橢圓。而且一類三次方程所對應的曲線。
橢圓曲線密碼演算法基於一種人為定義的有趣運算。首先,定義無窮遠點o,並作為加法的單位元。然後基於有限域上的橢圓曲線,定義一種加法。比如在下面的圖a中,直線與橢圓曲線相交成三點,j,k,l,我們定義j + k + l = o,j + k = -l。特別地,與x軸垂直的直線交曲線於兩點時,如下面的圖b,我們定義這兩點之和為o,如果一點為j,另一點即為-j。
當直線與曲線在某點相切且另一點相交時,如下面的圖a,我們定義j + j + l = o,即2j = -l。特別地,如果與x軸垂直的直線與曲線相切於一點,如下面的圖b,我們定義2j = o。
**:略有ps。
然後,我們定義:3l = 2l + l = l + l + l,4l = 3l + l,依此類推……
而橢圓曲線演算法基於的難題是:已知整數k和點p,計算q = kp較為容易;而已知q和p,要反推k則困難得多
摘自 steedhorse的專欄
密碼學簡介
當使用者訪問以https開頭的 時,使用者的計算機 膝上型電腦,桌面裝置,手機或其他裝置 使用傳輸層安全 tls 將其安全地連線到web伺服器。tls結合了一系列加密操作,以確保沒有第三方可以理解傳送的內容 機密性 沒有第三方可以修改訊息而不被檢測 完整性 並且沒有第三方可以模仿乙個通訊方 真實性 ...
密碼學簡介
資料竊取 資料篡改 身份偽裝 凱撒密碼 凱撒密碼是一種簡單的對稱加密演算法 通過平移得到密文 明文 hello world 演算法 向右平移 秘鑰 3 密文 khoor zrug 演算法 向左平移 秘鑰 3 對稱加密演算法 des特點 已經不適用了,不安全 秘鑰長度 8位元組 64位 每7位提供乙個...
密碼學 密碼學基礎
密碼學是研究編制密碼和破譯密碼的技術科學。密碼學的安全目標至少包含三個方面 保密性 完整性 可用性。完整性 資源只有授權方以授權的方式進行修改,所有資源沒有授權則不能修改。可用性 資源只有在適當的時候被授權方訪問,並按需求使用。密碼系統由5部分組成 1 明文空間m 全體明文的集合 2 密文空間c 全...