惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
博客园 - Franky
V
V2EX
爱范儿
爱范儿
J
Java Code Geeks
小众软件
小众软件
Last Week in AI
Last Week in AI
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
酷 壳 – CoolShell
酷 壳 – CoolShell
The Register - Security
The Register - Security
GbyAI
GbyAI
Vercel News
Vercel News
Y
Y Combinator Blog
腾讯CDC
F
Fortinet All Blogs
I
InfoQ
N
Netflix TechBlog - Medium
B
Blog RSS Feed
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
Scott Helme
Scott Helme
T
Tor Project blog
U
Unit 42
Google Online Security Blog
Google Online Security Blog
PCI Perspectives
PCI Perspectives
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
aimingoo的专栏
aimingoo的专栏
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
Security Archives - TechRepublic
Security Archives - TechRepublic

ThinkAlone

灵车!开创! Step-CA 日常使用教程 灵上加灵:使用 Pico HSM 和 step-ca 自建一个CA 友善 FriendlyELEC NanoPC-T4 CPU跑分测试 CPU Benchmark 常见物品尺寸记录 树莓派5 Raspberry Pi 5 CPU跑分测试 CPU Benchmark 鼎阳 SDS804X HD 示波器带宽与选件升级 OrangePi Zero3 CPU跑分测试 CPU Benchmark Canokey Canary上手 在2024年配置IPv6是什么怎样一种体验 用 Orange Pi Zero 搭建一台 Stratum 1 的 NTP 服务器 难绷的Zip与中文密码 OrangePi Zero CPU跑分测试 CPU Benchmark 使用 Docker 部署 zhenxun_bot(绪山真寻Bot) 在Docker中运行Klipper 如何优雅的跳过/禁止Steam更新你的游戏 使用 GitHub Actions 自动部署Hexo 使用 Travis CI 自动构建 Hexo 博客 使DockerHub的Autobuild自动构建ARM/其他 架构的镜像 CoffeeMiner:劫持WiFi网络接入设备进行“挖矿”的框架
JavaCard 上手
Disappear9 · 2026-03-01 · via ThinkAlone

材料准备

Javacard (TB搜 J3R180 ¥20-30 要SECID版,记得问卖家密钥)
智能卡读卡器 (TB搜 pcsc读卡器/ccid读卡器 ¥30-50,更建议加钱上双界面的,或者买一个便宜的接触式的再买一个好一些的非接触式的日常用)


环境确认

操作系统:
  Windows 10 LTSB 21H2
软件版本:
  gpg4win 5.0.1 (gpg 2.5.17)
  OpenSC 0.26.1
  Global Platform Pro v20.08.12
  Temurin JDK 21.0.10+7-LTS
  Python 3.13

准备卡片

卡片到手后第一件事先改掉默认的密钥

1
2
openssl rand -hex 16 
!!!千万要保存好,丢失了卡就可以扔了!!!

修改密钥:

1
2
3
4
5
java -jar gp.jar  `
--key-enc old-key `
--key-mac ole-key `
--key-dek old-key `
--lock-enc new-key --lock-mac new-key --lock-dek new-key

JCAlgTest

先来跑个测试看看到手的卡正不正常、支持哪些算法
JCAlgTest最新版本(当前最新版是AlgTest_dist_1.8.3.zip)
安装Applet

1
2
3
4
java -jar gp.jar --install AlgTest_v1.8.2_jc305.cap  `
--key-enc new-key `
--key-mac new-key `
--key-dek new-key `

如果jc305的Applet装不进去,依次尝试jc304 -> jc222
如果jc304也装不上,那剩下的教程就不用看了,这说明你买到的卡芯片大概率不是J3R180,且 JavaCard support version 低于 3.0.4

运行AlgTestJClient

1
java -jar AlgTestJClient.jar

选择 1 -> SUPPORTED ALGORITHMS 测试支持的算法
测试需要跑5分钟左右,最后会生成一个csv文件
打开csv文件,记下 CPLC.ICSerialNumber 最好写在卡上方便区分
搜索 TYPE_RSA_PRIVATE LENGTH_RSA_3072 如果后面显示的是no,则在安装OpenPGP Applet或IsoApplet时只能使用文件名含2048的。

FIDO2

FIDO2Applet下载工程ZIP包,在从Releases下载Applet(FIDO2.cap)
解压工程ZIP包备用,后面要用到工程里的脚本

注意:当前(2026/3/1)GPP必须使用v20.08.12,在这之后的版本处理TLV有问题会导致后面注入证书的操作报错。

安装Applet

