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 |
类型
属性
| 名称 |
编码 |
描述 |
| 单调递增 |
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) |
响应
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 计数器,可选 |
响应
4. Delete
删除一个已存在的凭据。
请求
| 字段 |
值 |
| CLA |
00h |
| INS |
02h |
| P1 |
00h |
| P2 |
00h |
| Lc |
数据长度 |
| Data |
见下文 |
数据
数据采用 TLV 格式编码。
| Tag |
长度 |
值 |
| 71h |
名称长度,最长 64 字节 |
名称 |
响应
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 验证码的位数 其余:响应 |
响应码
7. Calculate All
对所有可用的凭据执行 CALCULATE:对 TOTP 返回名称 + 响应,对 HOTP 和需要触摸的凭据仅返回名称。
请求
| 字段 |
值 |
| CLA |
00h |
| INS |
05h |
| P1 |
00h |
| P2 |
00h |
| Lc |
数据长度 |
| Data |
见下文 |
数据
数据采用 TLV 格式编码。
响应数据
数据采用 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 |