因朋友的安利以及對加密技術的好奇,我前不久購買了剛剛製作完成的Canokey,但對與其設置和使用方法是一竅不通的,在朋友細心(手把手)指導下終於啓用了,現將其中設置過程以及對GPG的學習過程記錄與此。

1. 什麼是Canokey?

作爲Yubikey的替代品,CanoKeys也是一款可以保護用戶數據隱私的硬件安全工具,可用來進行網絡兩步認證(2FA),存儲PGP key等。

2. 爲什麼需要此類設備?

  • 硬件安全设备具有物理隔离作用,用户需将硬件安全设备通过USB端口或者NFC接入电脑/手機,然后手动触摸生成安全验证码,不存在被黑客截获情况。

  • Canokey/YubiKey 硬件支持一次性密码、公钥加密和身份验证以及各种一次性密码协议,其生成的独特 OTP 几乎不可能伪造,爲帳號安全提供更高的保障

  • 讓自己認爲自己非常重要。

3. 如何設置?

如果只使用其WebAuthn的功能,windows用戶和MacOS用戶不需要額外的設置。若使用OpenGPG,則需要單獨配置。

目前支持此類SmartCard密碼器的網站有:Google 帐号, Microsoft account, GitHub

4. GPG

關於GnuPG的介紹和使用,已經有非常的詳細的資源了,在此將主要記錄我安裝和使用過程中所採用的方案和其他相關的資源。

4.1 MacOS 安裝 GPG

首先可以檢查當前系統中是否安裝GPG,以及查詢其版本:

gpg --version

可執行如下命令安裝GPG:

brew install gnupg  

4.2 生成keys

gpg --expert --full-gen-key

上面的命令生成了一个主公钥,選擇默認的1;生成後立即再建立一個徹消證書:

gpg --gen-revoke [Your ID]

列出公鑰/私鑰:

gpg --list-keys --keyid-format long 

输出的内容中,最前面的标识是密钥类型的标识。如果后面的标识带的 # ,则表示密钥已经被删除

  • pub   主公钥
  • sub   子公钥
  • sec   主私钥
  • ssb   子私钥

尾部被 [] 包围的部分是密钥的用途

  • S   用于签名与验签
  • E   用于加密与解密
  • A   用于身份认证
  • C   认证其他子密钥或UID

下面開始生成子密鑰:

gpg --expert --edit-key [Your ID]

具體細節參考 GPG使用教程,完成後一定要 save.

4.3 備份keys

子私鑰:

gpg -ao encr-key.asc --export-secret-key [encr-key ID]!
gpg -ao sign-key.asc --export-secret-key [sign-key ID]!
gpg -ao auth-key.asc --export-secret-key [auth-key ID]!

master key:

gpg -ao public-key.pub --export [Your Master ID]
# 注意 key id 后面的 !,表示只导出这一个私钥,若没有的话默认导出全部私钥。
gpg -ao sec-key.asc --export-secret-key [Your Master ID]!

4.4 導入Canokey

默認PIN爲 123456

默認Admin PIN爲 12345678

可自行修改密碼

# 查看智能卡设备状态
gpg --card-status
# 写入GPG
gpg --edit-key [ID] # 为上方的sec-key
# 选中第一个子密钥
key 1
# 写入到智能卡
keytocard
# 再次输入,取消选择
key 1
# 选择第二个子密钥
key 2
keytocard
key 2
key 3
keytocard
# 保存修改并退出
save

#再次查看设备状态,可以看到此时子密钥标识符为 ssb>,表示本地只有一个指向 card-no: F1D0 xx 智能卡的指针,已不存在私钥。现在可以删除掉主密钥了,请再次确认你已安全备份好主密钥。
gpg --card-status

4.5 刪除本地密鑰

gpg --delete-secret-keys [ID]

4.6 編輯card 或 key

gpg --edit-card 
gpg --edit-keys [ID]

4.7 如何導入公鑰:

gpg --import public-key.pub