使用gnupg為文件傳送文件加密
Windows系統(tǒng)請安裝Gpg4win,mac os 安裝GPGTools,安裝好后創(chuàng)建一個新的公私鑰匙對(key pair)
gpg --gen-key
按提示一步步做到***,注意*千萬*不要忘記或泄漏我們的私匙(passphrase)!
我們假定***的用戶信息為:You selected this USER-ID:"sb(sbsb.) ",創(chuàng)建一個撤銷證書(revocation certification)并做好備份。
$ gpg --output sb_gpg_revoke.asc --armor --gen-revoke sb@sb.com
將這份證書(sb_gpg_revoke.asc)保存/備份到安全的位置。
注意在任何時刻我們都可以使用$ gpg --list-key查看當前可用的key,導(dǎo)出公匙:$ gpg --output sb_gpg_asc.gpg --armor --export sb@sb.com。
注意這個公匙文件(somebody_gpg_asc.gpg)是需要和別人交換發(fā)給別人使用的。我們也可以將此證書發(fā)送到某些知名的服務(wù)器。
現(xiàn)在我們假定需要將文件testfile.txt發(fā)送到用戶 anotherone@elsewhere.com
這里簡單的介紹一下PGP的建立過程。
a) 用戶A獲取用戶B的公匙文件,并導(dǎo)入改公匙
b) 用戶A簽名用戶B的公匙文件。
c) 用戶A通過用戶B的公匙加密文件F,并將加密過后的文件F.asc發(fā)送給用戶B
d) 用戶c獲取到文件F.asc,并通過自己的私匙解密文件F.asc并還原為文件F
公匙雖然是公開的,但目前理論上絕對是安全的。其基本原理為任意一個合數(shù)都可以分解為多個質(zhì)數(shù)的乘積。比如
8 = 2*2*2
14 = 2*7
但一個數(shù)很小的時候我們能很快發(fā)現(xiàn)這些互質(zhì)的數(shù)(eg: 39 = 13 * 3),但當這個數(shù)很大的時候卻很難找到這些互質(zhì)的數(shù)了,如:
995757614766768701903 = 13757413 * 72379713741731
已經(jīng)基本不可能退出這兩個互質(zhì)的數(shù)(不一定是真正的質(zhì)數(shù),這里僅為做一個簡單的演示)了。實際我們采用的數(shù)字通常為1024-bit
這樣產(chǎn)生的結(jié)果即使在目前最快的計算機上計算,至少也需要幾千年的時間才可能得出最終的結(jié)果。
導(dǎo)入sb@sb.com的公匙。
$ gpg --import anotherone_gpg_asc.gpg
可以通過
$ gpg --list-key
驗證是否導(dǎo)入成功
簽名該公匙文件
$ gpg --edit-key sb@sb.com
$ # fpr
$ sign
# 按要求輸入相關(guān)簽名信息。
$ # check
$ write
通過用戶sb@sb.com的公匙加密需要傳送的文件testfile.txt
$ gpg --armor --encrypt testfile.txt
得到文件testfile.txt.asc,將此文件發(fā)送到需要接收方。
用戶收到文件testfile.txt.asc后,利用自己的私匙解密該文件
$ gpg --decrypt testfile.txt.asc
得到文件testfile.txt
注:測試通過的情況多出了兩步,即用戶anotherone@elsewhere.com也導(dǎo)入了sb@sb.com的公匙并做了數(shù)字簽名。