【密碼故事011】科普向: 加密演算法——密碼學的核心技術(上)
來自專欄 區塊鏈下午茶
加解密演算法是密碼學的核心技術,從設計理念上可以分為兩大基本類型
現代加解密系統的典型組件一般包括:加解密演算法、加密密鑰、解密密鑰。其中,加解密演算法自身是固定不變的,並且一般是公開可見的;密鑰則是最關鍵的信息,需要安全地保存起來,甚至通過特殊硬體進行保護。一般來說,對同一種演算法,密鑰需要按照特定演算法每次加密前隨機生成,長度越長,則加密強度越大。加解密的基本過程如下圖所示。
加密過程中,通過加密演算法和加密密鑰,對明文進行加密,獲得密文。
解密過程中,通過解密演算法和解密密鑰,對密文進行解密,獲得明文。
根據加解密過程中所使用的密鑰是否相同,演算法可以分為對稱加密(symmetric cryptography,又稱公共密鑰加密,common-key cryptography)和非對稱加密(asymmetric cryptography,又稱公鑰加密,public-key cryptography)。兩種模式適用於不同的需求,恰好形成互補。某些時候可以組合使用,形成混合加密機制。
並非所有加密演算法的安全性都可以從數學上得到證明。公認的高強度的加密演算法和實現往往經過長時間各方面充分實踐論證後,才被大家所認可,但也不代表其絕對不存在漏洞。因此,自行設計和發明未經過大規模驗證的加密演算法是一種不太明智的行為。即便不公開演算法加密過程,也很容易被攻破,無法在安全性上得到保障。
實際上,密碼學實現的安全往往是通過演算法所依賴的數學問題來提供,而並非通過對演算法的實現過程進行保密。
對稱加密演算法
對稱加密演算法,顧名思義,加密和解密過程的密鑰是相同的。該類演算法優點是加解密效率(速度快,空間佔用小)和加密強度都很高。缺點是參與方都需要提前持有密鑰,一旦有人泄露則安全性被破壞;另外如何在不安全通道中提前分發密鑰也是個問題,需要藉助Diffie–Hellman協議或非對稱加密方式來實現。
對稱密碼從實現原理上可以分為兩種:分組密碼和序列密碼。前者將明文切分為定長數據塊作為基本加密單位,應用最為廣泛。後者則每次只對一個位元組或字元進行加密處理,且密碼不斷變化,只用在一些特定領域,如數字媒介的加密等。
分組對稱加密代表演算法包括DES、3DES、AES、IDEA等:
- DES(Data Encryption Standard):經典的分組加密演算法,1977年由美國聯邦信息處理標準(FIPS)採用FIPS-46-3,將64位明文加密為64位的密文,其密鑰長度為64位(包含8位校驗位)。現在已經很容易被暴力破解;詳見http://blog.csdn.net/zyhlwzy/article/details/77948137
- 3DES:三重DES操作:加密→解密→加密,處理過程和加密強度優於DES,但現在也被認為不夠安全;
- AES(Advanced Encryption Standard):由美國國家標準研究所(NIST)採用,取代DES成為對稱加密實現的標準,1997~2000年NIST從15個候選演算法中評選Rijndael演算法(由比利時密碼學家Joan Daemon和Vincent Rijmen發明)作為AES,標準為FIPS-197。AES也是分組演算法,分組長度為128、192、256位三種。AES的優勢在於處理速度快,整個過程可以用數學描述,目前尚未有有效的破解手段;詳見詳見http://blog.csdn.net/zyhlwzy/article/details/77948165
- IDEA(International Data Encryption Algorithm):1991年由密碼學家James Massey與來學嘉聯合提出。設計類似於3DES,密鑰長度增加到128位,具有更好的加密強度。
序列密碼,又稱流密碼。1949年,Claude Elwood Shannon(資訊理論創始人)首次證明,要實現絕對安全的完善保密性(perfect secrecy),可以通過「一次性密碼本」的對稱加密處理。即通信雙方每次使用跟明文等長的隨機密鑰串對明文進行加密處理。序列密碼採用了類似的思想,每次通過偽隨機數生成器來生成偽隨機密鑰串。代表演算法包括RC4等。
對稱加密演算法適用於大量數據的加解密過程;不能用於簽名場景;並且往往需要提前分發好密鑰。
注意:分組加密每次只能處理固定長度的明文,因此對於過長的內容需要採用一定模式進行分割處理,《實用密碼學》一書中推薦使用密文分組鏈(Cipher Block Chain,CBC)、計數器(Counter,CTR)等模式。
推薦閱讀:
※《開講啦》科普:http和https,差的可不止一個「s」
※bboc scheme大賽
※密碼學基礎-Hash演算法
※如何一步步構建加密聊天應用