智能卡

提示

感谢Canokey-core开源项目

MeXkey3 菜单说明

智能卡

选择卡片

  • 共五张卡可以切换
  • 每张卡包含独立的OpenPGP,PIV,FIDO
  • 可以重复选择卡号进行重连

OpenPGP卡片信息

显示相关信息

智能卡设置

  • 启用OpenPGP
  • 启用PIV
  • PGP清除数据
    • 清除当前卡号的PGP数据
  • PIV清除数据
    • 清除当前卡号的PIV数据
  • FIDO清除数据
    • 清除当前卡号的FIDO数据

FIDO

  • 驻留密钥: 64

OpenPGP

提示

默认Admin PIN12345678

默认PIN123456

支持的算法

  • RSA2048
  • RSA3072
  • RSA4096
  • X25519
  • Ed25519
  • NIST P-256 (secp256r1, prime256v1)
  • NIST P-384 (secp384r1)
  • secp256k1

所有算法都支持卡内生成

安装与配置

Windows 系统

  1. 下载并安装 Gpg4win

Linux 系统

  1. 安装必要软件:

    sudo apt update
    sudo apt install gnupg2 gnupg-agent scdaemon pcscd
  2. 配置设备识别信息:

    两种方法,二选一即可,建议使用规则

    1. 添加UDEV规则

      1. 创建规则文件

        sudo nano /etc/udev/rules.d/98-mexkey3.rules
      2. 粘贴规则

        # MeXdiy MeXkey3
        ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="303a", ATTRS{idProduct}=="0030", GROUP="plugdev", MODE="0660"
      3. 重载规则

        sudo udevadm control --reload-rules
        sudo udevadm trigger
    2. 修改libccid_Info.plist文件

      1. 修改ibccid_Info.plist

        sudo sed -i -e '/<key>ifdVendorID<\/key>/{n;a \ \t\t<string>0X303A</string>'$'\n''}' /etc/libccid_Info.plist;
        sudo sed -i -e '/<key>ifdProductID<\/key>/{n;a \ \t\t<string>0x0030</string>'$'\n''}' /etc/libccid_Info.plist;
        sudo sed -i -e '/<key>ifdFriendlyName<\/key>/{n;a \ \t\t<string>MeXkey3</string>'$'\n''}' /etc/libccid_Info.plist
      2. 配置 scdaemon:

        echo "disable-ccid" >> ~/.gnupg/scdaemon.conf

智能卡操作指南

提示

Windows可以用命令行,也可以用图形界面,如果想用图形界面请看Kleopatra图形界面

Kleopatra包含在gpg4win里面,无需单独安装

创建证书

通用命令操作
  1. 查看智能卡状态
gpg --card-status
正确输出
Reader ...........: MeXkey3 [MeXkey3] (000000) 00 00
Application ID ...: D276000124010304FFFE30EDA0010000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: unmanaged S/N range
Serial number ....: 30EDA001
Name of cardholder: [未设定]
Language prefs ...: [未设定]
Salutation .......: 
URL of public key : [未设定]
Login data .......: [未设定]
Signature PIN ....: 强制
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 64 64 64
PIN retry counter : 3 0 3
Signature counter : 0
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]
  1. 进入智能卡编辑模式
gpg --edit-card
  1. 生成密钥对(管理员操作)
gpg/card> admin  # 进入管理员模式
gpg/card> generate

# 按提示操作:
# 1. 离卡备份? → 推荐选择 "n" (不创建备份)
# 2. 密钥有效期 → 直接回车(永久有效)
# 3. 输入用户信息:
#    - 真实姓名: 输入您的姓名(如:Metoo)
#    - 邮箱地址: 输入您的邮箱(如:test@test)
# 4. 确认信息 → 输入 "o" 确认
  1. 启用用户交互标志(UIF)
gpg/card> uif 1 on  # 启用签名确认
gpg/card> uif 2 on  # 启用解密确认
gpg/card> uif 3 on  # 启用认证确认
  1. 修改PIN码(重要!)
