數據加密、數字簽名,CA製作

數據安全->加密

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.網絡傳輸數據的過程:

wKioL1RWOM3xsXyHAAN61_87r7E095.jpg


對於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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章