資訊加密和解密
資訊傳遞的風險
資訊傳遞無時無刻不在發生,包括我們的信件往來,瀏覽網頁,社交軟體等等。然而在傳遞的過程中,會面臨各種各樣的潛在的風險,比如通過開發人員,出差人員,離職人員,還有我們的合作伙伴,或者商業間諜,電腦黑客,流程失控等等
加/解密
因為資訊傳遞風的風險,所以我們傳送方必須對資訊進行加密,也就是把明文變成密文,另一方也就是接收方需要再對資訊進行解密,也就是把密文在轉換成明文。
常用的加密方式和目的:
保證資料的機密性採用
對稱加密:加/解密用同一個金鑰
加密演算法有 DES(Data Encryption Standard)
AES(Advanced Encryption Standard)
非對稱加密:加/解密用不同的金鑰(公鑰/私鑰)
演算法有 RSA(Rivest Shamirh Adleman)
DSA(Digital Signature Algorithm)
保護資訊的完整性用
資訊摘要:基於輸入的資訊生成長度較短,位數固定的雜湊值
Hash雜湊技術 根據輸入的文字(長度不限) 生成固定的128位的摘要文字
MD5 Message Digest Algorithm 5
SHA Secure Hash Algorithm
GnuPG,GNU Privacy Guard
官網:http://www.gnupg.org/
最流行的資料加密,數字簽名工具軟體
[[email protected] ~]# gpg --version ... Home: ~/.gnupg 支援的演算法: 公鑰:RSA, ?, ?, ELG, DSA 對稱加密:IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 雜湊:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 壓縮:不壓縮, ZIP, ZLIB, BZIP2
GnuPG 對稱加密
--symmetric 或 -c 解密 --decrypt 或 -d
[[email protected] ~]# useradd usera
[[email protected] ~]# useradd userb
[[email protected] ~]# echo 123456 | passwd --stdin usera
[[email protected] ~]# echo 123456 | passwd --stdin userb
[[email protected] ~]# ssh -X [email protected]
[[email protected] ~]$ echo "dui chen jia mi " > a.txt
[[email protected] ~]$ cat a.txt
dui chen jia mi
[[email protected] ~]$ gpg -c a.txt
┌─────────────────────────────────────────────────────┐
│ 請輸入密碼 │
│ │
│ │
│ Passphrase_1234567890________//輸入加密密碼__ _______ │
│ │
│ <OK> <Cancel> │
└─────────────────────────────────────────────────────┘
gpg: 已建立目錄‘/home/usera/.gnupg’
gpg: 新的配置檔案‘/home/usera/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/usera/.gnupg/gpg.conf’裡的選項於此次執行期間未被使用
gpg: 鑰匙環‘/home/usera/.gnupg/pubring.gpg’已建立
[[email protected] ~]$ cp a.txt.gpg /tmp/
[[email protected] ~]$ cat /tmp/a.txt.gpg
�˕x�7���,��}�����.h�@�WH<]
[[email protected] ~]$ gpg -d /tmp/a.txt.gpg
gpg: 已建立目錄‘/home/userb/.gnupg’
gpg: 新的配置檔案‘/home/userb/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/userb/.gnupg/gpg.conf’裡的選項於此次執行期間未被使用
gpg: 鑰匙環‘/home/userb/.gnupg/secring.gpg’已建立
會出現對話方塊提示密碼
gpg: CAST5 加密過的資料
gpg: 以 1 個密碼加密
dui chen jia mi //已解密
gpg: 警告:報文未受到完整的保護
GnuPG 非對稱/解密
接收方:建立金鑰對 gpg --gen-key 匯出公鑰:gpg --export、--armor 或 -a
傳送方 :匯入公鑰 gpg --import
加密:gpg --encrypt 或 -e --recipient 或 -r 指定目標使用者(建立的真實姓名) 檔案
解密:gpg --decrypt 或 -d 需要輸入私鑰密碼
[[email protected] ~]$ gpg --gen-key
gpg: 已建立目錄‘/home/userb/.gnupg’
gpg: 新的配置檔案‘/home/userb/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/userb/.gnupg/gpg.conf’裡的選項於此次執行期間未被使用
gpg: 鑰匙環‘/home/userb/.gnupg/secring.gpg’已建立
gpg: 鑰匙環‘/home/userb/.gnupg/pubring.gpg’已建立
請選擇您要使用的金鑰種類:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (僅用於簽名)
(4) RSA (僅用於簽名)
您的選擇? //預設即可,直接回車
RSA 金鑰長度應在 1024 位與 4096 位之間。 //可自己定義,需要記住
您想要用多大的金鑰尺寸?(2048)
您所要求的金鑰尺寸是 2048 位
請設定這把金鑰的有效期限。
0 = 金鑰永不過期
<n> = 金鑰在 n 天后過期
<n>w = 金鑰在 n 周後過期
<n>m = 金鑰在 n 月後過期
<n>y = 金鑰在 n 年後過期
金鑰的有效期限是?(0)
金鑰永遠不會過期
以上正確嗎?(y/n) y //輸入y確定
真實姓名:123456
姓名不可以用數字開頭
真實姓名:guo
姓名至少要有五個字元長
真實姓名:guo123
電子郵件地址:123456
電子郵件地址無效
電子郵件地址:[email protected]
註釋:123
您選定了這個使用者標識:
“guo123 (123) <[email protected]>”
更改姓名(N)、註釋(C)、電子郵件地址(E)或確定(O)/退出(Q)?O
您需要一個密碼來保護您的私鑰。
會彈出對話方塊,提示輸入密碼(這裡為123456790)
...
公鑰和私鑰已經生成並經簽名。
...
[[email protected] ~]$ gpg --export -a > /tmp/userb.pub //匯出公鑰到檔案中
[[email protected] ~]$ gpg --import /tmp/userb.pub //usera使用者匯入公鑰
gpg: 已建立目錄‘/home/usera/.gnupg’
gpg: 新的配置檔案‘/home/usera/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/home/usera/.gnupg/gpg.conf’裡的選項於此次執行期間未被使用
gpg: 鑰匙環‘/home/usera/.gnupg/secring.gpg’已建立
gpg: 鑰匙環‘/home/usera/.gnupg/pubring.gpg’已建立
gpg: /home/usera/.gnupg/trustdb.gpg:建立了信任度資料庫
gpg: 金鑰 98FA8D5F:公鑰“guo123 (123) <[email protected]>”已匯入
gpg: 合計被處理的數量:1
gpg: 已匯入:1 (RSA: 1)
[[email protected] ~]$ ls ./.gnupg/
gpg.conf pubring.gpg pubring.gpg~ secring.gpg trustdb.gpg
[[email protected] ~]$ echo 'fei dui chen jia mi ' > test.txt
[[email protected] ~]$ gpg -e -r guo123 test.txt
無論如何還是使用這把金鑰嗎?(y/N)y
[[email protected] ~]$ cp test.txt.gpg /tmp/
[[email protected] ~]$ cat /tmp/test.txt.gpg
�
���9A��7�G�]�a�6���L����M���0]�....
[[email protected] ~]$ gpg -d /tmp/test.txt.gpg > 2.txt
您需要輸入密碼,才能解開這個使用者的私鑰:“guo123 (123) <[email protected]>”
2048 位的 RSA 金鑰,鑰匙號 B9391241,建立於 2018-12-29 (主鑰匙號 98FA8D5F)
gpg: 由 2048 位的 RSA 金鑰加密,鑰匙號為 B9391241、生成於 2018-12-29
“guo123 (123) <[email protected]>” //剛才私鑰保護密碼
[[email protected] ~]$ cat 2.txt
fei dui chen jia mi
GPG軟體簽名和驗證
軟體簽名和驗證過程
軟體官方以私鑰對軟體包進行數字簽名
使用者下載軟體包和官方公鑰
以官方公鑰驗證軟體簽名,確保資料來源正確
對軟體包建立簽名檔案 分離式簽名 --detach-sign 或 -b
驗證簽名 --verify
[[email protected] ~]$ vim qianming.txt
123456
654321
000000
[[email protected] ~]$ gpg -b qianming.txt
您需要輸入密碼,才能解開這個使用者的私鑰:“guo123 (123) <[email protected]>”
2048 位的 RSA 金鑰,鑰匙號 98FA8D5F,建立於 2018-12-29
彈出對話方塊,提示輸入密碼
[[email protected] ~]$ ls
2.txt perl5 qianming.txt qianming.txt.sig //.sig生成的簽名檔案
[[email protected] ~]$ cp qianming.* /tmp //需要簽名檔案和原始檔同時匯出
[[email protected] ~]$ gpg --verity /tmp/qianming.txt.sig //usera持有公鑰進行驗證
gpg: invalid option "--verity"
[[email protected] ~]$ gpg --verify /tmp/qianming.txt.sig
gpg: 於 2018年12月29日 星期六 17時24分41秒 CST 建立的簽名,使用 RSA,鑰匙號 98FA8D5F
gpg: 完好的簽名,來自於“guo123 (123) <[email protected]>”
gpg: 警告:這把金鑰未經受信任的簽名認證!
gpg: 沒有證據表明這個簽名屬於它所聲稱的持有者。
主鑰指紋: 8D92 C393 C5B5 55EA EA02 0AE9 6006 BC0F 98FA 8D5F
[[email protected] ~]# vim /tmp/qianming.txt //以root身份對檔案進行改動
123456
654321
000000
aaa
[[email protected] ~]$ gpg --verify /tmp/qianming.txt.sig //usera使用者進行驗證,簽名已經損壞
gpg: 於 2018年12月29日 星期六 17時24分41秒 CST 建立的簽名,使用 RSA,鑰匙號 98FA8D5F
gpg: 已損壞的簽名,來自於“guo123 (123) <[email protected]>”