OpenSSL <網絡通信安全基礎>

#2.10.1  網絡安全通信基礎

         在這個危機四伏的互聯網中,如何確保數據能安全可靠的發生給對方呢?我們收到的數據如何判斷是否完整?是否被竊聽?是否真正來自對方呢?我們需要一種這樣安全服務來爲提供保障。

 

安全機制:

         數據保密,使用祕鑰通過加密算法將數據加密且只能通過祕鑰解密

         祕鑰交換,使用加密需要考慮如何將祕鑰安全傳給對方,通過交換機制可實現

 數據完整性,通過單項加密算法提取數據的特徵碼/指紋,判斷數據是否完整

 身份認證,數據交換前需要認證雙方的身份,通常使用證書認證

         訪問控制,可通過配置使數據分流,私密數據走特定的通道

         流量填充,有意投放些垃圾流量,加大被破解的難度

l  數據加密

 加密類型通常有兩類,對稱加密和非對稱加密。

 對稱加密,雙方使用相同的祕鑰進行加解密。

 非對稱加密,使用公鑰加密,只能使用與其配對的私鑰解密。

對稱加密算法:

  對稱加密算法的工作過程:首先需要將數據分成同等大小的組,組大小由算法定義,然後使用加密算法+祕鑰加密所有組,常見的加密算法有3DES,AES,RC4

 

  對稱加密的優點在於算法公開,計算量小,效率高。

  對稱加密的缺點在於祕鑰過多,每個回話都需要一個祕鑰,不易管理;無法安全傳輸密碼

 

                   

image.png

 

         DES,組長度爲64Bit,其中8位作爲校驗碼,其中56位參與DES運算

               3DES,組長度爲112Bit

               AES,組長度爲128,192,256,384,512

        

         非對稱加密算法:

    在非對稱加密中,祕鑰是成對的(公鑰和私鑰),公鑰是完全公開的,私鑰需要保密存放,使用公鑰加密只能通過與其配對的私鑰解密;並且公鑰與私鑰之間無法相互推導。

    常見非對稱加密算法: RSA,DSA,

    優點:可實現身份認證,祕鑰交換,數據加密功能。

    缺點:計算量大,效率低,適合加密較小的數據,通常用於加密對稱加密算法的祕鑰。

 

 

l  數據完整性

    數據完整性通過單向加密算法提取數據指紋實現.

    單向加密算法的特點:    a) 雪崩效應,數據微小的改變,結果巨大變化

                                                 b) 定長輸出,無論數據多大,輸出結果都一樣長度

    常見的算法有:

            md5(128 bit) ,sha1(160 bit) ,sha256(256 bit) ,sha384(384 bit) ,sha512(512 bit)

 

l  身份認證

 身份認證是指數據的發送方/接收方需要進行認證對方的身份,通常使用非對稱加密算法的特性製作數字簽名完成此機制。

         數字簽名:發送方產生一段數據(通常是數據的指紋)使用自己的私鑰加密並附在數據的尾部發送給對方。私鑰只有自己有,公鑰是公開的,所以如果接收方接用公鑰解密這段數據就能證明發送方的身份。

         另外,如果數據中途被篡改了,也能通過數據指紋發現。

 

        數據簽名更詳細的介紹地址:

        http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

 

 

 

l  祕鑰交換

    非對稱加密算法雖然不需要交換祕鑰,但是其加密效率太低,通常不使用其加密較大的數據。

    對稱加密安全高效,但是缺點在於祕鑰交換和管理。

    祕鑰交換可通過非對稱加密算法和DH算法協商實現

 

    非對稱加密算法實現:使用接收方的公鑰加密對稱加密算法的祕鑰,發送至對方。這種實現祕鑰依舊在互聯網上傳輸,終不安全,所以推薦使用DH算法。

 

 

 

l  PKI(Public Key Infrastrancture)公共基礎設施

    PKI是一套支持公開密鑰管理並能支持認證、加密、完整性和可追究性服務的一套技術和規範。

    PKI組件:

         證書頒發機構,CA

         證書註冊機構,RA

         證書吊銷列表,CRL

         證書存取庫

