密碼技術(shù)(十三)之PGP

PGP

???————密碼技術(shù)的完美組合

PGP簡介

?PGP是于1990年左右由菲利普.季默曼(Philip Zimmermann)個(gè)人編寫的密碼軟件疏叨,現(xiàn)在依然在世界上被廣泛使用。PGP這個(gè)名字是Pretty Good Privary(很好的隱私)的縮寫穿剖。
?PGP可以在Windows蚤蔓、Mac OS X、Linux等很多平臺(tái)上運(yùn)行糊余,版本包括商用版和免費(fèi)版秀又。此外還有一個(gè)GNU遵照OpenGPG(RFC4880)規(guī)范編寫的叫作GnuPG(GNU privacy Guard)的自由軟件。
?這里介紹的主要是根據(jù)PGP Command Line User's Guide 10.3 以及GnuPG2.1.4的內(nèi)容編寫的贬芥。在詳細(xì)功能以及所支持的算法方面吐辙,PGP和GunPG有所區(qū)別,而且不同的版本之間也會(huì)有所不同蘸劈,這里介紹統(tǒng)一PGP為準(zhǔn)昏苏。

關(guān)于PGP

?OpenPGP是對(duì)密文和數(shù)字簽名格式進(jìn)行定義的標(biāo)準(zhǔn)規(guī)格(RFC1991、RFC2440威沫、RFC4880贤惯、RFC5581、RFC6637)棒掠。
?1996年的RFC1991中對(duì)PGP的消息格式進(jìn)行了定義孵构。2007年的RFC4880中新增了對(duì)RSA和DSA的支持。2012年的RFC6637中新增了對(duì)橢圓曲線密碼(ECC)的支持烟很,并且還支持基于Curve P-256颈墅、P-384和P-521三種橢圓曲線的橢圓曲線DSA和橢圓曲線Diffie-Hellman密鑰交換。
?RFC6637中新增了用于比較密碼學(xué)強(qiáng)度的平衡的對(duì)照表雾袱。由這張表可知恤筛,例如當(dāng)我們選用256比特的橢圓曲線密碼算法時(shí),相應(yīng)低應(yīng)該選用256比特的散列散發(fā)以及密鑰長度為128比特的對(duì)稱密碼算法谜酒。


密碼學(xué)強(qiáng)度的平衡性.png

關(guān)于GNU Privacy Guard

?GNU Privacy Guard(GnuPG叹俏、GPG)是一款基于OpenPGP標(biāo)準(zhǔn)開發(fā)的密碼學(xué)軟件,支持加密僻族、數(shù)字簽名粘驰、密鑰個(gè)管理屡谐、S/MIME、ssh等多種功能蝌数。GnuPG是基于GNU GPL協(xié)議發(fā)布的一款自由軟件愕掏,因此任何人都可以自由的使用它。GnuPG本身是一款命令行攻擊顶伞,但它也經(jīng)常被集成到其他應(yīng)用軟件中饵撑。
?GnuPG 分為stable、modern和classic三個(gè)系列唆貌。

  • GnuPG stable 的版本號(hào)為2.0.x滑潘,支持OpenPGP、S/MIME和ssh
  • GnuPG modern 的版本號(hào)為2.1.x锨咙,在stable的基礎(chǔ)上增加了對(duì)橢圓曲線密碼的支持语卤。GnuPG modern是比較新的版本,今后將會(huì)逐漸取代現(xiàn)在的GnuPG stable版本酪刀。
  • GnuPG classic 的版本號(hào)1.4.x粹舵,是比較舊的版本。

