Falco20019 / libamiibo

C# library for working with amiibos
MIT License
41 stars 17 forks source link

Why the ECSDA signature? #5

Closed rob-brown closed 3 years ago

rob-brown commented 3 years ago

For my own curiosity, why is there a 32-byte ECDSA signature? NTAG 215 chips only hold 540 bytes. I've done some digging and I can't find any other Amiibo tools that create 572-byte files. I've seen several accept 572-byte files, presumably to handle files created using this library.

Falco20019 commented 3 years ago

To completely verify or emulate an amiibo, you need to match the correct encrypted payload (540 bytes) AND have the correct signature for the tag (32 bytes). Nintendo is not checking the tag on any console. So emulating the data by just using the payload is done by most emulation devices.

Nintendo could easily fix fake amiibos by requesting the signature and validating it against the NTAG public key. I am wondering why Nintendo is not doing it since this is even in the NTAGs application best practice documents. This would break most of the existing emulation devices and only leave emulations that use 572 byte dumps or re-encrypted data written to real NTAGs. The first one would be somewhat legal as no encryption was broken and data is only repeated without tampering. The later one might be considered more illegal since it needs the crypto keys from Nintendo which might be considered Nintendo‘s intellectual property.

I saw that a couple years ago during my research as missing piece and therefore added the signature to the dump format. I just felt that this was missing to have a real valid dump, even if there is no necessity for it for validating or reading the data or even emulation at the moment.

rob-brown commented 3 years ago

Thanks for the info.