Posted: 16 Apr. 2021 7 Tiempo de lectura

Seguridad en dispositivos móviles. Almacenar datos sensibles

Actualmente la mayoría de las personas hacen un uso intensivo de sus dispositivos inteligentes o smartphones. Dichos smartphones están repletos de aplicaciones o apps que dan cobertura a un amplio espectro de funcionalidades o necesidades de los usuarios, desde apps de redes sociales, apps de utilidades, apps bancarias o apps de salud. Es por este motivo por el que hay que prestar especial atención a cómo dichas apps utilizan los datos relacionados con el usuario y sobre todo a qué datos tienen acceso y cómo son almacenados dichos datos.

El objetivo del presente artículo es dar explicación desde un punto de vista técnico a las posibilidades existentes a día de hoy para el almacenamiento de datos en las aplicaciones móviles de las principales plataformas, Android e iOS, enfocado desde la perspectiva de la seguridad que ofrecen las distintas alternativas.

De este modo, cabe mencionar que los principales métodos que podemos utilizar a día de hoy para persistir o almacenar información en las aplicaciones móviles son los siguientes:

-        Preferencias del usuario

-        Ficheros

-        Base de datos

-        Servicios webs

La elección de una u otra alternativa depende del tipo de dato a almacenar. Entre las características a analizar debería aparecer cómo de sensible o importante será el dato almacenado, su estructura de datos, si tiene relación con otras entidades, etc. Así, por ejemplo, no es lo mismo almacenar la opción elegida por el usuario al visualizar una pantalla de “onboarding” que almacenar todo el historial clínico de un usuario de la app. Igualmente habría que prestar atención a todo lo referente al nuevo Reglamento General de Protección de Datos (GDPR) que es el nuevo reglamento a nivel europeo para el tratamiento de datos personales. La nueva GDPR en sí misma es un tema de bastante calado e importancia que no debe ser obviado, sin embargo, queda fuera del ámbito del presente artículo para no perder el foco sobre la temática principal.

Nos centraremos en la primera de las opciones, las preferencias del usuario, aunque lo explicado a continuación es extensible para el resto de las opciones.

Las preferencias de usuario normalmente son usadas para almacenar datos ligeros del usuario, tales como la elección de ciertas preferencias de la propia aplicación, nombres, etc. o incluso contraseñas. Cabe destacar que dichos datos son asociados al propio contexto de la aplicación que lo crea, por lo que sólo desde dicha aplicación podrán ser leídos o escritos. Es cierto que alguien con ciertos conocimientos técnicos (y poco éticos) puede acceder al propio contexto de las aplicaciones y obtener los datos que éstas almacenan, por lo que hay que ser muy cautos durante el diseño de la aplicación para hacer una buena elección de qué datos son almacenados en las preferencias del usuario.

Una de las alternativas para evitar el acceso y el uso malicioso de los datos que las aplicaciones almacenan es encriptar los datos antes de ser almacenados. De este modo, si por cualquier motivo los datos son expuestos, no es lo mismo acceder a los datos “en crudo” que a los datos encriptados.

Debido a la importancia de la fase de encriptar los datos, cabe revisar algunos aspectos básicos en cuanto a criptografía se refiere.

La criptografía es una técnica bastante antigua (ya se usaba en el siglo V a.C.) que consiste en cifrar un texto o información de forma que sólo el emisor y el receptor puedan descifrarlos e interpretarlos.

En dicho proceso, para cifrar (y descifrar) la información se pueden usar 2 tipos de algoritmos distintos, que son el simétrico y el asimétrico:

-        Simétrico: en este tipo de algoritmo, se usa la misma clave tanto para cifrar como para descifrar el mensaje. Previamente dicha clave ha de ser conocida tanto por el emisor como por el receptor a fin de poder establecer una comunicación segura. Uno de los algoritmos más usados dentro de este tipo es el AES (Advanced Encryption Estándar).

-        Asimétrico: En este tipo, se usan un par de claves para el proceso completo, una clave pública y una clave privada.