PGP的功能

  • 對(duì)稱密碼
    ? PGP支持用對(duì)稱密碼進(jìn)行加密和解密骂倘。對(duì)稱密碼可以單獨(dú)使用眼滤,也可以和公鑰密碼組合成混合密碼系統(tǒng)。
    ?可以使用的對(duì)稱密碼算法包括AES历涝、IDEA诅需、CAST、三重DES睬关、Blowfish诱担、Twofish、Camellia等电爹。
  • 公鑰密碼
    ? PGP支持生成公鑰密碼的密鑰對(duì)蔫仙,以及用公鑰密碼進(jìn)行加密和解密。實(shí)際上并不是使用公鑰密碼直接對(duì)明文進(jìn)行加密丐箩,而是使用混合密碼系統(tǒng)來進(jìn)行加密操作摇邦。
    ?可以使用的公鑰密碼算法包括RSA和ElGamal等。
  • 數(shù)字簽名
    ?PGP支持?jǐn)?shù)字簽名的生成和驗(yàn)證屎勘,也可以將數(shù)字簽名附加到文件中施籍,或者從文件中分離出數(shù)字簽名。
    ?可以使用的數(shù)字簽名算法包括RSA概漱、DSA丑慎、ECDSA(橢圓曲線DSA)、EdDSA(愛德華茲曲線DSA)等。
  • 單向散列函數(shù)
    ?PGP可以使用單向散列函數(shù)計(jì)算和顯示消息的散列值竿裂。
    ?可以使用的單向散列函數(shù)算法包括SHA-1玉吁、SHA-224、SHA-256腻异、SHA-384进副、SHA-512和RIPEMD-16等。MD5依然可以使用悔常,但并不推薦影斑。
  • 證書
    ?PGP可以生成OpenGPG中規(guī)格規(guī)定格式的證書,以及與X.509規(guī)范兼容的證書机打。此外矫户,還可以頒發(fā)公鑰的作廢證明(revocation certificate),并可以使用CRL和OSCP對(duì)證書進(jìn)行校驗(yàn)残邀。
  • 壓縮
    ?PGP支持?jǐn)?shù)據(jù)的壓縮和解壓縮吏垮,壓縮采用ZIP、ZLIB罐旗、BZIPZ等格式。
  • 文本數(shù)據(jù)
    ?PGP可以將二進(jìn)制和文本數(shù)據(jù)相互轉(zhuǎn)換唯蝶。例如九秀,當(dāng)不得不使用某些無法處理二進(jìn)制數(shù)的軟件進(jìn)行通信時(shí),可以將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成文本數(shù)據(jù)(ASCII radix-64格式)粘我,這些軟件就能夠處理了鼓蜒。
    ?radix-64格式是在郵件等場合中經(jīng)常使用的base64編碼基礎(chǔ)上照瘾,增加了校驗(yàn)數(shù)據(jù)錯(cuò)誤的校驗(yàn)和的版本筏养。base64編碼是一種可以將任何二級(jí)制數(shù)據(jù)都用AZ、az锣杂、0~9匙姜、+畅厢、/共64個(gè)字符再加上=(用于末尾填充)來表示格式。
  • 大文件的拆分和拼合
    ?在文件過大無法通過郵件發(fā)送的情況下氮昧,PGP可以將一個(gè)大文件拆分成多個(gè)文件框杜,反過來,也可以將多個(gè)文件拼合成一個(gè)文件袖肥。
  • 鑰匙串的管理
    ?PGP可以管理所生成的密鑰對(duì)以及外部獲取的公鑰咪辱。用于管理密鑰文件稱為密鑰串(key ring)。

生成密鑰對(duì)

?略

加密和解密

加密

用PGP加密.png

?PGP的加密過程椎组,如圖所示油狂,消息經(jīng)過混合密碼系統(tǒng)進(jìn)行加密,然后轉(zhuǎn)換成報(bào)文數(shù)據(jù)(文本數(shù)據(jù))。
?這里的內(nèi)容专筷,和前面提到的混合密碼系統(tǒng)的結(jié)構(gòu)基本上是一樣的弱贼,差異在于這里還包括了消息的壓縮以及二進(jìn)制——>文本轉(zhuǎn)換(轉(zhuǎn)換為ASCII radix-64)這兩個(gè)步驟。

  • 生成和加密會(huì)話密鑰
  1. 用偽隨機(jī)數(shù)生成器生成會(huì)話密鑰仁堪。
  2. 用公鑰密碼加密會(huì)話密碼哮洽,這里使用的密鑰是接收者的公鑰。
  • 壓縮和加密消息
  1. 壓縮消息
  2. 使用對(duì)稱密碼對(duì)壓縮的消息進(jìn)行加密弦聂,這里使用的密鑰是步驟1生成的會(huì)話密鑰
  3. 將加密的會(huì)話密鑰 步驟2與加密的消息 步驟4拼合起來鸟辅。
  4. 將步驟5的結(jié)果轉(zhuǎn)換為文本數(shù)據(jù),轉(zhuǎn)換后的結(jié)果就是報(bào)文數(shù)據(jù)莺葫。
    用公鑰密碼加密會(huì)話密鑰匪凉,用對(duì)稱密碼加密消息 就是混合密碼系統(tǒng)的特點(diǎn)

解密

