For advanced hardware savvy users only.
Please handle with high care the Nano S while you proceed with this verification. Be aware that once opened, your device will not be refundable or exchangeable.
On the hardware side, if you want to check that the Nano S has not been tampered with, or the applications running are the official apps, here are a few things that you might need to know:
1) The Secure Element checks the full microcontroller flash at boot (this is described in our blog post). If it has been modified, you'll get a warning at boot. As an additional check, you can open the device to verify that no additional chip has been added (referring to the attached picture) and that the MCU is an stm2f042k6 (with 32 Kb flash, as a bigger flash could contain code fooling the Secure Element validation). Markings on the chip can vary but you should see the string "042K6".
Revision 1 (blue PCB, black glue):
Revision 2 (green PCB, black or transparent glue [not pictured] depending on the batch):
Revision 3 (blue PCB, black glue)
Revision 4 (blue PCB + hole)
Revision 5 (blue PCB)
Revision 5 bis (blue PCB)
2) The Secure Element itself is personalized at factory with an attestation proving that it has been created by us. You can verify it by running
pip install --no-cache-dir ledgerblue
Then on firmware 1.3.1 or below
python -m ledgerblue.checkGenuine --targetId 0x31100002
Or on firmware 1.4.1 and above
python -m ledgerblue.checkGenuine --targetId 0x31100003
The source code is available here.
3) Each individual application will display a "Non Genuine" warning if not signed when opened. A modified User Interface (as found in https://github.com/LedgerHQ/nanos-ui) will also display a warning message on boot.
4) The root of trust for the current batch is the following secp256k1 public key : 0490f5c9d15a0134bb019d2afd0bf297149738459706e7ac5be4abc350a1f818057224fce12ec9a65de18ec34d6e8c24db927835ea1692b14c32e9836a75dad609 - as checked here Genuine.py