世界上有兩種密碼:一種是防止你的小妹妹偷看你的文件;另一種是防止當(dāng)局閱讀你的文件. > > ? —— Bruce Schneier《應(yīng)用密碼學(xué)》 #### 上篇鏈接: [2021年,用更現(xiàn)代的方法使用PGP(上)](https://ulyc.github.io/2021/01/13/2021年-用更現(xiàn)代的方法使用PGP-上/) ## 三、安全使用和備份 ### 準(zhǔn)備 為了" />

成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

2021年,用更現(xiàn)代的方法使用PGP(中)

Tecode / 2287人閱讀

摘要:世界上有兩種密碼一種是防止你的小妹妹偷看你的文件另一種是防止當(dāng)局閱讀你的文件應(yīng)用密碼學(xué)上篇鏈接年,用更現(xiàn)代的方法使用上三安全使用和備份準(zhǔn)備為了安全性,建議在一臺斷網(wǎng)的或者系統(tǒng)上生成你的密鑰對。

世界上有兩種密碼:一種是防止你的小妹妹偷看你的文件;另一種是防止當(dāng)局閱讀你的文件.

? —— Bruce Schneier《應(yīng)用密碼學(xué)》

上篇鏈接:

2021年,用更現(xiàn)代的方法使用PGP(上)

三、安全使用和備份

準(zhǔn)備

為了安全性,建議在一臺斷網(wǎng)的Linux或者BSD系統(tǒng)上生成你的密鑰對。

特別推薦使用 Tails (boum.org)發(fā)行版,系統(tǒng)自帶gpg和paperkey 等工具 可以確保全程斷網(wǎng)操作 同時此系統(tǒng)重啟會擦除所有內(nèi)容,還免去了擦除密鑰的麻煩。
需要工具:

  • 一臺電腦
  • 一個裝有Tails系統(tǒng)的U盤0 使用它生成密鑰
  • 一個已經(jīng)全盤加密的U盤/TF 卡 1(推薦),或者智能卡 用來存儲主密鑰
  • 一個智能卡 (推薦) ,或者已經(jīng)全盤加密的U盤/TF 卡 2 用來存放子密鑰,日常使用

備份策略

我的備份策略:

  • 主密鑰只保留一份,離線。
  • 子密鑰可以復(fù)制多份,通過U盤導(dǎo)入各個設(shè)備,專密專用, 日常使用推薦用智能卡(比如Yubikey),還能免去每次輸密碼的麻煩
  • 撤銷憑證可以和主密鑰放在一起備份一份, 另外多帶帶備份一份(這樣丟失密鑰,起碼還可以撤銷)

主密鑰備份建議備份在一個全盤加密的U盤中,然后放在一個絕對安全的地方。

備份介質(zhì):

智能卡

主密鑰不建議導(dǎo)入智能卡設(shè)備,因為智能卡的使用場景是隨身攜帶,隨時取用,雖然智能卡中的密鑰無法導(dǎo)出,但是隨身攜帶增加了丟失的風(fēng)險,主密鑰一旦丟失,將會非常麻煩。

如果是土豪,當(dāng)然導(dǎo)入智能卡中更好,因為智能卡中密鑰無法導(dǎo)出,只不過這個智能卡不能再隨身攜帶,而同樣應(yīng)該在一個安全的地方, 不到萬不得已不再取用, 不過這樣有些浪費,也是我不推薦的理由。

網(wǎng)盤存儲

你可以將主私鑰加密后上傳到網(wǎng)盤或其他線上服務(wù)。

PaperKey

又是斷網(wǎng)操作,又是非對稱算法,還要好好保存一份私鑰,這一套流程走下來你也發(fā)現(xiàn)了跟數(shù)字貨幣的相似性,很多備份方式都可以借鑒他們的思路,比如上面網(wǎng)盤存儲就是數(shù)字貨幣熱錢包的思路。

冷錢包很經(jīng)典的一種方式,就是將私鑰寫/打印在紙上, 當(dāng)然我們也可以借鑒,不過若你想將這一眼望不到頭的私鑰抄下來, 或者打印下來,將來需要恢復(fù)的時候再一個個輸入進電腦,顯然不現(xiàn)實。

image-20210113111654636

(示例私鑰的一部分,用完即廢,如果是你自己的私鑰,打死也不要給別人看)

比如比特幣, 私鑰長這樣:

5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss          # 這么短很容易抄寫和輸入

同樣是非對稱算法為什么PGP的私鑰就長這么多呢?

因為他們用的算法不同,比特幣默認使用的是ECDSA的 secp256k1算法, 該算法只是用來簽名和認證,并不用來加密(很多科普文章會說這是加密算法,比特幣的算法也可以用來加密,這是錯的,比特幣之所以有時被稱作加密貨幣只是因為它依賴了密碼學(xué)中的非對稱算法,并不是它能加密...),PGP默認的是RSA算法,可以同時用來簽名和加密,前面說過目前RSA密鑰長度不小于2048 bit才安全,而且PGP導(dǎo)出的私鑰中不止密鑰信息,還包含了全部的公鑰信息,UID,子密鑰信息,以及設(shè)置密碼時的混淆。

