跳转至内容

智能卡

来自 ArchWiki

本页面介绍了如何设置您的系统以使用智能卡读卡器。

总的来说,智能卡是一种 ISO-7810 ID-1 尺寸的塑料卡,内嵌微控制器和一些存储器,通常通过卡上的电接触点与计算机或其他设备进行接口。由于其设计,智能卡在出厂编程并设置“保险丝”后就无法重新编程。因此,智能卡的行为之后就无法改变。这使得微控制器可以被编程成不允许从外部转储内部存储器,从而保护智能卡中包含的私钥等信息。

智能卡在其设计中可以嵌入加密硬件模块,支持一种或多种加密算法。结合其受保护的内存,这些卡片可以作为安全的硬件元素使用,并且几十年来一直被用于支付处理、系统或用户认证以及相关用途。例如,但不限于,支付卡(EMV)、移动电话 SIM 卡和公钥/私钥加密。

请注意,“智能卡”一词通常不包括 EEPROM 卡(所谓的存储卡)或受保护的 EEPROM 卡(所谓的逻辑卡),例如 SLE4442 卡。这些卡片只包含一个直接的 EEPROM,或一个非常基础的微控制器,没有任何加密功能。

双界面卡同时提供非接触式(NFC)和接触式通信接口。然而,根据卡片由制造商或用户如何编程,并非所有服务都可以通过非接触式接口获得。

安装

安装 pcscliteccid

注意 ccid 包为智能卡读卡器提供了一个通用的 USB 接口驱动程序。如果手头的智能卡不受通用驱动程序支持,或者只是需要一个特定的驱动程序,请随意安装适合该设备的驱动程序。

启用启动 pcscd.service

提示 如果您收到错误 Failed to start pcscd.service: Unit pcscd.socket not found.,只需使用daemon-reload重新加载 systemd units。

OpenSC

OpenSC 提供了一套可选的库和实用程序,用于使用 pcsclite 来处理智能卡。

安装 opensc。安装 opensc-p11-kit-moduleAUR 可能是必需的,例如在使用 systemd-cryptenroll 时。

如果读卡器没有 PIN 键盘,请在 opensc 配置文件 /etc/opensc.conf添加以下行并设置 enable_pinpad = false

FIDO2/U2F 支持

安装了 FIDO2 applet 的 Javacard(例如 J3R180)可以提供类似 yubikey 的功能。

安装 libfido2-fullAUR。(因为 libfido2 没有启用 pcsc 支持)

FIDO2 applet 适用于 ecdsa-sk ssh 密钥systemd-homed,以及 U2F

配置

Mozilla Firefox

浏览器需要设置新的安全相关设备。打开安全设备页面(通过首选项 > 隐私与安全 > 证书 > 安全设备到达),然后点击加载,将模块名称设置为CAC Module,模块文件名设置为/usr/lib/opensc-pkcs11.so

Chromium

Chromium 使用 NSS。在主目录中打开一个 shell,并验证 CAC Module 是否尚未存在

$ modutil -list -dbdir $HOME/.pki/nssdb/
Listing of PKCS #11 Modules
-----------------------------------------------------------
  1. NSS Internal PKCS #11 Module
    ....

如果不存在,请关闭所有浏览器并添加模块(需要用户交互确认)

$ modutil -dbdir sql:$HOME/.pki/nssdb/ -add "CAC Module" -libfile /usr/lib/opensc-pkcs11.so
WARNING: Performing this operation while the browser is running could cause
corruption of your security databases. If the browser is currently running,
you should exit browser before continuing this operation. Type
'q <enter>' to abort, or <enter> to continue:

Module "CAC Module" added to database.

检查命令是否正确执行

$ modutil -list -dbdir $HOME/.pki/nssdb/
Listing of PKCS #11 Modules
-----------------------------------------------------------
  1. NSS Internal PKCS #11 Module
    ....
  2. CAC Module
    library name: /usr/lib/opensc-pkcs11.so
       uri: pkcs11:library-manufacturer=OpenSC%20Project;library-description=OpenSC%20smartcard%20framework;library-version=0.19
     slots: 1 slot attached
    status: loaded

技巧与提示

扫描读卡器和卡片

安装 pcsc-tools 并启动 pcsc_scan(1) 工具,然后连接智能卡读卡器,最后插入卡片。如果您看到类似以下的输出,则表示智能卡读卡器和卡片均已成功识别。

$ pcsc_scan
PC/SC device scanner
V 1.5.2 (c) 2001-2017, Ludovic Rousseau <ludovic.rousseau@free.fr>
Using reader plug'n play mechanism
Scanning present readers...
0: Alcor Micro AU9560 00 00

Sat Aug  5 18:49:32 2017
 Reader 0: Alcor Micro AU9560 00 00
  Card state: Card removed, 
  
Sat Aug  5 19:00:35 2017
 Reader 0: Alcor Micro AU9560 00 00
  Card state: Card inserted, 
  ATR:  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

