I wrote some code for authenticating to and reading from Mifare Classic cards on Android. It works perfectly on the first generation of Nexus 7 (2012) as well as on Samsung Galaxy Nexus I9250. However, it fails on a Samsung S3 Mini. The devices detects the card correctly as MifareClassic and I can use the connect() method of the MifareClassic object to connect to the tag, but it can't authenticate using either of the two available methods authenticateSectorWithKeyA or authenticateSectorWithKeyB. However, with the same code, authenticating and reading the data works correctly if using any of the other devices mentioned above!
My questions are:
- Is the authentication/encryption of the communication a hardware operation? Or is that done in software?
- Why can the device connect to the tag but not authenticate to it?