TFG Carlos Pliego Garcia PDF
TFG Carlos Pliego Garcia PDF
TFG Carlos Pliego Garcia PDF
DEPARTAMENTO DE INFORMÁTICA
GRADO EN INGENIERÍA INFORMÁTICA
Agradecimientos
Antes de nada, he de agradecer a mis padres su paciencia conmigo durante toda mi
vida. Mención especial a mi madre, que me ha ayudado a transformar mis ideas de
diseño en interfaces para la aplicación y quien, a voz de "que te pilla el toro", ha
conseguido que desarrolle el proyecto a tiempo.
A mi hermana Marta, por todos los chistes que nunca logró entender a tiempo.
A mi hermana Piru, por las competiciones por ver quién podía poner la música más
alta.
A mi tutor Antonio, por nuestras discusiones a la hora de elegir el proyecto y por sus
consejos y soporte, los cuáles, han sido clave para realizar algo que me parece "un
muy buen trabajo".
A mis perras Nana y Pecas, por sus incansables carreras por los pasillos y lametones
en la mano.
A los frikis Sergio, Quique, Iñaki y Nico. Sin ellos, las clases habrían sido más
productivas pero mucho menos divertidas. A Sergio por su infinitos detalles y su
inestimable ayuda en aquellos momentos en los que le necesitaba. A Quique por sus
sesiones de música japonesa que aún resuenan en mi cabeza, por todos esos gustos
extraños que me ha pegado, y por su muy larga barba. A Iñaki por sus adjetivos
inventados como "mej" y "crui", y por esa música "podrida" que tanto nos gusta. A
Nico por su cabeza y por esas prácticas que entregábamos a un minuto del límite.
A mi profesora Inmaculada Puebla, por sus elogios hacia mi manera de presentar los
trabajos.
Y, por último, a mi abuelo Carlos por haber creído en mí y haberme enseñado a Don
McLean, cuya música me ha acompañado de la mano durante todo el desarrollo del
proyecto.
2
Trabajo de Fin de Grado Carlos Pliego García
Resumen
En este proyecto se propone el desarrollo de una aplicación para dispositivos móviles
Android que permita generar y leer códigos de barras bidimensionales QR cuya
información esté cifrada de forma que sólo pueda acceder a ella aquella persona a
quién va dirigida. Además estos códigos podrán enviarse a otras aplicaciones
instaladas en el dispositivo móvil.
El sistema que se plantea está cualificado para generar y leer códigos QR simples que
cualquier usuario con cualquier otra aplicación destinada a ello puede leer. Además,
también puede generar códigos a partir de un mensaje que se ha cifrado previamente.
De esta forma, la información incluida en ellos sólo podrá ser leída si se descifra
antes.
Este sistema puede suponer un gran empujón en el uso de los códigos QR; ya que, a
pesar de ser muy utilizados, otorgarles seguridad puede ser algo muy revolucionario.
Con esta aplicación se pueden generar códigos que estén dirigidos únicamente a
ciertas personas.
Además, una carencia de la gran mayoría de los programas que tratan códigos QR
para dispositivos móviles es que sólo permiten leerlos y no generarlos. Incluso, sólo
permiten leerlos a través de la cámara, mientras que esta aplicación permite leer los
códigos que se encuentren en imágenes almacenadas en la memoria del dispositivo
móvil.
Como el sistema permite, además, enviar los códigos generados a más aplicaciones
instaladas en el terminal, es muy fácil distribuirlos utilizando aplicaciones de
naturaleza de red social como Twitter o Facebook, o aplicaciones de mensajería
instantánea como Whatsapp o Line. Incluso permite utilizar servicios de
almacenamiento en la nube como Google Drive o Dropbox para guardar los códigos.
3
Trabajo de Fin de Grado Carlos Pliego García
Abstract
This project proposes the development of an application for Android mobile devices
that allows to generate and to read bidimensional QR barcodes whose information is
ciphered so it only could be readed by the intended person. Furthermore, these codes
could be sent to other applications installed on the mobile device.
Mostly of the messaging applications don't have the necessary security and privacy
measures to enable users to exchange sensitive information without suffering some
risk.
The system that arises is qualified to generate and read simple QR codes that any
user with any other application intended for that purpose may read. Additionally, you
can generate codes from a message that was previously ciphered. In this way, the
information included in them can only be read if it's decrypted before.
When you choose to encrypt the information, the application uses the most secured
cryptographic algorithms. This decision makes the application one of the best options
when you want to deal with highly sensitive information.
This system can be a big breakthrough in the use of QR codes; because, despite being
widely used, security grant can be very revolutionary. With this application you can
generate codes that are intended only for certain people.
Additionally, a lack of the majority of programs form mobile devices that deal with QR
codes is that they only allow reading and don't generating them. Even, they just allow
to read the codes through the built-in camera while this application allow to read the
codes that are in images stored on the memory of the mobile device.
As the system also allows sending the generated codes to more applications installed
on the terminal, you can easily distribute them using social network applications like
Twitter or Facebook, or instant messaging applications such as Whatsapp or Line.
Even allows you to use storage services in the cloud like Google Drive or Dropbox to
store the codes.
4
Trabajo de Fin de Grado Carlos Pliego García
ÍNDICE
ÍNDICE DE ILUSTRACIONES ............................................................................................. 9
ÍNDICE DE TABLAS ......................................................................................................... 12
1 INTRODUCCIÓN ...................................................................................................... 16
1.1 CONTEXTO ACTUAL Y OBJETIVO ................................................................... 16
2 ESTADO DEL ARTE .................................................................................................. 17
2.1 SMARTPHONE ................................................................................................. 17
2.2 ANDROID .......................................................................................................... 17
2.3 CÓDIGO QR ...................................................................................................... 19
2.4 SEGURIDAD...................................................................................................... 20
2.4.1 CONCEPTO GENERAL ............................................................................... 20
2.4.2 CONCEPTOS IMPORTANTES ................................................................... 21
3 MARCO REGULADOR .............................................................................................. 24
3.1 LEY GENERAL DE LAS TELECOMUNICACIONES ............................................. 24
3.2 LEY ORGÁNICA DE PROTECCIÓN DE DATOS .................................................. 25
4 ANÁLISIS ................................................................................................................. 26
4.1 DEFINICIÓN DEL SISTEMA .............................................................................. 26
4.1.1 ALCANCE DEL SISTEMA ........................................................................... 26
4.1.2 RESTRICCIONES GENERALES .................................................................. 27
4.1.3 ENTORNO OPERACIONAL ........................................................................ 27
4.2 ENTORNO DE DESARROLLO ............................................................................ 28
4.2.1 EQUIPOS ................................................................................................... 28
4.2.2 LENGUAJE DE PROGRAMACIÓN .............................................................. 28
4.2.3 ENTORNO DE DESARROLLO .................................................................... 28
4.3 REQUISITOS DE USUARIO ............................................................................... 30
4.3.1 REQUISITOS DE CAPACIDAD ................................................................... 31
4.3.2 REQUISITOS DE RESTRICCIÓN ................................................................ 38
4.4 CASOS DE USO ................................................................................................ 41
4.4.1 CASO DE USO GENERAL........................................................................... 42
4.4.2 CASOS DE USO DEL MÓDULO GENERAR ................................................ 45
4.4.3 CASOS DE USO DEL MÓDULO LEER ........................................................ 49
4.5 REQUISITOS DE SOFTWARE ............................................................................ 54
4.5.1 REQUISITOS FUNCIONALES .................................................................... 55
4.5.2 REQUISITOS DE OPERACIÓN ................................................................... 61
4.5.3 REQUISITOS DE INTERFAZ ...................................................................... 64
5
Trabajo de Fin de Grado Carlos Pliego García
6
Trabajo de Fin de Grado Carlos Pliego García
7
Trabajo de Fin de Grado Carlos Pliego García
8
Trabajo de Fin de Grado Carlos Pliego García
ÍNDICE DE ILUSTRACIONES
Ilustración 1: Estructura del SO Android ....................................................................... 18
Ilustración 2: Ejemplo de Código QR ............................................................................. 19
Ilustración 3: Diagrama del algoritmo de cifrado AES .................................................. 22
Ilustración 4: Alfabeto utilizado en el algoritmo Base64 .............................................. 23
Ilustración 5: Caso de uso principal .............................................................................. 42
Ilustración 6: Casos de uso para el módulo de generación .......................................... 45
Ilustración 7: Casos de uso para el módulo de lectura ................................................. 50
Ilustración 8: Diagrama de clases ................................................................................. 72
Ilustración 9: Diagrama de la arquitectura del sistema ................................................ 74
Ilustración 10: Diagrama de la estructura del módulo de generación QR .................... 78
Ilustración 11: Etapas de transformación de un mensaje para generar un código QR 79
Ilustración 12: Diagrama de la estructura del módulo de generación QRypt ............... 82
Ilustración 13: Diagrama general de las etapas del cifrado de un mensaje ................. 83
Ilustración 14: Diagrama general de la derivación de la contraseña y del cifrado del
mensaje .......................................................................................................................... 84
Ilustración 15: Diagrama de la estructura del módulo de lectura por cámara ............. 86
Ilustración 16: Diagrama general de las etapas del descifrado de un mensaje ........... 87
Ilustración 17: Diagrama general de la derivación de la contraseña y del descifrado del
mensaje .......................................................................................................................... 88
Ilustración 18: Diagrama de la estructura del módulo de lectura por fichero .............. 89
Ilustración 19: Paleta de colores oficial del equipo de Android .................................... 92
Ilustración 20: Ejemplo de daltonismo 1 ....................................................................... 94
Ilustración 21: Ejemplo de daltonismo 2 ....................................................................... 95
Ilustración 22: Interfaz de usuario de la pantalla principal 1 ........................................ 96
Ilustración 23: Interfaz de usuario de la pantalla principal 2 ........................................ 97
Ilustración 24: Interfaz de usuario de la pantalla de escritura del mensaje ................. 98
Ilustración 25: Interfaz de usuario de la pantalla "Mostrar y compartir el código" ...... 99
Ilustración 26: Interfaz de la pantalla de selección del tipo de cifrado ...................... 100
Ilustración 27: Interfaz de la pantalla de selección del tipo de cifrado 2 ................... 101
Ilustración 28: Interfaz de la pantalla de escritura de contraseña ............................. 102
Ilustración 29: Interfaz de la pantalla de selección de fecha ...................................... 103
Ilustración 30: Interfaz de la pantalla de selección de patrón 1 ................................. 104
Ilustración 31: Interfaz de la pantalla de selección de patrón 2 ................................. 105
Ilustración 32: Interfaz de la pantalla de selección de color 1 .................................... 106
Ilustración 33: Interfaz de la pantalla de selección de color 2 .................................... 107
Ilustración 34: Interfaz de la pantalla de cámara ........................................................ 108
Ilustración 35: Interfaz de la pantalla de "Mostrar el mensaje descifrado" ................ 109
Ilustración 36: Interfaz del menú desplegable "Compartir con" de aplicaciones de
terceros......................................................................................................................... 110
Ilustración 37: Interfaz del menú desplegable ............................................................ 111
Ilustración 38: Interfaz de la pantalla de modificación de la ruta de la carpeta de salida
...................................................................................................................................... 112
Ilustración 39: Interfaz de la pantalla de modificación del idioma ............................. 113
Ilustración 40: Interfaz de la pantalla de novedades de la versión ............................. 114
9
Trabajo de Fin de Grado Carlos Pliego García
10
Trabajo de Fin de Grado Carlos Pliego García
11
Trabajo de Fin de Grado Carlos Pliego García
ÍNDICE DE TABLAS
Tabla 1: Plantilla de requisito de usuario ...................................................................... 31
Tabla 2: RUC-01 ............................................................................................................. 31
Tabla 3: RUC-02 ............................................................................................................. 32
Tabla 4: RUC-03 ............................................................................................................. 32
Tabla 5: RUC-04 ............................................................................................................. 32
Tabla 6: RUC-05 ............................................................................................................. 32
Tabla 7: RUC-06 ............................................................................................................. 33
Tabla 8: RUC-07 ............................................................................................................. 33
Tabla 9: RUC-08 ............................................................................................................. 33
Tabla 10: RUC-09 ........................................................................................................... 33
Tabla 11: RUC-10 ........................................................................................................... 34
Tabla 12: RUC-11 ........................................................................................................... 34
Tabla 13: RUC-12 ........................................................................................................... 34
Tabla 14: RUC-13 ........................................................................................................... 34
Tabla 15: RUC-14 ........................................................................................................... 35
Tabla 16: RUC-15 ........................................................................................................... 35
Tabla 17: RUC-16 ........................................................................................................... 35
Tabla 18: RUC-17 ........................................................................................................... 35
Tabla 19: RUC-18 ........................................................................................................... 36
Tabla 20: RUC-19 ........................................................................................................... 36
Tabla 21: RUC-20 ........................................................................................................... 36
Tabla 22: RUC-21 ........................................................................................................... 36
Tabla 23: RUC-22 ........................................................................................................... 37
Tabla 24: RUC-23 ........................................................................................................... 37
Tabla 25: RUC-24 ........................................................................................................... 37
Tabla 26: RUC:25 ............................................................................................................ 37
Tabla 27: RUC-26 ........................................................................................................... 38
Tabla 28: RUR-01 ........................................................................................................... 38
Tabla 29: RUR-02 ........................................................................................................... 38
Tabla 30: RUR-03 ........................................................................................................... 38
Tabla 31: RUR-04 ........................................................................................................... 39
Tabla 32: RUR-05 ........................................................................................................... 39
Tabla 33: RUR-06 ........................................................................................................... 39
Tabla 34: RUR-07 ........................................................................................................... 39
Tabla 35: RUR-08 ........................................................................................................... 40
Tabla 36: RUR-09 ........................................................................................................... 40
Tabla 37: RUR-10 ........................................................................................................... 40
Tabla 38: Plantilla de caso de uso ................................................................................. 42
Tabla 39: CU-01 ............................................................................................................. 43
Tabla 40: CU-02 ............................................................................................................. 44
Tabla 41: CU-03 ............................................................................................................. 44
Tabla 42: CU-04 ............................................................................................................. 45
Tabla 43: CU-05 ............................................................................................................. 46
Tabla 44: CU-06 ............................................................................................................. 46
12
Trabajo de Fin de Grado Carlos Pliego García
13
Trabajo de Fin de Grado Carlos Pliego García
14
Trabajo de Fin de Grado Carlos Pliego García
15
Trabajo de Fin de Grado Carlos Pliego García
1 INTRODUCCIÓN
1.1 CONTEXTO ACTUAL Y OBJETIVO
Desde que el hombre tiene uso de razón, se han utilizado los símbolos para
exteriorizar pensamientos o ideas e, incluso, como medio de comunicación con
culturas prealfabetizadas. La principal ventaja de los símbolos es que transmiten un
mensaje o un concepto al receptor de forma rápida debido a su simplicidad
estructural que, únicamente, está definida por elemento visuales.
Existen muchos tipos de códigos de barras pero el más famoso es el EAN-128 ya que
es el usado para la logística y paquetería y es capaz de representar los 128 caracteres
de la tabla ASCII. Aun así, el EAN-128 tiene limitación de espacio y, por eso, hoy en día
se está usando cada vez más el código QR ya que, al ser un tipo de código de barras
matricial (de dos dimensiones), puede contener mucha más información sobre el
producto al que representa. [25]
A día de hoy, existen multitud de aplicaciones de terminales móviles que son capaces
de escanear y descifrar estos códigos para brindar al usuario la información que
contienen, ya sea un mensaje o un enlace a Internet pero, a pesar de estar cifrados,
todos los dispositivos son capaces de descifrarlos y obtener la información sin
ningún tipo de privacidad.
16
Trabajo de Fin de Grado Carlos Pliego García
2.1 SMARTPHONE
Los smartphones o teléfonos inteligentes son teléfonos móviles con características
más avanzadas, similares a las de un ordenador. La gran mayoría son táctiles y
pueden conectarse a Internet. Para ello utilizan tecnologías como 3G, Wi-Fi, WAP,
GPRS, EDGE, HSD, HSDPA, etc.
2.2 ANDROID
Android es un sistema operativo basado en Linux que ha sido diseñado
especialmente para terminales móviles con pantalla táctil. Comprado por Google en
2005, es el principal producto de la Open Handset Alliance. En el año 2011 pasó a ser,
con un 50,9% de cuota de mercado, el sistema operativo para terminales móviles más
vendido mundialmente y, aun a día de hoy, mantiene su liderazgo.
La estructura de este sistema operativo está compuesta por varias aplicaciones que
se ejecutan en un framework Java sobre el núcleo de las bibliotecas de Java en una
máquina virtual Dalvik con compilación en tiempo de ejecución. Las bibliotecas están
escritas en lenguaje C e incluyen:
17
Trabajo de Fin de Grado Carlos Pliego García
El núcleo del sistema operativo está programado en lenguaje C (más de 2.8 millones
de líneas de código), mientras que las librerías están en C y C++ (1.7 millones de
líneas). Sin embargo, la interfaz principal y las aplicaciones son programadas en
lenguaje Java (2.1 millones de líneas). Es por esto último por lo que existen tantos
desarrolladores programando para esta plataforma, ya que el lenguaje Java es
versátil, flexible, y fácil. [1]
Las versiones de Android hasta la fecha han sido: Apple Pie (v.1.0), Banana Bread
(v.1.1), Cupcake (v.1.5), Donut (v.1.6), Éclair (v.2.0), Froyo (v.2.2), Gingerbread (v.2.3),
Honeycomb (v.3.0), Ice Cream Sandwich (v.4.0), Jelly Bean (v.4.1). [3]
18
Trabajo de Fin de Grado Carlos Pliego García
A pesar de las ventajas para el usuario y para la empresa que vende el smartphone
con este sistema operativo, existe un gran problema para el desarrollador. Este
problema consiste en que, al existir tanta variedad de smartphones que utilizan
Android, las aplicaciones que se desarrollan tienen que ser muy versátiles para
conseguir una máxima compatibilidad y, con las diferencias de resolución de las
pantallas, las potencias de procesador tan dispares y las versiones tan distintas de
Android, es una tarea verdaderamente ardua es muy difícil conseguir esta
compatibilidad.
2.3 CÓDIGO QR
Los códigos QR (Quick Response en inglés y respuesta rápida en español) son
códigos de barras bidimensionales con la capacidad de almacenar gran cantidad de
información codificada dentro de un cuadrado. Son fácilmente reconocibles debido a
sus tres cuadrados ubicados en las esquinas (uno en cada esquina superior y otro en
esquina inferior izquierda) del cuadrado principal, que permiten detectar la posición
del código que se va a leer.
Estos códigos fueron creados por la compañía Denso Wave, subsidiaria de Toyota, en
1994. Lo que se pretendía era que el código permitiera que su contenido se pudiera
leer a alta velocidad, ya que su primer uso fue registrar repuestos en el área de
fabricación de vehículos. Estos códigos empezaron siendo muy comunes en Japón y,
a día de hoy, son muy frecuentes en el mundo entero. [2]
19
Trabajo de Fin de Grado Carlos Pliego García
En la web, existen varias aplicaciones que permiten generar los códigos QR con el
mensaje que se desee pero en el repositorio de aplicaciones de Google existen muy
pocas. Por otro lado, en este repositorio hay muchas aplicaciones que escanean
códigos QR y los descifran desde la cámara pero no existen las que los escaneen y
descifren directamente desde un archivo de imagen.
2.4 SEGURIDAD
Algunos tipos de amenazas que pueden darse por una mala seguridad son los
programas maliciosos, los intrusos o la manipulación malintencionada del terminal
(como un overclock exagerado por parte de alguien que no es propietario del
smartphone).
20
Trabajo de Fin de Grado Carlos Pliego García
Existen varias formas de evitar que alguna de estas amenazas se den en un terminal;
como, por ejemplo, la codificación de la información, los escudos de red y de
aplicaciones, los antivirus o los sistemas de respaldo remotos.
21
Trabajo de Fin de Grado Carlos Pliego García
22
Trabajo de Fin de Grado Carlos Pliego García
23
Trabajo de Fin de Grado Carlos Pliego García
3 MARCO REGULADOR
Antes de comenzar a analizar la aplicación, se han estudiado las leyes vigentes y las
normativas técnicas que atañen al proyecto. Seguidamente, se procederá a definir
cada una de estas leyes.
El primero de los puntos señala que no se incumple ninguna norma y está permitido el
cifrar todo tipo de información que se vaya a transmitir por redes de comunicaciones
electrónicas. La aplicación que se va a desarrollar va a emplear técnicas de cifrado
sobre los datos que, más tarde, pueden enviarse mediante aplicaciones de terceros
por redes de comunicaciones electrónicas. De esta forma, se puede concluir que la
aplicación asegura el secreto de las comunicaciones.
24
Trabajo de Fin de Grado Carlos Pliego García
Este punto señala que, tanto el usuario de la aplicación como el desarrollador de ella,
deben tomar medidas de seguridad para que no se vea afectada la privacidad de los
datos. Para respetar y cumplir con esta ley, se tomarán las siguientes decisiones:
Los algoritmos de cifrado que se empleen deberán ser muy seguros, de modo
que ningún ataque contra la privacidad de los datos sea viable.
La información secreta contenida en un código QRypt sólo será accesible por
el autor del mensaje y por los participantes que éste considere con tal
derecho.
Ningún sistema externo al dispositivo móvil desde donde se realice el cifrado
almacenará datos sobre el usuario. La aplicación se diseñará de tal forma que
los códigos que se generen a partir de ella, se envíen desde aplicaciones de
terceros. De esta forma, la seguridad de los datos contenidos en el código a la
hora de enviarlo no recaerá sobre la aplicación que se va a desarrollar; sino,
sobre el usuario y la aplicación que escoja para enviar los datos.
25
Trabajo de Fin de Grado Carlos Pliego García
4 ANÁLISIS
El objetivo de esta sección no es otro que el de obtener una especificación detallada
del sistema de información que se va a desarrollar. Tras esta especificación, que
establecerá la base del sistema, se detallará el diseño de éste. El análisis tratará de
comprender las necesidades de las que se precisa una resolución y conformará el
problema.
La aplicación debe ser capaz de generar y leer códigos QR. Además, deberá poder
cifrar un mensaje de forma rápida pero robusta y, posteriormente, transcribirlo a un
código QR. Este código se denominará QRypt. Después, debe adaptar este código a
una imagen para que pueda ser compartida mediante una aplicación externa de
mensajería móvil o, en su defecto, guardada en la memoria SD del teléfono.
Finalmente, debe ser capaz de escanear una imagen que contenga un código QR,
aislarlo de los demás elementos que compongan la imagen, y descifrar el mensaje
original con ayuda de una contraseña. El sistema debe implementar algoritmos
criptográficos para el cifrado del mensaje original.
26
Trabajo de Fin de Grado Carlos Pliego García
27
Trabajo de Fin de Grado Carlos Pliego García
4.2.1 EQUIPOS
Se utilizarán los siguientes dispositivos físicos para diseñar, desarrollar y probar la
aplicación:
Se ha decidido escoger este entorno de desarrollo ya que es uno de los más usado
para programar aplicaciones para el sistema operativo Android, cuenta con un
emulador virtual de dispositivo Android en el que se puede comprobar la
funcionalidad de la aplicación en diferentes tamaños de pantalla y versiones del
28
Trabajo de Fin de Grado Carlos Pliego García
29
Trabajo de Fin de Grado Carlos Pliego García
Cada requisito deberá estar definido en una tabla. Las tablas se compondrán de los
siguientes atributos:
30
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RU@-XX
Nombre:
Descripción:
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 1: Plantilla de requisito de usuario
IDENTIFICADOR: RUC-01
Nombre: Modo generar QR
Descripción: El usuario será capaz de acceder al modo
generar QR desde la pantalla principal de
la aplicación.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 2: RUC-01
31
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RUC-02
Nombre: Modo generar QRypt
Descripción: El usuario será capaz de acceder al modo
generar QRypt desde la pantalla principal
de la aplicación.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 3: RUC-02
IDENTIFICADOR: RUC-03
Nombre: Modo leer por cámara
Descripción: El usuario será capaz de acceder al modo
leer por cámara desde la pantalla
principal de la aplicación.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 4: RUC-03
IDENTIFICADOR: RUC-04
Nombre: Modo leer desde fichero
Descripción: El usuario será capaz de acceder al modo
leer desde fichero desde la pantalla
principal de la aplicación.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 5: RUC-04
IDENTIFICADOR: RUC-05
Nombre: Escoger imagen para leer
Descripción: El usuario será capaz de escoger una
imagen de la galería para descifrar el
código QR o QRypt que contenga, si es
que contiene alguno de los dos.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 6: RUC-05
32
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RUC-06
Nombre: Escribir mensaje para cifrar
Descripción: El usuario será capaz de escribir un
mensaje para poder cifrarlo o para poder
generar un código QR simple.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 7: RUC-06
IDENTIFICADOR: RUC-07
Nombre: Escribir contraseña para cifrar
Descripción: El usuario será capaz de escribir una
contraseña con la que cifrar el mensaje
para generar un código QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 8: RUC-07
IDENTIFICADOR: RUC-08
Nombre: Permitir cifrar con imei
Descripción: El usuario será capaz de cifrar un
mensaje usando el imei del terminal
como contraseña para generar un código
QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 9: RUC-08
IDENTIFICADOR: RUC-09
Nombre: Permitir cifrar con modelo
Descripción: El usuario será capaz de cifrar un
mensaje usando el modelo del terminal
como contraseña para generar un código
QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 10: RUC-09
33
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RUC-10
Nombre: Permitir cifrar con la fecha
Descripción: El usuario será capaz de cifrar un
mensaje usando una fecha como
contraseña para generar un código
QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 11: RUC-10
IDENTIFICADOR: RUC-11
Nombre: Permitir cifrar con un patrón
Descripción: El usuario será capaz de cifrar un
mensaje usando patrón semejante a los
de desbloqueo como contraseña para
generar un código QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 12: RUC-11
IDENTIFICADOR: RUC-12
Nombre: Contador de caracteres
Descripción: El usuario será capaz de ver el número de
caracteres del mensaje que está
escribiendo en tiempo real
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 13: RUC-12
IDENTIFICADOR: RUC-13
Nombre: Escoger color del código
Descripción: El usuario será capaz de escoger el color
que quiera para el código QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 14: RUC-13
34
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RUC-14
Nombre: Escoger modo de transmisión
Descripción: El usuario será capaz de escoger la
aplicación a la que quiere enviar el
código para compartirlo.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 15: RUC-14
IDENTIFICADOR: RUC-15
Nombre: Carpeta de salida
Descripción: El usuario será capaz de elegir la carpeta
en la que se guardarán las imágenes que
contengan los códigos QR y QRypt
generados.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 16: RUC-15
IDENTIFICADOR: RUC-16
Nombre: Panel de ajustes
Descripción: El usuario será capaz de cambiar los
ajustes por defecto del cifrado.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 17: RUC-16
IDENTIFICADOR: RUC-17
Nombre: Novedades de la versión
Descripción: El usuario será capaz de comprobar las
novedades que se han producido de una
versión a otra.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 18: RUC-17
35
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RUC-18
Nombre: Escribir contraseña para descifrar
Descripción: El usuario será capaz de escribir una
contraseña para descifrar un código
QRypt si éste ha sido cifrado con este
método.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 19: RUC-18
IDENTIFICADOR: RUC-19
Nombre: Mostrar mensaje descifrado
Descripción: El usuario será capaz de ver el mensaje
descifrado.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 20: RUC-19
IDENTIFICADOR: RUC-20
Nombre: Abrir URLs
Descripción: El usuario será capaz de decidir si quiere
ser redirigido cuando el mensaje
descifrado sea una URL.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 21: RUC-20
IDENTIFICADOR: RUC-21
Nombre: Navegación sencilla
Descripción: La interfaz deberá ser sencilla e intuitiva.
Se obligará al usuario a seguir los pasos
que se propongan como si fuera un
asistente.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 22: RUC-21
36
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RUC-22
Nombre: Diseño para daltónicos
Descripción: El diseño de la interfaz deberá ser
perfectamente accesible para gente con
problemas de daltonismo. Se evitará el
uso de tonos verdes y rojos.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 23: RUC-22
IDENTIFICADOR: RUC-23
Nombre: Menú compartir
Descripción: El usuario será capaz de elegir la
aplicación desde el menú "compartir"
para imágenes de Android.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 24: RUC-23
IDENTIFICADOR: RUC-24
Nombre: Escoger modo de cifrado
Descripción: El usuario será capaz elegir el modo de
cifrado que quiere para su mensaje si es
que ha elegido generar un código QRypt.
Podrá elegir entre contraseña, imei,
modelo, fecha y patrón. Además, se
podrá elegir más de una opción.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 25: RUC-24
IDENTIFICADOR: RUC-25
Nombre: Panel de control deslizable
Descripción: El usuario será capaz de acceder a un
panel de control deslizable para cambiar
los ajustes desde cualquier ventana de la
aplicación.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 26: RUC:25
37
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RUC-26
Nombre: Volver atrás
Descripción: El usuario será capaz de volver a la
primera actividad de la aplicación desde
cualquier otra actividad únicamente
pulsando un botón.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 27: RUC-26
IDENTIFICADOR: RUR-01
Nombre: Longitud mensaje
Descripción: La longitud máxima del mensaje que se
va a cifrar será de 2000 caracteres.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 28: RUR-01
IDENTIFICADOR: RUR-02
Nombre: No mostrar contraseña
Descripción: En el caso de que haya que introducir una
contraseña, ésta será ocultada con
asteriscos.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 29: RUR-02
IDENTIFICADOR: RUR-03
Nombre: Contraseña para descifrar
Descripción: La contraseña que se introducirá en el
proceso de descifrado del mensaje
deberá ser exactamente igual a la que se
usó para cifrarlo.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 30: RUR-03
38
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RUR-04
Nombre: Seguridad óptima
Descripción: Se utilizarán algoritmos de cifrado
seguros.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 31: RUR-04
IDENTIFICADOR: RUR-05
Nombre: Dependencia de Internet
Descripción: La aplicación no necesitará una conexión
a Internet para cifrar y descifrar un
código QR o un código QRypt salvo que
el método de cifrado escogido sea por
fecha. También se necesitará para
comprobar actualizaciones y para
compartir un código.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 32: RUR-05
IDENTIFICADOR: RUR-06
Nombre: Disponibilidad de idiomas
Descripción: La aplicación deberá estar traducida y
localizada al castellano y al inglés.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 33: RUR-06
IDENTIFICADOR: RUR-07
Nombre: Tiempo de cifrado
Descripción: La aplicación deberá tardar un máximo
de 30 segundos en generar un código QR
y un máximo de 1 minuto en generar un
código QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 34: RUR-07
39
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RUR-08
Nombre: Color negro para QR
Descripción: La aplicación no permitirá elegir ningún
color para un código QR simple. El negro
está reservado para estos códigos.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 35: RUR-08
IDENTIFICADOR: RUR-09
Nombre: Color negro para QRypt
Descripción: La aplicación debe permitir elegir el color
en el que se quiere cifrar el código QRypt.
El negro no estará permitido.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 36: RUR-09
IDENTIFICADOR: RUR-10
Nombre: Introducir contraseña
Descripción: La aplicación no debe permitir introducir
la contraseña cuando el código QRypt
que se va a leer haya sido cifrado
mediante imei, modelo o fecha.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Fuente: Alumno Tutor
Tabla 37: RUR-10
40
Trabajo de Fin de Grado Carlos Pliego García
41
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: CU-XX
Nombre:
Actores:
Descripción:
Precondiciones:
Postcondiciones:
Secuencia principal:
Secuencia alternativa:
Requisitos:
Tabla 38: Plantilla de caso de uso
42
Trabajo de Fin de Grado Carlos Pliego García
Como más adelante se va a desglosar con profundidad los casos de uso "Generar" y
"Leer", a continuación se va a explicar únicamente el acceso a éstos y los dos casos
de uso que puede realizar el usuario.
IDENTIFICADOR: CU-01
Nombre: Generar.
Actores: Emisor.
Descripción: El emisor selecciona la opción de generar
un QR o un QRypt desde la pantalla
principal.
Precondiciones: Ejecutar la aplicación.
Postcondiciones: Se accede al módulo de generación de
QR o de QRypt.
Secuencia principal: 1. Ejecutar aplicación.
2. Seleccionar la opción generar QR
o la opción generar QRypt.
Secuencia alternativa:
Requisitos: RUC-01, RUC-02.
Tabla 39: CU-01
43
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: CU-02
Nombre: Leer.
Actores: Receptor.
Descripción: El receptor selecciona la opción de leer
un código QR desde la pantalla principal.
Precondiciones: Ejecutar la aplicación.
Postcondiciones: Se accede al módulo de lectura de código
QR mediante la cámara o mediante un
fichero.
Secuencia principal: 1. Ejecutar aplicación.
2. Seleccionar la opción leer QR por
cámara o por fichero..
Secuencia alternativa: (1). El receptor accede al módulo de
lectura del código QR desde el
menú "Abrir con..." de las
imágenes de Android.
Requisitos: RUC-03, RUC-04.
Tabla 40: CU-02
IDENTIFICADOR: CU-03
Nombre: Cambiar ajustes.
Actores: Usuario.
Descripción: El usuario abre el panel deslizable y
cambia los ajustes de la aplicación desde
cualquier pantalla.
Precondiciones: Ejecutar la aplicación.
Postcondiciones: Se modifica el valor de los ajustes por
defecto de la aplicación.
Secuencia principal: 1. Ejecutar aplicación.
2. Abrir el menú deslizable.
3. Seleccionar cualquier opción de
ajustes.
4. Modificar los ajustes.
Secuencia alternativa: (1). Ejecutar la aplicación y abrir
cualquier módulo de ella.
Requisitos: RUC-15, RUC-16.
Tabla 41: CU-03
44
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: CU-04
Nombre: Actualizar.
Actores: Usuario.
Descripción: El usuario abre el panel deslizable y
selecciona la opción de ver las
novedades de la versión.
Precondiciones: Ejecutar la aplicación.
Postcondiciones: Diálogo con las novedades de la versión
actual.
Secuencia principal: 1. Ejecutar aplicación.
2. Abrir el menú deslizable.
3. Seleccionar la opción de ver las
novedades de la versión.
Secuencia alternativa:
Requisitos: RUC-17.
Tabla 42: CU-04
45
Trabajo de Fin de Grado Carlos Pliego García
Como se puede observar, en este caso sólo hay un actor. Este actor es el emisor, cuyo
objetivo es introducir un mensaje en un código QR. El actor puede elegir entre cifrar
este mensaje o no, siendo la primera de las opciones la que le ofrece más acciones.
Se escoja la opción que se escoja, la aplicación dará oportunidad de compartir el
código.
Se puede ver que el proceso de generación está formado por distintos casos de uso y
que cada uno de ellos actúa como una acción cuya resolución es necesaria para
alcanzar el objetivo.
Existe un caso de uso que es condicional (sólo se ejecuta cuando se cumple una
condición). Este caso de uso es "Introducir contraseña/fecha/patrón" ya que, si no se
ha elegido uno de esos tipos de cifrado, no se va a ejecutar.
IDENTIFICADOR: CU-05
Nombre: Escribir un mensaje.
Actores: Emisor.
Descripción: El emisor escribe el mensaje que quiere
incluir en un código QR.
Precondiciones: Acceder al modo de generación de QR o
de QRypt.
Postcondiciones: Se escribe el mensaje.
Secuencia principal: 1. Acceder al modo de generación
de QR.
2. Escribir el mensaje.
Secuencia alternativa: (1). Acceder al modo de generación
de QRypt.
(2). Escribir el mensaje.
Requisitos: RUC-06, RUC-12, RUC-21, RUC-22, RUC-
25, RUR-01.
Tabla 43: CU-05
IDENTIFICADOR: CU-06
Nombre: Elegir tipo de cifrado.
Actores: Emisor.
Descripción: El emisor elige el tipo de cifrado con el
que quiere cifrar el mensaje.
Precondiciones: Escribir un mensaje para que sea cifrado.
Postcondiciones: Se elige la forma de cifrado.
Secuencia principal: 1. Acceder al modo de generación
de QRypt.
2. Escribir el mensaje.
3. Elegir modo de cifrado
Secuencia alternativa:
Requisitos: RUC-08, RUC-09, RUC-10, RUC-11, RUC-
21, RUC-22, RUC-24, RUC-25, RUC-26.
Tabla 44: CU-06
46
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: CU-07
Nombre: Introducir contraseña/fecha/patrón.
Actores: Emisor.
Descripción: El emisor introduce la contraseña que se
le pide para cifrar el mensaje.
Precondiciones: Haber elegido el modo de cifrado por
contraseña, por patrón o por fecha..
Postcondiciones: Se introduce la contraseña.
Secuencia principal: 1. Acceder al modo de generación
de QRypt.
2. Escribir el mensaje.
3. Elegir modo de cifrado
(contraseña/fecha/patrón).
4. Introducir la contraseña para
cifrar.
Secuencia alternativa:
Requisitos: RUC-07, RUC-21, RUC-22, RUC-25, RUC-
26, RUR-02.
Tabla 45: CU-07
IDENTIFICADOR: CU-08
Nombre: Elegir color.
Actores: Emisor.
Descripción: El emisor elige el color con el que quiere
que se muestre el código QRypt.
Precondiciones: Haber elegido el modo de cifrado e
introducido la contraseña en caso de que
se solicitase.
Postcondiciones: Se elige el color.
Secuencia principal: 1. Acceder al modo de generación
de QRypt.
2. Escribir el mensaje.
3. Elegir modo de cifrado
(contraseña/fecha/patrón).
4. Introducir la contraseña para
cifrar
5. Elegir color.
Secuencia alternativa: (1). Acceder al modo de generación
de QRypt.
(2). Escribir el mensaje.
(3). Elegir modo de cifrado
(Imei/Modelo).
(4). Elegir color.
Requisitos: RUC-13, RUC-21, RUC-22, RUC-25, RUC-
26, RUR-08, RUR-09.
Tabla 46: CU-08
47
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: CU-09
Nombre: Generar.
Actores: Emisor.
Descripción: La aplicación genera el código según las
opciones introducidas en los pasos
anteriores.
Precondiciones: Acceder al modo de generación de
código QR o al modo de generación de
código QRypt.
Postcondiciones: Mensaje introducido en un código QR. o
mensaje cifrado introducido en un código
QRypt.
Secuencia principal: 1. Acceder al modo de generación
de QR.
2. Escribir el mensaje.
3. Presionar el botón "Aceptar".
Secuencia alternativa: (1). Acceder al modo de generación
de QRypt.
(2). Escribir el mensaje.
(3). Elegir modo de cifrado
(contraseña/fecha/patrón).
(4). Introducir la contraseña para
cifrar
(5). Elegir color.
(6). Presionar el botón "Aceptar".
Secuencia alternativa 2: (1). Acceder al modo de generación
de QRypt.
(2). Escribir el mensaje.
(3). Elegir modo de cifrado
(Imei/Modelo).
(4). Elegir color.
(5). Presionar el botón "Aceptar".
Requisitos: RUR-04, RUR-05, RUR-07.
Tabla 47: CU-09
48
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: CU-10
Nombre: Enviar.
Actores: Emisor.
Descripción: La aplicación abre el menú compartir de
Android para que el usuario envíe el
código donde quiera.
Precondiciones: Generar un código.
Postcondiciones: Código compartido.
Secuencia principal: 1. Acceder al modo de generación
de QR.
2. Escribir el mensaje.
3. Presionar el botón "Aceptar".
4. Pulsar el botón compartir y
seleccionar la aplicación.
Secuencia alternativa: (1). Acceder al modo de generación
de QRypt.
(2). Escribir el mensaje.
(3). Elegir modo de cifrado
(contraseña/fecha/patrón).
(4). Introducir la contraseña para
cifrar
(5). Elegir color.
(6). Presionar el botón "Aceptar".
(7). Pulsar el botón compartir y
seleccionar la aplicación.
Secuencia alternativa 2: (1). Acceder al modo de generación
de QRypt.
(2). Escribir el mensaje.
(3). Elegir modo de cifrado
(Imei/Modelo).
(4). Elegir color.
(5). Presionar el botón "Aceptar".
(6). Pulsar el botón compartir y
seleccionar la aplicación
Requisitos: RUC-14, RUC-21, RUC-22, RUC-25, RUC-
26.
Tabla 48: CU-10
49
Trabajo de Fin de Grado Carlos Pliego García
Como se puede observar, en este caso sólo hay un actor. Este actor es el receptor,
cuyo objetivo es extraer el mensaje que ha sido introducido en un código QR. El actor
puede elegir entre leer el código mediante la cámara del terminal o buscar una imagen
en la galería que contenga ese código. Se escoja la opción que se escoja, una vez se
ha extraído el mensaje, no hay diferencia en la ejecución de las opciones.
Se puede ver que el proceso de lectura está formado por distintos casos de uso y que
cada uno de ellos actúa como una acción cuya resolución es necesaria para alcanzar
el objetivo. Al igual que en el módulo de generación, existen unos casos de uso cuya
ejecución estará sujeta a una condición. Se han utilizado óvalos para representar
estas condiciones.
50
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: CU-11
Nombre: Leer de cámara.
Actores: Receptor.
Descripción: El receptor apunta con la cámara del
dispositivo a un código QR o QRypt.
Precondiciones: Acceder al modo de lectura por cámara.
Postcondiciones: Se obtiene el mensaje (cifrado o no).
Secuencia principal: 1. Acceder al modo de lectura por
cámara.
2. Obtener un mensaje (cifrado o no)
Secuencia alternativa:
Requisitos: RUC-03, RUC-21, RUC-22, RUC-26.
Tabla 49: CU-11
IDENTIFICADOR: CU-12
Nombre: Leer de fichero.
Actores: Receptor.
Descripción: El receptor selecciona una imagen que se
encuentre en la memoria del dispositivo y
que contenga un código QR o QRypt.
Precondiciones: Acceder al modo de lectura por fichero.
Postcondiciones: Se obtiene el mensaje (cifrado o no).
Secuencia principal: 1. Acceder al modo de lectura por
fichero.
2. Obtener un mensaje (cifrado o no)
Secuencia alternativa:
Requisitos: RUC-04, RUC-05, RUC-21, RUC-22, RUC-
23, RUC-26.
Tabla 50: CU-12
IDENTIFICADOR: CU-13
Nombre: Introducir contraseña.
Actores: Receptor.
Descripción: El receptor introduce la contraseña para
descifrar el código QRypt.
Precondiciones: Obtener el mensaje y que éste esté
cifrado con una contraseña.
Postcondiciones: Contraseña introducida.
Secuencia principal: 1. Acceder al modo de lectura por
cámara.
2. Obtener un mensaje cifrado
3. Introducir la contraseña.
Secuencia alternativa: (1). Acceder al modo de lectura por
fichero.
(2). Obtener un mensaje cifrado.
(3). Introducir la contraseña.
Requisitos: RUC-18, RUC-21, RUC-22, RUC-26, RUR-
02, RUR-03 RUR-05, RUR-10.
Tabla 51: CU-13
IDENTIFICADOR: CU-14
Nombre: Redireccionar.
Actores: Receptor.
51
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: CU-15
Nombre: Mostrar mensaje.
Actores: Receptor.
Descripción: Se muestra por pantalla el mensaje
introducido en el código QR o QRypt.
Precondiciones: Obtener el mensaje y que éste sea una
URL.
Postcondiciones: Se redirecciona a la URL.
Secuencia principal: 1. Acceder al modo de lectura por
cámara.
2. Obtener un mensaje.
3. Mostrar el mensaje.
Secuencia alternativa: (1). Acceder al modo de lectura por
fichero.
(2). Obtener un mensaje.
(3). Mostrar el mensaje.
Secuencia alternativa 2: (1). Acceder al modo de lectura por
cámara.
(2). Obtener un mensaje cifrado.
(3). Introducir la contraseña.
(4). Mostrar el mensaje.
Secuencia alternativa 3: (1). Acceder al modo de lectura por
52
Trabajo de Fin de Grado Carlos Pliego García
fichero.
(2). Obtener un mensaje cifrado.
(3). Introducir la contraseña.
(4). Mostrar el mensaje.
Secuencia alternativa 4: (1). Acceder al modo de lectura por
cámara.
(2). Obtener un mensaje cifrado y que
éste sea una URL.
(3). Introducir la contraseña.
(4). Redireccionar a la URL.
(5). Mostrar el mensaje.
Secuencia alternativa 5: (1). Acceder al modo de lectura por
fichero.
(2). Obtener un mensaje cifrado.
(3). Introducir la contraseña.
(4). Redireccionar a la URL.
(5). Mostrar el mensaje.
Requisitos: RUC-19, RUC-21, RUC-22, RUC-25, RUC-
26.
Tabla 53: CU-15
53
Trabajo de Fin de Grado Carlos Pliego García
Como se ha hecho anteriormente con los requisitos de usuario y los casos de uso,
estos requisitos se van a redactar utilizando una plantilla. La plantilla tendrá los
siguientes atributos:
54
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-XX
Descripción:
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos:
Tabla 54: Plantilla de requisito de software
IDENTIFICADOR: RS-01
Descripción: El sistema de información deberá
permitir que el usuario pueda acceder al
modo de generación de códigos QR.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-01.
Tabla 55: RS-01
55
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-02
Descripción: El sistema de información deberá
permitir que el usuario pueda acceder al
modo de generación de códigos QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-02.
Tabla 56: RS-02
IDENTIFICADOR: RS-03
Descripción: El sistema de información deberá
permitir que el usuario pueda acceder al
modo de lectura por cámara.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-03.
Tabla 57: RS-03
IDENTIFICADOR: RS-04
Descripción: El sistema de información deberá
permitir que el usuario pueda acceder al
modo de lectura desde fichero.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-04, RUC-23.
Tabla 58: RS-04
IDENTIFICADOR: RS-05
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir una
imagen de la galería desde el modo de
lectura desde fichero.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-05, RUC-23.
Tabla 59: RS-05
IDENTIFICADOR: RS-06
Descripción: El sistema de información deberá
permitir que el usuario pueda escribir un
mensaje.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-06.
Tabla 60: RS-06
56
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-07
Descripción: El sistema de información deberá
permitir que el usuario pueda escribir un
mensaje de hasta 2000 caracteres como
máximo.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUR-01.
Tabla 61: RS-07
IDENTIFICADOR: RS-08
Descripción: El sistema de información deberá
mostrar un contador de caracteres que
indique el número de caracteres que se
han escrito en el mensaje.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-12.
Tabla 62: RS-08
IDENTIFICADOR: RS-09
Descripción: El sistema de información deberá
permitir que el usuario introduzca una
contraseña para cifrar el mensaje.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-07.
Tabla 63: RS-09
IDENTIFICADOR: RS-10
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir un
tipo de cifrado como mínimo.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-24.
Tabla 64: RS-10
IDENTIFICADOR: RS-11
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir un
color para el código si éste es QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-13, RUR-08, RUR-09.
Tabla 65: RS-11
57
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-12
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir el
modo de cifrado por contraseña.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-07.
Tabla 66: RS-12
IDENTIFICADOR: RS-13
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir el
modo de cifrado por imei del terminal.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-08.
Tabla 67: RS-13
IDENTIFICADOR: RS-14
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir el
modo de cifrado por modelo del terminal.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-09.
Tabla 68: RS-14
IDENTIFICADOR: RS-15
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir el
modo de cifrado por fecha.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-10.
Tabla 69: RS-15
IDENTIFICADOR: RS-16
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir el
modo de cifrado por patrón.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-11.
Tabla 70: RS-16
58
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-17
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir una
aplicación de terceros a la que compartir
el código generado.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-14.
Tabla 71: RS-17
IDENTIFICADOR: RS-18
Descripción: El sistema de información deberá
permitir que el usuario pueda generar un
código QR o QRypt con los datos
introducidos.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-01, RUC-02, RUC-06, RUC-07, RUC-
07, RUC-08, RUC-09, RUC-10, RUC-11,
RUC-13, RUC-24.
Tabla 72: RS-18
IDENTIFICADOR: RS-19
Descripción: El sistema de información deberá
permitir que el usuario pueda elegir la
carpeta en la que quiere que se guarden
los código generados.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-15.
Tabla 73: RS-19
IDENTIFICADOR: RS-20
Descripción: El sistema de información deberá
permitir que el usuario pueda cambiar las
opciones por defecto.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-16.
Tabla 74: RS-20
IDENTIFICADOR: RS-21
Descripción: El sistema de información deberá
permitir que el usuario introduzca una
contraseña para descifrar el QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-18.
Tabla 75: RS-21
59
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-22
Descripción: El sistema de información deberá
permitir que el usuario elija si quiere que
se le redireccione a una URL cuando el
mensaje contenga una.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-20.
Tabla 76: RS-22
IDENTIFICADOR: RS-23
Descripción: El sistema de información deberá
permitir que el usuario extraiga el
mensaje de un código a partir de las
opciones seleccionadas.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-03, RUC-04, RUC-05, RUC-18, RUC-
23, RUR-03, RUR-05, RUR-10.
Tabla 77: RS-23
IDENTIFICADOR: RS-24
Descripción: El sistema de información deberá
mostrar el mensaje del código por
pantalla una vez se ha descifrado.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-19.
Tabla 78: RS-24
IDENTIFICADOR: RS-25
Descripción: El sistema de información deberá
permitir que el usuario pueda ver las
novedades de la versión.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-17.
Tabla 79: RS-25
60
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-27
Descripción: El sistema de información deberá
permitir que el usuario acceda al modo
de generación de códigos QRypt desde la
pantalla principal de la interfaz.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-02.
Tabla 81: RS-27
IDENTIFICADOR: RS-28
Descripción: El sistema de información deberá
permitir que el usuario acceda al modo
de lectura de códigos por cámara desde
la pantalla principal de la interfaz.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-03.
Tabla 82: RS-28
IDENTIFICADOR: RS-29
Descripción: El sistema de información deberá
permitir que el usuario acceda al modo
de lectura de códigos por fichero desde
la pantalla principal de la interfaz.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-04.
Tabla 83: RS-29
61
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-30
Descripción: Se mostrará el menú deslizable con los
ajustes de la aplicación cuando se pulse
el botón "menú" del terminal.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-25.
Tabla 84: RS-30
IDENTIFICADOR: RS-31
Descripción: Se mostrará el menú deslizable con los
ajustes de la aplicación cuando se
deslice el dedo por el borde izquierdo de
la pantalla.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-25.
Tabla 85: RS-31
IDENTIFICADOR: RS-32
Descripción: El sistema de información debe permitir
al usuario navegar por la interfaces de
los módulos de generación de códigos
QR y QRypt para corregir o modificar la
información incluida en los campos. Para
ello se hará uso del botón “atrás” del
dispositivo y de botones para avanzar.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-21, RUC-26.
Tabla 86: RS-32
IDENTIFICADOR: RS-33
Descripción: El sistema de información mostrará un
diálogo para escoger los distintos tipos
de cifrado:
Contraseña.
Imei.
Modelo.
Fecha.
Patrón.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-24.
Tabla 87: RS-33
62
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-34
Descripción: El sistema de información mostrará un
diálogo para escoger los distintos
colores para el QRypt:
Verde.
Rojo.
Azul.
Naranja.
Morado.
Marrón.
Rosa.
Gris.
Random.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-13.
Tabla 88: RS-34
IDENTIFICADOR: RS-35
Descripción: El sistema de información mostrará un
botón para seleccionar la aplicación de
terceros a la que se desea mandar el
código.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-14.
Tabla 89: RS-35
IDENTIFICADOR: RS-36
Descripción: El sistema de información deberá
mandar la imagen a la aplicación de
terceros que se haya seleccionado.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-14.
Tabla 90: RS-36
IDENTIFICADOR: RS-37
Descripción: El sistema de información mostrará un
botón de "Siguiente" en la barra de
acción del módulo de generación para
generar el código con el mensaje escrito.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos:
Tabla 91: RS-37
63
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-38
Descripción: El sistema de información mostrará un
diálogo en caso de que algún campo no
se haya completado y se haya pulsado el
botón de "Siguiente".
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos:
Tabla 92: RS-38
IDENTIFICADOR: RS-39
Descripción: El sistema de información mostrará un
diálogo en el módulo de lectura cuando
se necesite una contraseña para
descifrar el mensaje.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-18, RUR-10.
Tabla 93: RS-39
IDENTIFICADOR: RS-40
Descripción: El sistema de información mostrará un
diálogo en el módulo de lectura cuando el
mensaje contenga una URL dando a
elegir al usuario entre que se le
redireccione o no.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-20.
Tabla 94: RS-40
IDENTIFICADOR: RS-41
Descripción: La aplicación podrá ser llamada de
manera externa cuando se seleccione
desde el menú contextual de Android
“abrir con” sobre una imagen que
contenga un código QR o un código
QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-23.
Tabla 95: RS-41
64
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-42
Descripción: El sistema de información debe permitir
al usuario poder seleccionar imágenes
con formato JPEG y PNG.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-05, RUC-23.
Tabla 96: RS-42
IDENTIFICADOR: RS-44
Descripción: El sistema de información debe ser capaz
de incluir un mensaje en un código QR en
menos de 30 segundos y cifrar e incluir
un mensaje cifrado en un código QRypt
en menos de 1 minuto.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUR-07.
Tabla 98: RS-44
IDENTIFICADOR: RS-45
Descripción: La aplicación se mostrará en castellano o
inglés dependiendo del idioma del
dispositivo Android.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUR-06.
Tabla 99: RS-45
65
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-47
Descripción: La aplicación funcionará en sistemas
operativos Android a partir de la versión
de firmware 3.0.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos:
Tabla 101: RS-47
IDENTIFICADOR: RS-48
Descripción: El terminal deberá contar con la memoria
RAM suficiente para poder utilizar el
sistema sin ninguna excepción.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos:
Tabla 102: RS-48
IDENTIFICADOR: RS-49
Descripción: El terminal deberá contar con una
cámara para poder escanear códigos QR
desde ella.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-03.
Tabla 103: RS-49
66
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-51
Descripción: La aplicación deberá asegurar que el
mensaje cifrado introducido dentro de un
QRypt sólo es posible descifrarlo si se
conoce la contraseña que se utilizó
cuando se cifró.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUR-03.
Tabla 105: RS-51
IDENTIFICADOR: RS-52
Descripción: La aplicación deberá cumplir la Ley
Orgánica de Protección de Datos.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos:
Tabla 106: RS-52
IDENTIFICADOR: RS-54
Descripción: La aplicación tiene que comprobar que
se ha escrito un mensaje antes de
intentar introducirlo en un código.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos:
Tabla 108: RS-54
IDENTIFICADOR: RS-55
Descripción: La aplicación tiene que comprobar que
se ha elegido por lo menos un tipo de
cifrado cuando se ha decidido generar un
QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-24.
Tabla 109: RS-55
67
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-56
Descripción: La aplicación tiene que comprobar que
se ha elegido sólo un color cuando se ha
decidido generar un QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-13.
Tabla 110: RS-56
IDENTIFICADOR: RS-57
Descripción: La aplicación tiene que comprobar que
se ha escogido una imagen en el modo
de lectura por fichero.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-04, RUC-23.
Tabla 111: RS-57
IDENTIFICADOR: RS-58
Descripción: La aplicación tiene que comprobar que la
imagen contiene un código QR o un
código QRypt.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-04, RUC-23.
Tabla 112: RS-58
IDENTIFICADOR: RS-59
Descripción: La aplicación tiene que comprobar si el
mensaje introducido sobrepasa el
número de caracteres válidos máximo.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUR-01.
Tabla 113: RS-59
IDENTIFICADOR: RS-60
Descripción: La aplicación tiene que comprobar si se
ha introducido una contraseña, una fecha
o un patrón en el supuesto de que se
haya elegido uno o más de estos tipos de
cifrado.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUC-07, RUR-10.
Tabla 114: RS-60
68
Trabajo de Fin de Grado Carlos Pliego García
IDENTIFICADOR: RS-61
Descripción: La aplicación tiene que comprobar que la
contraseña introducida para descifrar el
mensaje es válida y que se corresponde
con la original.
Prioridad: Alta Media Baja
Necesidad: Primario Secundario Opcional
Estabilidad: Alta Baja
Requisitos: RUR-03.
Tabla 115: RS-61
69
Trabajo de Fin de Grado Carlos Pliego García
Las clases que se han obtenido de los requisitos y casos de uso han sido:
PantallaPrincipal:
o abrirGenerarQR: Se encargará de ejecutar la actividad GeneradorQR
con un valor en una variable que especificará que se quiere crear un
código QR.
o abrirGenerarQRypt: Se encargará de ejecutar la actividad GeneradorQR
con un valor en una variable que especificará que se quiere crear un
código QRypt.
o abrirLeerDeCamara: Se encargará de ejecutar la actividad Camara.
o abrirLeerDeFichero: Se encargará de ejecutar la actividad LectorQR con
un valor en una variable que especificará que se debe abrir el
explorador de archivos.
o modificarAjustes: Se encargará de modificar los valores por defecto de
los ajustes de la aplicación. Se accede desde el menú deslizable.
70
Trabajo de Fin de Grado Carlos Pliego García
GeneradorQR:
o obtenerDatos: Se encargará de pedirle al usuario los datos que se
necesiten. Si se va a generar un QR, se pedirá el mensaje. Si se va a
generar un QRypt, se pedirá el mensaje, la contraseña y el color. Estos
datos se enviarán a la clase Utils para que cifre el mensaje y genere el
código.
o mostrarCodigo: Se encargará de mostrar por pantalla el código
generado (ya sea QR o QRypt) para que el usuario pueda verlo.
o compartir: Se encargará de enviar el código a la aplicación que se
especifique.
o modificarAjustes: Se encargará de modificar los valores por defecto de
los ajustes de la aplicación. Se accede desde el menú deslizable.
o novedadesVersion: Se encargará de mostrar las novedades de la
versión actual. Se accede desde el menú deslizable.
Camara:
o resetearCamara: Se encargará de reiniciar la actividad si la cámara se
congela por algún casual.
o identificarQR: Se encargará de buscar en la imagen que se esté
obteniendo en ese momento un código QR o QRypt.
o extraerMensaje: Se encargará de extraer el mensaje del código QR que
se haya identificado y enviarlo a la actividad LectorQR.
LectorQR:
o mostrarMensaje: Se encargará de imprimir el mensaje obtenido del
código QR.
o obtenerDatos: Se encargará de pedirle al usuario los datos que se
necesiten. Si el mensaje está cifrado, se pedirá la contraseña. Estos
datos se enviarán a la clase Utils para que descifre el mensaje.
o modificarAjustes: Se encargará de modificar los valores por defecto de
los ajustes de la aplicación. Se accede desde el menú deslizable.
o novedadesVersion: Se encargará de mostrar las novedades de la
versión actual. Se accede desde el menú deslizable.
Utils:
o dibujarQR: Se encargará de generar un código QR a partir de un texto
(cifrado o no) y un color.
o leerArchivo: Se encargará de abrir el explorador de archivos y extraer el
mensaje del código QR o QRypt que se encuentre representado en la
imagen que el usuario haya escogido. LectorQR lo ejecutará cuando
necesite el mensaje de una imagen.
71
Trabajo de Fin de Grado Carlos Pliego García
Queda aclarar que, cuando se elija en la pantalla principal que se quiere leer un
archivo de imagen, ejecuta la actividad LectorQR pero con una variable que avisa de
que se tiene que ejecutar el explorador de archivos para recoger la imagen. Cuando se
ejecute LectorQR, esta actividad ejecutará la función leerArchivo de la clase Utils.
72
Trabajo de Fin de Grado Carlos Pliego García
De esta forma, se puede observar que la clase PantallaPrincipal podrá ejecutar las
clases GeneradorQR, Camara y LectorQR. La clase GeneradorQR podrá volver a la
clase PantallaPrincipal y podrá inicializar un objeto Utils (importando la clase) ya que
ésta posee unos métodos que le harán falta. La clase Camara podrá ejecutar la clase
LectorQR (cuando obtenga el mensaje del código QR enfocado) y, también, podrá
volver a la clase PantallaPrincipal. Por último, la clase LectorQR podrá volver a la
clase PantallaPrincipal y podrá inicializar un objeto Utils (importando la clase) de la
misma forma que lo hará la clase GeneradorQR.
73
Trabajo de Fin de Grado Carlos Pliego García
5 DISEÑO
Esta sección pretende resolver el problema que se ha analizado y descrito en el
Análisis. Además, se justificarán todas y cada una de las decisiones que se tomen.
74
Trabajo de Fin de Grado Carlos Pliego García
Como se puede ver en la Ilustración 9, la arquitectura del sistema cuenta con 4 capas:
la capa usuario, la capa de software, el sistema operativo y las comunicaciones.
Todas estas capas se conectan con la que está inmediatamente debajo si es que
existe.
Seguidamente, se procederá a realizar una descripción de cada una de las capas que
componen la arquitectura del sistema que se tiene que diseñar:
75
Trabajo de Fin de Grado Carlos Pliego García
Android. Además, será necesaria una conexión a Internet para que el módulo
de actualización tenga efecto.
Como se puede deducir, los módulos principales del sistema son los que tengan que
ver con la generación de códigos y con la lectura de ellos. Estos módulos serán los
primeros en diseñarse e implementarse. Los módulos de actualización y cambio de
ajustes quedarán como módulos opcionales y se realizarán después, si los anteriores
módulos se resuelven sin problema y aun queda tiempo para implementar estas
funcionalidades.
76
Trabajo de Fin de Grado Carlos Pliego García
5.2 SUBSISTEMAS
Gracias a la arquitectura que se ha propuesto para el sistema en el apartado anterior
y a los requisitos que se han obtenido y definido en el Análisis, se ha decidido dividir
el sistema en subsistemas para facilitar el proceso de diseño del mismo.
Para el sistema que se va a diseñar, los subsistemas coinciden con los módulos de la
capa de software que se han especificado en la arquitectura del sistema; ya que,
comúnmente, un subsistema se reconoce por los servicios que ofrece. Además, estos
servicios forman un compuesto de funciones con una intención común.
77
Trabajo de Fin de Grado Carlos Pliego García
En la siguiente tabla, se van a exponer los atributos que obtendrá el sistema junto a
sus tipos representados en lenguaje de programación Java y los valores que éstos
pueden tomar a nivel interno:
78
Trabajo de Fin de Grado Carlos Pliego García
79
Trabajo de Fin de Grado Carlos Pliego García
5.3.1.3 ENVÍO
La última tarea del módulo enviará la imagen PNG a una aplicación de terceros
instalada en el dispositivo para que ésta la trate. Las aplicaciones de terceros a las
que se podrá mandar la imagen serán aquellas que aparezcan en el menú de Android
"Compartir con", que son las que están instaladas en el dispositivo y permiten que se
les comparta imágenes para procesarlas ellas.
Email: Tanto GMail como EMail, permiten al usuario sincronizar una o más
cuentas de correo electrónico para recibir los mensajes nuevos en el
dispositivo y, también, para crearlos. Estas dos aplicaciones permiten recoger
una imagen para adjuntarla a un nuevo correo; por lo tanto, cuando se
seleccione esta opción en el menú compartir de la aplicación que se va a
desarrollar, se abrirá un nuevo correo y se adjuntará el código a él. De esta
forma, no es necesario adjuntarla desde la galería.
Dropbox: La aplicación de Dropbox es la versión móvil de la famosa aplicación
web de almacenamiento en la nube. Esta aplicación permite subir archivos a
una cuenta de Dropbox, descargarlos y moverlos de carpeta. Si se selecciona
la aplicación Dropbox desde el menú compartir de la aplicación que se va a
desarrollar, se podrá subir la imagen a la cuenta Dropbox y se podrá decidir la
carpeta donde se hará.
Google Drive: Es la aplicación oficial del servicio web de Google de
almacenamiento en la nube. Esta aplicación permite subir archivos a una
cuenta de Google, descargarlos y moverlos de carpeta. Si se selecciona la
aplicación Google Drive desde el menú compartir de la aplicación que se va a
80
Trabajo de Fin de Grado Carlos Pliego García
Además de las aplicaciones que se han descrito, existen muchas más que pueden
tratar la imagen (todas las que estén programadas para recibir por parámetros una
archivo de imagen). También funcionaría con servicios de Android como el Bluetooth
y los MMS, los cuales, eligiéndolos en el menú compartir de la aplicación que se va a
desarrollar, lo transferirían a un usuario y lo adjuntarían a un mensaje,
respectivamente.
81
Trabajo de Fin de Grado Carlos Pliego García
Una vez se han introducido los parámetros, la aplicación los validará comprobando:
82
Trabajo de Fin de Grado Carlos Pliego García
En la siguiente tabla, se van a exponer los atributos que obtendrá el sistema junto a
sus tipos representados en lenguaje de programación Java y los valores que éstos
pueden tomar a nivel interno:
Cifrado: El mensaje se cifrará utilizando el algoritmo AES con una clave de 256
bits que derivará de la contraseña. Esta clave se obtendrá derivando con la
función PBKDF2 (Password-Based Key Derivation Function 2). Esta última
función derivará más de 1000 veces la contraseña, que no será otra que los
hashes de seguridad SHA-1 de la opciones de seguridad concatenados,
utilizando algoritmos criptográficos y funciones resumen. Esta derivación no
tiene otra función que la de aumentar el tiempo de cómputo y, así, perjudicar
un ataque de fuerza bruta. Al mensaje cifrado se le concatenará uno o más
caracteres especiales dependiendo de las opciones de cifrado seleccionadas.
De esta forma, en el proceso de descifrado se podrá saber cómo se cifró el
mensaje.
83
Trabajo de Fin de Grado Carlos Pliego García
Ilustración 14: Diagrama general de la derivación de la contraseña y del cifrado del mensaje
84
Trabajo de Fin de Grado Carlos Pliego García
TOKENS DE CONTROL
% Contraseña
$ Imei
# Modelo
@ Fecha
& Patrón
Tabla 118: Tokens de control
5.3.2.4 ENVÍO
Al igual que el apartado anterior, esta función es completamente idéntica a la que se
ha definido en la sección homónima de generación de códigos QR. Por esta razón, no
se va a ahondar más en el tema.
85
Trabajo de Fin de Grado Carlos Pliego García
5.4.1.1 CÁMARA
La aplicación permite al usuario hacer uso de la cámara del dispositivo móvil donde
está instalada con el fin de enfocar un código de naturaleza QR o QRypt y extraer el
mensaje que éste tiene almacenado en su interior.
86
Trabajo de Fin de Grado Carlos Pliego García
de los caracteres especiales que lo identifiquen como tal. La librería que se utilizará
no será la ZXing porque, a pesar de que tiene esta funcionalidad, obliga al usuario a
tener instalada su aplicación principal en el terminal ya que, para hacer uso de la
cámara, se tiene que hacer una llamada a su aplicación y ésta devuelve la información
del QR.
87
Trabajo de Fin de Grado Carlos Pliego García
Ilustración 17: Diagrama general de la derivación de la contraseña y del descifrado del mensaje
Los requisitos mínimos que se tienen que cumplir para que el mensaje sea
considerado una URL son los siguientes:
88
Trabajo de Fin de Grado Carlos Pliego García
89
Trabajo de Fin de Grado Carlos Pliego García
5.4.2.1 FICHERO
La aplicación permite al usuario hacer uso del explorador de archivos del dispositivo
móvil donde está instalada con el fin de seleccionar un archivo que contenga un
código de naturaleza QR o QRypt y extraer el mensaje que éste tiene almacenado en
su interior.
90
Trabajo de Fin de Grado Carlos Pliego García
91
Trabajo de Fin de Grado Carlos Pliego García
Para que sea sencilla, se llenará con el mínimo número de opciones y botones la
pantalla. De esta forma, el usuario no tendrá que buscar por toda la interfaz la opción
o el botón que permite ejecutar la función que él desea.
Por otro lado, para que se cumpla el requisito de intuición, se seguirán las
recomendaciones de diseño oficiales del equipo de Google. Estas recomendaciones
son las siguientes:
92
Trabajo de Fin de Grado Carlos Pliego García
serán de la base de datos oficial de iconos Android la no ser que no exista uno
que represente lo que se quiere decir.[11]
Utilizar un estilo de escritura conciso, simple, amigable, con lo más importante
al principio, sin repeticiones y describiendo sólo lo principalmente necesario.
[12]
Utilizar un tema que cumpla los estándares de Holo. Estos temas tienen barra
superior (llamada ActionBar) con opciones. Además, su navegación se basa
mucho en los gestos. [7]
Utilizar la tipografía oficial de Android llamada Roboto. [9]
5.5.1.2 DALTONISMO
Existe otro requisito de usuario que se refiere al diseño de las interfaces. Este es el
RUC-22, que exige que la aplicación debe ser accesible para las personas que
padezcan daltonismo.
Para poder plantar cara al problema, se debe conocer el significado de los conceptos
básicos que se relacionan con este problema de accesibilidad.
Para intentar eludir este problema y cumplir con el requisito, es menester conocer
más detalles sobre esta enfermedad. Por ejemplo, ¿qué colores son los que no se
perciben o provocan alguna confusión? ¿Qué medidas se deben tomar para que la
aplicación sea accesible para personas con esta deficiencia?
Para evitar que las personas que padezcan daltonismo tengan algún problema con la
aplicación y siguiendo la guía de accesibilidad de W3C, se tendrán en cuenta las
siguientes recomendaciones:
Los textos y gráficos serán comprensibles cuando se vean sin color. El color
no se usará por sí mismo para transmitir información. [15]
93
Trabajo de Fin de Grado Carlos Pliego García
Dos colores que pertenecen al mismo grupo son, para ellos, los mismos.
94
Trabajo de Fin de Grado Carlos Pliego García
Para ello, se pondrá a disposición del usuario un botón en la parte superior izquierda
de la pantalla que permita volver a la pantalla principal desde cualquier actividad.
Además, al pulsar el botón "atrás" del dispositivo móvil se logrará el mismo objetivo.
95
Trabajo de Fin de Grado Carlos Pliego García
Para ello, se diseñará un menú deslizable con las opciones que se podrán modificar.
Este menú aparecerá en la pantalla desde cualquier actividad deslizando el dedo
hacia la derecha o pulsando el botón "menú" del terminal móvil.
96
Trabajo de Fin de Grado Carlos Pliego García
Como se muestra en la Ilustración 23, el diseño de esta interfaz es casi igual que el de
la anterior, simplemente cambiarán los botones y la imagen del código QR en la parte
central superior de la pantalla.
Las formas de navegar entre una interfaz y otra de la pantalla principal serán muy
simples:
97
Trabajo de Fin de Grado Carlos Pliego García
Como se puede ver en la barra superior, la interfaz que se esté viendo en el momento
aparecerá subrayada.
98
Trabajo de Fin de Grado Carlos Pliego García
Además, en la barra superior, aparecerá un icono con la palabra "QRypt" al lado (el
nombre de la aplicación) que, si se pulsa (el icono), conducirá al usuario de vuelta a la
pantalla principal. Esto también puede hacerse con el botón "atrás" del dispositivo.
Esta interfaz contará con, además del botón de vuelta atrás que coincide con el icono
situado en la parte izquierda de la barra superior, una imagen previa del código QR
generado con el mensaje que ha generado el usuario y dos botones, situados en la
parte derecha de la barra superior, para elegir la aplicación a la que se desea
compartir el código QR mediante un menú desplegable o elegir mandarlo
directamente a la última aplicación que se usó para este fin (en este caso Dropbox).
99
Trabajo de Fin de Grado Carlos Pliego García
Las 3 pantallas nuevas son diálogos emergentes que muestran al usuario las
opciones que pueden escoger y que cuentan con 2 botones en la parte inferior:
"Aceptar" y "Cancelar". Si se pulsa "Aceptar" se navegará hasta la siguiente pantalla.
Si se pulsa "Cancelar" se volverá a la pantalla de escritura del mensaje.
Como se puede observar en la Ilustración 26, las opciones que se ofrecerán en este
diálogo emergente se presentarán en forma de cuadrícula. Además, el diálogo contará
con 2 botones, uno para volver a la pantalla de creación del mensaje y otro para
terminar de elegir el tipo de cifrado y continuar a la siguiente pantalla.
100
Trabajo de Fin de Grado Carlos Pliego García
101
Trabajo de Fin de Grado Carlos Pliego García
El diálogo emergente contará con los botones que cuentan todos los diálogos de esta
sección y con un título, un subtítulo y un campo para escribir la contraseña que se
usará para cifrar el mensaje introducido.
102
Trabajo de Fin de Grado Carlos Pliego García
103
Trabajo de Fin de Grado Carlos Pliego García
En el diálogo aparecerán 9 puntos con los que se debe generar un patrón de bloqueo y
desbloqueo deslizando el dedo sobre ellos. Los puntos elegidos para el patrón se
resaltarán por encima de los demás y una línea recta unirá los puntos en el orden en
el que se eligieron.
104
Trabajo de Fin de Grado Carlos Pliego García
105
Trabajo de Fin de Grado Carlos Pliego García
Como se puede ver en la Ilustración 32, se adornará el nombre de los colores con un
adjetivo de naturaleza graciosa, ya sea haciendo alusión a términos de videojuegos
(Zelda, Pokemon) como a nombres de personas reales (Azaña, Weigenfeller). El color
"Random MissingN0" consiste en elegir colores de forma aleatoria que no entren en el
umbral de lo que se considera blanco para formar un código de apariencia extraña.
Cada color aleatorio que se genera se utiliza para un solo pixel.
106
Trabajo de Fin de Grado Carlos Pliego García
La elección del color del código QRypt que se va a generar será la última opción en la
que se consultará al usuario. Después de elegir el color, la aplicación generará el
código QRypt mostrándolo de la misma forma y en la misma interfaz que la de
"mostrar y compartir el código" del módulo de generación QR.
107
Trabajo de Fin de Grado Carlos Pliego García
El cuadro donde saldrá la imagen que se está enfocando en tiempo real con la cámara
del dispositivo tendrá que ser grande ya que es lo más importante de esta interfaz. El
usuario tiene que saber a qué lugar está apuntando en todo momento con el máximo
posible de detalles. Si se pulsase el botón de arriba a la izquierda o el botón "atrás"
del dispositivo Android, la aplicación volvería a la pantalla principal.
108
Trabajo de Fin de Grado Carlos Pliego García
Una vez introducidos los datos y descifrado el mensaje con éxito, se mostrará éste.
La interfaz de la pantalla donde se mostrará será muy simple. Se mostrará el clásico
botón que se ha utilizado en casi todas las interfaces de "volver atrás", y se mostrará
el mensaje incluido en el código bajo un título en el que pondrá "Mensaje".
109
Trabajo de Fin de Grado Carlos Pliego García
Como, por otro lado, la aplicación debería ser capaz de descifrar códigos QR y QRypt
que se encuentren en imágenes que envíen desde otras aplicaciones, es necesario
diseñar cómo aparecerá en el menú "Compartir con" de las aplicaciones Android que
pueden enviar imágenes a otras aplicaciones.
Ilustración 36: Interfaz del menú desplegable "Compartir con" de aplicaciones de terceros
Como se puede ver en la Ilustración 36, desde la galería de imágenes podría enviarse
una cualquiera a la aplicación que se está desarrollando. La aplicación aparece en el
tercer puesto pero, si se usara con más asiduidad, aparecería en un puesto superior.
Si se eligiese la aplicación QRypt, el programa intentaría descifrar el mensaje que
contiene directamente.
110
Trabajo de Fin de Grado Carlos Pliego García
111
Trabajo de Fin de Grado Carlos Pliego García
Como en todos los diálogos emergentes diseñados hasta ahora, se cuenta con 2
botones inferiores para guardar los cambios ocasionados en la ruta de la carpeta de
salida u omitirlos.
112
Trabajo de Fin de Grado Carlos Pliego García
113
Trabajo de Fin de Grado Carlos Pliego García
A diferencia de los demás diálogos, éste no cuenta con 2 botones. En este diálogo no
se puede modificar nada; por lo tanto, no tiene sentido tener botones que omitan o
guarden los cambios que produzca el usuario.
114
Trabajo de Fin de Grado Carlos Pliego García
6 IMPLEMENTACIÓN
Esta sección pretende emprender la implementación del sistema de información que
se ha analizado previamente en el Análisis y se ha diseñado en el Diseño. Además, se
justificarán todas y cada una de las decisiones que se tomen.
Para generar el código se hace uso de una librería para Java que es capaz de lograr
este objetivo y, además, pertenece a la aplicación que es la más utilizada en Android
para tratar códigos de naturaleza QR. Esta librería se llama ZXing.
6.1.1 ZXING
Se pronuncia "Zebra Crossing" y es una librería de código abierto para procesar
imágenes con códigos de barras multi-formato de una o dos dimensiones. Está
implementada en Java. El objetivo de sus desarrolladores es el usarla a través de las
cámaras de los dispositivos móviles actuales para escanear códigos de barras sin
comunicarse con un servidor.
Esta librería, al generar un código QR, primero transforma un mensaje en una matriz
de bits y, después, pasa esta matriz a una imagen interpretando los bits de la matriz.
A la hora de transformar el mensaje en matriz no hay ningún problema pero, cuando
va a dibujar la matriz, hace uso de la clase de Java "BufferedImage" y ésta no existe
en el dominio de Android.
Para solventar este problema, se ha decidido modificar el código para que, en vez de
que llame a la clase "BufferedImage", haga uso de los objetos "Bitmap" que son los
nativos de Android para manejar imágenes. Por suerte, la forma de manejar uno u otro
de estos objetos es muy similar. La librería ZXing, al usar "BufferedImage", se recorre
todas las posiciones de la matriz y dibuja cada pixel de la imagen utilizando el método
setRGB. Además, la clase BufferedImage permite dar formato a la imagen
directamente. Con la clase Bitmap se escribirán los pixeles de la imagen utilizando el
115
Trabajo de Fin de Grado Carlos Pliego García
método setPixel y habrá que crear un objeto File antes de darle formato con el método
compress de la clase Bitmap.
6.1.2 DRAWQR
Ya se ha hablado del método drawQR que es el que se utiliza para generar códigos de
naturaleza QR, pero no se ha ahondado en su algoritmo. Hace falta recordar que este
método recoge como atributos el mensaje que se va a introducir en el código, el tipo
de código que es (QR o QRypt) y el color en el que se va a generar éste. El algoritmo
del método, de forma simplificada, es como se muestra a continuación.
116
Trabajo de Fin de Grado Carlos Pliego García
6.2.1 CIFRAR
Este método se utiliza para cifrar el mensaje a partir de una contraseña; por lo tanto,
recibe como atributos un mensaje y una contraseña. Su algoritmo, en muy alto nivel,
es como se muestra a continuación.
cifrar(mensaje, contraseña):
Se genera un salt aleatorio:
o Se inicializa un objeto SecureRandom y se genera un salt.
o Se genera el hash del salt utilizando la función resumen SHA-1.
o Se concatena el hash generado con la contraseña.
Se deriva la contraseña:
o Se genera un número aleatorio entre 1000 y 11000 que será el número
de iteraciones en la función de derivación de la contraseña.
o Se deriva la contraseña haciendo uso de la función de derivación
"PBKDF2WithHmacSHA1" tantas veces como represente el número de
iteraciones aleatorio que se ha obtenido anteriormente.
Se cifra el mensaje:
o Se genera un vector de inicialización aleatorio.
o Se cifra el mensaje con la clave obtenida anteriormente y el vector de
inicialización utilizando el algoritmo de cifrado AES.
Se devuelve el mensaje cifrado.
Tabla 120: Algoritmo del método cifrar
6.2.1.1 CONTRASEÑA
Cuando se habla de la contraseña que recibe el método, no es otra que el conjunto de
valores tomados a la hora de seleccionar los tipos de cifrado que se desean utilizar
para cifrar el mensaje. Una vez se tienen los valores, se genera un hash de cada uno
utilizando la función resumen SHA-1 y se concatenan. El valor correspondiente es el
que se usa como atributo de entrada en este método.
6.2.1.2 SALT
En el algoritmo, el salt se genera aleatoriamente utilizando la clase SecureRandom. Se
utiliza la clase SecureRandom y no Random porque el número que genera el primero
es criptográficamente más fuerte. Más tarde se genera un hash del salt utilizando la
función resumen SHA-1 para mejorar la seguridad y se concatena con la contraseña.
117
Trabajo de Fin de Grado Carlos Pliego García
La razón por la que se utiliza un salt es, simplemente, para aumentar la complejidad
del proceso de seguridad. De esta forma, se hace mucho más complicada la labor de
un atacante en caso de que obtuviera el criptograma.
6.2.1.3 DERIVACIÓN
Se ha decidido realizar la derivación de contraseña para incrementar la dificultad para
romper el criptograma debido a la carga computacional adicional que la derivación
añade. La función utilizada se llama "PBKDF2WithHmacSHA1". Esta función recibe 4
parámetros para generar la clave que se requiere:
Por otro lado, se ha decidido que 11000 sea el número máximo de iteraciones porque,
además de la seguridad, también es muy importante la velocidad y el rendimiento del
sistema. Un número mayor de iteraciones puede causar tiempos de cómputo
demasiado elevados.
6.2.1.4 CIFRADO
En este algoritmo, se ha decidido utilizar el algoritmo de cifrado AES por estar
considerado por la NSA como seguro. La clave de cifrado elegida es de 256 bits.
Además, antes de cifrar, se generará un vector de inicialización aleatorio con tamaño
de bloque AES para que, cuando se cifre el mensaje a partir de la clave generada
anteriormente, los resultados del cifrado sean distintos aunque se utilizase siempre el
mismo mensaje y la misma clave.
6.2.2 DESORDEN
Este método se utiliza para desordenar el mensaje cifrado a partir de una contraseña.
Como siempre realiza el mismo algoritmo de desordenación para ser completamente
reversible, sólo recibe un único atributo. Este atributo no es otro más que el mensaje
118
Trabajo de Fin de Grado Carlos Pliego García
cifrado que tiene que desordenar. Su algoritmo, en muy alto nivel, es como se muestra
a continuación.
desorden(mensaje):
Se clona el mensaje en una variable auxiliar.
Se declaran dos contadores: el punto de inicio del mensaje (posición 0) y el
punto final (posición longitudMensaje-1).
Se recorre todas las posiciones del mensaje salvo la última:
o Se cambia el dato que está en la posición del mensaje por el siguiente
al del contador de la posición inicial del auxiliar.
o Se incrementa en 1 este contador de posición inicial.
o El valor de la siguiente posición del mensaje se sobrescribe por el dato
del contador de la posición final (longitudMensaje-1) del auxiliar.
o Se resta el valor 1 al contador de la posición final.
Si la longitud del mensaje es impar:
o Se escribe el valor que se encuentra en el contador de la posición final
del auxiliar en la penúltima posición del mensaje.
Se devuelve el mensaje desordenado.
Tabla 121: Algoritmo del método desorden
La razón por la que se ha decidido hacer uso de este método no es otra que la de
emplear una medida de seguridad adicional en el proceso de cifrado. Cuando se
desordena, el mensaje queda ilegible, lo que produce que la dificultad de ataque
aumente.
119
Trabajo de Fin de Grado Carlos Pliego García
6.2.3 CODIFICACIÓN
Se ha implementado el sistema de codificación base64. El uso de este método se
debe a que no es posible generar un código QR a partir de la estructura de bytes que
se genera cuando se cifra el mensaje. Para generar un QR es necesario una estructura
String y, en muchos casos, la estructura de bytes que se genera en el cifrado está
compuesta por caracteres que pueden generar problemas porque no son imprimibles
o no están soportados. Por eso se ha decidido utilizar la codificación base64. Ésta
codifica cada uno de los caracteres usando 64 como base. Una vez se ha codificado,
la cadena de texto generada contiene caracteres perfectamente imprimibles en el
rango de caracteres alfanuméricos.
Para codificar los datos en base64 se hace uso de la clase Java "Base64.java" de
Mikael Grev.
Estos tokens se concatenan al comienzo del mensaje una vez cifrado, desordenado y
codificado para saber en qué posición están exactamente éstos. Es muy importante el
orden en el que se concatenan estos tokens ya que será el orden en el que se han
concatenado las claves de cada uno de estos métodos para generar la contraseña
principal del mensaje.
El orden en el que se concatenarán estos tokens es: @, #, $, & y %. Esto quiere decir
que, si un mensaje ha sido cifrado con todos los tipos de cifrado, comenzará de la
siguiente forma: "%&$#@" (porque se concatena al principio del mensaje).
120
Trabajo de Fin de Grado Carlos Pliego García
6.3.1 CÁMARA
Una forma muy cómoda de obtener un mensaje incluido en un código QR es enfocarlo
directamente con la cámara del smartphone. Para esto, es necesario que el
smartphone posea una cámara integrada y que el mensaje se obtenga en tiempo real.
La librería utilizada anteriormente se llama ZXing y es muy completa para descifrar y
generar códigos QR pero, para poder utilizar su módulo de cámara, es necesario que
su aplicación oficial llamada "Barcode Scanner" esté instalada en el dispositivo. Esta
obligación se debe a que no existe otra forma de escanear por la cámara un código
QR sin hacer uso directamente de la actividad principal de la aplicación oficial de
ZXing. Por eso, es necesario utilizar otra librería para este procedimiento, ya que
resulta muy tedioso obligar al usuario a instalarse otra aplicación.
6.3.1.1 ZBAR
La librería que se ha decidido utilizar para este fin se llama ZBar. El objetivo principal
de esta librería es la lectura de códigos de todo tipo de códigos de barras (entre ellos,
el código QR). Esta librería está desarrollada para varios sistemas operativos y entre
ellos se incluye Android. Es una librería muy fácil de usar con actividades
prediseñadas en las que se puede utilizar la cámara del dispositivo como lector QR.
[21]
6.3.1.2 leerCamara
Para utilizar este método, se ha optado por modificar una clase de ejemplo
prediseñada que incluía la librería. Esta clase pide permisos al sistema operativo para
utilizar la cámara del dispositivo y busca en tiempo real códigos QR que se enfoquen
con ésta. Si no encuentra ninguno, la clase seguirá buscando hasta que este
procedimiento se cancele. En el caso de que se encuentre algún código QR, la clase
intentará extraer el mensaje que contiene (cifrado o no) y lo enviará a la actividad
principal de tratamiento del mensaje.
La forma en la que se ejecuta esta clase que usa la cámara es mediante la clase
principal de tratamiento de mensaje. Cuando el usuario apriete el botón de leer por
cámara, la aplicación ejecutará la clase principal de tratamiento de mensajes con la
variable de cámara seleccionada. Cuando la clase detecta que esta variable está
activada, llama a la clase de cámara mediante un Intent.
121
Trabajo de Fin de Grado Carlos Pliego García
una clase como actividad y esperar la respuesta de ésta. Esta respuesta que espera la
clase principal es el mensaje incluido en el código QR. [22]
6.3.2 FICHERO
A parte de la cámara, se ha decidido incluir un modo de lectura de códigos QR que, a
pesar de que su implementación es sencilla, no existe en casi ninguna aplicación que
se encuentre en el repositorio oficial de Android. Este procedimiento consiste en
permitir que el usuario seleccione un archivo de imagen que contenga un código QR
por medio del explorador de archivos de su terminal y la aplicación extraiga el
mensaje incluido en él.
Para lograr este fin se ha decidido utilizar de nuevo la librería ZXing, ya que soporta
este tipo de lectura de códigos QR sin necesidad de tener instalada su aplicación
oficial y, además, se considera que es conveniente reutilizar librerías antes que
importar nuevas cuando las librerías importadas anteriormente ya cuentan con estas
funcionalidades.
Esta librería es capaz de leer los pixeles de una imagen, detectar si existe un código
QR representado en ella por medio de reconocimiento de patrones y aislarlo de los
demás elementos para, finalmente, extraer el mensaje que éste contiene.
6.3.2.1 pasarABlancoYNegro
Una de las funcionalidades más interesantes de la aplicación consiste en la
generación de códigos QR de distintos colores para identificar rápidamente cuando
un código QR está cifrado (es un QRypt) y cuando no. A pesar del atractivo que suma
al sistema, se produce un problema serio: cuando los colores no son muy distintos del
blanco, el método principal de lectura del código QR no funciona.
pasarABlancoYNegro(códigoQR):
Se genera un Bitmap vacío que hará de salida con las mismas características
que el que contiene el código.
Se recorre pixel a pixel el Bitmap con el código:
o Si el valor RGB del pixel se asemeja al blanco, se escribe un pixel
blanco en el Bitmap de salida.
o Si el valor RGB del pixel se asemeja a otro, se escribe un pixel negro en
el Bitmap de salida.
Se devuelve el Bitmap de salida.
Tabla 122: Algoritmo del método pasarABlancoYNegro
122
Trabajo de Fin de Grado Carlos Pliego García
Se ha decidido interpretar los colores por medio de umbrales y no por los valores
exactos de colores ya que es posible que la imagen que se está leyendo sea una foto
y, por culpa de la luz, el color blanco es un gris muy claro. Si no se emplease la
identificación del color por umbrales, ese color no sería blanco y lo interpretaría
entonces como negro, quedando el código completamente ilegible.
6.3.2.2 leerFichero
Al igual que en el procedimiento de la cámara, se hace uso de un objeto Intent para
lograr el objetivo de este módulo pero, en vez de para obtener el mensaje del código
que se está enfocando por la cámara, se utiliza para llamar al explorador de archivos
del sistema operativo. Este explorador de archivos devolverá la ruta de la imagen que
se ha seleccionado y la clase principal de tratamiento de mensajes interpretará los
datos que ese encuentran en ella.
leerFichero(ruta):
Se transforma el archivo que existe en la ruta recibida a un objeto Bitmap.
Se crean unos objetos RGBLuminanceSource y BinaryBitmap a partir del
Bitmap que contiene toda la imagen en la que está incluida un código QR.
Se aísla el código QR de los demás elementos de la imagen y se almacena en
un Bitmap.
Se pasa a blanco y negro el Bitmap con el código mediante el método
pasarABlancoYNegro.
Se extrae el mensaje del Bitmap con el código QR en blanco y negro utilizando
el método decode de la clase MultiFormatReader.
Se devuelve el mensaje extraído.
Tabla 123: Algoritmo del método leerFichero
Al igual que en el procedimiento de lectura por cámara, una vez se obtiene el mensaje,
se comprobará si está cifrado o no. Si estuviese cifrado se procedería a ejecutar el
módulo de descifrado cuya implementación se explicará a continuación. Si no fuese
así, el mensaje se mostraría directamente.
123
Trabajo de Fin de Grado Carlos Pliego García
Como se explicó en el diseño del sistema, la aplicación hace uso de unos algoritmos
de cifrado que se emplean en el mensaje para obtener una versión protegida de éste,
pero también se explicó que utilizaría algoritmos de descifrado para poder obtener el
mensaje original de nuevo. En este capítulo se van a explicar un poco más en
profundidad estos últimos algoritmos.
El método que realiza esta tarea se llama tokensDeControl y recibe por parámetros
únicamente el mensaje cifrado recién extraído del código QRypt.
124
Trabajo de Fin de Grado Carlos Pliego García
tokensDeControl(mensajeCifrado):
Se recorren las primeras posiciones del mensaje:
o Si el caracter en la posición es un "%":
Se abre un diálogo y se pide al usuario que introduzca la
contraseña.
Se genera un hash con esa contraseña con una función
resumen SHA-1.
Se elimina el caracter de esa posición del mensaje.
o Si el caracter en la posición es un "&":
Se abre un diálogo y se pide al usuario que introduzca el
patrón.
Se genera un hash con ese patrón con una función resumen
SHA-1.
Se elimina el caracter de esa posición del mensaje.
o Si el caracter en la posición es un "$":
Se obtiene el Imei del terminal.
Se genera un hash con ese Imei con una función resumen
SHA-1.
Se elimina el caracter de esa posición del mensaje
o Si el caracter en la posición es un "#":
Se obtiene el modelo del terminal.
Se genera un hash con ese modelo con una función resumen
SHA-1.
Se elimina el caracter de esa posición del mensaje
o Si el caracter en la posición es un "@":
Se obtiene la fecha actual.
Se concatena el año, el mes y el día y se genera un hash con
esa fecha con una función resumen SHA-1.
Se elimina el caracter de esa posición del mensaje
Se concatenan los hashes.
Se devuelven los hashes.
Tabla 124: Algoritmo del método tokensDeControl
Una vez se obtienen los hashes concatenados, se extraen los demás datos que se
utilizarán para generar la clave. Estos datos se encuentran concatenados al final del
mensaje y son: el salt, el número de iteraciones del proceso de derivación y el vector
de inicialización del algoritmo de cifrado. Una vez extraídos del mensaje, se borran de
este para no
6.4.2 DESCODIFICACIÓN
Como se ha implementado el sistema de codificación base64, hay que hacer uso de la
descodificación base64 para volver a obtener el mensaje cifrado desordenado en
estructura de array de bytes, que será necesario para poder descifrarlo
posteriormente. Además, en este proceso se extraen los demás datos que se
utilizarán para generar la clave. Estos datos se encuentran concatenados al final del
mensaje y son: el salt (su hash), el número de iteraciones del proceso de derivación y
el vector de inicialización del algoritmo de cifrado.
6.4.3 REORDENACIÓN
En el módulo de cifrado se utilizó un algoritmo que desordenaba la posición de los
datos en el mensaje. En esta tarea es menester devolver el mensaje desordenado a su
125
Trabajo de Fin de Grado Carlos Pliego García
orden(mensaje):
Se clona el mensaje en una variable auxiliar.
Se declaran dos contadores: el punto de inicio del mensaje (posición 0) y el
punto final (posición longitudMensaje-1).
Se recorre todas las posiciones del auxiliar del mensaje salvo la última:
o Se cambia el dato que está en la posición siguiente a la del contador
de punto de inicio del mensaje por el valor de la posición que se está
observando en el auxiliar.
o Se incrementa en 1 este contador de posición inicial.
o Se cambia el dato que está en la posición anterior a la del contador de
punto final del mensaje por el siguiente valor de la posición que se
está observando en el auxiliar.
o Se resta el valor 1 al contador de la posición final.
o se incrementa en uno el contador general del bucle.
Si la longitud del mensaje es impar:
o Se escribe el valor que se encuentra al final del auxiliar en la posición
que indica el contador del punto final del mensaje.
Se devuelve el mensaje ordenado.
Tabla 125. Algoritmo del método orden
Una vez se ejecuta este algoritmo, los datos que componen el mensaje quedarán
reordenados a su posición original y sólo faltará descifrar el mensaje.
126
Trabajo de Fin de Grado Carlos Pliego García
Como se han obtenido los hashes de las contraseñas en la ejecución del algoritmo del
método tokensDeControl y, también, se han conseguido el salt, el número de
iteraciones y el vector de inicialización en la tarea de descodificación, sólo hace falta
generar la clave y descifrar el mensaje con ella.
Una vez obtenido el mensaje, sólo haría falta mostrarlo para que el usuario lo
conozca.
127
Trabajo de Fin de Grado Carlos Pliego García
Estos módulos son los de cambio de ajustes del sistema y el de conocer las
novedades de la versión del programa.
Estas bases de datos son muy rápidas pero no están cifradas. Se guardan en la ruta
"/data/data/paqueteDeLaAplicacion/databases" que es una carpeta incluida en el
sector "protegido" del sistema operativo. una aplicación, sin permisos de
superusuario es incapaz de acceder a esta ruta pero, aun así, existen muchas
aplicaciones en el repositorio de Android que son capaces de hacerlo. Cada vez son
más los smartphones que tienen un kernel con permisos de superusuario y eso
significa que la seguridad que ofrecía este sector "protegido" del sistema ya es nula.
Por eso, a lo largo del último año se ha vuelto una medida común el almacenar los
datos importantes en la memoria dedicada a la aplicación. Su acceso es más rápido y
es segura porque no puede acceder a ella ninguna otra aplicación que la propietaria;
por lo tanto, eso la convierte en una buena medida de seguridad adicional.
De momento, los únicos datos que se guardarán en ella serán la ruta de la carpeta de
salida y el idioma elegido para la aplicación pero, en versiones posteriores, se
guardarán también las contraseñas favoritas y demás datos que necesitan estar
almacenados en un lugar seguro.
La forma de acceder a esta memoria es muy simple: basta con hacer uso de la clase
de Android SharedPreferences para obtener los datos como si fueran atributos:
accediendo a estas preferencias por posiciones. De esta forma, en la posición 0 habrá
un dato y en la posición 4 otro distinto y se podrán obtener desde cualquier actividad
de la aplicación.
128
Trabajo de Fin de Grado Carlos Pliego García
carpetaDeSalida(ruta):
Se accede a la posición del objeto SharedPreferences que almacena la ruta de
la carpeta de salida.
Se sobrescribe su valor por el de la ruta que se recibe por parámetros.
Tabla 127: Algoritmo del método carpetaDeSalida
Aun así, en este apartado se ha querido ir un paso más adelante. La mayoría de las
aplicaciones para Android que están traducidas no permiten cambiar el idioma de la
aplicación directamente desde ella. Se muestran en el idioma que está configurado
para todo el sistema operativo. De esta forma, si el sistema operativo está en
castellano pero la aplicación está muy mal traducida y se prefiere en inglés, esto no
se puede cambiar.
Cuando se realiza el diseño de una aplicación, todas las cadenas estáticas que se
muestran en ella se guardan como variables finales para poder llamarlas sin tener que
escribirlas directamente en el código. Estas variables se guardan en la carpeta
"res/values/" (resources) y, dependiendo del idioma que sea, en una subcarpeta o en
otra. De esta forma, si el idioma de las cadenas escritas es inglés estadounidense, la
subcarpeta dentro de "res" se llamará "values-en_US".
Como esta aplicación tiene que poder mostrarse en inglés y en español, cuenta con 2
subcarpetas dentro de res con 2 archivos "strings.xml" con las cadenas estáticas de
un idioma y otro. El archivo "string.xml" con las cadenas en español está en
"res/values-es_ES/" y el archivo "string.xml" en inglés está en "res/values-es_US".
[23]
129
Trabajo de Fin de Grado Carlos Pliego García
Por defecto, se elige el idioma que se tenga configurado en el dispositivo pero, si ese
idioma no es ninguno de estos 2, la aplicación se mostrará en inglés. Si, por otro lado,
el usuario decide cambiar el idioma, la aplicación modificará el valor del objeto
SharedPreferences que representa el idioma al lenguaje que éste elija. Como se
guarda en esta memoria dedicada a la aplicación, a partir de ese momento, el sistema
se mostrará en ese idioma al no ser que se desinstale la aplicación o se vuelva a
modificar éste.
establecerIdioma():
Acceder a la posición de SharedPreferences donde se encuentra el valor del
idioma.
Crear un objeto Locale e inicializarlo con el idioma recogido.
Seleccionar ese idioma como por defecto con el método setDefault de la clase
Locale.
Crear un objeto Configuration.
Establecer ese idioma en la configuración con el atributo locale de la clase
Configuration.
Actualizar la interfaz con el método updateConfiguration.
Tabla 128: Algoritmo del método establecerIdioma
En la tabla anterior se muestra el algoritmo del método para establecer el idioma que
se ejecuta cada vez que se abre la aplicación.
Otro método importante que conviene explicar, aunque sea muy simple, es el de
modificar el idioma. Cada opción que se muestra en el diálogo que aparece en la
interfaz de selección de idioma tiene vinculado una variable que almacena el idioma
que se representa. De esta forma, cuando se pulsa el botón "English" se actualiza una
variable al valor "en_US" y, cuando se selecciona el "Español", la variable toma el valor
"es_ES". Por eso, cuando el usuario pulsa sobre la opción de modificar el idioma y
selecciona uno de ellos y pulsa el botón aceptar, la aplicación envía el valor de esta
variable al objeto SharedPreferences y lo almacena en la posición que represente el
idioma. En la siguiente tabla se muestra el algoritmo que se utiliza para lograr tal fin.
actualizarIdioma():
El usuario selecciona una de las opciones de idioma.
Si el usuario pulsa "Aceptar":
o Se envía el valor del idioma escogido a SharedPreferences y se
almacena en la posición correspondiente.
o Se ejecuta la función establecerIdioma(). (Explicada anteriormente)
Si el usuario pulsa "Cancelar":
o Se cierra el diálogo y no se hace nada.
Tabla 129: Algoritmo del método actualizarIdioma
130
Trabajo de Fin de Grado Carlos Pliego García
que ofrece una versión de un sistema de información pueden ser desde mínimos
(como arreglos de velocidad) hasta inmensos (como uno cambio radical en el diseño,
o una implementación de una función nueva). Sea el cambio que sea, el usuario debe
saber qué es lo que le ofrece la nueva versión que no le ofrecía la anterior para valorar
si conviene actualizar la aplicación o si, por el contrario, no es algo importante y
puede esperar a otra nueva.
mostrarLog():
Buscar la variable en el archivo "strings.xml" del idioma elegido que contenga
la información.
Mostrar esta cadena por pantalla en un diálogo.
Tabla 130: Algoritmo del método mostrarLog
131
Trabajo de Fin de Grado Carlos Pliego García
7 EVALUACIÓN Y RESULTADOS
En esta sección se pondrá a prueba la aplicación desarrollada y se mostrarán los
resultados obtenidos para, finalmente, comprobar su funcionalidad y concluir con una
sentencia sobre ella.
7.1 FUNCIONALIDAD
En este primer capítulo se va a comprobar si la aplicación realiza todas las
funcionalidades que se propusieron en los requisitos. Sólo se evaluará si realiza todas
las funcionalidades y si lo hace bien, en un capítulo posterior se evaluará su
rendimiento.
132
Trabajo de Fin de Grado Carlos Pliego García
133
Trabajo de Fin de Grado Carlos Pliego García
134
Trabajo de Fin de Grado Carlos Pliego García
135
Trabajo de Fin de Grado Carlos Pliego García
7.1.2.1 GMAIL
En el diseño del sistema se definió que, cuando se eligiese la opción de enviar un
código por GMail, lo que la aplicación abriría sería el módulo de redacción de un
mensaje del programa oficial de GMail y adjuntaría automáticamente la imagen con el
código QR generado.
136
Trabajo de Fin de Grado Carlos Pliego García
7.1.2.2 DROPBOX
En el diseño del sistema se definió que, cuando se eligiese la opción de enviar un
código a Dropbox, lo que la aplicación abriría sería el módulo de subida de archivo del
programa oficial de Dropbox.
137
Trabajo de Fin de Grado Carlos Pliego García
7.1.2.3 TWITTER
En el diseño del sistema se definió que, cuando se eligiese la opción de enviar un
código a Twitter, lo que la aplicación abriría sería el módulo de redacción de tweet de
del programa oficial de Twitter y adjuntaría en él la imagen con el código.
138
Trabajo de Fin de Grado Carlos Pliego García
7.1.2.4 WHATSAPP
En el diseño del sistema se definió que, cuando se eligiese la opción de enviar un
código a Whatsapp, lo que la aplicación abriría sería el módulo de compartición de un
imagen con un contacto.
139
Trabajo de Fin de Grado Carlos Pliego García
140
Trabajo de Fin de Grado Carlos Pliego García
El programa pide confirmación del usuario para enviar la imagen. Si el usuario pulsa el
botón "Ok", la imagen se enviará; si, por otro lado, pulsa el botón "Cancelar", el
programa volverá a la lista de contactos.
La siguiente imagen muestra cómo se envía el código cuando se pulsa sobre el botón
"Ok":
141
Trabajo de Fin de Grado Carlos Pliego García
142
Trabajo de Fin de Grado Carlos Pliego García
143
Trabajo de Fin de Grado Carlos Pliego García
Como se puede observar, el código generado, además de ser del color elegido es
notablemente más grande que el código QR anteriormente mostrado. Esto se debe a
que si se recuerda de secciones anteriores, este QRypt no sólo contiene el mensaje, si
no, además, el salt, el número de iteraciones y el vector de inicialización. Además, si
se compara la ilustración anterior con la siguiente, se podrá comprobar cómo, debido
al vector de inicialización, los 2 códigos QRypt generados son distintos. Cabe añadir
que ambos contienen el mensaje "Esto es una prueba" y están cifrado con el imei del
teléfono.
144
Trabajo de Fin de Grado Carlos Pliego García
145
Trabajo de Fin de Grado Carlos Pliego García
7.1.4.1 CÓDIGO QR
Se va a comprobar con el código generado en el capítulo de evaluación del módulo de
generación de códigos QR si la aplicación es capaz de leer el código y recuperar el
mensaje al igual que la aplicación "Barcode Scanner".
146
Trabajo de Fin de Grado Carlos Pliego García
147
Trabajo de Fin de Grado Carlos Pliego García
Si se intenta leer uno de los códigos QRypt generados en la sección de evaluación del
módulo de generación QRypt:
148
Trabajo de Fin de Grado Carlos Pliego García
149
Trabajo de Fin de Grado Carlos Pliego García
Si, se genera un código QRypt que cifre el mensaje con alguno de los tipos de cifrado
que exigen una interacción del usuario, al leer el código se pediría al usuario que
introduzca algún dato.
Por ejemplo, si se genera un código QRypt con el mensaje "Esto es una prueba 2"
cifrado con una contraseña, la aplicación pide al usuario que introduzca esta
contraseña como se muestra en la siguiente ilustración:
150
Trabajo de Fin de Grado Carlos Pliego García
151
Trabajo de Fin de Grado Carlos Pliego García
Cuando se intenta leer este código mediante la cámara del dispositivo, la aplicación
detecta que está cifrado con una contraseña y pide al usuario que la introduzca.
152
Trabajo de Fin de Grado Carlos Pliego García
Una vez se introduce la contraseña, la aplicación intenta descifrar el código con ella.
Como la contraseña para cifrar y descifrar era exactamente la misma, en la siguiente
ilustración se muestra como el mensaje ha sido descifrado correctamente.
153
Trabajo de Fin de Grado Carlos Pliego García
154
Trabajo de Fin de Grado Carlos Pliego García
Cuando se elige el explorador que se quiere usar, sólo basta con elegir el archivo
desde él y el programa intentará obtener el mensaje incluido en el código QR o QRypt.
155
Trabajo de Fin de Grado Carlos Pliego García
156
Trabajo de Fin de Grado Carlos Pliego García
157
Trabajo de Fin de Grado Carlos Pliego García
Un ejemplo de esto que, además, sirve para evaluar esta funcionalidad es el siguiente:
Se abre una aplicación cualquiera que permita manejar fotografías y se busca una
imagen con un código QR o QRypt en ella. Por ejemplo, "QuickPic", que es una galería.
Una vez se elige la imagen que se quiere leer, se busca en el menú de la aplicación el
botón "Compartir" para enviarla a la aplicación desarrollada de la misma forma que
ella se lo manda a otras aplicaciones.
158
Trabajo de Fin de Grado Carlos Pliego García
159
Trabajo de Fin de Grado Carlos Pliego García
Como el mensaje del código estaba cifrado con el modelo del terminal, no ha habido
ningún problema a la hora de descifrarlo. Si estuviese cifrado con una contraseña o
un patrón, la aplicación exigiría al usuario que lo introdujese.
Se ha observado que esta pequeña expansión del módulo de lectura por fichero
también ha funcionado. Sólo queda evaluar la funcionalidad del módulo de cambio de
ajustes y de muestra de novedades de la versión.
160
Trabajo de Fin de Grado Carlos Pliego García
161
Trabajo de Fin de Grado Carlos Pliego García
Para comprobar que esto funciona, en esta prueba se modifica la ruta por
"sdcard0/codigosQR/" como se muestra en la siguiente ilustración:
162
Trabajo de Fin de Grado Carlos Pliego García
Ahora que se ha modificado la ruta, los códigos que se generen deberían almacenarse
en la nueva ruta. En la siguiente imagen se observa cómo, después de generar otro
código, éste se ha guardado en la carpeta que se encuentra en la ruta especificada:
163
Trabajo de Fin de Grado Carlos Pliego García
Después de esta simple prueba, se puede decir que esta funcionalidad también
obtiene su objetivo de forma óptima.
164
Trabajo de Fin de Grado Carlos Pliego García
165
Trabajo de Fin de Grado Carlos Pliego García
La prueba es muy simple: consiste en pulsar el botón del panel deslizable dedicado a
mostrar las novedades. Si se muestra el diálogo correspondiente, el resultado será el
esperado.
166
Trabajo de Fin de Grado Carlos Pliego García
7.1.8 CONCLUSIÓN
Se han puesto a prueba todas las funcionalidades que ofrece el programa y éste ha
resuelto los problemas con los resultados que se esperaban. Cuando se le pide que
genere un código QR, éste lo hace. Cuando se le pide que genere un QRypt, éste
pregunta el color y el tipo de cifrado, en vez de generarlo directamente. Cuando se le
pide que lea un código por cámara o por fichero, la aplicación lo hace correctamente.
Además, el sistema también es capaz de cambiar el idioma, la ruta de la carpeta de
salida y de mostrar las novedades de la versión que se han implementado.
Se recuerda que el dispositivo móvil utilizado para las pruebas posee un procesador
dual-core de 1.2GHz.
167
Trabajo de Fin de Grado Carlos Pliego García
7.2 RENDIMIENTO
Después de evaluar la funcionalidad de la aplicación, la siguiente característica que
se va a poner a prueba es el rendimiento global del sistema. Este rendimiento vendrá
dado por la velocidad con la que es capaz de realizar las funciones que precisen de
más cómputo. Estas funciones son: generar códigos QR y QRypt. Las funciones de
lectura de códigos no van a evaluarse ya que, una vez se ha enfocado el código con la
cámara o se ha elegido el archivo a leer, el tiempo que tarda la aplicación en extraer el
mensaje y descifrarlo parece inmediato a los ojos humanos.
Como se puede observar, en el peor de los casos, la aplicación tardará poco más de 1
segundo en generar el código QR. Se complementa esta información con una
pequeña gráfica para observar que la diferencia temporal cuanto más caracteres
componen el mensaje es cada vez menor.
168
Trabajo de Fin de Grado Carlos Pliego García
Como dato importante, el número de caracteres que se van a utilizar en los distintos
tipos de cifrado está representado en la siguiente tabla:
Aunque tenga el mismo número de caracteres el modelo y el imei del terminal (15
caracteres), se puede observar que cifrar con el modelo tarda más. Esto se debe a
que, al obtener el imei sólo se hace una llamada al sistema, mientras que, al obtener la
marca y el modelo, se hacen dos.
169
Trabajo de Fin de Grado Carlos Pliego García
7.2.2.3 COMPARACIÓN
Seguidamente y, por último en esta sección, se presentan los datos en forma de
gráfica para poder realizar una comparación más cómoda entre las diferencias de
rendimiento que presenta la generación de un código QRypt con uno y otro de los
tamaños de mensaje:
Además, cabe resaltar que la aplicación, en el peor de los casos, no llega a tardar ni
siquiera 3 segundos en generar un código QRypt; por lo tanto, se determina que
cumple el requisito de usuario RUR-07, el cuál exigía que la aplicación debería tardar
menos de 1 minuto en generar un código QRypt.
170
Trabajo de Fin de Grado Carlos Pliego García
7.3 INTEGRIDAD
Hasta ahora, se ha evaluado la funcionalidad de la aplicación y su rendimiento, y el
sistema ha logrado sus objetivos. Ahora, llega el turno de evaluar la aplicación
llevando a cabo alguna prueba de integridad. En esta sección se buscará poner a
prueba al sistema en las situaciones más complicadas y comprobar si las supera
correctamente.
Se ha decidido ocultar una parte del código generado para ver hasta qué punto es
capaz la aplicación de recuperar su mensaje. El código elegido para tal fin es uno
QRypt ya que, al contener tokens de control, en el caso de que no se pudiese
recuperar uno de éstos, sería imposible descifrar el mensaje. Debido a que se
considera más complicado recuperar el mensaje de un código QRypt correctamente
frente a un código QR, la prueba sólo se realizará con un código de este tipo.
171
Trabajo de Fin de Grado Carlos Pliego García
Se observa que se ha eliminado una parte de la esquina inferior derecha. Aun así, la
aplicación ha sido capaz de recuperar el mensaje completo, aunque tardando 1
segundo más de lo normal. Esto se debe a que tiene que buscar en otros sectores la
parte del mensaje que no ha podido recuperar.
Se ha decidido ir más allá con la prueba y se ha eliminado un poco más del código. El
sector eliminado en este caso es más grande. Aun así, la aplicación ha conseguido
recuperar el mensaje correctamente. De nuevo, ha tardado un poco más de tiempo en
extraerlo.
172
Trabajo de Fin de Grado Carlos Pliego García
Como prueba final se partirá del código utilizado en la última prueba en la que sí se
pudo extraer el mensaje y se eliminará una parte del código alejada del sector
eliminado.
Como se puede observar, el sector eliminado está muy alejado del sector que se
eliminó en otras pruebas. Aunque esté alejado, la aplicación no ha sido capaz de
obtener el mensaje tampoco en este caso.
173
Trabajo de Fin de Grado Carlos Pliego García
7.3.2.1 CÓDIGO QR
Para que se entienda cuando se ha especificado anteriormente que un código a partir
de un mensaje de 2000 caracteres es de grandes dimensiones, la siguiente imagen
muestra el código con el que se realizará esta prueba:
174
Trabajo de Fin de Grado Carlos Pliego García
Como se puede observar, el código está muy comprimido porque contiene muchos
datos que, a pesar de que los soporta, quizá sean demasiados.
Cuando se intenta leer este código mediante la cámara del dispositivo, la aplicación
es capaz de extraer el mensaje únicamente 4 veces de cada 10; o sea, en un 40% de
los casos. Se intuye que esto ocurre debido a que, por razones de luminosidad o pulso
del usuario, la cámara nunca es capaz de enfocar completamente el código.
Por otro lado, cuando se intenta leer desde el fichero generado, la aplicación extrae el
mensaje correctamente y, además, de forma rápida.
175
Trabajo de Fin de Grado Carlos Pliego García
Como se puede observar y al igual que en el anterior caso, el código está muy
comprimido porque contiene muchos datos que, a pesar de que los soporta, quizá
sean demasiados. Incluso este código contiene más datos que el anterior.
Cuando se intenta leer este código mediante la cámara del dispositivo, la aplicación
es capaz de extraer el mensaje únicamente 2 veces de cada 10; o sea, en un 20% de
los casos (un 20% menos que en el caso anterior). Se intuye que esto ocurre debido a
que, por razones de luminosidad, de colores o pulso del usuario, la cámara nunca es
capaz de enfocar completamente el código.
Por otro lado y, como ocurre en el caso del código QR, cuando se intenta leer desde el
fichero generado, la aplicación extrae el mensaje correctamente y, además, de forma
rápida.
7.3.2.3 CONCLUSIÓN
Aunque se pueda generar un código QR o QRypt con un mensaje de 2000 caracteres,
está claro que quizá sean demasiados. Además, casi nadie escribirá un mensaje tan
largo pero, aun así, la aplicación es capaz de leerlo. Lo único que se ha sacado en
claro de esta prueba es que la aplicación falla al extraer el mensaje utilizando la
cámara del dispositivo pero, aun así, se considera que es un fallo que no puede tener
arreglo.
176
Trabajo de Fin de Grado Carlos Pliego García
7.4 SEGURIDAD
Debido a que el objetivo de este proyecto y la filosofía de la aplicación desarrollada
consisten en la seguridad, esta característica de la aplicación no podría quedar sin
evaluar.
Como se puede ver en la tabla anterior, intentar atacar un sistema que haya
implementado un algoritmo de cifrado AES con tamaño de clave de 256 bits,
significaría tener que generar 1.1 x 1077 combinaciones distintas de claves y, además,
comprobarlas. Se puede decir que es un ataque completamente inviable ya que, con la
potencia computacional de los superordenadores de hoy en día, se tardaría muchos
años en generar todas las combinaciones.
Además, cabe resaltar que, por otro lado, la aplicación no almacena aun ningún dato
del usuario y que, cuando lo haga (la contraseña por defecto), lo hará en un sector
seguro de la aplicación.
177
Trabajo de Fin de Grado Carlos Pliego García
8 CONCLUSIÓN
Quizá el desarrollo de este Proyecto de Fin de Grado haya resultado en momentos
tremendamente exasperante pero, claramente, cuando uno se da cuenta de que ha
conseguido lo que se proponía incluyendo funcionalidades adicionales, todos esos
momentos de desesperación se quedan en un segundo plano.
Pero, ¿cómo olvidar esos momentos malos cuando han sido responsables de noches
sin dormir e, incluso, enfados con amigos y familiares sin motivo alguno? Pues
porque gracias a ellos ha sido posible el desarrollo y culminación de este proyecto.
Gracias a ellos, no sólo han crecido y crecido las líneas de código de la aplicación.
También ha crecido mi experiencia y, lo más importante, he crecido yo como persona.
Después de desarrollar esta aplicación con toda la información previa que tuve que
leerme, con todos esos conceptos que tuve que entender y con todas las guías de
diseño que tuve que seguir para que la aplicación resultante fuese "un buen trabajo",
casi me siento capaz de hacer cualquier cosa.
Sólo espero que la gente que lea este proyecto, incluso dentro de unos años, disfrute
lo mismo que lo que he disfrutado yo realizándolo.
178
Trabajo de Fin de Grado Carlos Pliego García
Después de hacer balance y observar la lista anterior, se puede concluir que se han
alcanzado todos los objetivos propuestos durante el desarrollo de la aplicación.
El primero de estos trabajos es, quizá, el más importante y con el que más apetece
ponerse manos a la obra. Se considera que la aplicación es muy completa y su diseño
es, además de usable y accesible, bastante original pero de nada sirve realizar una
aplicación así si luego no se da a conocer. Por lo tanto, este primer trabajo futuro va a
consistir en añadir esta aplicación al repositorio de Android Google Play para ponerla
en manos de muchos usuarios reales y estudiar su aceptación. Además, de esta
forma, los usuarios podrían avisar de problemas que han tenido o proponer nuevas
ideas.
Quizá otro trabajo interesante debido a su pequeño tamaño, sería poder introducir la
información de un archivo Midi en un código de forma que, cuando se lea éste, se
reproduzca la canción.
Otro trabajo podría consistir en cifrar un mensaje con el SSID de una red WIFI. De esta
forma, el receptor sólo podría leer el contenido del código cuando se encuentre
conectado a esa red.
179
Trabajo de Fin de Grado Carlos Pliego García
Además, sería muy interesante incluir una funcionalidad consistente en que el usuario
pueda cifrar claves WIFI y que, cuando otro usuario lea ese código, se conecte
automáticamente su móvil a esa red.
Por último, se considera casi indispensable portar la aplicación a iOS. De esta forma
el código QRypt podría extenderse abundantemente y, quizá, ser reconocido como
estándar. Además, una versión para ordenador de sobremesa de la aplicación
resultaría también muy suculenta aunque habría que modificar las librerías para que
fuera 100% compatible con Java y modificar la interfaz.
180
Trabajo de Fin de Grado Carlos Pliego García
9 BIBLIOGRAFÍA
[1] La Biblia del Programador: Estructura de Android:
http://labibliadelprogramador.blogspot.com.es/2012/09/estructura-de-android.html
181
Trabajo de Fin de Grado Carlos Pliego García
[20] zxing - Multi-format 1D/2D barcode image processing library with clients for
Android, Java - Google Project Hosting: https://code.google.com/p/zxing/
[30] RFC 4648 - The Base16, Base32, and Base64 Data Encodings:
https://tools.ietf.org/html/rfc4648#page-5
182
Trabajo de Fin de Grado Carlos Pliego García
10 ANEXOS
ADT (Android Development Tools): Plugin para el IDE de Eclipse que sirve para
poder programar aplicaciones Android mediante varios complementos.
API (Application Programming Interface): Conjunto de funciones y métodos
que ofrece cierta biblioteca para ser utilizado por otro software como una capa
de abstracción.
Bitmap: Objeto de Android. Es un mapa de bits que representa una imagen.
Dropbox: Servicio que permite el almacenamiento de datos en la nube.
Facebook: Servicio web con naturaleza de red social muy conocido.
GHz: Medida de frecuencia utilizada para determinar la velocidad de cómputo
de un procesador.
GMail: Aplicación oficial para dispositivos móviles del servicio de correo
homónimo de Google.
Google Drive: Servicio de almacenamiento en la nube semejante a Dropbox
desarrollado por Google Inc.
Hash: Cadena que sirve como una representación compacta de una cadena de
entrada.
IDE (Integrated Development Environment): Software también llamado
"entorno de programación" que está compuesto por herramientas cuyo fin es
la realización de software.
Imei (International Mobile Equipment Identity): Código único de los terminales
móviles que identifica al dispositivo unívocamente.
Integer: Tipo básico del lenguaje Java que representa a los números enteros
en un rango de 232 valores.
Intent: Objeto que sirve para invocar componentes o actividades en Android.
iOS: Sistema operativo que emplean los dispositivos móviles de la marca
Apple.
JPEG (Joint Photographic Experts Group): Formato de imagen basad en un
algoritmo de compresión con pérdidas sobre la imagen original.
Kernel: Núcleo de un sistema operativo. El software responsable de gestionar
recursos a través de llamadas al sistema.
Line: Aplicación de mensajería muy famosa para dispositivos móviles y PC.
Log: Equivalente al término "Bitácora". Registro de eventos durante un rango
de tiempo.
Midi (Musical Instrument Digital Interface): En el contexto de este proyecto es
un tipo de archivo que contiene diversos tipos de datos que representan
información musical a nivel de partitura.
Píxel: Menor unidad homogénea de color en una imagen.
Plugin: Equivalente al término "Complemento" en el contexto de los programas
informáticos. Expansión que aumenta la funcionalidad de un software.
183
Trabajo de Fin de Grado Carlos Pliego García
184
Trabajo de Fin de Grado Carlos Pliego García
Una vez se muestre la nueva pantalla (Ilustración 88), se deberá introducir el mensaje
que se desea introducir en el código en el campo destinado a ello. Este mensaje debe
tener un número de caracteres mayor que 0 pero menor que 2000. Una vez
introducido, se pulsará en el botón con forma triangular situado en la esquina superior
izquierda.
185
Trabajo de Fin de Grado Carlos Pliego García
186
Trabajo de Fin de Grado Carlos Pliego García
Después aparecerá una ventana (Ilustración 90) en la que se deberá elegir el/los
tipo/s de cifrado que se va/n a utilizar para asegurar el mensaje. Una vez se haya/n
seleccionado, se pulsará el botón "Confirmar".
187
Trabajo de Fin de Grado Carlos Pliego García
Cuando aparezca la nueva ventana (Ilustración 91), se deberá escoger el color con el
que se quiere tintar el código QRypt que se va a generar. Una vez se ha escogido, se
pulsará sobre el botón "Aceptar".
188
Trabajo de Fin de Grado Carlos Pliego García
189
Trabajo de Fin de Grado Carlos Pliego García
190
Trabajo de Fin de Grado Carlos Pliego García
191
Trabajo de Fin de Grado Carlos Pliego García
Una vez se abra la nueva pantalla (Ilustración 95), se deberá enfocar el código que se
desea leer hasta que la aplicación lo detecte y abra la siguiente pantalla.
192
Trabajo de Fin de Grado Carlos Pliego García
Una vez la aplicación ha detectado y ha leído el código, se abrirá una nueva pantalla
(Ilustración 96) en la que se mostrará el mensaje que éste contenía.
193
Trabajo de Fin de Grado Carlos Pliego García
10.2.5.1 OPCIÓN A
Para extraer el mensaje de un código QR o QRypt que se encuentra en un archivo de
imagen, se deberá pulsar sobre el botón "Leer de fichero" en la pantalla principal
(Ilustración 94).
194
Trabajo de Fin de Grado Carlos Pliego García
NOTA: Si el código estuviese cifrado con una contraseña o con un patrón, se deberá
introducir la información pertinente cuando la aplicación lo sugiera.
10.2.5.2 OPCIÓN B
Otra forma de leer un código contenido en un archivo de imagen es buscarlo
directamente en cualquier explorador de archivos o desde la galería y seleccionar la
opción de compartirlo con otra aplicación. En el menú que aparezca (Ilustración 98),
se deberá elegir la aplicación QRypt para extraer el mensaje del código.
195
Trabajo de Fin de Grado Carlos Pliego García
NOTA: Esta funcionalidad no sólo se limita a los exploradores de archivos. Si, por
ejemplo, se hubiese obtenido la imagen por una aplicación de mensajería (como
Whatsapp o Line), sólo se deberá pulsar en el botón de compartirla y elegir la
aplicación QRypt de la lista, tal y como se muestra en la ilustración anterior.
196
Trabajo de Fin de Grado Carlos Pliego García
197
Trabajo de Fin de Grado Carlos Pliego García
Cuando aparezca la nueva ventana (Ilustración 101), se deberá elegir el idioma que se
quiera y, después, pulsar el botón "Aceptar".
198
Trabajo de Fin de Grado Carlos Pliego García
199
Trabajo de Fin de Grado Carlos Pliego García
200
Trabajo de Fin de Grado Carlos Pliego García
10.3.4 PROMOCIONES
Al contar la aplicación con el tipo de cifrado por fecha, se puede generar códigos
QRypt que sólo se puedan leer a partir de una fecha exacta. Se pueden crear muchos
códigos que estén cifrados con una fecha exacta en la que, a partir de ella, se
deberían poder leer sus datos para alguna promoción. De esta forma, se pueden
preparar los códigos mucho antes de la fecha de inicio de la promoción.
10.3.5 PROMOCIONES 2
Además, al contar con la opción "Modelo" como tipo de cifrado, las promociones
también se pueden dirigir sólo a los usuarios que utilicen un móvil en especial.
201
Trabajo de Fin de Grado Carlos Pliego García
11.1 PLANIFICACIÓN
202
Trabajo de Fin de Grado Carlos Pliego García
203
Trabajo de Fin de Grado Carlos Pliego García
11.1.3 CONCLUSIONES
Si se comparan los diagramas, se llega a la conclusión de que, como era de esperar, la
planificación inicial predijo que se tardarían menos días en desarrollar el proyecto. De
todas formas, sólo hay una diferencia de 12 días debido a que, a pesar de que se
predijo que se tardaría menos en realizar la mayoría de las tareas, se pensó que la
documentación llevaría mucho más tiempo (19 días en vez de 12).
204
Trabajo de Fin de Grado Carlos Pliego García
11.2 PRESUPUESTO
1. Autor: Carlos Pliego García
2. Departamento: Departamento de Informática
3. Descripción del proyecto:
a. Título: Desarrollo de una aplicación generadora y lectora de códigos QR
seguros en Android
b. Duración (meses): 4
c. Tasa de costes indirectos: 18%
4. Presupuesto total del proyecto (valores en Euros): 17575,23.
5. Desglose presupuestario:
PERSONAL
Apellidos, Categoría Horas de Coste por hora Coste Total (€)
Nombre trabajo (€)
Pliego García, Jefe de 88 30,00 2640
Carlos proyecto
Pliego García, Diseñador 160 18,00 2880
Carlos
Pliego García, Analista 128 20,00 2560
Carlos
Pliego García, Programador 192 14,00 2688
Carlos
Pliego García, Encargado de 48 10,00 480
Carlos pruebas
Pliego García, Documentalista 96 18,00 1728
Carlos
Total (€) 12976
Tabla 136: Coste del personal
EQUIPOS
Descripción Coste (€) Uso Dedicación Período de Coste
dedicado al (meses) depreciación imputable
proyecto (€)
(%)
Samsung 400 100 4 60 23
Galaxy SII
(GT-I9100)
PC de 850 100 4 60 47
sobremesa
(a piezas)
Asus A55A- 600 100 4 60 33
SX465H
Total (€) 103
Tabla 137: Coste de los equipos
205
Trabajo de Fin de Grado Carlos Pliego García
SOFTWARE
Descripción Coste (€) Uso Dedicación Período de Coste
dedicado al (meses) depreciación imputable
proyecto (€)
(%)
Licencia de 279,99 100 4 60 16
Windows 8
Pro
Microsoft 709 100 4 50 47
Office 2007
Professional
Microsoft 729 100 4 50 49
Project
2010
Professional
Adobe 300 100 4 50 20
Photoshop
CS4
Total (€) 132
Tabla 138: Coste del software
6. Resumen de costes:
206