1. 程式人生 > >資訊加密和解密

資訊加密和解密

資訊傳遞的風險

資訊傳遞無時無刻不在發生,包括我們的信件往來,瀏覽網頁,社交軟體等等。然而在傳遞的過程中,會面臨各種各樣的潛在的風險,比如通過開發人員,出差人員,離職人員,還有我們的合作伙伴,或者商業間諜,電腦黑客,流程失控等等

加/解密

因為資訊傳遞風的風險,所以我們傳送方必須對資訊進行加密,也就是把明文變成密文,另一方也就是接收方需要再對資訊進行解密,也就是把密文在轉換成明文。

常用的加密方式和目的:

保證資料的機密性採用

對稱加密:加/解密用同一個金鑰       

加密演算法有 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]>”