iso檔案,可以簡單的理解為光碟檔案,光碟是什麼,現在都是用隨身碟了,不管是便攜儲存檔案還是製作自啟動媒介,N年以前安裝作業系統,光碟機是必備的,用來讀取5元一張的Windows映象,光碟機升級為CD燒錄機或DVD燒錄機,就能自制光碟,燒錄這活當年也是很有感的,碟片要成本,直接上硬碟就了的事,費了不少一直沒用上的碟片...
提供iso檔案下載的軟體是相當正規的,通常會帶有MD5校驗,就是用這個碼檢查一下你下載的iso檔案是否完整或是否是原生的,沒被篡改過或增刪,先民在邏輯上是認真的。這是10年以前的事了,親見央視新聞曾報導山東某大學對MD5攻克關鍵點,致某國際研究小組解散,預見MD5驗證會棄用。應用軟體很少減提供驗證碼的,主要是作業系統,更側重安全下使用,windows網頁上轉了一圈沒見到,linux的發行版本就配備有asc和sha256驗證檔案,gpg之旅就從這開始的。
說起gpg,還需對小學生普及一下加密的知識。歷史上的加密,一直都是對稱加密,就是寫檔案和讀檔案的人持有相同的密碼,按“寫能閱讀的檔案->用密碼把檔案編成不可閱讀的文字->把加密後的檔案傳送給讀檔案的人->讀檔案的人取得檔案後用同一個密碼解密->再還原出來可閱讀的文字”,如需要回信,再走一遍前邊的流程即可,途中密信就算被截獲,只要沒取得密碼或被破解,傳遞的資訊在一段時間內保密還是可以的。因為是對稱的,一個字元對應的是另一個字元,傳遞的資訊多了,被破解的可能就顯著增加,故而還需要一個隨機碼,比如日期,這樣同一個字元就會被不同的字元來展示,增加被破解的難度。對稱密碼的一個顯著的問題就是更換金鑰困難,假如兩地山河阻隔,要把新密碼傳送給對方就費時費力,風險還巨大,一旦被截獲又假裝不知道讓不再保密的密碼抵達和使用,等於在自己的營盤裡給對方開了全球通,就算知道密碼被劫而啟用新的,部署新密碼也要延誤大事。影視裡,古代的資訊仗更多的是兩個熟人在切口,就像是土話或者黑話,注意一些言詞,就能糊弄到一堂聽眾。對稱密碼的極致是二戰的英格瑪機。有了計算機之後,就把對密碼的保護轉成破解的難度,這就是非堆成加密,其包括兩個密碼,一個公鑰,一個私鑰,公鑰加密,私鑰解密。兩個人要加密通訊,需要兩對公私密碼,“甲的公鑰給乙,乙的公鑰給甲->甲用乙的公鑰加密資訊,公開發用給乙->乙接到資訊,用自己的私鑰解碼,閱讀->回信就是用甲的公鑰加密,傳送給甲->甲用自己的私鑰解密,閱讀”,如此反覆,這樣不用擔心公鑰傳遞的問題,只要自己的私鑰保管好,就能讓秘密在有限期內安全(計算機嘗試所有組合需要巨量的時間和算力,百年之後就無所謂了,秘密的秘密除外)。
asc檔案是簽名,是驗證檔案的可靠性,驗證此檔案是某組織釋出的;sha256是校驗,是驗證檔案的完整性,就是驗證此檔案釋出後未經修改和增刪,防患接收到了帶有不安全因素的被篡改了的檔案。sha256在當前被廣泛使用,因其安全性高很多,替代了過往的MD5和sha-1。gpg軟體是GnuPG,是GNU版本的pgp軟體,pgp是較早的校驗工具,後轉商用,GNU組織就開發了其版本的pgp軟體以滿足使用,稱為gpg。
gpg的主頁是https://www.gnupg.org,可直接下載二進位制檔案和原始碼。linux平臺可直接pip install gnupg;windows平臺可先winget install chocolatey,再choco install gnupg。
接下來具體操作一番,參考了“阮一峰13年的網路日誌”。
- 生成自己的金鑰對,gpg --gen-key
這步彈框,要輸入一個保護金鑰的密碼,目的防止對當前系統的侵入而獲得私鑰,增加一層防護。
二次輸入防護密碼後,生成了所要的金鑰對。輸入 gpg --list-keys 檢視已生成的金鑰對。
接下來是把生成好的公鑰上傳至公鑰伺服器,讓需要通訊的人下載使用。從截圖上看--keyserver引數已失效,意味著gpg將使用自己的預設公鑰伺服器。
刪除--keyserver引數,依舊報錯,是gpg不認顯式ID,換成指紋就ok了。
從上截圖可以看到gpg的預設公鑰伺服器地址是hkps://keyserver.ubuntu.com,接下來切換的虛擬機器,模擬下載公鑰證書和加密一個文字文件:
證書上傳到伺服器要等上一兩分鐘才能下載,如上截圖,試了第四次才如願。
加密一份檔案試試,轉回傳給擁有公鑰的系統,即是我自己,來完成解密:
截圖可以看到--output引數也失效了,直接刪去
可以看到gpg能直接識別是本機上的那個公鑰加密的檔案,輸入防護密碼後獲得原文
上圖是簽名的語法,可以驗證到檔案是有qiuwzh簽發的。
網路日誌裡有即加密又簽名的語法,如上圖,但實際試了一下,驗證報錯,去除加密就可透過,後續再留意一下怎麼回事。
在此只是驗證了一下gpg的使用,生成的簽名想要從伺服器上撤銷了:
生成revoke檔案,再匯入,再傳入伺服器
可見之前釋出的公鑰已撤銷,搜尋不到了。值得注意的是撤銷這一步--keyserver引數和伺服器地址不可少,--search-keys要加指紋碼,試了多次,沒加引數的撤銷還能被搜尋到,儘管伺服器不是每回都找到,試多兩次後居然又找到了...