n  證書

    上述的公鑰加密、祕鑰交換機制都存在一個問題,加密的雙發都依賴於對方的公鑰,公鑰的獲取、傳輸時很有可能被掉包,這將導致整個加密過程都變得不安全。使用證書可解決此問題,證書由CA機構頒發,用於證明證書擁有者的身份和與之對應的公鑰。所以在通信時雙方交換證書即可。

 

CA頒發證書的過程:

            image.png

使用證書驗證對方公鑰是否可靠的原理:

            image.png

a)         通信雙發首先交換髮送自己的證書

b)         接收方使用CA的公鑰解密該證書的數字簽名,獲取證書的用戶信息與單向加密使用算法。

c)         通過單向加密算法提取數據指紋,對比數字簽名中的指紋信息,看是否一致

 

注:通常操作系統內置受信任CA的證書(內含公鑰),如果沒有CA的公鑰說明此CA不被操作系統信任。

 

目前常用的證書爲X.509數字證書標準,其內容如下:

    image.png

  • 2.10.2  OpenSSL

在Linux中使用OpenSSL即可實現上述功能,OpenSSL是一個安全套接字層密碼庫,包含主流的密碼算法並且具有CA管理功能、SSL協議支持。

Openssl的組成部分:openssl libcrypto libssl

       openssl                     #接口命令行,通過此接口可使用其內部封裝好的加、解密等功能

       libcrypto             #提供加、解密所需要的庫文件

       libssl                   #提供SSL功能

加密/解密:

       Openssl  enc  -e   –des3|aes256|aes512  -a       -salt  -in  in_file    -out  out_file

       Openssl  enc  -d   –des3|aes256|aes512  -a       -salt  -in  in_file    -out  out_file

              -e    encryption  ,加密

  -d    decryption  ,解密

  -des3|aes256|aes512       ,表示使用的算法,使用man查看更多

  -a    使用base64編碼

  -salt       自動加salt(雜質)值

  -in         輸入文件路徑

  -out       輸出文件路徑

    

使用AES加密/etc/fstab文件

[root@el7   ~]# openssl enc  -e  -aes256 -a -salt -in /etc/fstab -out   fstab.aes

enter   aes-256-cbc encryption password:

Verifying   - enter aes-256-cbc encryption password:

 

[root@el7   ~]# cat fstab.aes

U2FsdGVkX18QDV7bLjKYeNDkfbfN39YL2MXDbKhuy9fMFKWw5/Br7g5hyXXKWfq4

SBW9z1SiLBa/mdlGAniGGg==

 

解密:

[root@el7   ~]# openssl enc -d -aes256 -a -salt -in    fstab.aes -out fstab

enter   aes-256-cbc decryption password:

 

[root@el7   ~]# cat fstab

#

/dev/mapper/centos-swap   swap                    swap    defaults        0 0

 

單向加密:

       Openssl  dgst   -md5|sha1|sha224|sha512  -out  file     file

提取/etc/fstab文件的特徵碼

[root@el7   ~]# openssl dgst -md5  /etc/fstab 

MD5(/etc/fstab)=   032c6daf116ada90dbd3f8a76e143330

 

生成/etc/shadow中的密碼,類似passwd命令:

       Openssl  passwd  -1   -salt string  

[root@el7   ~]# openssl passwd -1  -salt 123456

Password:  

$1$123456$wWKtx7yY/RnLiPN.KaX.z.

注意:   $1$             表示使用的是md5

              $2a$      表示使用的是Blowfish

              $5$        表示使用的是SHA-256算法

              $6$        表示使用的是SHA-512算法

在RHEL6/7中用戶密碼都使用的SHA512加密

[root@localhost ~]# cat   /etc/shadow | grep root

root:$6$FjZV6IAU$mo3qz…….AH/:17642:0:99999:7:::

$6$                            表示使用SHA512加密

FjZV6IAU                   爲salt值

mo3qz…….AH           爲加密後的值,…爲省略的部分

[root@localhost ~]# cat   /etc/login.defs  | grep SHA

# Use SHA512 to encrypt   password.

ENCRYPT_METHOD   SHA512

 

 

生成隨機數:

Openssl rand   -base64 | -hex   NUM                 

       -base64        表示使用base64編碼

       -hex              表示使用16進制編碼

 NUM            表示字節長度

生成100字節的隨機數,並用base64編碼

[root@localhost   ~]# openssl  rand  -base64    100

