Seguridad Moderna para Android Developers (parte 4)

Modern Security in Android a fast guide to be safe

Dinorah Tovar
Droid LATAM
4 min readOct 29, 2020

--

Este post está relacionado con mi última plática “Modern Security for Android Developers”.

Esta es la lista de blogs que tendrá el serial:

Terminamos el overview de encriptación en Android, y es momento de hablar sobre biométricos y cómo funcionan, al igual de cómo puedes tomar ventaja sobre ellos.

En Android 6.0 la privacidad se volvió un parte aguas para los desarrolladores pero también para los proveedores de dispositivos, por que en esta versión Google introdujo una guía estandarizada para los proveedores, enfocados principalmente en los biométricos y en una forma de estandarizarlos de manera sencilla.

Los teléfonos han evolucionado y ahora Android incluye autenticación biométrica en base a huellas digitales y faciales. Android puede ser personalizado, para aceptar otras formas como por ejemplo, iris. Dentro del código, Android tiene una clase con la que podemos implementar autenticación biométrica llamada BiometricPrompt que incluye, fingerprint y cara, sin embargo, Google tiene que validar que la implementación arquitectónica del hardware cumpla ciertas especificaciones de seguridad para que se pueda unir a esta clase, principalmente debe de contener una arquitectura segura, y no me refiero al código solamente, si no al hardware también, es decir que la data biométrica debe de ser traicionada por un canal seguro que garantiza que si el Kernel o la plataforma es comprometida la data pura del biométrico no será distribuida o accesible después de haber perdido el Kernel, a su vez, esta data no puede ser inyectada a otro dispositivo o el canal seguro no puede ser interceptado en ningún caso.
Google cuenta con un conjunto de métricas llamadas spoofability measures que miden principalmente otras tres métricas y juntas miden la resistencia que tiene un biométrico al ataque de un profesional, esto se conoce como Spoof Acceptance Rate Guide (SAR) e incluye:

  • False Accept Rate (FAR): Mide que tan seguido un modelo erróneamente acepta un input erróneo de manera aleatoria
  • Imposter Accept Rate (IAR): Mide la posibilidad de que un biométrico acepte data que mimifica la data original, un ejemplo simple seria, que tantas veces un Imitador de algún cantante o actor con voz similar es aceptado, o incluso un par de gemelos idénticos.
  • Spoof Accept Rate (SAR): Mide la posibilidad de que un biométrico acepte data que fue ingresada con anterioridad

Después de estos test, un biométrico debe caer en alguna de estas tres categorías:

  • Strong: SAR(Spoof Accept Rate): 0–7% FAR (False accept rate): 1/50k FRR (False rejection rate): 10%
  • Weak: SAR: 7–20% FAR: 1/50k FRR: 10%
  • Convenience: SAR: >20% FAR: 1/50k FRR: 10%

Estas mediciones incluso contienen fallbacks (en horas) a la primera autenticación que se tuvo del usuario, para poder tener integración con la clase de BiometricPrompt y la posibilidad de usar KeyStore. Existe una documentación completa del falling ratio que tienen los sensores biométricos y se encuentra disponible aquí, si gustan que vaya un poco más adentro de como funcionan los sensores y las calibraciones por sistema dentro de los biométricos, por favor déjenme un mensaje al final de este post

BiometricPromp en acción

En Android 9 BiometricPrompt nos dio una nueva posibilidad de hacer el management de la clase ahora deprecada, FingerPrint Manager, sin que nosotros tuviéramos que agregar un diferente UI BiometricPrompt nos permite usar un simple UX/UI que nuestros usuarios entenderán en diferentes dispositivos y en diferentes aplicaciones haciendo una experiencia simple

Para empezar a implementar Biometric Prompt tenemos que implementar esta librería en el gradle file:

dependencies {
implementation "androidx.biometric:biometric:1.0.1"
}

Para agregar el builder de biometric prompt necesitamos:

Necesitamos agregar un nuevo listener a las acciones y el resultado del usuario que nos dará tres posibles respuestas, Success, Failure y un Error, si el usuario cae en Error Callback multiples veces entonces la autenticación del biométrico sera bloqueado para el usuario por un par de minutos para que vuelva a intentar

Si llegas a tener problemas con la implementación hay un post del increíble Sam Edwards (Sam Edwards) en su blog

Agregando biométricos a tu encriptación

En la segunda parte de este serial, hablamos sobre la posibilidad de crear tu propio KeyPairGenerator, incluso si no estás usando Jetpack Security, puedes agregar la línea número 8 del siguiente gist para asegurarte que tus usuarios necesitan tener algún tipo de autenticación

Puedes crear una secret key que te permite utilizar biométricos en las credenciales para especificar un periodo específico de tiempo en el que la aplicación puede hacer operaciones con la data que requieres sin necesidad de re autenticarse.

Esto es todo por este post, si requieres ayuda:

Siempre estoy feliz de ayudar y puedes encontrarme en:
Medium: https://medium.com/@dinorahto
Twitter: https://twitter.com/DDinorahtovar
StackOverflow: https://stackoverflow.com/users/4613259/dinorah-tovar

Happy Coding! 👩🏻‍💻

--

--

Dinorah Tovar
Droid LATAM

Google Developer Expert on Android | Doing Kotlin | Making Software 24/7 | Kotlin Multiplatform | She/Her | Opinions are my own, and not my employer