I recently learnt that the new German identity card (or nPA for neuer Personalausweis has security, privacy and usability problems. This was brought to my attention during a number of discussions with experts, as well as a recent publication by a group of researcher from Frauenhofer SIT. The findings have been verified against the official documentation. The issues concern the eID application on the card that is to be used for authentication on the Internet (and not the electronic passport functionality that is also present on the same card).
The eID application on the card supports, among other things, the following three functions when accessing an on-line service.
When the eID application is used, first a secure channel is set up
between the smart card and the server. Chip authentication is based on
a private key that is stored on the card. For privacy reasons, this
key is shared with a batch of other cards. I am told the size of the
batch is 500 (but I have been unable to verify this number)
1.5 million cards. Sharing a key is necessary, because otherwise a
particular card could be traced using the corresponding public key
that is transmitted to the terminal at the start of the chip
authentication phase.
Security of the authentication feature of the eID application is not very strong, because the data provided by the card (e.g. cardholder name) is not signed. (Note that in the passport application on the same card, this data is signed.) Instead, it is assumed that by virtue of the secure channel between the card and the server and the fact that authenticity of the chip is verified through chip authentication, the card will reliably deliver the correct data to the server. This means that if the private key of a single key used for chip authentication is compromised, an attacker can create a card that can send arbitrary data that will be accepted by the server at face value. As a consequence, the attacker can impersonate an arbitrary person.
Privacy protection offered by sharing the same chip authentication key with a batch of cards appears to be ok. If the batch was small (which initially appeared to be the case), there are two options:
So this is a case of 'damned if you and damned if you don't'...
Finally, the restricted identification feature is designed in such a way that it is not very practical. The general idea of such a feature is to generate a pseudonym based on the identity of the user as well as a sector specific public value shared among all services within this sector. Typically, a hash-function is used for this to ensure that the resulting pseudonym cannot be used to retrieve the underlying user identity. With such a setup, the pseudonyms for the same user at different sectors cannot be linked to each other (but the same user will always have the same pseudonym within a single sector). Unfortunately, the eID application does not use a user identifier but instead uses a secret key on the card as input to the hash function. This leads to problems when the user looses the card, or if the card needs to be replaced. In that case, the secret key is no longer available, and the user will get a new card with a new key. Then the restricted identification feature will generate a different pseudonym for this user based on this new key. As a results, all data associated with the old pseudonym are no longer accessible to the user, as he cannot prove that he 'is' the owner of that old pseudonym. [Note added 10-05-2012: part 3 of BSI TR-03110 defines generation of this key to be out of scope of the specification. It does however suggest to use a key stored by a third party to generate this key (which would solve this issue). However, German law does not allow that a German citizin is assigned a unique lifelong number, which such a key would in fact be...]