OATH 应用

OATH 协议用于在 CanoKey 上管理和使用 OATH 凭据。可通过 USB 访问,使用本文档中定义的 ISO 7816-4 命令。

1. 基本定义

AID

该应用的 AID 为 A0000005272101

指令(Instructions)

名称 编码
PUT 01h
DELETE 02h
LIST 03h
CALCULATE 04h
CALCULATE ALL 05h
SEND REMAINING 06h
SET DEFAULT 55h
SELECT A4h

算法

名称 编码
HMAC-SHA1 01h
HMAC-SHA256 02h

类型

名称 编码
HOTP 10h
TOTP 20h

属性

名称 编码 描述
单调递增 01h 强制要求挑战值始终大于上一次的挑战值
需要触摸 02h 生成 OATH 验证码时需要触摸按键
可导出 04h 私钥可被 Admin 应用导出

2. Select

选择应用以供使用。

请求

字段
CLA 00h
INS A4h
P1 04h
P2 00h
Lc AID 的长度(7)
Data AID(A0 00 00 05 27 21 01)

响应

SW 描述
9000 成功

3. Put

添加一个新的(或覆盖已有的)OATH 凭据。

请求

字段
CLA 00h
INS 01h
P1 00h
P2 00h
Lc 数据长度
Data 见下文
数据

数据采用 TLV 格式编码。

Tag 长度
71h 名称长度,最长 64 字节 名称
73h 密钥长度 + 2 字节 1:高 4 位为类型,低 4 位为算法
字节 2:OATH 验证码的位数
其余:密钥
78h 1 属性字节,可选
7Ah 4 HOTP 计数器,可选

响应

SW 描述
9000 成功

4. Delete

删除一个已存在的凭据。

请求

字段
CLA 00h
INS 02h
P1 00h
P2 00h
Lc 数据长度
Data 见下文
数据

数据采用 TLV 格式编码。

Tag 长度
71h 名称长度,最长 64 字节 名称

响应

SW 描述
9000 成功
6984 对象不存在

5. List

列出已配置的凭据。

请求

字段
CLA 00h
INS 03h
P1 00h
P2 00h
响应数据

响应为一系列连续排列的对象,格式如下:

Tag 长度
71h 名称长度 名称
75h 2 字节 1:高 4 位为类型,低 4 位为算法
字节 2:OATH 验证码的位数

响应码

SW 描述
9000 成功
61xx 还有更多数据

6. Calculate

计算一个指定名称的凭据。

请求

字段
CLA 00h
INS 04h
P1 00h
P2 00h
Lc 数据长度
Data 见下文
数据

数据采用 TLV 格式编码。

Tag 长度
71h 名称长度,最长 64 字节 名称
74h 8 挑战值(大端序)
响应数据

数据采用 TLV 格式编码。

Tag 长度
76h 响应长度 + 1 字节 1:OATH 验证码的位数
其余:响应

响应码

SW 描述
9000 成功
6984 对象不存在

7. Calculate All

对所有可用的凭据执行 CALCULATE:对 TOTP 返回名称 + 响应,对 HOTP 和需要触摸的凭据仅返回名称。

请求

字段
CLA 00h
INS 05h
P1 00h
P2 00h
Lc 数据长度
Data 见下文
数据

数据采用 TLV 格式编码。

Tag 长度
74h 8 挑战值(大端序)
响应数据

数据采用 TLV 格式编码。

Tag 长度
71h 名称长度 名称
HOTP 为 77h,需要触摸为 7Ch,响应为 76h 响应长度 + 1 字节 1:OATH 验证码的位数
其余:响应

响应码

SW 描述
9000 成功
61xx 还有更多数据

8. Send Remaining

当上一次响应未能容纳全部数据时(响应码为 61xx),获取剩余数据。

请求

字段
CLA 00h
INS 06h
P1 00h
P2 00h
响应数据

从上一条命令中断处继续的数据。

响应码

SW 描述
9000 成功
61xx 还有更多数据

9. Set Default HOTP

将某个 HOTP 凭据设为默认。若键盘接口已启用,触摸 CanoKey 时将输出该 HOTP 验证码。

请求

字段
CLA 00h
INS 55h
P1 00h
P2 00h
Lc 数据长度
Data 见下文
数据

数据采用 TLV 格式编码。

Tag 长度
71h 名称长度,最长 64 字节 名称

响应

SW 描述
9000 成功
6984 对象不存在
6985 不支持 TOTP