PNGSafeBox Project para Android
Como comentamos en un artículo anterior, las dos partes del proyecto se resumen de la siguiente manera:
Personal PNGSafeBox Project (I) – Aplicación de Windows
Una aplicación desarrollada por nosotros, de forma gratuita, en VB.NET nos permitirá ofuscar los archivos gráficos que contienen la información que se debe proteger.
Esta aplicación permite el cifrado y descifrado de tales imágenes.
Personal PNGSafeBox Project (II) – Aplicación para Android
Una aplicación móvil desarrollada por nosotros, de forma gratuita, nos permitirá transportar las imágenes mencionadas con información confidencial en nuestro teléfono. Esta aplicación puede consultar estos archivos (datos) de forma segura, descifrarlos y mostrarnos la información que necesitamos en la pantalla del terminal y, por supuesto, permanecerán cifrados dentro de nuestro teléfono móvil.
Incluso si perdemos nuestro teléfono, los archivos serían difíciles de extraer ya que están empaquetados de forma nativa dentro de la aplicación e, incluso en el caso de tratarse de un móvil «rooteado», solo se obtendrían archivos gráficos ofuscados que no podrían verse a menos que se sepa exactamente el método de ofuscación utilizado y las claves triple DES.
Part II Personal PNGSafeBox para Android
General description
Con esta aplicación para dispositivo móvil podemos llevar encima información confidencial en forma de fichero gráfico (PNG).
Podemos, por ejemplo, llevar documentos tipo:
- Listado de Password
- Listado de citas/datos personales
- Tarjeta de coordenadas bancaria.
- Datos de tarjetas de pago
- Número secreto (PIN) para aplicaciones.
- Etc.
El proceso a seguir, para un máximo de cuatro imágenes, será:
- Crear imágenes (formato PNG) de los documentos a proteger.
- Cifrar con el programa PNG SafeBox para Windows comentado en una entrada anterior.
- Instalar el IDE B4A y compilar el proyecto comentado a continuación.
- Sustituir las 4 imágenes «dummy» del proyecto por las nuestras.
- Recompilar el proyecto e instalarlo en nuestro dispositivo Android.
Archivos cifrados utilizados
Usaremos como información cifrada para esta aplicación los archivos generados (ofuscados) usando el algoritmo de nuestra entrada anterior. (Proyecto PNGSafeBox para Windows)
En ese caso, obtuvimos algunos archivos PNG , pero internamente la información de esos archivos fue totalmente «mezclada» por tres transposiciones consecutivos de bytes sobre 3 posiciones aleatorias. Finalmente, la información con la información de las tres posiciones obtenidas al azar – cadena- se escribía en una de las primeras posiciones del archivo PNG (llamadas «chunks»). Una medida de seguridad más es el hecho de que la citada cadena que contiene los tres números (coordenadas de 3 transposiciones) se cifra utilizando un algoritmo 3DES.
Ahora, nuestra aplicación Android debe incluir los archivos PNG cifrados como parte de los archivos base de la aplicación y la única forma de descifrar dichos archivos se basa en un algoritmo que realiza un proceso inverso al de creación de los mismo y que utiliza las claves KEY y IV seleccionadas cuando creamos los archivos.
Nota:
Para obtener más detalles sobre el procedimiento de creación de los ficheros, podemos consultar el artículo anterior PNGSafeBox Project para Windows
El algoritmo para recuperar la imagen, en formato PNG, debe realizar estos pasos:
1) Leer la posición donde se encuentra la cadena cifrada que contiene los números N1, N2 y N3
2) Descifra la cadena (3DES) usando nuestros valores KEY e IV y obtener los tres números.
3) Transponer la matriz de bytes comenzando por el ciclo 3 (N3).
4) Repetir – dos veces más – un procedimiento similar para los números N2 y N1.
5) «Reparar» las modificaciones efectuadas en la zona de cabecera del archivo PNG.
Una vez realizados estos pasos, el archivo PNG obtenido es un archivo gráfico estándar y se puede mostrar en la pantalla de nuestro teléfono.
Software utilizado para el Proyecto Android
Como se mencionó en el artículo anterior, usamos el entorno Sharp Develop para crear nuestros archivos cifrados.
Para el desarrollo de software Android podemos utilizar el excelente IDE Basic para Android, más conocido como B4A, lo que nos permite desarrollar el programa Android en lenguaje similar a VBasic (casi VB.NET). Esto puede simplificar el desarrollo, especialmente para las personas que no están familiarizadas con la programación en lenguaje Java.
Otra ventaja de usar B4A es que podemos instalar la versión de evaluación y desarrollar (realmente compilar) nuestra aplicación. Todo lo que necesitamos es descargar la versión de su página (https://www.b4x.com/b4a.html) e instalarla. Todas las instrucciones aparecen muy claras en la página de Anywhere Software .
Nota:
Para crear la aplicación de Android debemos obtener primero las cuatro imágenes cifradas utilizando el programa explicado en la entrada anterior.
Debemos tener en cuenta que estos archivos fueron cifrados internamente por el programa usando algunas contraseñas personales ==> 3DES Key y 3DES IV. En ambos casos, podemos usar los valores predeterminados (programa demo) o seleccionar un valor personal.
Una vez que tenemos estos 4 archivos (codificados), necesitamos:
• Descargar el IDE B4A
• Descargar los archivos de proyecto (PNGSafeBox Project para Android)
• Descargue las bibliotecas adicionales para usar en el Proyecto.
• Reemplazar los 4 archivos «dummy» PNG que existen en Project (carpeta Files) por nuestras imágenes.
• Es importante mantener exactamente el nombre de los archivo PNG (draw0x.png), donde x es un número de 1 a 4.
• Compilar el proyecto y copiar a nuestro teléfono Android.
El directorio de archivos deberá contener estos archivos:
¡ Consejo !
Antes de modificar los archivos del Proyecto original podemos intentar compilar y probar el proceso completo de instalación para dispositivo Android. En este caso, se instalarán 4 imágenes «dummy» y el código de acceso es 1234567+
Una vez probado, debemos sustituir las 4 imágenes por nuestras imágenes cifradas, volver a compilar e instalar la aplicación en el teléfono. En este caso, el código de acceso será nuestro código personal, el mismo que se utilizó para cifrar imágenes previamente en el programa de Windows.
En los enlaces al final de este artículo, podemos descargar el Proyecto B4A, listo para compilar e instalar en el dispositivo Android, así como algunas bibliotecas adicionales utilizadas para el proyecto.
Notas sobre el código del programa
El programa ha sido desarrollado para ser autoexplicativo (contiene muchos comentarios) pero preferimos explicar aquí algunos de sus aspectos más destacados.
Las variables generales se declaran en Sub Globals. Algunas variables importantes son
my_3DES_IV
my_3DES_key
Estas dos variables se utilizan para el proceso de descifrado TripleDES. El valor de 3DES Key se declara en el programa y debe coincidir con el valor utilizado en el programa Windows. En nuestro programa de ejemplo, este valor es
Private my_3DES_key As String = «TheKey1234567890»
En cuanto al segundo parámetro 3DES (Vector de inicialización) usamos un valor «ficticio» como inicialización de la variable, pero este se tecleará despues en la aplicación e, igualmente, debe coincidir con el valor utilizado para el cifrado de los archivos con el programa Windows.
Nota:
En el código de ejemplo (tanto en el programa de Windows como en la aplicación de Android) hemos utilizado los siguientes valores, pero es altamente recomendable seleccionar nuevos valores (personales) para obtener el máximo de seguridad y privacidad.
3DES_IV = «1234567+«
3DES_key = «TheKey1234567890«
Otra posibilidad más sencilla, debido a su menor longitud, es seleccionar tan solo un nuevo valor para el I.V. (3DES_IV). Este valor es fácilmente seleccionable en el programa de Windows y debe escribirse el mismo valor en la aplicación Android. El valor para Key (3DES_key) se declara en el código antes de compilar e instalar el programa en nuestro dispositivo.
El ordinograma del programa nos muestra algunos detalles con respecto a algunas subrutinas.
La primera rutina que ejecuta el programa es «Initialization» que, como su nombre indica, realizará ciertas inicializaciones básicas. Una vez hecho esto, se muestra la pantalla inicial y el control del programa pasa al botón «OK«, que valida el código de ocho caracteres que debemos teclear. Este código corresponde al Vector de inicialización (IV) y su valor es «1234567+» solo para el programa de demostración. Cuando sustituimos los cuatro archivos cifrados PNG por los nuestros, debemos usar nuestro valor IV.
La rutina Check_IV( ) debe validar el código introducido. Este código debe tener una longitud de 8 caracteres y – lo mismo que ocurre en el programa de Windows – estos deben pertenecer a la tabla de caracteres de Base64.
En caso de que alguno de los controles de validación no fuera exitoso aparecerá un mensaje de advertencia que indicará «Wrong Key» y el usuario deberá teclear nuevamente el código.
Nota:
Este código coincide con el valor de I.V. utilizado para el descifrado 3DES de la cadena de texto que contiene los 3 números (posiciones) donde se encuentran las coordenadas de la matrices de transposición.
Una vez que hemos introducido el código correcto, se muestra una nueva pantalla donde podemos presionar cualquiera de los cuatro botones disponibles.
Ahora, tras presionar cualquiera de los botones disponibles, se llama a una nueva rutina: Decode(X), donde X hace referencia al nombre del archivo gráfico a descifrar. Es decir. cuando se presiona el botón 4 (Docs 4), el programa ejecuta la rutina para cargar la imagen «draw04.png»en la pantalla.
La imagen se copia previamente en un directorio de caché interno y luego se carga en la pantalla. Es importante tener en cuenta que la imagen «decodificada» solo está disponible en la pantalla e, inmediatamente después de la carga, la imagen utilizada se elimina de cualquier directorio interno (rutina MrProper).
La principal característica de seguridad de nuestra aplicación se basa en el hecho de que las imágenes codificadas (ofuscadas) forman parte del conjunto de archivos de la aplicación, pero toda la manipulación, copia, etc. se elimina de forma inmediata de los directorios del dispositivo.
La activación de una variable (setup_DEBUG = True) puede ayudarnos a mostrar mensajes más específicos en ciertos eventos del programa.
Instalación del IDE B4A y las bibliotecas adicionales
Las instrucciones para instalar el IDE están descritas en la página Anywhere. Básicamente son:
• Instalar Java JDK
• Instalar el SDK de Android
• Instalar el programa B4A.
• Configurar las rutas del IDE B4A
Cuando el IDE esté instalado y ejecutándose, podemos verificarlo.
Para compilar nuestro proyecto (PNG SafeBox) debemos instalar algunas bibliotecas adicionales.
Este será el aspecto del administrador de bibliotecas de B4A cuando las bibliotecas estén instaladas y activadas:
Instalación de la aplicación en el dispositivo Android
Para instalar la aplicación en nuestro dispositivo (teléfono), debemos habilitar la opción de instalar aplicaciones desde otras fuentes que no sean Play Store. Por ejemplo, en versiones Android 4.0 o superiores, debe ir a Configuración, desplácese hacia abajo a Seguridad y seleccione Fuentes desconocidas. En dispositivos que ejecutan una versión anterior de Android, vaya a Configuración, abra la opción Aplicaciones, seleccione Fuentes desconocidas y haga clic en Aceptar en la alerta emergente.
Queda claro que está es una aplicación totalmente desarrollado por nosotros y bajo nuestro total control, por lo cual su instalación no representa un riesgo para nuestro dispositivo. En cualquier caso, una vez finalizada la instalación, aconsejamos volver a activar la medida de seguridad antes desactivada.
La instalación de la app. puede hacerse:
– Directamente desde el IDE B4A comunicándose vía WiFi (B4A-Bridge app.)
– Copiando el archivo .apk generado (en la carpeta Objects) a nuestro teléfono y ejecutándolo.
La aplicación se instalará y, como una prueba adicional de confianza, podemos verificar que la misma no solicita ningún permiso adicional para acceder a nada. (Algunas otras aplicaciones suelen requerir permisos para acceder a la cámara, SD, enlaces, contactos, etc.)
Descarga de Software
PNGSafeBox_Android Proyecto (Main) … Proyecto PNGSafeBox_Android
PNGSafeBox_Android (Librarías extra) … PNGSafeBox_Android (Librarías extra)
PNGSafeBox_Document download (English) … PNGSafeBox_Document download
PNGSafeBox_Descarga de documentación (Español) … PNGSafeBox_Descarga de documentación