Cryptnox Docs

Card Secrets

Secret name

Stored / scope

Short description

Notes / APDU (management)

Factory Dual Basic Group Secret

Secure Element (factory-loaded)

EC secret used for the dual generation protocol and to sign public material exchanged between paired cards. Protects the integrity of dual-gen exchange.

Mentioned as “Dual Basic Group Secret” loaded at factory; used in dual generation signatures. 

Card long-term attestation key (card private key)

Secure Element (card keypair)

Card’s permanent EC keypair (R1) used to sign the card certificate and authenticate ephemeral session keys.

Readable only as the certificate (GET MANUFACTURER CERTIFICATE / GET CARD CERTIFICATE). 

Session (ephemeral) private key

Secure Element (ephemeral per select/secure-channel)

Short-lived EC private key generated inside the card and used for ECDH in the secure channel. Never exported.

Exposed externally only as the card’s ephemeral public key inside the basic card certificate (GET CARD CERTIFICATE).

PairingKey (first pairing secret & pairing key slot)

Card secure storage (32 bytes)

The 32-byte secret used to derive AES/MAC session keys with a host for the authenticated secure channel. There is 1 pairing key slot; can be public if desired but normally secret.

Set at INIT; used in OPEN SECURE CHANNEL key derivation; can be changed with CHANGE PAIRING KEY (INS = 0xDA). Fallback: a PUK-derived pairing key (SHA256^32 of PUK) can be used (index 0xFF).

Secure Channel session keys (AESkey / MACkey)

Volatile (session only)

Keys derived from ECDH(SessionCardPriv, SessionUserPub) ∥ PairingKey ∥ SessionSalt via SHA-512, split into AES and MAC keys. Protect confidentiality/integrity of APDUs while channel open.

Derived during OPEN SECURE CHANNEL. Not persistent. See Open Secure Channel and “Encrypted APDUs”.

PIN

Card secure storage (verified state)

User numeric PIN (4–9 digits) used to authenticate the user for most protected operations. PIN verification state is session-valid until a signature or deselect/power-off.

Initialized at INIT; VERIFY PIN (INS=0x20), CHANGE PIN (INS=0x21), UNBLOCK PIN (INS=0x22). Retry counters and power-cycle rules apply. 

PUK

Card secure storage (12 bytes)

Card reset/unblock secret. Used to unblock PIN, to authorize PUK-protected changes (e.g., change pairing key, set PINless path, set pub export), and to perform RESET.

Initialized at INIT; RESET (INS=0xFD) requires PUK and pairing protection; CHANGE PAIRING KEY / SET PIN AUTH require PUK. PUK tries: unlimited but throttled with power-cycle behavior.

PUK-derived pairing fallback (SHA256^32 PUK)

Derived (fallback)

Deterministic pairing key obtained by hashing the PUK 32 times; usable as pairing key index 0xFF if pairing info lost.

Documented fallback for recovery when pairing key lost. Use OPEN SECURE CHANNEL with P1=0xFF to use this.

User private keys (off-card)

Typically off-card (e.g., device TPM / Secure Enclave)

Private keys that a user may keep in a host (e.g., OS TPM or Secure Enclave) used to perform challenge-response auth against the card (the card stores only the public key). These act as PIN replacements.

Card stores user public keys in slots (ADD USER KEY); CHECK USER KEY verifies signatures. The private keys themselves must be protected by the host.

User key credential (FIDO) credential ID & public key

Card slot (slot 3 stores FIDO credID + pubkey)

FIDO credential identifier and associated EC public key (card stores ID + public key). Used to verify WebAuthn-style signatures for PIN replacement / signing auth.

ADD USER KEY (slot=3) stores: credID length, credID, EC pubkey, PUK. CHECK USER KEY handles FIDO verification and counter.

Pinless path derivation settings

Card secure storage (derivation path + enabled flag)

The BIP32 derivation path used for PIN-less signing (e.g., m/43’/60’/1581’…); guarded by PUK to set/unset. The path enables transactions without PIN when used via the PIN-less SIGN mode.

Set via SET PINLESS PATH (INS=0xC1) with PUK. Using PIN-less SIGN (P1=0x03) uses this path.

Dual-generation partial secrets (per card)

Secure Element (temporary during dual gen)

During the dual-generation protocol two cards each generate a partial secret and exchange signed public material to end with a shared seed (SHA256(ECDH)). Each card stores its part; the final shared seed is set as the card seed.

Performed with LOAD KEY P1=0x04/0x05 sequence. Signature checks use Basic Group Secret. Dual generation yields a recoverable pair of cards that share the same seed.

Master seed — the BIP32 master secret

Secure Element (non-exportable once set)

The 256-bit master seed (BIP32 / SLIP10 seed) — the root of all derived blockchain keys. This is the ultimate secret: cannot be read or exported, only reset via PUK. All blockchain keys are deterministically derived from it.

Generated on-card (GENERATE KEY INS=0xD4) or loaded (LOAD KEY P1=0x03). Once set it cannot be changed except by RESET with PUK. This is the last/most sensitive secret.