Linux的加密和認證
數據日益成為我們個人生活、經濟發展和安全保障的核心。這就意味著,我們必須做到時刻保障數據的安全。這就如同在現實世界中緊鎖家門、限制重要物品的進出,以及保護我們重要的企業財產一樣,我們有賴於加密來保證數據不會遭受各種網絡犯罪的侵入和盜取。任何有關於限制這種重要保護方式的建議,無論其初衷多麽美好,最終結果都會導致我們的安全保障被弱化。
當我們存款、購物和通信時,數據安全顯得越發重要。而這種安全的核心便是加密。隨著我們的生活越來越多地依賴於互聯網,人們更應該不斷提高數據安全意識,並為此付諸行動,保護我們的數字化世界不再繼續遭受各種網絡犯罪的攻擊和破壞。
二、加密技術
現在常見的加密技術主要有三種:對稱加密,非對稱加密,單向加密
對稱加密指的是加密和解密使用同一個密鑰
特點:1、加密、解密使用同一個密鑰,效率高。
2、將原始數據分割成固定大小的塊,逐個進行加密。
缺點:1、密鑰過多。
2、密鑰分發。
3、數據來源無法確認。
常見的對稱加密算法有:
DES:使用56位的密鑰,2000年的時候被人破解了,所以現在基本不再使用
AES:高級加密標準,可以使用128,129,256三種長度密鑰
其他的還有blowfish,Twofish和RC6,IDEA(商業算法),CAST5等
非對稱加密
公鑰:公開給所有人
私鑰:自己保留,必須保證其私密性
特點:1、用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然。
2、數字簽名:主要在於讓接收方確認發送方身份。
4、數據加密:適合加密較小的數據。
缺點:密鑰長,加密解密效率低下。
常見的非對稱加密算法有:
RSA:既可以用來加密解密,又可以用來實現用戶認證
DSA:只能用來加密解密,所以使用範圍沒有RSA廣
單向加密
單向加密: 只能加密、不能解密,即提取出數據的特征碼,可以校驗數據的完整性。
特點:1、定長輸出,雪崩效應(微小變化產生巨大反應)只要被加密內容有一點點的不同,加密所得結果就會有很大的變化。
2、無論被加密的內容多長/短,加密的結果(就是提取特征碼)是定長的。
常見的單向加密算法有:
md5:128bits定長輸出
sha系列:安全的哈希算法
sha-1,sha224,sha384,sha512
三、實驗操作
1.使用gpg工具實現對稱加密
我們先準備一個文件然後使用gpg工具對其進行加密
輸完密碼後加密就算完成了,這時就會生成一個.gpg文件就是加密後的文件
我們把這個文件傳到另一臺機器上進行解密
這裏的-o參數後跟的是將解密後的內容導出到一個指定文件(名字可以隨便指定)
2.使用gpg工具實現非對稱加密
先在A主機上生成公鑰/私鑰對
[root@centos7 ~]# gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1 #選擇加密算法
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 1024 #選擇密鑰長度
Requested keysize is 1024 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0 #選擇密鑰過期時間 0代表永不過期
Key does not expire at all
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
Real name: rootkey #給密鑰命名
Email address: #郵箱(可以為空)
Comment: #註釋(可以為空)
You selected this USER-ID:
"rootkey"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O #N重命名,C重寫註釋,E重寫郵箱,O生成密鑰,Q退出
將剛才生成的公鑰導出來
將生成的公鑰文件傳給另一臺需要加密的主機
然後我們再把公鑰導入,在這裏我們要註意下兩天機器的時間,我剛開始沒有註意到這點導致公鑰導入失敗如下:
把兩臺機器的時間同步之後,我們需要重新生成公鑰,重新開始,時間同步後我們再次導入就沒有問題了
我們再用導入的公鑰對要傳輸的文件進行加密
我們可以看到文件已進行了加密,這個加密的文件自己也是無法解密的,只有用另一臺機器的私鑰才能解開,這樣就確保了數據的安全性
我們把加密後的文件傳給另一臺機器
我們回到原來的機器用自己的私鑰對文件進行解密
我們也可以把解密後內容導出來
刪除公鑰和私鑰
我們要先刪除私鑰才能再刪除公鑰
刪除公鑰
加密工具還有openssl,也可以做到對稱加密,非對稱加密,我就在這裏給大家演示下用openssl做單向加密
單向加密是不可逆的,做單向加密一般都是為了校驗數據的完整性,我們先用md5算法對一個文件做一個加密,導出一個md5值
我們再對文件做一個小小的修改加個空格就行
可以看到,文件的md5值發生了很大的改變,這就是雪崩效應,這樣就可以判斷這個文件是否被別人篡改過。
四、CA認證
我們都知道,當客戶端與服務器端建立會話之前,首先是客戶端發送請求,然後進行TPC/IP的三次握手,接著客戶端與服務器端建立ssl會話。
會話過程如下:
1.客戶端計算數據特征值
2.使用私鑰加密特征值
3.隨機生成密碼對稱加密整個過程
4.使用服務器端公鑰加密密碼
5.服務器端使用私鑰解密密碼
6.服務器端解密整個數據
7.服務器端使用公鑰驗證身份
8.比較數據特征值
但是這些存在一個問題,誰來管理公鑰,任何在互聯網上傳播的數據都不安全,更不用說傳遞公鑰,如果它被篡改,那就無法驗證身份,所以不可能由用戶自己頒發公鑰。
這個時候就需要一個具有公信力的中間機構來做這個工作,就是CA。國內的大部分互聯網公司都在國際CA機構申請了CA證書,並且在用戶進行訪問的時候,對用戶的信息加密,保障了用戶的信息安全。理論上來說,任何組織或者個人都可以扮演CA的角色,只不過,難以得到客戶端的信任,不能推而廣之,最典型應用莫過於12306網站,這個網站就是自己給自己頒發的根證書。我們現在就自己搭建一個CA認證中心。
1、CA認證中心簡述
CA:CertificateAuthority的縮寫,通常翻譯成認證權威或者認證中心,主要用途是為用戶發放數字證書。
功能:證書發放、證書更新、證書撤銷和證書驗證。
作用:身份認證,數據的不可否認性。
端口:443
2.CA證書的制作
我們在這裏用三臺主機進行實驗,其中兩臺是作為CA機構存在,所以創建所需要的文件的時候主機A和主機B都需要創建。如果不提前創建這兩個文件,那麽在生成證書的過程中會出現錯誤。我們將文件創建在配置文件中指定的路徑下面。
生成證書索引數據庫文件:touch /etc/pki/CA/index.txt
指定第一個頒發證書的序列號:echo 01 > /etc/pki/CA/serial
CA自簽名證書(構造跟CA)
首先構造根CA證書。因為沒有任何機構能夠給跟CA頒發證書,所以只能根CA自己給自己頒發證書。
首先在A主機上生成私鑰文件
生成自簽名證書
3.頒發證書
頒發證書這裏我們將分成兩個環節介紹,分別是 子CA證書機構向根CA證書機構申請證書以及普通用戶向子CA證書機構申請證書。
子CA證書機構向根CA申請證書,這個過程和前面根CA生成私鑰的過程是一致的。
在子CA這裏我們就沒有設置私鑰密碼,密鑰長度也設置了為1024
用私鑰文件生成證書申請文件
將證書申請文件傳遞給根CA
根CA頒發證書
這時切換到根CA也就是A主機,生成證書
這時我們查看index.txt文件就會看到新增了一條記錄
將CA生成的證書頒發給子CA
主機B是作為子CA機構存在的,所以證書文件,必須是cacert.pem,否則,子CA將不能夠給其他用戶頒發證書。
普通用戶向子CA機構申請證書
過程和子CA申請差不多,首先也是生成私鑰文件,不過因為是普通用戶,所以生成的私鑰文件應該與之前的cacert.pem 有所區別
利用私鑰生成證書申請文件
將證書申請文件發送給子CA頒發機構
切換到子CA頒發機構頒發證書
將生成的證書傳遞給申請者
這樣,正常的證書頒發流程就算是完成了。
我們驗證下證書
-text 證書的內容
-issuer 證書頒發者的信息
-subject 證書主體的信息
-serial 證書的序列號信息
-dates 查看證書的時間
Linux的加密和認證