We all want that no one can access our private data without our permission. For that, we use secret key (password or PIN) like in our different gadgets or in ATM card. But that secret key can be stolen and once it is, we will have no control on our data.

One other method used to provide protection to data is using our bio-metric data like fingerprint, iris or face-pattern. It has some advantage over previous one as it can’t be stolen since user can validate their identity only by being present on validation place. But here is a disadvantage that this criteria lead to increase in **False rejection rate**, i.e., a valid user is not allowed to access their data due to distortion of their bio-metric data at the time of validating.

A better approach can be used which uses both of above described idea and merge it into a single secret key. That’s why it is called two – factor authentication.

**Implementation :**

Each user is given a random seed which is only known to user. This random seed is used as a initializer for Blum Blum Shub random number generator. This uses two large prime number (p and q) as a starter and finds M=p*q. Here, X0 is the seed which is co-prime to M. Then new output is derived as Xn+1 = power(Xn, 2) mod M. We can choose those two prime by generating a lot of prime number by applying sieve of eratosthenes algorithm and choosing two random prime number from those all. We stores all those random number in matrix of order m*n (m vector each of n dimension) by taking bit parity, i.e., we stores Xn+1 mod 2.

Then, we apply Gram-Schmidt orthonormalisation process on all those vectors. It makes all the vectors orthogonal (perpendicular) to each-other as well as of One unit magnitude.

Then, we extract bio-metric feature data (For simplicity, let’s take a one dimensional random matrix) and apply discrete cosine transformation (dct) on those bio-metric data. Then we take scalar product of these dct and obtained data after applying gram-schmidt orthonormalsation. Then we compare the obtained data with preset thresh-hold value and stores it by following the criteria that if obtained data is greater than preset value, then stores 1 or 0. These stored data is called **Bio-Hash code**.

This bio hash code is our key which provides privacy or protection to our real data. It means that when we need to access our data, then all of above process occurs followed by comparing obtained data with stored bio hash code. If match found – access is granted else access denied.

The code of all these described process is on my github link https://github.com/kaditya139/Project

This article is contributed by Aditya Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.