Twitter: @toespar
Según Wikipedia, un código QR es un
módulo para almacenar información en una matriz de puntos o en un código de
barras bidimensional. Inicialmente se creó para registrar repuestos en la
fabricación de vehículos, pero un tiempo después y gracias al auge de los
Smartphone su uso se ha extendido y hoy en día los podemos encontrar en
multitud de áreas como envases alimentarios, tarjetas de presentación e incluso
en carteles de información, entre muchos otros.
A diferencia de los típicos códigos de barras, que son
escaneados de forma mecánica a partir del reflejo del haz de luz, los códigos
QR son escaneados de forma digital mediante el reconocimiento de pequeños
cuadrados blancos que posteriormente son interpretados por el procesador.
Si analizamos la estructura de los códigos QR podemos encontrar varios
elementos:
La versión y el formato son importantes para que el
escáner sepa el tipo de datos que se
va a encontrar, así como los patrones de posición
que permiten la lectura del código en cualquier ángulo. Los patrones de alineación ayudan al escáner en caso de
que el QR sea demasiado grande, y los de sincronización
se utilizan para determinar el tamaño de los módulos, nombre que reciben los
“cuadrados” que componen la parte de los datos. Finalmente, la quiet
zone es el espacio alrededor del QR que permite al escáner diferenciar
el QR de los elementos que se encuentran a su alrededor.
Sin embargo, la parte que a nosotros más nos interesa es
aquella referida al almacenamiento de los datos,
puesto que va a ser aquí donde vamos a poder aprovechar todo el potencial del
QR. Por ello, vamos a ver como la información se almacena en forma de matriz.
En los códigos QR hay diferentes formas de codificar la información, es decir,
hay diferentes formas de representar un conjunto de datos como una cadena de
caracteres. Los datos codificados se agrupan en conjuntos de 8, denominados codewords, que adoptan diversas formas
según su ubicación y se colocan empezando por la parte inferior derecha,
subiendo primero hacia arriba hasta llegar al patrón localizador,
luego pasamos a la columna adyacente izquierda y bajamos.
Adicionalmente, el orden de los bits de cada codeword varía
cuando el codeword se coloca hacia arriba o hacia abajo, y gracias a la información de formato, obtendremos la máscara que posteriormente aplicaremos,
mediante la operación XOR, a los codewords para obtener los datos en binario.
Finalmente, una vez aplicada la máscara debemos interpretar
los datos resultantes; los primeros 4 bits nos indican el modo que debemos usar
para interpretar los datos y nos condicionará para realizar la agrupación de
bits. Una vez realizada dicha agrupación, el siguiente bloque nos indicará la
longitud del mensaje.
Ahora que ya conocemos como funciona un código QR, ¿podemos
aprovecharlo como vector de ataque? Lo dejamos para el siguiente post que este
ya se está extendiendo demasiado ;)
Muy buen artículo, la verdad que nunca había terminado de ver claro como iban estos.
ResponderEliminarPosdata: esto no se hace, ya me quedé con el gusanillo y ahora a ver quien duerme así