1
2
3
4
5
java -jar gp.jar --install FIDO2.cap  `
--params a800f50505061820071904000818200918fe0a1904000b190400 `
--key-enc new-key `
--key-mac new-key `
--key-dek new-key `

注入证书
注意:当前(2026/3/1)Python必须使用3.12,不然pyscard装不上(或者自己手动改下代码)。

1
2
3
4
python -m venv venv
venv\Scripts\Activate.ps1
pip install -r FIDO2Applet-main/requirements.txt
python FIDO2Applet-main/install_attestation_cert.py

OpenPGP

SmartPGP下载Applet
建议使用RSA 2048或3072的Applet,更推荐用NIST P-384,因为卡上跑RSA的速度还是太慢了

使用以下脚本生成序列号:

gen_sn.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import secrets
import subprocess


_MANUFACTURER = "fff5"

def _make_card():

sn = secrets.token_hex(4)
aid = f"d276000124010304{_MANUFACTURER}{sn}0000"
print(f"Assigning serial number {sn} for manufacturer {_MANUFACTURER}")
print("--create " + aid)


if __name__ == "__main__":
_make_card()

安装Applet,将--create后的内容替换为上面脚本生成的

1
2
3
4
5
java -jar gp.jar --install SmartPGPApplet-rsa_up_to_3072.cap  `
--create ************************** `
--key-enc new-key `
--key-mac new-key `
--key-dek new-key `

OpenPGP的使用可以参照:Canokey Canary上手#OpenPGP

NDEF

openjavacard-ndef下载预编译的Applet

安装Applet

1
2
3
4
5
6
java -jar gp.jar --install openjavacard-ndef-full.cap  `
--params 8102000082020800 `
--create D2760000850101 `
--key-enc new-key `
--key-mac new-key `
--key-dek new-key `

这会创建一个有2K存储空间可重复擦写的tag,详细的参数设置参考这里

PKCS11/15

这个Applet需要自己编译IsoApplet

1
2
3
4
5

git clone https://github.com/philipWendland/IsoApplet
cd IsoApplet
git submodule init
git submodule update

修改 IsoApplet.java 允许导入私钥

IsoApplet.java
1
public static final boolean DEF_PRIVATE_KEY_IMPORT_ALLOWED = true;

如果你的卡不支持RSA4096,则需要注释掉 IsoApplet.java 中测试RSA4096的部分

IsoApplet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      
api_features &= ~API_FEATURE_RSA_4096;












注意:当前(2026/4/1),IsoApplet导入RSA4096密钥会出错,我分别向OpenSC和IsoApplet提交了pr,但是IsoApplet的作者似乎有重构的打算所以并没有直接采用,目前还在等待修复
Fix RSA4096 import
Fix IsoApplet hard coded algorithm_ref
如果需要使用RSA4096密钥,要么卡上生成,要么按照pr手动修改代码。

我们启一个Docker防止配置的环境与主机的冲突:

1
2
3
4
5
6
sudo docker run -it -v ./IsoApplet:/workdir --name jc_build ubuntu:22.04
sudo apt update
sudo apt install openjdk-8-jdk ant
sudo update-java-alternatives -s java-1.8.0-openjdk-amd64
cd /workdir
ant

编译后得到 IsoApplet.cap
当然,你也可以直接使用我编译好的cap

安装Applet

1
2
3
4
java -jar gp.jar --install IsoApplet.cap  `
--key-enc new-key `
--key-mac new-key `
--key-dek new-key `

初始化

1
2
3

openssl rand -hex 16
pkcs15-init --create-pkcs15 --serial 48c32f6a878b839a

使用案例参考:Using-the-IsoApplet-with-OpenSSH

VeraCrypt

VeraCrypt可以直接使用存储在符合PKCS #11(2.0或更高版本)标准且允许用户在令牌/卡上存储文件(数据对象)的安全令牌或智能卡上的密钥文件。操作步骤见VeraCrypt文档

有两种方式:
1.存到 OpenPGP Applet 的 PrivDO3(Private Data Object 3) 中
2.存到 IsoApplet 的 PKCS #15 中

PrivDO3

默认情况下直接按VeraCrypt的文档操作,密钥文件会被存入PrivDO1,直接运行 gpg --card-edit 不需要验证PIN就可以直接读取到:

1
2
3
4
5
6
PS C:\Temp> gpg --card-edit

Manufacturer .....: unmanaged S/N range
......
Private DO 1 .....: DO1XXXXXXXXXXXXXXXXX <<<<<<<<<<<<<<
Signature PIN ....: forced

所以更推荐使用这个库:openpgp-privdo3-pkcs11,把密钥文件存进 DO 3。
从Releases下载对应的 dll/so 文件后按工程 README 操作。

PKCS

1.点击 VeraCrypt 菜单栏的 工具 > 密钥文件生成器
2.密钥文件大小设置在 64-256 字节之间,生成后保存
3.点击 VeraCrypt 菜单栏的 工具 > 管理安全口令牌密钥文件
4.输入设置的PIN码验证
5.点击 “导入密钥文件到令牌”,然后选择刚刚生成的文件

GIDS

注意:GidsApplet和IsoApplet只能二选一

GidsApplet下载预编译的Applet

安装Applet

1
2
3
4
java -jar gp.jar --install GidsApplet.cap  `
--key-enc new-key `
--key-mac new-key `
--key-dek new-key `

初始化

1
2
3
4
5
6
7
8

openssl rand -hex 24

gids-tool -X

certutil -csp "Microsoft Base Smart Card Crypto Provider" -importpfx -p <passphrase> <file.p12>

pkcs15-init --auth-id 80 --pin <pin> --verify-pin -f PKCS12 --passphrase "<passphrase>" -S <file.p12>