4v529JK2zLPzQM7Qv3CF/e2FItUttcj9oK0NVT3AULsWAv5sKV59+y4e/FGX1nb6

MC/k0fSgpxbbiMogNLig1NQ+w2tLxc5/aMxVItpfcZYlV1phhXAW/v+QIeXjfJdE

zAZ5Ew==

 

生成私鑰

       Openssl  genrsa      [-des3]  -out file  NumBit

       -des3            表示使用des3將輸出結果加密

       -out  file    表示將私鑰輸出到指定文件位置

       NumBit        表示輸出的長度,必須要是512的倍數

生成私鑰並修改權限爲,只有自己能讀取、修改

[root@localhost   ~]# (umask 077; openssl  genrsa    -out ~/myPrivateKey 2048)

Generating   RSA private key, 2048 bit long modulus

......................+++

...........................................+++

e   is 65537 (0x10001)

 

[root@localhost   ~]# ll myPrivateKey

-rw-------. 1 root root 1675 May  6 00:24 myPrivateKey

 

提取公鑰

       Openssl rsa  -pubout   -in   PrivateKey.file    -out  PubKey.file

根據私鑰文件myPrivatekey文件,提取公鑰並寫入至myPubKey文件

[root@localhost   ~]# openssl rsa -in  myPrivateKey   -pubout -out myPubKey

writing   RSA key

 

[root@localhost   ~]# cat myPubKey

-----BEGIN   PUBLIC KEY-----

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0/X+TAvD/qQt2+D40MDG

。。。。。。。。。。。。。。。。。

WwIDAQAB

-----END   PUBLIC KEY-----

 

使用公鑰加密/解密/簽名

使用私鑰簽名

~]#   openssl  rsautl -sign -inkey   myPrivateKey  -in  test.txt    -out test.sign -hexdump

 

[root@localhost   ~]# cat test.sign

0000   - 4f da 7e cb f6 97 79 f1-f5 15 61 9e a3 ab 17 20   O.~...y...a....

0010   - 94 1a 9b ce 8c 58 c8 89-f0 66 48 e9 72 86 31 64   .....X...fH.r.1d

0020   - 76 b4 c4 1f 87 fb a2 e4-4f ec 22 55 2d c1 9b 7a   v.......O."U-..z

0030   - a6 7d 61 44 22 90 24 d9-57 7f a2 2f da 4f a1 7f   .}aD".$.W../.O..

0040   - 40 f4 25 1b 44 81 14 90-cf b5 06 10 41 22 cb c7   @.%.D.......A"..

0050   - a9 0e b7 28 ac 08 18 0e-1c bc 9e 82 3d 11 27 b9   ...(........=.'.

0060   - 8b fd 9a 37 ed ce e1 9e-69 a0 05 70 6b 9e 08 e7   ...7....i..pk...

0070   - b5 cb 86 18 79 eb fb 5e-e7 46 03 a5 da df d8 e2   ....y..^.F......

0080   - 15 17 72 f3 78 33 23 5b-73 cc 7a ef e1 5e 81 6f   ..r.x3#[s.z..^.o

0090   - bf ab 23 38 2d 79 fb 3c-cc 0b 03 d8 7e 4b 01 b1   ..#8-y.<....~K..

00a0   - 8c 08 6b 3c 81 dc 34 3c-9f b0 78 2b c0 c7 1f b3   ..k<..4<..x+....

00b0   - 5f 3b d8 4e 02 a5 34 5c-51 06 4c cf cb bb ff e5   _;.N..4\Q.L.....

00c0   - a5 6e 97 8f 42 6e ed 08-68 58 05 40 5d 29 22 5c   .n..Bn..hX.@])"\

00d0   - ea e1 80 26 70 62 69 38-7c fb b0 38 c8 3b 95 7b   ...&pbi8|..8.;.{

00e0   - cf 77 5e 0b bb 8f c1 64-7f 09 9b e6 87 ce 57 d4   .w^....d......W.

00f0   - 4e 57 31 bb bb f7 96 9c-33 32 15 4b fb 9d 61 b1   NW1.....32.K..a.

 


使用公鑰加密:

[root@localhost   ~]# openssl   rsautl -encrypt  -pubin -inkey   myPubKey  -in  test.txt -out  test.rsa.txt

 

[root@localhost   ~]# cat  test.rsa.txt

|©¿¤4#Kب



############

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