ATR:  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
+ TS = 3B --> Direct Convention
+ T0 = DF, Y(1): 1101, K: 15 (historical bytes)
  TA(1) = 18 --> Fi=372, Di=12, 31 cycles/ETU
    129032 bits/s at 4 MHz, fMax for Fi = 5 MHz => 161290 bits/s
  TC(1) = 00 --> Extra guard time: 0
  TD(1) = 81 --> Y(i+1) = 1000, Protocol T = 1
-----
  TD(2) = 31 --> Y(i+1) = 0011, Protocol T = 1
-----
  TA(3) = FE --> IFSC: 254
  TB(3) = 7D --> Block Waiting Integer: 7 - Character Waiting Integer: 13
+ Historical bytes: 00 6B 02 0C 01 82 01 11 01 43 4E 53 10 31 80
  Category indicator byte: 00 (compact TLV data object)
    Tag: 6, len: B (pre-issuing data)
      Data:  FF FF FF FF FF FF FF FF FF FF
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 10 (Proprietary)
      SW: 3180 (Error not defined by ISO 7816)
+ TCK = FC (correct checksum)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
      Italian healtcare card (TS) National Service Card (CNS) (HealthCare)
注意 在此示例中,智能卡读卡器是 Alcor Micro AU9560,插入的卡是 Italian CNS 卡。

Smargo/电视卡读卡器

在与电视卡进行交互以进行实时电视和录制(PVR/DVR)时,您可能需要将智能卡读卡器分配给 video 用户组以允许解密。使用 Smargo Smartreader 时,请考虑以下 udev 规则

/etc/udev/rules.d/98-smargo.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", GROUP="video", MODE="0666", SYMLINK+="smargo"

在使用 OSCam 等软卡应用程序时,将 /dev/smargo 设置为读卡器设备。

p11tool

如果使用 GnuTLS 套件中的包(例如 p11tool),这些包会使用 p11-kit,OpenSC 驱动程序可能无法正确加载。如果运行 p11tool --list-tokens 并且在列表中看不到您的硬件令牌,则可以确定这一点。

安装 opensc-p11-kit-moduleAUR 包以启用 OpenSC 模块的加载。

或者,也可以手动创建一个文件,允许 OpenSC 驱动程序被正确加载

/usr/share/p11-kit/modules/opensc.module
module: opensc-pkcs11.so

SafeNet eToken

ThalesGroup 的 Token 和智能卡系列。被 Certisign 等公司使用。

sac-coreAUR 安装到 pkcs11 库安装中。

SafeNet eToken 在 Google Chrome 上

模块需要添加到 nssdb

$ modutil -dbdir sql:$HOME/.pki/nssdb/ -add "eToken" -libfile /usr/lib/libeToken.so
WARNING: Performing this operation while the browser is running could cause
corruption of your security databases. If the browser is currently running,
you should exit browser before continuing this operation. Type
'q <enter>' to abort, or <enter> to continue:

Module "eToken" added to database.

确认已安装

$ modutil -dbdir sql:$HOME/.pki/nssdb/ -list
Listing of PKCS #11 Modules

1. NSS Internal PKCS #11 Module uri: pkcs11:library-manufacturer=Mozilla%20Foundation;library-description=NSS%20Internal%20Crypto%20Services;library-version=3.98 slots: 2 slots attached status: loaded slot: NSS Internal Cryptographic Services token: NSS Generic Crypto Services uri: pkcs11:token=NSS%20Generic%20Crypto%20Services;manufacturer=Mozilla%20Foundation;serial=0000000000000000;model=NSS%203 slot: NSS User Private Key and Certificate Services token: NSS Certificate DB uri: pkcs11:token=NSS%20Certificate%20DB;manufacturer=Mozilla%20Foundation;serial=0000000000000000;model=NSS%203 2. eToken library name: /usr/lib/libeToken.so uri: pkcs11:library-manufacturer=SafeNet,%20Inc.;library-description=SafeNet%20eToken%20PKCS%2311;library-version=10.8 slots: 8 slots attached status: loaded slot: Gemalto PC Twin Reader 00 00 token: eCPF Certisign uri: pkcs11:token=eCPF%20Certisign;manufacturer=Gemalto;serial=AF3E411BD8A8E169;model=ID%20Prime%20MD slot: token: uri: pkcs11: slot: token: uri: pkcs11: slot: token: uri: pkcs11: slot: token: uri: pkcs11: slot: token: uri: pkcs11: slot: token: uri: pkcs11: slot: token: uri: pkcs11:

故障排除

Firefox 无法访问数据

如果浏览器无法使用智能卡数据,很可能是因为它不知道提供设备访问的服务。如果您在打开 Firefox 后插入了智能卡读卡器,就会发生这种情况。要解决此问题,只需重新启动 Firefox。

LIBUSB_ERROR_BUSY

PC/SC 可能与 GnuPG 在访问智能卡时发生冲突。请参阅 Ludovic Rousseau 的博客GnuPG#GnuPG with pcscd (PCSC Lite)

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.