密碼學六元組
- - 明文
- - 密文
- - 加密算法
- - 解密算法
- - 加密祕鑰
- - 解密祕鑰
其中加密算法和解密算法一般都是公開的,只有公開的算法才能被驗證是安全的。不要試圖開發自己的保密加密算法,一旦算法泄露,加密體系就崩潰了。所以加密時要選用公開的算法。
機密性完全依賴於祕鑰的安全性,祕鑰泄露了,就無安全可言了,密文可以被截獲,加解密算法都是公開的,對於破譯者來說,算法不是祕密,關鍵是拿到密碼本。
加密算法的分類
- 對稱加密(傳統加密算法) -- 加解密祕鑰相同
- 非對稱加密(公鑰加密算法)--加解密祕鑰不同
JAVA
JDK對密碼學算法的支持基本都位於下面兩個包中- -- javax.security
- -- javax.crypto
對稱加密算法
- DES (Data Encryption Standard)
- 3DES (Triple DES)
- AES (Advanced Encryption Standard)
對稱算法特點
- 加解密過程是互逆的
- 加減密算法使用置換和移位
algorithm |
key length |
security |
speed |
DES |
56 |
可被窮舉破解 |
快 |
3DES |
112或168 |
較高 |
慢 |
AES |
128、192、256 |
暫時還未被破解 |
快 |
安全性是相對而言的,隨着計算機性能的提升和雲計算的發展,安全算法的破解也會成爲可能
AES
祕鑰長度:128、192、256 (JDK默認只能使用128,如需使用更長的祕鑰,需要從Oracle官網下載對應擴展包)
對稱加密的最新標準
安全性高(暫時沒有被破解)、加密效率高
推薦使用
AES擴展包
非對稱加密算法(公鑰加密算法)
常用算法- RSA
- DH
- EIGamal
公鑰密碼體系
每個人都有兩個祕鑰:PublicKey,PrivateKey
公鑰公開給別人用,私鑰自己保管好不可泄露
用途
通信加密:公鑰加密,私鑰解密
數字簽名:私鑰加密,公鑰解密
通信模型
爲什麼需要公鑰密碼體系
在互聯網環境下,對稱祕鑰的配送需要安全保證
非對稱密鑰還可以做數字簽名
優缺點
優點:解決了祕鑰配送的安全問題
缺點:運算複雜,加密效率低
RSA算法
- 由MIT的3位學者提出,取每個人姓氏的第一個字母爲算法命名
- 祕鑰長度:512-65536(JDK默認是1024)
- 算法的本質:兩個大素數的乘積分解問題
- 目前是不可破解的
DH算法
- DH是一種祕鑰交換算法
- 用於通信雙方生成相同的對稱密碼
兩類算法的關係
相互補充,而不是後者取代前者
algorithm |
key exchange |
encryption speed |
AES |
不安全 |
快 |
RSA |
安全 |
慢 |
使用非對稱算法來交換祕鑰(甲乙雙方產生相同對稱祕鑰)
使用對稱算法加密數據
二者結合使用即安全又高效 比如:HTTPS