世界上有兩種密碼:一種是防止你的小妹妹偷看你的文件;另一種是防止當(dāng)局閱讀你的文件. > > ? —— Bruce Schneier《應(yīng)用密碼學(xué)》 #### 上篇鏈接: [2021年,用更現(xiàn)代的方法使用PGP(上)](https://ulyc.github.io/2021/01/13/2021年-用更現(xiàn)代的方法使用PGP-上/) ## 三、安全使用和備份 ### 準(zhǔn)備 為了" />
摘要:世界上有兩種密碼一種是防止你的小妹妹偷看你的文件另一種是防止當(dāng)局閱讀你的文件應(yīng)用密碼學(xué)上篇鏈接年,用更現(xiàn)代的方法使用上三安全使用和備份準(zhǔn)備為了安全性,建議在一臺(tái)斷網(wǎng)的或者系統(tǒng)上生成你的密鑰對(duì)。
世界上有兩種密碼:一種是防止你的小妹妹偷看你的文件;另一種是防止當(dāng)局閱讀你的文件.? —— Bruce Schneier《應(yīng)用密碼學(xué)》
為了安全性,建議在一臺(tái)斷網(wǎng)的Linux或者BSD系統(tǒng)上生成你的密鑰對(duì)。
特別推薦使用 Tails (boum.org)發(fā)行版,系統(tǒng)自帶gpg和paperkey 等工具 可以確保全程斷網(wǎng)操作 同時(shí)此系統(tǒng)重啟會(huì)擦除所有內(nèi)容,還免去了擦除密鑰的麻煩。
需要工具:
我的備份策略:
主密鑰備份建議備份在一個(gè)全盤加密的U盤中,然后放在一個(gè)絕對(duì)安全的地方。
主密鑰不建議導(dǎo)入智能卡設(shè)備,因?yàn)橹悄芸ǖ氖褂脠?chǎng)景是隨身攜帶,隨時(shí)取用,雖然智能卡中的密鑰無法導(dǎo)出,但是隨身攜帶增加了丟失的風(fēng)險(xiǎn),主密鑰一旦丟失,將會(huì)非常麻煩。
如果是土豪,當(dāng)然導(dǎo)入智能卡中更好,因?yàn)橹悄芸ㄖ忻荑€無法導(dǎo)出,只不過這個(gè)智能卡不能再隨身攜帶,而同樣應(yīng)該在一個(gè)安全的地方, 不到萬不得已不再取用, 不過這樣有些浪費(fèi),也是我不推薦的理由。
你可以將主私鑰加密后上傳到網(wǎng)盤或其他線上服務(wù)。
又是斷網(wǎng)操作,又是非對(duì)稱算法,還要好好保存一份私鑰,這一套流程走下來你也發(fā)現(xiàn)了跟數(shù)字貨幣的相似性,很多備份方式都可以借鑒他們的思路,比如上面網(wǎng)盤存儲(chǔ)就是數(shù)字貨幣熱錢包的思路。
冷錢包很經(jīng)典的一種方式,就是將私鑰寫/打印在紙上, 當(dāng)然我們也可以借鑒,不過若你想將這一眼望不到頭的私鑰抄下來, 或者打印下來,將來需要恢復(fù)的時(shí)候再一個(gè)個(gè)輸入進(jìn)電腦,顯然不現(xiàn)實(shí)。
(示例私鑰的一部分,用完即廢,如果是你自己的私鑰,打死也不要給別人看)
比如比特幣, 私鑰長這樣:
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss # 這么短很容易抄寫和輸入
同樣是非對(duì)稱算法為什么PGP的私鑰就長這么多呢?
因?yàn)樗麄冇玫乃惴ú煌忍貛拍J(rèn)使用的是ECDSA的 secp256k1算法, 該算法只是用來簽名和認(rèn)證,并不用來加密(很多科普文章會(huì)說這是加密算法,比特幣的算法也可以用來加密,這是錯(cuò)的,比特幣之所以有時(shí)被稱作加密貨幣只是因?yàn)樗蕾嚵嗣艽a學(xué)中的非對(duì)稱算法,并不是它能加密...),PGP默認(rèn)的是RSA算法,可以同時(shí)用來簽名和加密,前面說過目前RSA密鑰長度不小于2048 bit才安全,而且PGP導(dǎo)出的私鑰中不止密鑰信息,還包含了全部的公鑰信息,UID,子密鑰信息,以及設(shè)置密碼時(shí)的混淆。
Linux下有一個(gè)工具叫做paperkey
, 可以用來消去私鑰中 冗余的公鑰信息,極大減少私鑰長度,然后可以將精簡過的私鑰(ba
注意:
- 既然決定用PaperKey, 還是不要使用網(wǎng)絡(luò)打印機(jī)了,
- paperkey這個(gè)工具在Tails新版中是默認(rèn)軟件
- paperkey 手冊(cè)中推薦 恢復(fù)私鑰時(shí)使用OCR掃描, 而大部分OCR服務(wù)都要聯(lián)網(wǎng), 請(qǐng)注意這點(diǎn)。
密鑰只是一段信息,理論上可以放在其他任何可以存儲(chǔ)信息的介質(zhì)中,例如光盤,隱寫在圖片中, 寫入IC卡 , 紋身,, X光片 ,背下來 等等等等,可以發(fā)揮你的想象力。
請(qǐng)?jiān)谀阈湃蔚碾娔X上使用子密鑰,主密鑰不到萬不得已不要拿出來用,如果你將子密鑰放在智能卡中使用,可以忽略這部分。
子密鑰可以放在移動(dòng)存儲(chǔ)設(shè)備上直接使用,而無需拷貝/導(dǎo)入到電腦使用, 使用方法:
gpg --homedir [你的存儲(chǔ)設(shè)備的路徑]
在為什么安全?一節(jié)中 提到PGP支持很多算法,可是前面我們生成密鑰時(shí),只見到了很少的幾種。
因?yàn)間pg還有一種隱藏模式---- 專家模式,生成密鑰時(shí)可以使用
gpg --expert --full-gen-key
# 輸出
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)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(9) ECC and ECC
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(13) Existing key
(14) Existing key from card
就可以看到多出來不少選項(xiàng),其中ECC算法 全稱Elliptic Curve Cryptography 橢圓曲線密碼算法。
上面我選了 9 繼續(xù)
Please select which elliptic curve you want
(1) Curve 25519
(3) NIST P-256
(4) NIST P-384
(5) NIST P-521
(6) Brainpool P-256
(7) Brainpool P-384
(8) Brainpool P-512
(9) secp256k1 # 比特幣使用的算法
其中美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)系列橢圓曲線、Brainpool系列橢圓曲線、secp256k1都存在不同的安全風(fēng)險(xiǎn),不建議使用。
可以發(fā)現(xiàn)這里少了(2) 其實(shí)這里還有一些隱藏算法沒有列出,可通過如下命令查看
gpg --list-config --with-colons curve
# 輸出
cfg:curve: cv25519;ed25519;nistp256;nistp384;nistp521;brainpoolP256r1;brainpoolP384r1;brainpoolP512r1;secp256k1
上面缺少的(2)對(duì)應(yīng)的就是ed25519 ,是一種簽名算法,你選擇 (1)時(shí), 主密鑰用來簽發(fā)和簽名 用的就是ed25519,自動(dòng)生成的用來加密的子密鑰 算法 是cv25519 。
ECC算法比RSA的優(yōu)勢(shì)在于,在同等強(qiáng)度下,ECC的密鑰長度要小的多,性能也會(huì)好一些。 RSA算法的PGP私鑰 通過paperkey精簡過后一般還會(huì)有50+行HEX數(shù)據(jù),如果使用的是ECC算法生成的話, 可以減到8行以內(nèi),手抄完全沒問題。
RSA算法的優(yōu)勢(shì)在于大部分硬件設(shè)備的兼容性比較好,比如 YubiKey 5 支持 RSA 4096,但不支持 Curve 25519。而且多數(shù)設(shè)備都對(duì)RSA算法提供了硬件加速。
PS:
查閱資料時(shí)發(fā)現(xiàn) ,中文博客里被很多人抄來抄去的一句話:
ed25519 加密解密很快,生成時(shí)間短而且安全性更高,rsa 則加密解密稍慢,生成時(shí)間長,安全性沒有 ed25519 高,只是 rsa 基本都是默認(rèn),所以用的人更多,但是建議轉(zhuǎn)換為 ed25519 網(wǎng)站軟件現(xiàn)在基本都支持了.
這句話是 錯(cuò)的, ed25519是 EdDSA 算法的一種,只是一種簽名算法, EdDSA 全稱Edwards-curve Digital Signature Algorithm,愛德華橢圓曲線實(shí)現(xiàn)的數(shù)字簽名算法。
上面的話多出現(xiàn)在替換SSH默認(rèn)的RSA算法為ed25519的文章中出現(xiàn)。其實(shí)SSH協(xié)議中的非對(duì)稱算法 并不是用來加解密信息的,而只是用來認(rèn)證,正確的說法是ed25519簽名和認(rèn)證的速度很快。
再者, 不提密鑰長度說安全性都是耍流氓 ,RSA 4096 的安全強(qiáng)度是要 好于 ed25519 的。
uid 即 user id , 由三個(gè)部分組成:
UID的性質(zhì):
一般來說,操作UID只有主密鑰有權(quán)限操作, 后面會(huì)提到UID可以是偽造,然后提交到服務(wù)器的。
gpg --edit-key {keyid/uid}
gpg> adduid # 進(jìn)入交互界面后 輸入 help 可以查看支持的操作
# 輸入你要追加的信息
使用UID的場(chǎng)景有哪些呢? 如果你使用一個(gè)不常用的郵箱作為你的github/gitlab賬號(hào),你主要的郵箱生成的PGP 密鑰就不能用來簽名了。
這時(shí)候?yàn)榱吮Wo(hù)隱私 且 只要管理一個(gè)密鑰,就可以 在 Github設(shè)置里把 Keep my email addresses private勾上,將為你生成的隨機(jī)郵箱添加到 uid中, 這樣就只需要管理一個(gè)PGP密鑰,可以同時(shí)為你不同的Git賬號(hào)簽名。
跟添加UID差不多, 在gpg交互 界面 輸入 addphoto
就可以, 想要查看的話 輸入showphoto
。
只要你PGP的uid包含 git config 中的郵箱, 使用
git commit -S -m your commit message
即可簽名。
gpg --expert --edit-key {keyid/uid} ## 使用專家模式 不然沒有認(rèn)證的選項(xiàng)
gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
Your selection? 8 ## 選8 RSA 自定義權(quán)限
Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt ## 這里顯示默認(rèn)有Sign和Encrypt兩種權(quán)限
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? S ## 關(guān)閉Sign
Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Encrypt
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? E ## 關(guān)閉Encrypt
Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions:
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? A ## 開啟Authenticate
Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Authenticate
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? Q ## 退出
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 1y ## 有效期
Key expires at Tue Jan 7 11:33:54 2020 CST
Is this correct? (y/N) y
Really create? (y/N) y
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard move the mouse utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
sec rsa2048/7DEFA5351BCE3C55
created: 2019-01-07 expires: 2021-01-06 usage: SC
trust: ultimate validity: ultimate
ssb rsa2048/2FCE923F8ECB63F6
created: 2019-01-07 expires: 2021-01-06 usage: E
ssb rsa4096/19D32A8839DCAA1F
created: 2019-01-07 expires: 2020-01-07 usage: A
[ultimate] (1). hhhhh
gpg> save ## 保存
編輯bashrc
文件, 將默認(rèn)ssh 的agent替換為 gpg-agnet
# ~/.bashrc
export GPG_TTY=$(tty)
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
echo UPDATESTARTUPTTY | gpg-connect-agent 1> /dev/null
編輯~/.gnupg/gpg-agent.conf
文件增加:
# ~/.gnupg/gpg-agent.conf
enable-ssh-support
接著:
? gpg -k --with-keygrip
/Users/root/.gnupg/pubring.kbx
-----------------------------
pub rsa2048 2019-01-07 [SC] [expires: 2021-01-06]
8A9FC025A44AA4824C1F4AE27DEFA5351BCE3C55
Keygrip = BEFCCDFE36CC5442B888B8459265C68B60A4ABD2
uid [ultimate] hhhhh
sub rsa2048/0xF681DAEBBAB82124 2019-01-07 [E] [expires: 2021-01-06]
Keygrip = 422922ACFD099E79863D93B93333528F225C90FC
sub rsa2048/0x501DEDC36BD409C8 2019-01-07 [A] [expires: 2020-01-07]
Keygrip = 999A87A51CFE82DAA494BEB42F585051307F9E33
選擇你新加的帶有[A]標(biāo)志的那個(gè)新的子密鑰的 keygrip 即999A87A51CFE82DAA494BEB42F585051307F9E33
加入到~/.gnupg/sshcontrol
文件, 運(yùn)行ssh-add -l
查看是否已經(jīng)加入。
然后
gpg --export-ssh-key {keyid}!
注意,這里不能用 uid 不然會(huì)提示:
gpg: key "uid" not found: Unusable public key
gpg: export as ssh key failed: Unusable public key
這里只能填子密鑰的 key id這個(gè)例子里就是 0x501DEDC36BD409C8
。
輸出的 ssh public key 放到你的服務(wù)器上的~/.ssh/authorized_keys
中, 重啟shell 就可以連接了。
本文來自 UCloud后臺(tái)研發(fā)工程師
博客地址:https://ulyc.github.io/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/126020.html
摘要:上篇鏈接年,用更現(xiàn)代的方法使用上年,用更現(xiàn)代的方法使用中公鑰的發(fā)布與交換討論公鑰安全交換的中文文章比較少,而這一環(huán)是整個(gè)加密體系的重中之重。年月,有攻擊者惡意向公鑰服務(wù)器提交了對(duì)兩個(gè)著名網(wǎng)友的簽名背書。此事件中的受害者的證書就被簽名了次。上篇鏈接:2021年,用更現(xiàn)代的方法使用PGP(上)2021年,用更現(xiàn)代的方法使用PGP(中)PGP 公鑰的 發(fā)布 與 交換討論公鑰安全交換的中文文章比較少...
摘要:作為一個(gè)老牌的反核能活躍分子,齊默曼為了讓所有有相似傾向的人們可以安全的使用并且安全存儲(chǔ)消息和文件而創(chuàng)造了加密。建議為不同環(huán)境,不同用途都單獨(dú)生成子密鑰,互不干擾。世界上有兩種密碼:一種是防止你的小妹妹偷看你的文件;另一種是防止當(dāng)局閱讀你的文件.? ...
摘要:一密碼學(xué)的術(shù)語分類術(shù)語密碼體制明文空間密文空間密鑰空間加密算法和解密算法五部分構(gòu)成。柯克霍夫原則是現(xiàn)代密碼學(xué)設(shè)計(jì)的基本原則。特性散列函數(shù)特性消息的長度不受限制。 一、密碼學(xué)的術(shù)語、分類 1、術(shù)語 密碼體制:明文空間、密文空間、密鑰空間、加密算法和解密算法五部分構(gòu)成。 密碼協(xié)議:有時(shí)稱為安全協(xié)議,指以密碼學(xué)為基礎(chǔ)的消息交換的通信協(xié)議,目的是在網(wǎng)絡(luò)環(huán)境 中提供各種...
摘要:目前,京東云金秋上云特惠也只是針對(duì)企業(yè)用戶的,云主機(jī)核限量秒殺僅元年。除非有相反證據(jù)證明外,用戶參與活動(dòng)所獲得的全部權(quán)益和相應(yīng)責(zé)任,均歸屬于參與活動(dòng)的該京東云賬號(hào)所對(duì)應(yīng)的實(shí)名認(rèn)證主體。2021京東云金秋上云特惠早就開始了!一直忘記給大家傳達(dá),不好意思哦,不過京東云體量小,買的個(gè)人用戶不并不多。目前,2021京東云金秋上云特惠也只是針對(duì)企業(yè)用戶的,云主機(jī)2核4G限量秒殺,僅155元/年。大家可...
閱讀 3532·2023-04-25 20:09
閱讀 3736·2022-06-28 19:00
閱讀 3056·2022-06-28 19:00
閱讀 3075·2022-06-28 19:00
閱讀 3168·2022-06-28 19:00
閱讀 2874·2022-06-28 19:00
閱讀 3038·2022-06-28 19:00
閱讀 2632·2022-06-28 19:00