日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

gpg加密命令 linux_加密方案 GNUPG amp; Yubikey

發(fā)布時(shí)間:2025/3/21 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gpg加密命令 linux_加密方案 GNUPG amp; Yubikey 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

隨著時(shí)間流逝,我生活中出現(xiàn)的設(shè)備越來(lái)越多,密碼也越來(lái)越多,因?yàn)橛洃洺杀竞芏嗝艽a強(qiáng)度都不夠高,不安全,所以迫切需要一款密碼學(xué)加密工具來(lái)真正解放主動(dòng)記憶密碼,能夠?qū)⒚艽a存儲(chǔ)在一個(gè)文件中并且保證這個(gè)文件絕對(duì)安全。

基本概念

生成密鑰對(duì)命令 gpg --full-generate-key 按照提示即可,這里注意過(guò)程中是要輸入一個(gè)口令來(lái)保護(hù)你的私鑰,這個(gè)口令和加解密沒(méi)關(guān)系,而且后期也可以改,只是用來(lái)防止有人操作你電腦進(jìn)行解密, 所以這個(gè)口令可以為空。

生成好密鑰對(duì)之后gpg會(huì)默認(rèn)生成一對(duì)主密鑰對(duì)和一個(gè)子密鑰對(duì),在使用時(shí)我們通常并不會(huì)糾結(jié)主,子關(guān)系,gpg也弱化了這一個(gè)概念,通常我們發(fā)布的公鑰指的是包含主公鑰和所有子公鑰的文件,這個(gè)文件是可變的,我們可以撤銷(xiāo)某個(gè)子公鑰,也可以添加某個(gè)子公鑰,然后重新發(fā)布公鑰文件。

同理如沒(méi)有特殊說(shuō)明我們說(shuō)的私鑰文件,指的是包含主私鑰和所有子私鑰的文件,這個(gè)私鑰和公鑰一樣也是可變的。

生成好的主密鑰對(duì)只提供認(rèn)證(Sign)和簽發(fā)子證書(shū)(Cert),自身沒(méi)有加密功能,主要作用是用來(lái)管理子證書(shū): 生成和吊銷(xiāo)。

子證書(shū)用來(lái)加密

使用 gpg --list-keys 列出本地證書(shū)可以看到對(duì)應(yīng)的作用

~ $ gpg --list-keys /home/quanwei/.gnupg/pubring.kbx -------------------------------- pub rsa3072 2020-10-26 [SC] [expires: 2022-10-26]A5E7F2FE9590FE9B66BBC25B9D940B6C1ED930EF uid [ultimate] Alice <Alice@126.com> sub rsa3072 2020-10-26 [E] [expires: 2022-10-26]