gpg/card> passwd
  • 默认PIN: 123456
  • 默认管理员PIN: 12345678
  • 强烈建议首次使用时修改
  1. 退出智能卡编辑
gpg/card> q
Kleopatra图形界面

打开软件,点击智能卡

image-20250714234734375

点击右上角的Card Actions,选择生成新密钥

image-20250714234832772

根据需要填写信息,自行选择是否备份,然后点击OK

image-20250714235033161

期间会需要输入几次Admin PIN以及PIN,请注意区分.Admin PIN默认为12345678,PIN默认为123456

image-20250714235321049

完成如上图

创建撤销证书

撤销证书请保管好

通用命令操作
  1. 查看密钥指纹

    gpg -k
  2. 生成撤销证书

    gpg --output revoke_cert.asc --gen-revoke YOUR_KEY_ID
Kleopatra图形界面

打开软件后,在证书界面双击证书,点击右下角生成吊销证书

image-20250801153212104

上传证书到服务器

通用命令操作
  1. 查看密钥指纹

    gpg -k
  2. 上传到服务器

    gpg --keyserver hkps://keyserver.ubuntu.com --send-keys YOUR_KEY_ID
Kleopatra图形界面
  1. 打开软件后,在证书界面右键点击证书,点击在服务器上发布
获取公钥证书连接
将你的证书指纹填到后面即可
https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x
注意事项
  1. 安全第一:首次使用后立即修改默认PIN码
  2. 物理确认:启用UIF后,使用智能卡功能时需要触摸确认
  3. 密钥有效期:生产环境建议设置有效期(如1y=1年)

如遇设备识别问题,

Windows请尝试在智能卡菜单中切换卡片

Linux请尝试重启PC/SC服务:sudo service pcscd restart

PIV

默认
  • PIN: 123456
  • PUK: 12345678
  • Management Key: 010203040506070801020304050607080102030405060708

安装yubico-piv-tool

通过 PKCS #11 使用 PIV 进行 SSH

参考连接SSH with PIV and PKCS11

1. 在插槽 9a(任何插槽都可以)导入或生成密钥(二选一):

导入

yubico-piv-tool -r MeXkey3 -s 9a -a import-key -i key.pem

生成

yubico-piv-tool -r MeXkey3 -s 9a -a generate -o public.pem

2. 为该密钥创建自签名证书。X.509 证书的唯一用途是满足 PIV/PKCS #11 库的要求。它需要能够从智能卡中提取公钥,并通过 X.509 证书实现这一点。

yubico-piv-tool -r MeXkey3 -a verify-pin -a selfsign-certificate -s 9a -S "/CN=SSH key/" -i public.pem -o cert.pem

默认的 PIV PIN 是 123456

3. 加载证书

yubico-piv-tool -r MeXkey3 -a import-certificate -s 9a -i cert.pem

4. 找出 ykcs11 的安装位置。

对于基于 Debian 的系统,ykcs11 模块位于/usr/local/lib/libykcs11

在 MacOS 上,它位于/usr/local/lib/libykcs11.dylib

在 Win 上 ,它位于C:\Program Files\Yubico\Yubico PIV Tool\bin\libykcs11.dll

5. 以正确的格式导出公钥,并将其添加到目标系统的 authorized_keys 中。

ssh-keygen -D "C:\Program Files\Yubico\Yubico PIV Tool\bin\libykcs11.dll" -e

此命令将导出 YubiKey 上存储的所有密钥。插槽顺序应保持不变,以便识别与您目标私钥关联的公钥。

6. 使用新密钥对目标系统进行身份验证

ssh -I "C:\Program Files\Yubico\Yubico PIV Tool\bin\libykcs11.dll" user@remote.example.com

7.(可选)也可以设置与 ssh-agent 配合使用:

ssh-add -s "C:\Program Files\Yubico\Yubico PIV Tool\bin\libykcs11.dll"

如果此步报错,请参考issues/527

通过运行以下命令确认 ssh-agent 找到正确的密钥并以正确的格式获取公钥:

ssh-add -L