Linux下有一個工具叫做paperkey, 可以用來消去私鑰中 冗余的公鑰信息,極大減少私鑰長度,然后可以將精簡過的私鑰(base 16格式)打印出來,或者將Raw格式轉(zhuǎn)換成二維碼,打印出來。

注意:

  • 既然決定用PaperKey, 還是不要使用網(wǎng)絡(luò)打印機了,
  • paperkey這個工具在Tails新版中是默認軟件
  • paperkey 手冊中推薦 恢復(fù)私鑰時使用OCR掃描, 而大部分OCR服務(wù)都要聯(lián)網(wǎng), 請注意這點。
其他

密鑰只是一段信息,理論上可以放在其他任何可以存儲信息的介質(zhì)中,例如光盤,隱寫在圖片中, 寫入IC卡 , 紋身,, X光片背下來 等等等等,可以發(fā)揮你的想象力。

安全使用

請在你信任的電腦上使用子密鑰,主密鑰不到萬不得已不要拿出來用,如果你將子密鑰放在智能卡中使用,可以忽略這部分。

子密鑰可以放在移動存儲設(shè)備上直接使用,而無需拷貝/導(dǎo)入到電腦使用, 使用方法:

gpg --homedir [你的存儲設(shè)備的路徑]

四、進階使用

使用其他算法

為什么安全?一節(jié)中 提到PGP支持很多算法,可是前面我們生成密鑰時,只見到了很少的幾種。

因為gpg還有一種隱藏模式---- 專家模式,生成密鑰時可以使用

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
  

就可以看到多出來不少選項,其中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)險,不建議使用。

可以發(fā)現(xiàn)這里少了(2) 其實這里還有一些隱藏算法沒有列出,可通過如下命令查看

gpg --list-config --with-colons curve

# 輸出
cfg:curve:   cv25519;ed25519;nistp256;nistp384;nistp521;brainpoolP256r1;brainpoolP384r1;brainpoolP512r1;secp256k1

上面缺少的(2)對應(yīng)的就是ed25519 ,是一種簽名算法,你選擇 (1)時, 主密鑰用來簽發(fā)和簽名 用的就是ed25519,自動生成的用來加密的子密鑰 算法 是cv25519 。

RSA VS ECC

ECC算法比RSA的優(yōu)勢在于,在同等強度下,ECC的密鑰長度要小的多,性能也會好一些。 RSA算法的PGP私鑰 通過paperkey精簡過后一般還會有50+行HEX數(shù)據(jù),如果使用的是ECC算法生成的話, 可以減到8行以內(nèi),手抄完全沒問題。

RSA算法的優(yōu)勢在于大部分硬件設(shè)備的兼容性比較好,比如 YubiKey 5 支持 RSA 4096,但不支持 Curve 25519。而且多數(shù)設(shè)備都對RSA算法提供了硬件加速。

PS:

查閱資料時發(fā)現(xiàn) ,中文博客里被很多人抄來抄去的一句話:

ed25519 加密解密很快,生成時間短而且安全性更高,rsa 則加密解密稍慢,生成時間長,安全性沒有 ed25519 高,只是 rsa 基本都是默認,所以用的人更多,但是建議轉(zhuǎn)換為 ed25519 網(wǎng)站軟件現(xiàn)在基本都支持了.

這句話是 錯的, ed25519是 EdDSA 算法的一種,只是一種簽名算法, EdDSA 全稱Edwards-curve Digital Signature Algorithm,愛德華橢圓曲線實現(xiàn)的數(shù)字簽名算法。

上面的話多出現(xiàn)在替換SSH默認的RSA算法為ed25519的文章中出現(xiàn)。其實SSH協(xié)議中的非對稱算法 并不是用來加解密信息的,而只是用來認證,正確的說法是ed25519簽名和認證的速度很快。

再者, 不提密鑰長度說安全性都是耍流氓 ,RSA 4096 的安全強度是要 好于 ed25519 的。

追加UID

uid 即 user id , 由三個部分組成:

  • 全名(現(xiàn)在的話網(wǎng)名即可)
  • 注釋(用 ( ) 包括)
  • 郵箱地址(用 < > 包括)

UID的性質(zhì):

  • 一個密鑰可以有多個 uid,方便不同場合使用。
  • uid 與哪個子密鑰無關(guān),uid 是作用于整個密鑰的。
  • uid 可以隨時添加,但已有的 uid 不能修改,只能多帶帶吊銷。
  • uid 多帶帶吊銷后,只需要重新發(fā)布公鑰即可。

一般來說,操作UID只有主密鑰有權(quán)限操作, 后面會提到UID可以是偽造,然后提交到服務(wù)器的。