所有flag對(duì)應(yīng)含義如下

  • S: PUBKEY_USAGE_SIG 簽名
  • C: PUBKEY_USAGE_CERT 簽發(fā)子證書(shū)
  • E: PUBKEY_USAGE_ENC 加密
  • A: PUBKEY_USAGE_AUTH 認(rèn)證
  • 另外證書(shū)會(huì)設(shè)定一個(gè)過(guò)期時(shí)間,主要用來(lái)告知對(duì)方這個(gè)證書(shū)已經(jīng)不再用了,請(qǐng)不要用這個(gè)證書(shū)加密。過(guò)期時(shí)間是可以修改的,同一個(gè)證書(shū)隨意設(shè)定過(guò)期時(shí)間,即便證書(shū)超過(guò)了這個(gè)時(shí)間依然不影響實(shí)際的加解密工作,僅作為一種約定。

    我們執(zhí)行 gpg -o pub.sec --armor --export userID是導(dǎo)出了所有公鑰信息。

    我們從另外一臺(tái)計(jì)算機(jī)導(dǎo)入導(dǎo)入這個(gè)公鑰:

    此時(shí)另外一臺(tái)電腦上顯示了我們導(dǎo)出的公鑰,而沒(méi)有私鑰信息。

    我總結(jié)GNUPG主要有下面幾種場(chǎng)景:

    郵件加密, 發(fā)送給某人/群發(fā)

    這種場(chǎng)景是郵件時(shí)代端到端加密常見(jiàn)的一種,也是網(wǎng)上資料介紹最多的場(chǎng)景. 例如Alice想要發(fā)送郵件給Bob,那么需要做的事情如下

  • 導(dǎo)入Bob的公鑰,通過(guò)其它方式確認(rèn)后, 信任這個(gè)公鑰 (例如線下交換,或者Bob在個(gè)人網(wǎng)站上放了自己公鑰的指紋).
  • 將信息使用Bob的公鑰進(jìn)行加密(這個(gè)公鑰文件必須包含一個(gè)或多個(gè)用來(lái)加密的子公鑰)
  • gpg -r Bob -o message.txt.gpg -e message.txt

  • -r recipient 信息接收者,也就是用誰(shuí)的公鑰加密, 如果需要群發(fā),gpg接受多個(gè)接收者加密,例如 gpg -r Bob -r Alice -e
  • -o 輸出文件,一般追加.gpg作為新文件標(biāo)識(shí)
  • -e 執(zhí)行加密動(dòng)作
  • 這時(shí)候輸出的gpg文件是一個(gè)二進(jìn)制文件,只能作為附件發(fā)送,而不能通過(guò)普通的郵件文本imessage或者其他IM工具發(fā)送,為了能夠在普通的文本方式發(fā)送,可以輸出為文本格式

    gpg -r Bob -o message.txt.gpg --armor -e message.txt

  • --armor 使用ascii格式輸出
  • 發(fā)送給某人之后,引出了另一個(gè)問(wèn)題,就是如何證明這段文本是某一方發(fā)送的? 比如說(shuō)Bob發(fā)送一個(gè) "借我500" 的信息給Alice, Alice收到之后如何知道這段信息是Bob發(fā)送的呢?此時(shí)需要Bob對(duì)這段信息進(jìn)行簽名.

    Bob執(zhí)行(Sign + Encrypt)

    echo 借我500 | gpg --sign -r Alice -o message.txt.gpg -e

  • --sign 進(jìn)行簽名操作(使用默認(rèn)證書(shū)進(jìn)行簽名)
  • --clear-sign 和sign一樣,只不過(guò)生成格式為ascii形式, 如果加密時(shí)用的armor, 則簽名時(shí)替換成clear-sign
  • --local-user <uid> 指定本地進(jìn)行sign和encrypt的用戶id
  • 生成message.txt.gpg,此時(shí)Alice進(jìn)行解密

    gpg -d message.txt.gpg

    輸出如下,此時(shí)就可以確認(rèn)這個(gè)信息來(lái)自Bob

    ~ $ gpg -d message.txt.gpg give me 500 gpg: Signature made Mon 26 Oct 2020 05:39:29 PM CST gpg: using RSA key CCBD7B73A6DCE6016699ABC479B0637CDD9A8C52 gpg: issuer "bob@126.com" gpg: Good signature from "Bobob <Bob@126.com>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: CCBD 7B73 A6DC E601 6699 ABC4 79B0 637C DD9A 8C52 /c/Users/quanw/Desktop/gpg/linux $

    這時(shí)候都是對(duì)消息進(jìn)行加解密和簽名,如果需要對(duì)文件進(jìn)行加解密和簽名往往需要不同的操作。

    附件加密,附件簽名,附件認(rèn)證

    附件加密和消息一樣,這里的附件等同于文件,但是不同的是這個(gè)文件的接收方往往不是自己,是給別人加密的文件,或者驗(yàn)證來(lái)自別人的文件,給自己加密下面另說(shuō)。

    加密附件

    gpg -r Bob -o data.zip.gpg -e data.zip

    簽名附件和簽名消息不同,消息簽名時(shí)我將消息體和簽名文件放到了一起,并且同時(shí)執(zhí)行 sign 和 encrypt 的操作。對(duì)附件則不需要這么復(fù)雜,因?yàn)槲覀兺呀?jīng)有了一個(gè)文件想直接讓對(duì)方使用, 只需要生成一個(gè)文件指紋驗(yàn)證文件完整性即可。

    gpg --detach-sign --armor data.zip

  • detach-sign 只生成簽名而不包含原始信息
  • 此時(shí)會(huì)生成同名的data.zip.sig文件包含了具體的指紋,生成形式如下

    -----BEGIN PGP SIGNATURE-----iQIzBAABCAAdFiEEpXstWE238KYG4MS0ibIomUOvH+sFAl+WnPwACgkQibIomUOv H+u+QQ/+LBQVaDMLshRroPpPA/tKaDdhnNCxJiOwlwdhxWTy+ImwBy8wyJGgGEuo 4PstATnEK8RLQT8PqLq5svZKwcE6kCXOrF2/bSBpv99eix3hRdn9U7cayYG9ti0E GJ9lOXBC1s7lzkGdv4qEJBWcygYjsAa43d2GHCz8jOj5omdZ5Q2QwAWMgpDMXQ98 cv27xi/BViLRuLnLm9IUKxqy/DTU+lQwFS3AjBI0pi+ELrKSSsgikTLmobiHVl90 ZWYPtAI/C+ZQPFKQpu8wduhMiWS//Di2mkTG+TwYhAClo6yDf3IR4zrA/hxkLPWC p2IKAqNHCWijp625r+RztXVcfbwluBEQqepnpJlN4X0cboXsecG/fPLA8L3zhbWc b/GW/aewAxHeLsDQHGWcoodMZMWBdsQOPd/1/HDrjZA0faKeH147IbQ8lFb5HTu+ LafnuEa8Vgh4FY/rgCQDlkWuADDqkMw2eOXg/3dma2XkNjG2husvA8xLMq2zxyBM S6LW7QWNPj4toDihuVSj5Lj2MvGVrQDDs/Zs6Em34fqMSuCTuDUPOCfB+pja7ZxK ZEIDro9FAd4xg6nViEhLNQ/HbZRAAbBVNFIYJa9BlCYeTVnet9Lg4ijN57n4kRkk zm5hOAvccOCJMagdLdFqxXzQmTn0Hw3DWjajxKPrVuZYq2RMOig= =c7Oh -----END PGP SIGNATURE-----

    此時(shí)接受方收到文件簽名和文件指紋之后只需要

    gpg --verify data.zip.sig data.zip

    即可驗(yàn)證文件是否合法。

    私人文件加解密

    最終到了這里,最貼合我生活方式的一種,因?yàn)楹苌僬业搅硗庖粋€(gè)使用gpg的人,而且也沒(méi)有發(fā)布文件的場(chǎng)景,上面介紹的加解密都是兩人或多人之間進(jìn)行的動(dòng)作。同樣GNUPG也能做私人文件加密方案,例如使用pass命令管理本地密碼,或者私人文檔需要存網(wǎng)盤(pán),為了不讓他人觸碰這些信息,需要加密。

    對(duì)自己的文件進(jìn)行加密有一個(gè)要求,因?yàn)槲覀兛赡苄枰诓煌O(shè)備上進(jìn)行解密,所以如何保證自己的私鑰安全是顯而易見(jiàn)的問(wèn)題。

    Alice對(duì)自己的文件加密

    gpg -r Alice -o data.doc.gpg -e data.doc

    接收方是自己

    解密時(shí)直接解密

    gpg -d data.doc

    這就是常用的操作,但是因?yàn)槲覀円缭O(shè)備使用,例如公司電腦上傳了一個(gè)文件,在家里需要能夠進(jìn)行解密,所以私鑰免不了要來(lái)回拷貝或者備份,這樣就增加了私鑰泄漏的風(fēng)險(xiǎn),設(shè)備越多, 風(fēng)險(xiǎn)越大。這里有個(gè)常識(shí)是我們加密解密都是用的subkey,所以如果想解密文件只需要攜帶這個(gè)subkey的私鑰即可。然后為了安全這個(gè)subkey可以一段時(shí)間更換一次,這樣如果私鑰泄漏也不至于所有文件都能被解密。

    gpg -o alice-pub.key --export

    這句導(dǎo)出了alice的公鑰文件alice-pub.key,里面包含了公鑰證書(shū)。公鑰文件是可變的,這句只是導(dǎo)出了目前所有的公鑰。

    gpg -o alice-secret.key --export-secret-key

    這里導(dǎo)出全部私鑰文件,包含master私鑰和subkey的私鑰,嚴(yán)格保存。

    gpg -o alice-subkeys.key --export-secret-subkeys

    這里導(dǎo)出了所有subkey的私鑰.

  • alice-pub.key 公鑰文件,可以放在一個(gè)公共位置,或者發(fā)布到keyserver
  • alice-secret.key 私鑰文件,嚴(yán)格保存,使用它來(lái)簽發(fā)新證書(shū)或撤銷(xiāo)已經(jīng)發(fā)布的subkey
  • alice-subkeys.key 只包含subkey的私鑰文件, 嚴(yán)格保存,用來(lái)解密文件,切換設(shè)備時(shí)拷貝這個(gè)文件進(jìn)行解密.
  • 如果subkey私鑰遭遇泄漏,或者subkey已經(jīng)不再安全,此時(shí)用主私鑰生成一個(gè)撤銷(xiāo)文件撤銷(xiāo)keyserver上已發(fā)布公鑰,然后使用主私鑰生成一個(gè)新的subkey用來(lái)加密,將包含新subkey的公鑰證書(shū)重新發(fā)布到keyserver上,在不同設(shè)備上更新公鑰文件,使用新的subkey加密。解密時(shí)使用新的alice-subkeys.key進(jìn)行解密。
  • 也就是除了公鑰其他的私鑰都要嚴(yán)格保密,在不同設(shè)備切換時(shí)只拷貝subkey的私鑰。一旦私鑰泄漏我們唯一能做的就是讓未來(lái)加密的文件不被解密,已經(jīng)加密的文件除非重新加密否則還是不安全的。

    由此可得出主私鑰在其中扮演的角色是非常重要的,所以對(duì)于主私鑰的備份gpg也有一種方法,就是 gpg -o alice-secret.key --armor --export-secret-key使用ascii的形式導(dǎo)出私鑰,然后將私鑰打印到一張紙上進(jìn)行備份。

    另外一點(diǎn)我們提到經(jīng)常需要攜帶的私鑰是subkey, 為了保護(hù)subkey,設(shè)計(jì)者們提出了smartcard的概念,smartcard是一個(gè)usb物理設(shè)備,這個(gè)設(shè)備提供一些特殊硬件設(shè)計(jì)保護(hù)私鑰不被外界讀取,同時(shí)又能用來(lái)解密文件。這樣的設(shè)備目前商業(yè)化的做的最好的就是yubikey產(chǎn)品系列了,用一個(gè)硬件設(shè)備保存私鑰即便攜又安全,個(gè)人比較推薦。

    yubico.com

    將私鑰保存在yubikey很簡(jiǎn)單.

    插入yubikey之后, 使用gpg --card-status查看狀態(tài)

    如果看到上面的信息說(shuō)明yubikey已經(jīng)成功被識(shí)別了, 下面將 Alice 的相關(guān)私鑰導(dǎo)入到y(tǒng)ubikey中

    > gpg --edit-key Alice > keytocard Really move the primary key? (y/N) y Please select where to store the key:(1) Signature key(3) Authentication key Your selection? 1...> keysec rsa2048/3C37786437E36A07created: 2020-10-26 expires: 2022-10-26 usage: SCtrust: ultimate validity: ultimate ssb rsa2048/FF7B5E819CE6C789created: 2020-10-26 expires: 2022-10-26 usage: E [ultimate] (1). Alice <Alice@126.com>> key 1sec rsa2048/3C37786437E36A07created: 2020-10-26 expires: 2022-10-26 usage: SCtrust: ultimate validity: ultimate ssb* rsa2048/FF7B5E819CE6C789created: 2020-10-26 expires: 2022-10-26 usage: E [ultimate] (1). Alice <Alice@126.com>> keytocardPlease select where to store the key:(2) Encryption key Your selection? 2...> q

    這里我們成功將簽名用的私鑰和解密用的私鑰導(dǎo)入進(jìn)去. 注意使用的命令是keytocard, 這個(gè)命令執(zhí)行之后對(duì)應(yīng)的私鑰文件會(huì)移動(dòng)到智能卡中,此時(shí)主機(jī)上的私鑰信息就不存在了,而是被一個(gè)智能卡的占位符取代,gpg知道此時(shí)這個(gè)私鑰存儲(chǔ)在智能卡上,下次解密時(shí)就會(huì)提示你插入智能卡。

    導(dǎo)入成功之后退出,此時(shí) gpg --card-status可以看到已經(jīng)導(dǎo)入的key.

    使用 pass 管理密碼

    初始化好gpg之后,就可以用來(lái)管理密碼了, 以 debian 為例

    安裝pass

    > sudo apt install pass -y

    使用gpg角色初始化 store

    > pass init Alice mkdir: created directory '/home/quanwei/.password-store/' Password store initialized for Alice

    新增密碼

    > pass insert emacs-china Enter password for emacs-china: Retype password for emacs-china:

    顯示密碼

    > pass show emacs-china github

    此時(shí)我們就可以將密碼文件夾 ~/.password-store 安全地使用網(wǎng)盤(pán)或者github進(jìn)行同步,只有我們能夠解密,或者借助yubikey隨時(shí)隨地解密。


    結(jié)語(yǔ)

    總而言之,只有密碼學(xué)意義上的加密才是真正的安全,雖然 GNUPG 用到的 RSA 安全性已經(jīng)受到質(zhì)疑,但在現(xiàn)在的時(shí)間點(diǎn)依然是保護(hù)個(gè)人安全最好用的工具之一。

    總結(jié)

    以上是生活随笔為你收集整理的gpg加密命令 linux_加密方案 GNUPG amp; Yubikey的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。