用PGP解密.png
  • 解密私鑰
    ?PGP的私鑰是保存在用戶的鑰匙串中的。為了防止鑰匙串被盜捺檬,私鑰都是以加密狀態(tài)保存的再层,并在保存時(shí)使用了基于口令的密碼(PBE)”の常口令是由多個(gè)單詞組成的短語聂受,沒有正確的口令就無法使用相應(yīng)的私鑰。如果攻擊者想要使用你的私鑰烤镐,就必須先竊取保存私鑰的鑰匙串蛋济,然后再破譯加密私鑰的密碼。
    ?解密私鑰的步驟如下
  1. 接收者輸入解密的口令
  2. 求口令的散列值炮叶,生成用于解密私鑰的密鑰碗旅。
  3. 將鑰匙串中經(jīng)過加密的私鑰進(jìn)行解密。
  • 解密會(huì)話密鑰
  1. 將報(bào)文數(shù)據(jù)(文本數(shù)據(jù))轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)
  2. 將二進(jìn)制數(shù)據(jù)分解成兩部分:加密的會(huì)話密鑰镜悉、經(jīng)過壓縮和加密的消息祟辟。
  3. 用公鑰密碼解密會(huì)話密鑰,這里使用步驟3中生成的接收者的私鑰侣肄。
  • 解密和解壓縮消息
  1. 對(duì)步驟5中得到的經(jīng)過壓縮和加密的消息用對(duì)稱密碼進(jìn)行解密旧困。這里使用步驟6中生成的會(huì)話密鑰。
  2. 對(duì)步驟7中得到的經(jīng)過壓縮的消息進(jìn)行解壓縮稼锅。
  3. 得到原始消息叮喳。
加密和解密.png

生成和驗(yàn)證數(shù)字簽名

生成數(shù)字簽名

用PGP生成數(shù)字簽名.png

?在上圖中,消息與相對(duì)應(yīng)的簽名進(jìn)行拼合缰贝,并最終轉(zhuǎn)換成報(bào)文數(shù)據(jù)(文本數(shù)據(jù))馍悟。順便提一下,對(duì)于是否要將報(bào)文數(shù)據(jù)轉(zhuǎn)換成文本數(shù)據(jù)剩晴,在PGP是可以選擇的锣咒。

  • 解密私鑰
    ?在鑰匙串中侵状,私鑰是通過口令進(jìn)行加密保存的,因此不知道口令的人就無法使用相應(yīng)的私鑰毅整。
  1. 發(fā)送者輸入簽名用的口令
  2. 求口令的散列值趣兄,生成用于解密私鑰的密鑰
  3. 求鑰匙中經(jīng)過加密的私鑰進(jìn)行解密。
  • 生成數(shù)字簽名
  1. 用單向散列函數(shù)計(jì)算消息的散列值
  2. 對(duì)步驟4中得到的散列值進(jìn)行簽名悼嫉。這一步相當(dāng)于使用步驟3中得到的私鑰進(jìn)行加密艇潭。
  3. 將步驟5中生成的數(shù)字簽名與消息進(jìn)行拼合
  4. 將步驟6的結(jié)果進(jìn)行壓縮。
  5. 將步驟7的結(jié)果轉(zhuǎn)換為文本數(shù)據(jù)
  6. 步驟8的結(jié)果就是報(bào)文數(shù)據(jù)

驗(yàn)證數(shù)字簽名

用PGP驗(yàn)證數(shù)字簽名.png
  • 恢復(fù)發(fā)送者發(fā)送的散列值
  1. 將報(bào)文數(shù)據(jù)(文本數(shù)據(jù))轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)戏蔑。
  2. 對(duì)經(jīng)過壓縮的數(shù)據(jù)進(jìn)行解壓縮
  3. 將解壓縮后的數(shù)據(jù)進(jìn)行分解成經(jīng)過簽名的散列值和消息兩部分
  4. 將經(jīng)過簽名的散列值(經(jīng)過加密的散列值)用發(fā)送者的公鑰進(jìn)行解密蹋凝,恢復(fù)發(fā)送者發(fā)送的散列值。
  • 對(duì)比散列值
  1. 將步驟3中分解出的消息輸入單向散列函數(shù)計(jì)算散列值总棵。
  2. 將步驟4中得到的散列值與步驟5中得到散列值進(jìn)行對(duì)比
  3. 如果步驟6的結(jié)果相等則數(shù)字簽名驗(yàn)證成功鳍寂,不相等則驗(yàn)證失敗。這就是數(shù)字簽名的驗(yàn)證結(jié)果情龄。
  4. 步驟3中分解出的消息就是發(fā)送者發(fā)送的消息迄汛。
數(shù)字簽名的生成與驗(yàn)證.png

生成數(shù)字簽名并加密以及解密并驗(yàn)證數(shù)字簽名

生成數(shù)字簽名并加密

用PGP生成數(shù)字簽名并加密.png

