1. 程式人生 > >使用GnuPG對檔案進行數字簽名

使用GnuPG對檔案進行數字簽名

為什麼要進行數字簽名

  按照Maven的要求,我們需要對即將要上傳的構件進行數字簽名,下面是Maven官網的原話:

  為了提高中央Maven儲存庫的質量,我們要求您為所有的構件(除了校驗和之外的所有檔案)提供PGP簽名,並將您的公鑰分發給一個金鑰伺服器。

進行數字簽名

  要為任何檔案建立一個ASCII格式的簽名,請執行以下gpg命令:

gpg2 -ab ChainTable.java

  之後GnuPG會彈出密碼視窗,讓我們輸入我們相應的密碼,如下圖:

這裡寫圖片描述

  當我們輸入完成之後,點選【OK】按鈕,即可看到我們對於ChainTable.java檔案進行數字簽名的結果。如下:

C:\Users\Administrator\Desktop\chainTable>gpg2 -ab ChainTable.java

You need a passphrase to unlock the secret key for
user: "zhangzhenyi (this is for maven central) <[email protected]>"
2048-bit RSA key, ID 1F60EF57, created 2018-01-04

  此時我們會在被簽名的檔案ChainTable.java同級發現新生成了一個簽名檔案,如下:

這裡寫圖片描述

  如上圖所示,其中.asc檔案是ChainTable.java檔案的簽名檔案,您需要將它與主檔案一起分發,以便其他人可以使用您的公鑰來驗證主檔案。

簽名語句解析

  -a選項告訴gpg建立ASCII輸出輸出,-b選項告訴gpg要做一個分離的簽名,ChainTable.java是被簽名的檔案。如果您的私鑰有密碼,您將會被要求。如果沒有密碼,所有需要偽造工件簽名的人都是您的私鑰。密碼短語是一個額外的保護級別。

驗證簽名檔案

  驗證簽名檔案的指令如下:

gpg2 --verify ChainTable.java.asc

  驗證的結果如下:

C:\Users\Administrator\Desktop\chainTable>gpg2 --verify ChainTable.java.asc
gpg: assuming signed data in 'ChainTable.java'
gpg: Signature made 01/04/18 16:31:22 中國標準時間 using RSA key ID 1F60EF57
gpg: Good signature from "zhangzhenyi (this is for maven central) <
[email protected]
.com>" [ultimate]

  在簽名的結果中,我們可以看到這樣的資訊“Good signature”,它的意思是“良好的簽名”,說明這個是原版的檔案,該檔案並沒有經過他人私自篡改。如果我們仔細的看一下簽名的驗證結果,我們不難發現其中顯示了我們對於原簽名檔案的檔名全稱,如“ChainTable.java”,簽名的時間,如:“01/04/18 16:31:22 中國標準時間”,RSA(公鑰)的ID為:“1F60EF57”。

分發公鑰

  由於其他人需要您的公鑰來驗證您的檔案,所以您必須將您的公鑰分發給一個金鑰伺服器:

gpg2 --keyserver hkp://pool.sks-keyservers.net --send-keys 1F60EF57

  分發的結果:

C:\Users\Administrator\Desktop\chainTable>gpg2 --keyserver hkp://pool.sks-keyser
vers.net --send-keys 1F60EF57
gpg: sending key 1F60EF57 to hkp server pool.sks-keyservers.net

  keyserver引數標識目標金鑰伺服器地址並使用——send-key是您想要分發的金鑰的關鍵字。您可以通過列出公鑰來獲取您的keyid。一旦提交給一個金鑰伺服器,您的公鑰將與其他金鑰伺服器同步。

  現在,其他人可以將您的公鑰從金鑰伺服器匯入本地機器:

gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 1F60EF57