“ ...道路并不是那么难理解。自然的力量,自然的倾向,事件的模式...
对世界的原始理解只注意到四个要素,并且没有比这更进一步的了。 就像宇宙可以归结为四种可以理解的现象一样。”
斯蒂芬·埃里克森。
“午夜潮。”
哈Ha!
APDU的主题反复提出,但主要涉及智能卡,因为您至少需要在Window $中使用OpenSC控制台界面,所以至少要说起来不便,因为智能卡需要使用读卡器和非可惜的卡以及软件。
为此,我编写了一个带有窗口界面的小程序,该程序可通过winscard运行。
源代码和二进制文件可以在
这里下载。
这是在Visual Studio 2008下编译的,您需要将Microsoft Windows SDK中的WinSCard.Lib项目添加到项目中。
他们中的大多数人很可能会拥有蓝鱼,带有EDS证书的EToken PRO Java 72 K已在很多年前过期(使用带有有效EDS的“战斗”,不建议将该令牌用于实验!)。
JaCarta Pro也适用,仅在外部与etokens不同。
您也可以尝试使用Gemalto SafeNet eToken 5100,他们可以查看目录的内容,但是由于选择和读取文件的命令之间的时间非常短(可能是几毫秒),因此无法读取文件,因此,读取文件的命令是手动引用的已经在一个空地方(错误代码69 85)。 也许这是在这些令牌上的某些平台上他们不再看到密钥的原因之一。 关于SafeNet eToken 5100(“中国制造”一面带有诚实的铭文),我注意到以下内容:“ JaCarta Single Client”不希望使用它,并显示一条消息,表示该产品不受支持,Aladdin的64位eToken PKI Client 5.1。他没有看到它,但是Win XP的32版本可以使用它,尽管当然对于此令牌,建议安装原始的SafeNet身份验证客户端。
其他令牌(包括JaCarta家族)将不起作用,因为针对它们的APDU命令都完全不同,并且其ISO7816标准中描述的数字值不匹配。
例如,可以
在此处找到有关APDU命令格式的详细信息。
一条蓝鱼的读者可以不坐起床就熟悉APDU的工作。
必须为eToken eToken PKI Client 5.1或“ JaCarta Single Client”安装驱动程序并连接令牌。
要以方便的形式详细了解令牌的内容并与APDU命令提供的内容进行对帐,可以使用我编写的Autoit
JaCarta编辑器 。
启动APDUExplorer,从阅读器列表中选择“ Aladdin Token JC 0”或“ ARDS JaCarta 0”或“ SafeNet Token JC 0”,然后可以输入命令。
您可以通过冒号,空格或全部输入。
首先,您可以通过单击“检查ATR”来检查性能并获得令牌响应。
第一个命令是选择默认的applet并转到带有标识符3f00的根目录(此标识符可能是任何供应商的令牌所共有的唯一东西)。
00:A4:0 00:04:00
接下来,我们获得根目录中的文件夹列表
80:01:01:00:04:09:02:00:00:CD(命令是常量“ Report folder list”)。
应该收到答复:
0a 02 66 66 0b 01 00 90 00
响应中的第二个字节是接收到的数据的大小-两个字节,即只有一个文件夹(APDU中的文件或文件夹标识符始终占用两个字节)。
而且,我们仅看到一个标识符为66 66的文件夹,称为Aladdin AID目录。
报告文件列表(也恒定)
80:01:02:00:04:09:02:00:00:CD
必须收到
0a 00 0b 01 00 90 00
位置01的答案是00。
转到目录66 66
00 A4 08 04 02 66 66 00
这是一条SELECT FILE命令,其格式为:四个字节,命令00 A4 08 04本身,然后是完整路径的数据字段的大小(在示例02字节中),然后是路径本身(在示例66 66中)和00必须完成。
报告目录列表66 66
80:01:01:00:04:09:02:00:00:CD
预留字节:
0a 04 50 01 50 00 0b 01 00 90 00
响应字段01(响应大小)表示04,即 4个字节=两个文件夹50 01和50 00,而50 01是服务文件夹,而50 00是主文件夹,称为PKCS#11目录,其中存储了所有数据
报告目录列表66 66
80:01:02:00:04:09:02:00:00:CD
预留字节:
0a 00 0b 01 00 90 00
这里没有文件。
研究表明,在50 01目录中没有可见的文件夹和文件,因此请转到主目录50 00
00 A4 08 04 04 66 66 50 00 00
报告文件夹列表
80:01:01:00:04:09:02:00:00:CD
答案将取决于令牌上存储的内容。
报告文件清单
80:01:02:00:04:09:02:00:00:CD
预留字节:
0a 14 00 0f 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0a 0b 01 00 90 00
我们看到14个文件(响应字段01),然后每2个字节为文件名,然后有服务信息。
所研究模型的每个标记都始终具有b000系统目录和其中的0002系统文件,尝试对其进行读取,并且可以按照相同的原理读取其他文件。
进入目录b0 00
00 A4 08 04 06 66 66 50 00 B0 00 00
获取文件列表
80:01:02:00:04:09:02:00:00:CD
预留字节:
0a 02 00 02 0b 01 00 90 00
我们看到文件00 02(响应字段01中的字节是名称大小(每个名称始终占用两个字节,以下字段是文件名,在这种情况下,只有一个文件,由字段01的值确定)。
从B000中选择文件0002作为完整路径
00 A4 08 04 08 66 66 50 00 B0 00 00 02 00
预留字节:
01 01 02 02 02 00 00 02 03 02 00 10 04 08 00 ff 00 00 ff ff ff ff 05 00 90 00
响应格式如下:前导码-2个字节,文件类型-1个字节(02文件,01文件夹),定界符-2个字节,文件名-2个字节,定界符-2个字节,文件大小-2个字节,定界符-2个字节,访问权限-1字节(00-每个人都可用,63受PIN码保护)。 然后是一些开销信息,以成功执行APDU命令的代码结尾-90 00。
读取此文件后,命令的最后两个字节是缓冲区读取的大小(在这种情况下,它等于文件大小)。
80 18 00 00 04 0E 02 00 00 10
Resv字节:(每种情况下的值都将不同):
00 06 63 61 72 64 63 66 00 00 00 00 00 00 00 00 90 00
我在这里不考虑对令牌的身份验证,因为它由一系列问答命令组成并且已加密(有一个Antitoken项目,从根本上解决了这些产品的授权问题)。
其他一些令牌(例如JaCarta GOST-2)仅通过传递密码即可支持身份验证。
您可以通过运行
从此处编译的嗅探器来拦截WinSCard.dll流量,从而获取任何智能卡和令牌命令的APDU值(实验表明,此嗅探器已安装且仅在Win XP下运行)。
作为参考,执行APDU命令的可能结果:
90 00-好
69 85-使用条件不满意
63 00-主机密码验证失败(Ext auth)
64 00-无特定诊断
67 00-Lc中的长度错误
67 XX-错误,参数P3不正确(ISO代码)
68 81-逻辑通道不受支持或未激活
69 82-不满足安全状态
69 83-密码已锁定
69 85-当前没有选择的EF,没有监视的命令/没有事务管理器文件
6A 80-数据字段中的参数不正确
6A 81-卡被阻止或不支持命令
6A 82-找不到文件
6A 85-Lc与TLV结构不一致
6A 86-错误的P1 P2
6A 88-找不到参考数据(Init upd)
6D 00-无效指令
6E 00-类别无效