?上圖展示了對(duì)消息生成數(shù)字簽名以及對(duì)消息進(jìn)行壓縮和加密這兩個(gè)過程,并將兩者的結(jié)果拼合在一起形成報(bào)文數(shù)據(jù)(文本數(shù)據(jù))骤视。對(duì)于是否要將報(bào)文數(shù)據(jù)轉(zhuǎn)換成文本數(shù)據(jù)鞍爱,在PGP中是可以選擇的。

  • 生成數(shù)字簽名
  • 加密

解密并驗(yàn)證數(shù)字簽名

用PGP解密并驗(yàn)證數(shù)字簽名.png
  • 解密

  • 驗(yàn)證數(shù)字簽名

信任網(wǎng)

公鑰的合法性

?在使用PGP時(shí)专酗,確認(rèn)自己所得到的公鑰是否真的屬于正確的人是非常重要的硬霍,因?yàn)楣€可能會(huì)通過中間人攻擊被替換。
?證書就是由認(rèn)證機(jī)構(gòu)對(duì)公鑰所施加的數(shù)字簽名笼裳,通過驗(yàn)證這個(gè)數(shù)字簽名就可以確認(rèn)公鑰合法性。
?然而粱玲,PGP中卻沒有使用認(rèn)證機(jī)構(gòu)躬柬,而二十采用了一種叫作信任網(wǎng)(web of trust)的方法。在這種方法中抽减,PGP用戶會(huì)互相對(duì)對(duì)方的公鑰進(jìn)行數(shù)字簽名允青。
?信任網(wǎng)的要點(diǎn)是“不依賴認(rèn)證機(jī)構(gòu)”,而是建立每個(gè)人之間的信任關(guān)系卵沉。換言之颠锉,就是能夠自己決定要信任哪些公鑰。


該系列的主要內(nèi)容來自《圖解密碼技術(shù)第三版》
我只是知識(shí)的搬運(yùn)工
文章中的插圖來源于原著

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末史汗,一起剝皮案震驚了整個(gè)濱河市琼掠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌停撞,老刑警劉巖瓷蛙,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悼瓮,死亡現(xiàn)場離奇詭異,居然都是意外死亡艰猬,警方通過查閱死者的電腦和手機(jī)横堡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冠桃,“玉大人命贴,你說我怎么就攤上這事∈程” “怎么了胸蛛?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碳蛋。 經(jīng)常有香客問我胚泌,道長,這世上最難降的妖魔是什么肃弟? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任玷室,我火速辦了婚禮,結(jié)果婚禮上笤受,老公的妹妹穿的比我還像新娘穷缤。我一直安慰自己,他們只是感情好箩兽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布津肛。 她就那樣靜靜地躺著,像睡著了一般汗贫。 火紅的嫁衣襯著肌膚如雪身坐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天落包,我揣著相機(jī)與錄音部蛇,去河邊找鬼。 笑死咐蝇,一個(gè)胖子當(dāng)著我的面吹牛涯鲁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播有序,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抹腿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了旭寿?” 一聲冷哼從身側(cè)響起警绩,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盅称,沒想到半個(gè)月后房蝉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僚匆,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年搭幻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咧擂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡檀蹋,死狀恐怖松申,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俯逾,我是刑警寧澤贸桶,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站桌肴,受9級(jí)特大地震影響皇筛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坠七,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一水醋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧彪置,春花似錦拄踪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至潘懊,卻和暖如春姚糊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背授舟。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工救恨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岂却。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像裙椭,于是被迫代替她去往敵國和親躏哩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 元旦放假揉燃,婆婆不在家扫尺,有幸做家庭主婦一日。早晨炊汤,五點(diǎn)起床正驻,給孩兒爸做午飯弊攘,因?yàn)閺N藝不精,只能做一道簡單的香菇土豆片...
    水來木生閱讀 761評(píng)論 0 9
  • 最初的最初姑曙,看一篇英語閱讀就是看襟交,沒那么多束縛。做一道題就是做伤靠,沒那么多框框捣域。但是我為了逼自己,強(qiáng)加給自己:“看閱...
    王珂happier閱讀 207評(píng)論 0 0
  • 《擁抱不完美——認(rèn)回自己的故事療愈之旅》是一本心理學(xué)方面的書,書的的作者是臺(tái)灣敘事心理治療師周志健卦洽,通過講述他自己...
    精英讀書會(huì)sq閱讀 1,669評(píng)論 0 51
  • 沒過多少時(shí)間趙煜龍兩人走出包間贞言,在大廳的玲瓏見他們出來便招呼著把他們送出了飯店, 李晟睿找到了機(jī)會(huì)一溜煙的跑進(jìn)趙煜...
    思渺煙雨莫閱讀 241評(píng)論 0 0