Take the 2-minute tour ×
Information Security Stack Exchange is a question and answer site for Information security professionals. It's 100% free, no registration required.

I've been considering the security of the iPhone 5S fingerprint feature. My main concern is, not that someone could replicate my fingerprint in the physical world and bypass the phone, however that someone could reconstruct my fingerprint based on the digital signature that is stored in the phone.

Is the fingerprint stored as a one-way hash (or equivalent)? How realistic would the possibility of reverse engineering it be to create the original signature?

I imagine a rainbow table for a set of fingerprint hash signatures would be next to impossible with today's computing power.

share|improve this question

migrated from programmers.stackexchange.com Oct 9 '13 at 20:54

This question came from our site for professional programmers interested in conceptual questions about software development.

2 Answers 2

Fingerprints cannot be hashed. Well, you can hash any sequence of bits, but that would not be interesting at all. Fingerprint readers, like all biometric applications, make physical measures which are never exactly reproducible. Instead, the reader must detect the positions of some "characteristic points" on the finger image (where ridges meet, mostly), and then look for a match with fingerprints recorded in the phone. The match is never exact, due to the limited precision of the measure and unavoidable threshold effects.

Bottom-line is that the phone necessarily stores the information about the locations of the "characteristic points" in a reversible way, not as a hash. This may not be the complete finger image, but it would be enough to design a fake finger which would fool your iPhone.

Now that should not be that much a concern. The iPhone may contain some information about your fingerprints, but its case is also covered with a lot of accurate copies of the same fingerprints, simply because you hold the phone with your hands. If someone steals your phone, then he can have your fingerprints without even bothering to power up the phone.

More generally, you leave your fingerprints everywhere, e.g. on the knob of every door that you go through. Your fingerprints cannot be considered secret (correspondingly, their use for unlocking a computer or a phone has always seemed to be a rather poor idea to me, at least from the security point of view).

share|improve this answer
    
Or put another way, you could cryptographically hash fingerprint minutiae but reliable reduction, encoding and reproduction of minutiae is so fuzzy, you would be hashing ten of thousands of possible permutations. Not exactly space efficient. –  LateralFractal Oct 9 '13 at 23:30

Not using a cryptographic hash - no.

But you could use a Fuzzy Hash or Locality-sensitive Hashing. Fuzzy hashes are different from normal hashes in that they allow similar content to cluster together in the hash collision space*.

Typically one-way means you can not infer what was hashed - but with fuzzy hashes, if you know a similar file (fingerprint image) that matches the hash (collides) then you know what generally was being hashed.

Whether any functional one-way property can exist for a fuzzy hash depends on whether the attacker has to resort to brute force guessing of inputs to find a matching fuzzy hash. This is called pre-image resistance.

Consider that many unique fingerprints exist, at least as many as the current population of earth (~233) and that a fingerprint fuzzy hash exists that collapses reliably (a very tall order) down to this collision space or larger. You want attackers to have to brute force across 233 entries instead of simply invert the hash.

If such a fuzzy hash existed, you could protect against straight-up inversion by passing the hash through a secondary cryptographic hash. Providing the fuzzy hash collapsed reliably and consistently in the first place, you will lose no matching accuracy after rehashing against a cryptographic hash with a much larger collision space. So good luck knowing what the interim fuzzy hash was, providing that secondary hashing appended a random salt.

The fuzzy component makes it a non-cryptographic one-way hash as the "fuzziness" of the image matches contradicts the property of strong collision resistance.

fuzz() = Mythical_perfectly_consistent_fuzzy_hash_function_for_fingerprints();
salt = application's public random salt
hash_result = SHA-512(salt, fuzz(fingerprint.input))

* At this point, all the cryptographers in the room should scream cold-blooded murder and pull out their Uzis :-)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.