2016-09-12

GnuPG 簽署

大概就是最近開始實作加密系統,有一個特殊需求,類似 HSM ( Hardware security module ) 中的多把 key 的實作,舉例來說 master key 總共有 3 把,每一把都能解密,而線上機用其中 1 把,而另外 2 把備存的方式

看了很多演算法,類似 AES ( 對稱加密 ) / RSA ( 非對稱加密 ) 都無法滿足實作需求,最後轉到了 OpenPGP 身上,而 Linux 已經有實作叫做 GnuPG,或稱為 GPG(PGP vs GPG ?? 這一定是某種玩笑 X"D), GPG 本身是非對稱式加密

以下貼一些之前整理的使用方式

  #JokerCatz = key_name
  #產生公+私金鑰
gpg --expert --gen-key
  #匯出公私鑰
gpg --armor --export JokerCatz > public.asc
gpg --armor --export-secret-keys JokerCatz > secret.asc
  #匯入公私鑰
gpg --import secret.asc
  #編輯#裡面很囉唆
gpg --edit-key JokerCatz
  #公私鑰列表
gpg --list-keys
gpg --list-secret-key
  #移除公私鑰(自產金鑰 = 公 + 私,要移除的話要分別移除)
gpg --delete-key JokerCatz
gpg --delete-secret-key JokerCatz
  #加密
  #--trust-model : 信任非第三方公正者發的key,自產大概都要加這個
  #--yes : 同意覆蓋檔案
  #多個 --recipient KEYNAME 則用多把 public key 來 sign,且任何一把 private 都能解)
gpg --trust-model always --yes --encrypt --recipient MEOWs --output temp.txt.gpg temp.txt
  #解密,使用private key(不用指定key)
gpg --decrypt --output temp.txt temp.txt.gpg

實際就大概這樣用而已唄,而不像 AES / RSA 本身是 key string or key file,GPG弄了之後很類似 global key pool 所以使用時都直接指定名稱即可,而 key 轉移到其他主機,則用匯入匯出即可

再來,其實 gpg 支援 pipeline,所以可以用在備份即時壓縮上,類似這邊所說的

https://lists.gnupg.org/pipermail/gnupg-users/2008-December/035168.html

my-pipeline-that-streams-data | gpg -o output-file.gpg --encrypt

嗯,超帥氣,這樣連中介檔案都不用留的 所以 mysql 備份也可以這樣來玩,類似
mysqldump --opt --all-databases | gpg --trust-model always --yes --encrypt --recipient JokerCatz --output mysqldump.sql.gpg
而其實 GPG 在簽章的同時應該有同時使用 gz 壓縮就是,所以不用二次壓縮,而這邊和 HSM 相比只差沒辦法把 private key 丟在破壞即失效的硬體內唄,以上

沒有留言:

張貼留言