How do I know my Cypherock X1 is genuine?

Before shipping each device is provisioned with a unique set of private-public keys for both device and card authentication as well as for end-to-end encrypted NFC communication between the device and the card. Authentication is performed by verification of signatures generated by the private key in the hardware. Signature verification is performed by the server using the corresponding public key.
Secure device authentication is carried out in the following steps -
  • Unique key pairs are generated via a common seed (see key derivation paths here)
  • The device includes a secure chip ATECC608A for storing private keys and sensitive data. ATECC608A and the MCU share an IO_PROTECTION key which is used to read/write data in encrypted form.
  • After provisioning is complete, the sensitive data in ATECC is locked and prohibited for read.
  • During the provisioning process, the private keys and NFC pairing keys are stored in the device, and its public key along with the device serial number is stored on the server for authentication at a later stage.
  • During the authentication process, the private key is used to generate signatures on serial numbers and random data, which is then verified at the server using the corresponding public key
  • Change in hardware i.e. the MCU or ATECC during transport to the user can be detected as the shared key won't match.
  • On both MCU and ATECC, the IO_PROTECTION key is read disabled so cannot be used to create clones.
To read more about the authentication process, refer to the device provision documentation on the Cypherock Github.
Secure card authentication is carried out in the following steps -
  1. 1.
    Each set of Cypherock X1 is provisioned with a unique set of public and private keys for device authentication and card authentication. These unique pairs are generated from a common seed via different derivation paths.
  2. 2.
    Therefore before shipping, each set of X1 cards is provisioned with a unique set of private keys for NFC card authentication, along with its derivation path. Correspondingly, the device is provisioned with the xpubs for verification of X1 cards.
  3. 3.
    During the card authentication, the X1 card signs a random message using its private key, and shares the signature along with the derivation path to the device. Since the device is provisioned with xpubs, it is able to generate the public key corresponding to the private key provisioned on the X1 card and verifies the signature of the random message.
  4. 4.
    Only if the message was signed correctly, the card is understood to be authenticated by the X1 device.