gpg --edit-key {keyid/uid}    


gpg> adduid     # 進入交互界面后 輸入  help  可以查看支持的操作

# 輸入你要追加的信息

使用UID的場景有哪些呢? 如果你使用一個不常用的郵箱作為你的github/gitlab賬號,你主要的郵箱生成的PGP 密鑰就不能用來簽名了。

這時候為了保護隱私 且 只要管理一個密鑰,就可以 在 Github設(shè)置里把 Keep my email addresses private勾上,將為你生成的隨機郵箱添加到 uid中, 這樣就只需要管理一個PGP密鑰,可以同時為你不同的Git賬號簽名。

添加頭像

跟添加UID差不多, 在gpg交互 界面 輸入 addphoto 就可以, 想要查看的話 輸入showphoto。

使用PGP為git commit 簽名

只要你PGP的uid包含 git config 中的郵箱, 使用

git commit -S -m your commit message

即可簽名。

使用PGP 進行SSH

生成 認證(A)用子密鑰

gpg --expert --edit-key {keyid/uid}                                   ## 使用專家模式 不然沒有認證的選項


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                               ## 這里顯示默認有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 文件, 將默認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)志的那個新的子密鑰的 keygrip 即999A87A51CFE82DAA494BEB42F585051307F9E33

加入到~/.gnupg/sshcontrol文件, 運行ssh-add -l 查看是否已經(jīng)加入。

然后

gpg --export-ssh-key   {keyid}! 

注意,這里不能用 uid 不然會提示:

gpg: key "uid" not found: Unusable public key
gpg: export as ssh key failed: Unusable public key

這里只能填子密鑰的 key id這個例子里就是 0x501DEDC36BD409C8。

輸出的 ssh public key 放到你的服務(wù)器上的~/.ssh/authorized_keys中, 重啟shell 就可以連接了。

未完待續(xù)

本文來自 UCloud后臺研發(fā)工程師
博客地址:https://ulyc.github.io/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/126020.html

相關(guān)文章

  • 2021,用更現(xiàn)代方法使用PGP(下)

    摘要:上篇鏈接年,用更現(xiàn)代的方法使用上年,用更現(xiàn)代的方法使用中公鑰的發(fā)布與交換討論公鑰安全交換的中文文章比較少,而這一環(huán)是整個加密體系的重中之重。年月,有攻擊者惡意向公鑰服務(wù)器提交了對兩個著名網(wǎng)友的簽名背書。此事件中的受害者的證書就被簽名了次。上篇鏈接:2021年,用更現(xiàn)代的方法使用PGP(上)2021年,用更現(xiàn)代的方法使用PGP(中)PGP 公鑰的 發(fā)布 與 交換討論公鑰安全交換的中文文章比較少...

    Tecode 評論0 收藏0
  • 2021,用更現(xiàn)代方法使用PGP(上)

    摘要:作為一個老牌的反核能活躍分子,齊默曼為了讓所有有相似傾向的人們可以安全的使用并且安全存儲消息和文件而創(chuàng)造了加密。建議為不同環(huán)境,不同用途都單獨生成子密鑰,互不干擾。世界上有兩種密碼:一種是防止你的小妹妹偷看你的文件;另一種是防止當(dāng)局閱讀你的文件.? ...

    Tecode 評論0 收藏0
  • 密碼學(xué)術(shù)語、分類和體制(筆記)

    摘要:一密碼學(xué)的術(shù)語分類術(shù)語密碼體制明文空間密文空間密鑰空間加密算法和解密算法五部分構(gòu)成??驴嘶舴蛟瓌t是現(xiàn)代密碼學(xué)設(shè)計的基本原則。特性散列函數(shù)特性消息的長度不受限制。 一、密碼學(xué)的術(shù)語、分類 1、術(shù)語 密碼體制:明文空間、密文空間、密鑰空間、加密算法和解密算法五部分構(gòu)成。 密碼協(xié)議:有時稱為安全協(xié)議,指以密碼學(xué)為基礎(chǔ)的消息交換的通信協(xié)議,目的是在網(wǎng)絡(luò)環(huán)境 中提供各種...

    int64 評論0 收藏0
  • 2021京東云金秋上云特惠:企業(yè)上云專享受,云主機2核4G限量秒殺,僅155元/

    摘要:目前,京東云金秋上云特惠也只是針對企業(yè)用戶的,云主機核限量秒殺僅元年。除非有相反證據(jù)證明外,用戶參與活動所獲得的全部權(quán)益和相應(yīng)責(zé)任,均歸屬于參與活動的該京東云賬號所對應(yīng)的實名認證主體。2021京東云金秋上云特惠早就開始了!一直忘記給大家傳達,不好意思哦,不過京東云體量小,買的個人用戶不并不多。目前,2021京東云金秋上云特惠也只是針對企業(yè)用戶的,云主機2核4G限量秒殺,僅155元/年。大家可...

    neuSnail 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<