數據安全->加密
1.基礎概念:
機密性:防止他人拿到數據
完整性:數據不被破壞
身份驗證:保證數據的來源
PKI(public key infrastructure):公共的密鑰基礎設施。
協商生成密碼:密碼交換(Interne Key Exchange,IKE)
Diffie-Hellman協議(這是一種安常見的IKE)
原理;
A 和 B 進行協商:選擇兩個數字p, g (大素數,生成數)
A: 自動產生隨機數字x
B: 自動產生隨機數字y
A: 計算g^x%p 發送到B
B: 計算g^y%p 發送到A
此時在網絡上傳輸的數據有:g, p, g^x%p, g^y%p
這是不能夠找出x和y的。
A:計算(g^y%p)^x=g^yx%p
B: 計算(g^x%p)^y=g^xy%p
此時的g^yx%p就是雙方的密鑰,但是誰也不知道究竟密鑰是多少。
2.機密性:
對稱加密:加密和解密的用的都是一把密鑰。
特點:加速速度快
缺點:由於不同的會話之間都是要用到不同的密鑰,所以維護的密鑰過多。
實現:
DES:Data Encryption Standard 56bit加密(這個已經不常用了)
3DES:經過三次的DES
AES:Advanced Encryption Standard 這個有很多的變種,例如AES192 AES256
BlowFish:這個是要收費的。
3.完整性:
單項加密:提取數據的特徵碼。
特點:輸入一樣,那麼輸出也一樣;
雪崩效應:輸入產生微小變化就會引起結果的巨大變化。
定長輸出:無論原始數據多大,結果大小相同。
不可逆:無法根據特徵碼還原原數據。
實現:
MD4、MD5(128bit)
SHA1 sha224 sha256 sha384 sha512 等。
linux中的命令有:sha1hmac sha224sum sha256sum sha384sum sha512sum
sha1sum sha256hmac sha384hmac sha512hmac
4.身份驗證:
非對稱密鑰:分爲公鑰和私鑰,公鑰機密私鑰解密,私鑰加密公鑰解密。
公鑰(從私鑰中提取):機密數據
私鑰:身份驗證
特點:1.公鑰加密數據的速度很慢,所以一般不用公鑰加密數據。
2.私鑰主要是用來身份驗證。
實現:
RSA:加密和簽名
DSA:簽名
ELGamal:收費
5.網絡傳輸數據的過程:
對於A
1.用戶要發一封祕密郵件給B用戶,首先A用戶的明文通過hash函數得到一個信息摘要,在用A的私鑰對摘 要進行簽名得到一個數字信封,我們中的數字信封又稱數字指紋,具有不可否認性,就是說我們可以 根據數字信封來確認這封郵件是A發過來的,這個數字簽名有什麼用途,下面我們就知道了。
2.明文 A的數字簽名 A的公鑰鑰三者和三惟一用對稱加密密鑰進行加密,通常這步對用戶來說是透明 的,換句話來說就是系統自動用對稱加密算法對數據進行加密處理,來防止網上有人的信息監聽。
3.用用戶B的公鑰對對稱加密的密鑰進行加密,得到一個數字信封,我們知道對於非對稱加密算法,用B 的公鑰進行加密,只有B用戶的私鑰纔可以解密,而用戶B的私鑰是存儲在B的個人pc機上的,這樣即使在傳輸過程中信息被人截獲,由於無法得知用戶B的私鑰根本上是打不開的,
4.A用戶把信息發送到公網
對於B用戶來說,他需要做的也有4步
1.先對數字信封用B的私鑰進行解密,因爲我們發送的文件使用對稱加密算法得出的,對於對稱加密算法鑰匙就有一個,而B用戶是不知對稱加密的密鑰的,ok,B用戶首先用自己的私鑰對數字信封進行解密,從而得到對稱加密的密鑰
2.用對稱加密的密鑰對密文進行解密,這時候B用戶纔可以看到文件的明文,通過解密B用戶也同時得到了三個文件,分別是明文,A的數字簽名,A的公鑰,這時候有人要問了,那麼我們不可以僞造A的公鑰嗎?首先A的公鑰是在我們通過非對稱加密用B的私鑰和對稱加密算法揭開的,要得到A的公鑰我們就是和對稱加密和非對稱加密爲敵,即使是可以僞造A的公鑰,可A的私鑰是僞造不出來的,我們知道對於非對稱加密算法,密鑰是成對出現的,用私鑰加密只能公鑰解開,二者是相互關聯的,即使有人僞造了A的公鑰,同樣解不開密文。這步對於用戶來說同樣是透明的。
3.下面我們就說到數字簽名了,我們用A的公鑰對數字簽名進行解密,如果能解得開說明文件就是A用戶發過來的,具有不可抵賴性,這樣我們也就知道了爲什麼數字簽名又叫數字指紋了。這樣我們得到一個信息摘要,同樣我們對明文進行HASH運算同樣能得到一個信息摘要.
4.我們通過對二者進行對比,一樣說明信息傳遞無誤,不一樣則說明文件別人篡改了。
6.對於以上的傳輸過程需要一個公正單位能夠證明身份,也就是說讓別人知道我是誰,而不是假冒的。
這時候就要有一個CA(Certificate Authority)證書頒發機構。
1.一個完整的CA是一個認可的證書頒發機構。
2.CA中維護者一個CRL(Certificate Revocation list)證書吊銷列表。
3.CA的標準是X509(常用),pkcs12(不常用)
X509內容:
1.公鑰以及其有效的期限
2.證書的合法擁有者
3.證書應該如何使用
7.PKI的具體實現:TLS/SSL,OpenGpG
1.SSL:這個是網景公司開發的,在TCP的傳輸層和應用層加入一個半層的SSL實現數據的加密。
它其實是一個庫,實現數據的加密。
SSL版本:SSLV1 SSLV2 SSLV3 ,現在SSLV1已經不用了。
SSL全稱是 Security Socket Layer 安全套接字層.
2.TSL: Transport Layer Security 這個是國際標準化制定的。
TLSV1等價於SSLV3,其實現原理一樣。
8.SSL會話的建立過程
例如:http(tcp)
客戶端 服務器
1.客戶端請求會話。 1.服務器端收到請求
2.協商構造SSL會話,包括算法等 2.協商構造SSL會話,包括算法等
3.接受客戶端的證書。 3.向客戶端發送自己的證書
4.隨機產生對稱密鑰等打包數據 4.接受數據,並且驗證數據
5.重複上面動作 5.重複上面動作
6.使用完關閉會話 6.關閉會話
注意:以上沒有用到Diffie-Hellman協議.
9.OpenSSL:是一種強大的工具,實現了開源ssl功能。
1.構成:libcrypto:加密庫文件
libssl:ssl的庫文件
openssl:多用途的命令行工具。
2.openssl命令有很多的子命令:
例如:
1.對稱加密文件
openssl enc -des3 -salt -a -in 文件名 -out 文件名
解密:
openssl enc -des3 -salt -d -in 文件名 -out 文件名
2.單向加密文件(計算出MD5)
例如:md5sum + 文件
注意:md5加密都有salt,會使得相同的密碼有不一樣的加密結果。
3.openssl指出RSA和DSA對文件進行加密,對應的子命令是rsautl和dsa
同時也支持隨機數加密。例如 openssl rand -base64 數字 表示加密數字的長度。
10.利用openssl實現私有的CA:
1.先要生成一對密鑰;
(umask 077;openssl genrsa -out 文件名)
2.用私鑰生成公鑰
openssl rsa -in 私鑰文件 -pubout
3.req 可以生成證書也可以申請簽名
openssl req -new -x509 -key 私鑰文件 -out 文件名.crt -days 天數
注意:此時的ca不一定能用,這個要按照/etc/pki/tls/openssl.cnf進行設定然後完成。
經過以上步驟就可以完成了CA的創建,接下來就是辦法證書了,
1.要簽證就要有自己的密鑰,例如給http服務器做簽證。
(umask 077;openssl genrsa -out httpd.key 1024)
2.生成請求;(這個是同一臺機器上的,否則要進過網絡的傳輸然後進行簽證)
openssl req -new -key -out httpd.csr
csr:certificate signing request 證書請求文件
3.進行簽證:
openssl ca -in httpd.csr -out httpd.crt -days 365