o   Pública: Clave que puede ser compartida ya que es usada para cifrar la información a transmitir.

o   Privada: Clave usada para descifrar la información recibida. Dicha clave no puede ser compartida y debe ser mantenida en secreto a fin de que nadie más pueda descifrar la información.

Dentro del grupo de algoritmos asimétricos, cabe destacar el algoritmo RSA (iniciales de los apellidos de sus creadores Rivest, Shamir y Adleman).

Dentro del ámbito que nos atañe, el de los dispositivos móviles, cabe apreciar que tanto el emisor como el receptor serán el mismo actor, es decir, la propia aplicación será la encargada de cifrar y descifrar los datos almacenados en su propio contexto, independientemente del tipo de algoritmo elegido para cifrar/descifrar los datos.

En este sentido, debemos hacer hincapié en cuáles son las alternativas que cada una de las principales plataformas o sistemas operativos (Android e iOS) nos ofrecen para poder almacenar los datos encriptados de forma segura, sin entrar en cuestiones específicas de implementación.

En el caso de Android, se debe hacer uso de Android Keystore. A groso modo, el Android Keystore es la herramienta que proporciona Android para generar y almacenar de forma segura las claves usadas en los algoritmos de cifrado de la información, ya sea para la fase de cifrado como para la frase de descifrado. De este modo, antes de cifrar los datos que posteriormente serán almacenados, debemos obtener la clave del keystore para poder cifrar los mismos. Igualmente, para poder descifrar los datos, será necesario acceder al keystore para obtener la clave necesaria para descifrarlos. En este sentido, cabe destacar que normalmente el acceso al keystore para obtener las claves para cifrar/descifrar los datos está asociado a las medidas de seguridad que el usuario tenga definido en el propio dispositivo, tales como pin, patrón de bloqueo o incluso capacidades biométricas (huella o reconocimiento facial), por lo que se puede afirmar que el proceso de cifrado/descifrado de datos es un proceso con un alto índice de seguridad y por extensión, también los datos cifrados que se almacenen haciendo uso de este procedimiento.

Hay que mencionar que a partir de API 23 (Android 6) existe la posibilidad de almacenar los datos de forma segura directamente en las preferencias del usuario haciendo uso de la clase EncryptedSharedPreferences, lo que abstrae de todo el proceso de generación y almacenamiento de claves específicas tratado en el apartado anterior.

Para iOS, existe la posibilidad de usar Keychain. En este caso, a diferencia de la estrategia provista en Android, podemos usar directamente Keychain para almacenar la información sensible del usuario que necesitemos, ya que la información que se almacena en Keychain será encriptada por el propio proceso que proporciona la API de Keychain. Sin embargo, también podemos usar Keychain de igual manera que se usa Keystore en Android, es decir, podemos usar Keychain para almacenar las claves que se usarán el proceso para cifrar y descifrar la información que almacenemos. De igual forma que para el caso de Android, se puede afirmar que el uso del Kaychain cumple con un nivel alto de seguridad, para acceder a los datos almacenados en Keychain será necesario la correcta autenticación del usuario en el dispositivo a través de la huella o el reconocimiento facial.

A modo de resumen, es muy importante conocer la naturaleza de los datos que almacenamos en las aplicaciones móviles y proteger éstos mismos de cualquier uso indebido. En este sentido, es de vital criticidad definir durante la fase de diseño de la aplicación una robusta y correcta estrategia para el almacenado de los datos sensibles del usuario si queremos que nuestra aplicación cumpla con los requisitos de seguridad exigidos en nuestros días.

 

Autor del artículo

Juan Manuel Trueba Márquez

Juanma Trueba inició su carrera profesional en 2007 participando activamente en proyectos tecnológicos de distinta índole. En pleno auge de los smartphones, enfocó su carrera profesional en el mundo de la movilidad, desarrollando proyectos tanto para Android como para iOS. Es un apasionado tecnológico a quien le gusta estar al día de las más novedosas tecnologías y tendencias.