加密的目的及方式
- 1 加密的目的及方式
- 2 常見的加密算法
- 3 檢查檔案的MD5校驗和
- 3.1 檢視檔案改動前的校驗和,複制為新檔案其校驗和不變
- 3.2 對檔案内容稍作改動,再次檢查校驗和,會發現校驗和已大不相同
- 4 GPG對稱加密方式保護檔案
- 4.1 確定已經安裝了相關軟體
- 4.2 gpg使用對稱加密算法加密資料的操作
- 4.3 使用gpg對加密檔案進行解密操作
- 5 使用GPG非對稱加密方式保護檔案
- 5.1 接收方UserA建立自己的公鑰、私鑰對(在192.168.2.5操作)
- 5.2 UserA導出自己的公鑰檔案(在192.168.2.5操作)
- 5.3 UserB導入接收的公鑰資訊(在192.168.2.100操作)
- 5.4. UserB使用公鑰加密資料,把加密後的資料傳給UserA(在192.168.2.100操作)
- 5.5.UserA以自己的私鑰解密檔案(在192.168.2.5操作)
- 6 GPG的簽名機制,檢查資料來源的正确性
- 6.1 在proxy(192.168.2.5)上,UserA為軟體包建立分離式簽名
- 6.2 在192.168.2.100上驗證簽名
1 加密的目的及方式
- 方式
- 對稱加密:加密/解密用同一個密鑰
- 非對稱加密:加密/解密用不同的密鑰(公鑰和私鑰)
- 目的
- 保護資訊的完整性
2 常見的加密算法
- 對稱加密
- DES,Data Encryption Standard
- AES,Advanced Encryption Standard
- 非對稱加密
- RSA,Rivest Shamirh Adleman
- DSA,Digital Signature Algorithm
- Hash散列技術,用于資訊摘要
- MD5,Message Digest Algorithm 5
- SHA,Secure Hash Algorithm
- 根據輸入的文本(長度不限),生成固定長度(比如128位)的摘要文本
- 隻要輸入的文本不同,則生成的摘要文本也不一樣
3 檢查檔案的MD5校驗和
3.1 檢視檔案改動前的校驗和,複制為新檔案其校驗和不變
vim file1.txt #建立一個檔案,内容如下
abcdef
123456779
cp file1.txt file2.txt #拷貝檔案
cp file1.txt file3.txt
md5sum file?.txt #檔案内容一緻,則校驗和也不變
3.2 對檔案内容稍作改動,再次檢查校驗和,會發現校驗和已大不相同
echo "x" >>
4 GPG對稱加密方式保護檔案
- GnuPG,GNU Privacy Guard
- http://www.gnupg.orf/
- 是非常流行的加密軟體,支援所有常見加密算法,并且開源免費使用。
4.1 確定已經安裝了相關軟體
yum -y install gnupg2 #安裝軟體
gpg --version #檢視版本
gpg (GnuPG) 2.0.22
4.2 gpg使用對稱加密算法加密資料的操作
gpg -c file2.txt
.. ..
根據提示依次輸入兩次密碼即可。如果是在GNOME桌面環境,設定密碼的互動界面會是彈出的視窗程式。如果是在tty終端執行的上述加密操作,則提示界面也是文本方式的。
根據提示輸入兩次密碼,加密後的檔案(自動添加字尾 .gpg)就生成了,傳遞過程中隻要發送加密的檔案(比如 file2.txt.gpg)就可以了。
cat file2.txt.gpg #檢視加密資料為亂碼
4.3 使用gpg對加密檔案進行解密操作
gpg -d file2.txt.gpg > file2.txt #解密後儲存
gpg: 3DES 加密過的資料
.. .. #根據提示輸入正确密碼
cat file2.txt #檢視解密後的檔案
abcdef
123456779
5 使用GPG非對稱加密方式保護檔案
非對稱加密/解密檔案時,UserA(192.168.2.5主機)生成私鑰與公鑰,并把公鑰發送給UserB(192.168.2.100主機),UserB使用公鑰加密資料,并把加密後的資料傳給UserA,UserA最後使用自己的私鑰解密資料。
5.1 接收方UserA建立自己的公鑰、私鑰對(在192.168.2.5操作)
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.
# 請選擇您要使用的密鑰種類:
(1) RSA and RSA (default) #預設算法為RSA
(2) DSA and Elgamal
(3) DSA (僅用于簽名)
(4) RSA (僅用于簽名)
您的選擇? #直接回車預設(1)
RSA 密鑰長度應在 1024 位與 4096 位之間。
您想要用多大的密鑰尺寸?(2048) #接受預設2048位
您所要求的密鑰尺寸是 2048 位
請設定這把密鑰的有效期限。
0 = 密鑰永不過期
<n> = 密鑰在 n 天後過期
<n>w = 密鑰在 n 周後過期
<n>m = 密鑰在 n 月後過期
<n>y = 密鑰在 n 年後過期
密鑰的有效期限是?(0) #接受預設永不過期
密鑰永遠不會過期
以上正确嗎?(y/n)y #輸入y确認
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <[email protected]>"
真實姓名:UserA
電子郵件位址:[email protected]
注釋:UserA
您標明了這個使用者辨別:
“UserA (UserA) <[email protected]>”
更改姓名(N)、注釋(C)、電子郵件位址(E)或确定(O)/退出(Q)?O #輸入大寫O确認
您需要一個密碼來保護您的私鑰。
我們需要生成大量的随機位元組。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
滑鼠、讀寫硬碟之類的),這會讓随機數字發生器有更好的機會獲得足夠的熵數。
我們需要生成大量的随機位元組。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
滑鼠、讀寫硬碟之類的),這會讓随機數字發生器有更好的機會獲得足夠的熵數。
注意:生成密鑰後目前終端可能會變的無法使用,執行reset指令即可,或者關閉後再開一個終端
解決辦法
mv /dev/random /dev/random.bak
ln
5.2 UserA導出自己的公鑰檔案(在192.168.2.5操作)
使用者的公鑰、私鑰資訊分别儲存在pubring.gpg和secring.gpg檔案内:
gpg --list-keys #檢視公鑰環
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/FC800101 2020-08-11
uid UserA (UserA) <[email protected]>
sub 2048R/8524E7A2 2020-08-11
使用gpg指令結合–export選項将其中的公鑰文本導出:
gpg -a --export UserA > UserA.pub #導出密鑰(檔案名任意)
#--export的作用是導出密鑰,導出名稱為UserA的密鑰
#-a的作用是導出的密鑰存儲為ASCII格式
scp UserA.pub 192.168.2.100:/tmp/
#UserA将密鑰傳給UserB
5.3 UserB導入接收的公鑰資訊(在192.168.2.100操作)
使用gpg指令結合–import選項導入公鑰資訊,以便在加密檔案時指定對應的公鑰。
gpg --import /tmp/UserA.pub #導入密鑰
gpg: 密鑰 421C9354:公鑰“UserA (UserA) <[email protected]>”已導入
gpg: 合計被處理的數量:1
gpg: 已導入:1 (RSA: 1)
5.4. UserB使用公鑰加密資料,把加密後的資料傳給UserA(在192.168.2.100操作)
echo "I love you ." > love.txt
gpg -e -r UserA love.txt #加密資料
無論如何還是使用這把密鑰嗎?(y/N)y #确認使用此密鑰加密檔案
#-e選項是使用密鑰加密資料
#-r選項後面跟的是密鑰,說明使用哪個密鑰對檔案加密
scp love.txt.gpg 192.168.2.5:/root #加密的資料傳給UserA
5.5.UserA以自己的私鑰解密檔案(在192.168.2.5操作)
gpg -d love.txt.gpg > love.txt #解密資料
#驗證私鑰密碼
gpg: 由 2048 位的 RSA 密鑰加密,鑰匙号為 8524E7A2、生成于 2020-08-11
“UserA (UserA) <[email protected]>”
cat love.txt #獲得解密後的檔案内容
6 GPG的簽名機制,檢查資料來源的正确性
使用私鑰簽名的檔案,是可以使用對應的公鑰驗證簽名的,隻要驗證成功,則說明這個檔案一定是出自對應的私鑰簽名,除非私鑰被盜,否則一定能證明這個檔案來自于某個人!
6.1 在proxy(192.168.2.5)上,UserA為軟體包建立分離式簽名
将軟體包、簽名檔案、公鑰檔案一起釋出給其他使用者下載下傳。
tar zcf log.tar /var/log #建立測試軟體包
gpg -b log.tar #建立分離式數字簽名
ls -lh log.tar*
-rw-r--r--. 1 root root 1.8M 8月 11 19:16 log.tar
-rw-r--r--. 1 root root 287 8月 11 19:16 log.tar.sig
scp log.tar* 192.168.2.100:/root #将檔案與簽名傳給UserB
6.2 在192.168.2.100上驗證簽名
gpg --verify log.tar.sig log.tar
# gpg: 于 2020年08月11日 星期二 19時16分56秒 CST 建立的簽名,使用 RSA,鑰匙号 FC800101
# gpg: 完好的簽名,來自于“UserA (UserA) <[email protected]>”