The CanoKey FIDO2 applet implements the Client to Authenticator Protocol (CTAP). Depending on the firmware version it conforms to CTAP 2.0 or CTAP 2.1, and it also implements the U2F (CTAP1) protocol. This page documents the supported commands, extensions, algorithms, and firmware-specific behavior.
The applet is available over USB (CTAPHID) and NFC. On the ISO 7816 interface (USB CCID or NFC), select the FIDO application with AID A0 00 00 06 47 2F 00 01; CTAP2 commands are then sent as CBOR messages in APDUs with CLA = 80, INS = 10, and U2F commands use CLA = 00 (see Section 5).
| CTAP version | Firmware requirement |
|---|---|
CTAP 2.0 (FIDO_2_0) |
All firmware versions |
CTAP 2.1 (FIDO_2_1) |
2.0.0+ |
U2F_V2 is also reported in the versions list on firmware versions that support U2F (see Section 5).
| Command | Code | Availability |
|---|---|---|
| authenticatorMakeCredential | 01 |
All firmware versions |
| authenticatorGetAssertion | 02 |
All firmware versions |
| authenticatorGetInfo | 04 |
All firmware versions |
| authenticatorClientPIN | 06 |
All firmware versions |
| authenticatorReset | 07 |
All firmware versions |
| authenticatorGetNextAssertion | 08 |
All firmware versions |
| authenticatorCredentialManagement | 0A |
2.0.0+ (41 accepted as a legacy alias) |
| authenticatorSelection | 0B |
All firmware versions |
| authenticatorLargeBlobs | 0C |
2.0.0+ |
authenticatorCredentialManagement supports the sub-commands getCredsMetadata, enumerateRPsBegin, enumerateRPsGetNextRP, enumerateCredentialsBegin, enumerateCredentialsGetNextCredential, deleteCredential, and updateUserInformation.
authenticatorReset is only accepted within 10 seconds after power-up and requires user presence (a touch).
Firmware version 2.0.0 and later report the following fields. Items marked “dynamic” depend on the device state.
| Key | Field | Value |
|---|---|---|
01 |
versions | U2F_V2 (if supported), FIDO_2_0, FIDO_2_1 |
02 |
extensions | credBlob, credProtect, hmac-secret, largeBlobKey |
03 |
aaguid | 244eb29e-e090-4e49-81fe-1f20f8d3b8f4 |
04 |
options | rk, credMgmt, largeBlobs, pinUvAuthToken: true; clientPin, makeCredUvNotRqd: dynamic |
05 |
maxMsgSize | Device-dependent |
06 |
pinUvAuthProtocols | [1, 2] |
07 |
maxCredentialCountInList | 16 |
08 |
maxCredentialIDLength | 70 |
09 |
transports | nfc, usb |
0A |
algorithms | See Section 4 |
0B |
maxSerializedLargeBlobArray | 4096 |
0F |
maxCredBlobLength | 32 |
16 |
attestationFormats | packed |
Earlier firmware versions report a subset: firmware 1.x lists versions FIDO_2_0 and U2F_V2, the hmac-secret extension, PIN protocol 1, and the rk and clientPin options. Firmware 2.0.0 adds FIDO_2_1, PIN protocol 2, the credProtect, credBlob, and largeBlobKey extensions, and the credMgmt, largeBlobs, pinUvAuthToken, and makeCredUvNotRqd options.
| Algorithm | COSE alg | Availability |
|---|---|---|
| ES256 (ECDSA over NIST P-256 with SHA-256) | -7 |
All firmware versions |
| EdDSA (Ed25519) | -8 |
All firmware versions |
| SM2 | -48 |
3.0.0+ |
The SM2 algorithm and curve identifiers are vendor-configurable through the Admin applet (instructions 11h / 12h). On firmware 3.0.x SM2 is disabled by default and only appears in the algorithms list after it has been enabled; the default algorithm ID is -48.
The U2F commands use CLA = 00: Register (INS = 01), Authenticate (INS = 02, P1 = 03 to enforce user presence or P1 = 07 for check-only), and Version (INS = 03, returns U2F_V2). U2F credentials are ES256 key handles compatible with CTAP2 non-discoverable credentials.
Firmware version 3.0.0 does not support U2F; firmware 3.0.2 and later restore it.
Discoverable credentials (resident keys) are supported on all firmware versions. CanoKey can store up to 64 discoverable credentials.
No PIN is set by default. PIN protocols 1 and 2 are supported (protocol 2 from firmware 2.0.0). The PIN retry counter is 8. authenticatorClientPIN supports the sub-commands defined by the implemented CTAP versions, including permission-based pinUvAuthTokens (getPinUvAuthTokenUsingPinWithPermissions) from firmware 2.0.0.
Attestation uses the packed format with the device key and certificate; the attestation key and certificate can be provisioned through the Admin applet (see the Admin Applet documentation).