Sunday, June 18, 2017

Android Fingerprint API

Saat ini sudah banyak smartphone android yang di lengkapi dengan fitur fingerprint scanner. Google sendiri menyediakan API untuk mengakses perangkat fingerprint scanner sejak android 6.0 (Marshmallo) yang di release sejak tahun 2015.

Fingerprint ini merupakan suatu data unik untuk setiap orang di dunia, tetapi kenapa tidak ada yang menggunakannya sebagai suatu metode login pada social media atau e-mail.

How it work

Kita akan bahas mengenai cara kerja dari perangkat fingerprint scanner terlebih dahulu. Seorang lead engineer google pernah membuat sebuah Q&A di Reddit[1] dan memberikan penjelasan,
"Fingerprint features are securely encrypted on the device, and processed in the secure TrustZone protected area of memory. The Android 6.0 fingerprint APIs do not provide any access to the fingerprint material to apps. Fingerprint features never leave the device and are not shared with Google (so for example if you setup a new phone, you need to re-enroll your fingers)."
Dan pihak google berstatement dalam Marshmallow Compatibility Definition Document (CDD)[1], bahwa OEM harus mengimplementasi sebuah hardware-backed keystore, dan melakukan proses validasi fingerprint dalam Trusted Execution Environment (TEE).

Dari beberapa penjelasan tersebut bisa kita simpulkan beberapa point penting, yaitu:
1. API Fingerprint tidak bisa memberikan kita data dari fingerprint yang di scan.
2. Data fingerprint tidak pernah meninggalkan perangkat smartphone.
3. Data fingerprint dan proses pencocokan/validasi dilakukan pada bagian khusus seperti Trusted Execution Environment (TEE).

Dari poin-poin di atas itu memberikan pemahaman bahwa API Fingerprint Android hanya bisa kita gunakan untuk melakukan validasi apakah pengguna nya adalah pemilik smartphone tersebut.

Source Code

Untuk bisa mengakses Fingerprint Authentication kita menggunakan class FingerprintManager. FingerprintManager memerlukan akses ke perangkat fingerprint scanner smartphone, jadi kita perlu manmbahkan permission-nya pada AndroidManifest.xml.

 
<uses-permission android:name="android.permission.USE_FINGERPRINT" />


FingerprintManager memiliki AuthenticationCallback yang bisa kita extend, dan memiliki beberapa method abstract seperti onAuthenticationError, onAuthenticationSucceeded, onAuthenticationFailed dan sebagainya yang bisa di override sesuai action yang diinginkan.


Fingerprint scanner akan mengirimkan data yg baru diinput/scan ke bagian TEE yang selanjutnya akan melakukan proses matching/validasi dengan data fingerprint yang sudah di daftarkan ke perangkat smartphone.
Result yg didapatkan dari hasil matching akan diolah oleh FingerprintManager dan akan mentrigger method abstract onAuthenticationError, onAuthenticationFailed, atau onAuthenticationSucceeded.

Source code lengkap bisa diakses disini (FingerprintDialog).



reference
[1] https://itsecuritything.com/google-nexus-6p-security-teardown/
[2] https://developer.android.com/about/versions/marshmallow/android-6.0.html#fingerprint-authentication

No comments:

Post a Comment