paint-brush
Cómo decodificar su propio pase verde de vacunación de la UE con unas pocas líneas de Pythonpor@tobsch
75,445 lecturas
75,445 lecturas

Cómo decodificar su propio pase verde de vacunación de la UE con unas pocas líneas de Python

por Tobias Schlottke6m2021/07/14
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Descubra cómo decodificar el código QR en su Pasaporte de Vacunación de la UE (Pase Verde) usando Python. Descubra qué datos están codificados en su interior

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - Cómo decodificar su propio pase verde de vacunación de la UE con unas pocas líneas de Python
Tobias Schlottke HackerNoon profile picture

¡El pasaporte de vacunación de la UE ha llegado! La empresa UBIRCH ha trabajado día y noche durante las últimas semanas para garantizar que millones de alemanes pudieran disfrutar de un verano de libre circulación.

El certificado de vacunación parece un simple código QR en papel, pero se invirtió mucha tecnología para garantizar la seguridad de los datos personales, hacerlos accesibles solo para usuarios autorizados y también difíciles de falsificar.

En un podcast dirigido a los CTO, Matthias Jugel, el CTO de UBIRCH compartió lo que pasó con la tecnología y explicó cómo decodificar simplemente el contenido del código QR.


El Programa de Vacunas de la UE

El pase de vacunación alemán se basa en los protocolos definidos por la Unión Europea en cuanto a certificados de vacunas para sus estados miembros.

Cuando recibe su vacuna, crea un pequeño conjunto de datos que contiene su información personal, su nombre y su fecha de nacimiento, por ejemplo, y también alguna información sobre la vacunación real: el fabricante; identificación del producto de la inyección; la fecha en que recibió su inyección y qué inyección en una serie de dosis.

La UE también tiene protocolos sobre cómo se debe manejar este conjunto de datos. Debe colocarse en una representación binaria que luego se firma con un material de clave criptográfica. Cualquiera que tenga la clave pública ahora puede verificar que sea auténtica.

Esta representación binaria luego se comprime y codifica en base-45, que se sabe que es muy eficiente en combinación con códigos QR. Luego, la representación de texto en base 45 se coloca en un código QR que se imprime y tiene su código y su pase. La cadena completa es: base45 > zlib > objeto COSE -> CBOR

Este método es diferente de un token JW porque es un poco más pequeño. Un JWT está codificado en base 64, puramente basado en texto y no está comprimido en sí mismo. Esto significa que no puede contener tanta información en la misma cantidad de datos básicamente, por lo que al final es muy grande.

Aún así, alguien tiene que encargarse de convertir el conjunto de datos en una pieza de datos firmada. Por lo tanto, UBIRCH brinda un servicio en el que reciben los datos, los transforman, los firman y luego devuelven algo que puede imprimirse en un código QR o imprimirse como un documento PDF. Todo esto se hace a través de los centros de vacunación.


Descifrando su propio Green Pass

Aunque legalmente solo el personal autorizado debe verificar el contenido del código QR, aún puede verificar qué hay dentro de su propio código QR desde un punto de vista técnico. Sin embargo, no podrá realizar la verificación de la firma, ya que el acceso a las claves públicas no está oficialmente disponible. Entonces, el siguiente código es solo para nerds que quieren saber qué datos están codificados en su código QR.



1. Utilice un lector de códigos QR para obtener el contenido de su propio código QR. Uno basado en navegador está aquí :

Aquí hay un código QR de muestra de una persona ficticia que usaremos para este ejemplo

 HC1: 6 BFNX1:HM*I0PS3TLU.NGMU5AG8JKM:SF9VN1RFBIKJ: 3 AXL1RR+ 8 ::N$OAG+RC4NKT1:P4 .33 GH40HD* 98 UIHJIDB 4 N* 2 R7C*MCV+ 1 AY 3 :YP*YVNUHC.G-NFPIR6UBRRQL9K5%L4.Q* 4986 NBHP95R*QFLNUDTQH-GYRN2FMGO73ZG6ZTJZC:$ 0 $MTZUF2A81R9NEBTU2Y437XCI9DU 4 S3N%JRP:HPE3$ 435 QJ+UJVGYLJIMPI% 2 +YSUXHB42VE5M44%IJLX0SYI7BU+EGCSHG:AQ+ 58 CEN RAXI:D53H8EA0+WAI9M8JC0D0S% 8 PO00DJAPE3 GZZB:X85Y8345MOLUZ3+HT0TRS76MW2O .0 CGL EQ5AI.XM5 01 LCWBA.RE.-SUYH+S7SBE0%B-KT+YSMFCLTQQQ6LEHG.P46UNL6DA2C$AF-SQ00A58HYO5:M8 7 S$ULGC-IP49MZCS U8ST3HDRJNPV3UJADJ9BVV: 7 K13B4WQ+DCTEG4V8OT09797FZMQ3/A7DU0 .3 D148IDZ%UDR9CYF

2. Cree un archivo de Python con el siguiente código y guárdelo como decode.py

 #! /usr/bin/env python3 import json import sys import zlib import base45 import cbor2 from cose.messages import CoseMessage payload = sys.argv[ 1 ][ 4 :] print( "decoding payload: " + payload) # decode Base45 (remove HC1: prefix) decoded = base45.b45decode(payload) # decompress using zlib decompressed = zlib.decompress(decoded) # decode COSE message (no signature verification done) cose = CoseMessage.decode(decompressed) # decode the CBOR encoded payload and print as json print(json.dumps(cbor2.loads(cose.payload), indent= 2 ))

3. Instale todas las bibliotecas necesarias para usar el código de ejemplo:

 pip3 install cryptography==2.8 pip3 install cose pip3 install cbor2 pip3 install base45

4. Ejecute el archivo python

 python3 decode.py 'HC1:6BFNX1:HM*I0PS3TLU.NGMU5AG8JKM:SF9VN1RFBIKJ:3AXL1RR+ 8::N$OAG+RC4NKT1:P4.33GH40HD*98UIHJIDB 4N*2R7C*MCV+1AY3:YP*YVNUHC.G-NFPIR6UBRRQL9K5%L4.Q*4986NBHP95R*QFLNUDTQH-GYRN2FMGO73ZG6ZTJZC:$0$MTZUF2A81R9NEBTU2Y437XCI9DU 4S3N%JRP:HPE3$ 435QJ+UJVGYLJIMPI%2+YSUXHB42VE5M44%IJLX0SYI7BU+EGCSHG:AQ+58CEN RAXI:D53H8EA0+WAI9M8JC0D0S%8PO00DJAPE3 GZZB:X85Y8345MOLUZ3+HT0TRS76MW2O.0CGL EQ5AI.XM5 01LCWBA.RE.-SUYH+S7SBE0%B-KT+YSMFCLTQQQ6LEHG.P46UNL6DA2C$AF-SQ00A58HYO5:M8 7S$ULGC-IP49MZCSU8ST3HDRJNPV3UJADJ9BVV:7K13B4WQ+DCTEG4V8OT09797FZMQ3/A7DU0.3D148IDZ%UDR9CYF'

5. Así es como se vería la salida:

 { "1" : "DE" , // issuing country "4" : 1655209933 , // expires at "6" : 1623673933 , // issued at "-260" : { "1" : { "v" : [ { "ci" : "URN:UVCI:01DE/IZ12345A/21E0JXD7UQY6ECLM3WT7YF#8" , "co" : "DE" , "dn" : 2 , "dt" : "2021-04-01" , "is" : "Robert Koch-Institut" , "ma" : "ORG-100031184" , "mp" : "EU/1/20/1507" , "sd" : 2 , "tg" : "840539006" , "vp" : "1119349007" } ], "dob" : "1964-08-12" , "nam" : { "fn" : "Mustermann" , "gn" : "Erika" , "fnt" : "MUSTERMANN" , "gnt" : "ERIKA" }, "ver" : "1.0.0" } } }


La Verificación de Pases de Vacunación - Offline

Sin embargo, la verificación real se puede realizar fuera de línea, para cumplir con los requisitos de la UE. Las aplicaciones corona se ocupan de la verificación de dichos pases, sin necesidad de Internet. La verificación se realiza íntegramente a través del teléfono.

Las aplicaciones obtienen las claves públicas y verifican la firma, y luego, según el uso previsto, pueden presentarle el contenido del código QR, los datos que realmente están allí.

Hay 2 tipos de aplicaciones disponibles.

La aplicación oficial para personal autorizado y la aplicación oficial para el público.

Aplicación CovPass Check para personal autorizado

La aplicación oficial se creó para permitir viajar gratis en la UE. Está destinado a ser utilizado cuando cruza una frontera o cuando la policía o alguien que quiera saber si tiene permitido estar allí lo revisan en el extranjero.

Esta información contiene datos personales y es por eso que la aplicación oficial, que puede acceder a todos los datos contenidos en el código QR, es solo para personal autorizado.

La aplicación oficial de CovPass para uso público

Puede obtener una aplicación autorizada de la tienda de aplicaciones que le indicará si el código QR escaneado es válido. La idea detrás de esto es presentar la menor cantidad de información personal posible, para proteger la privacidad de todos los involucrados.

Uso de Blockchain para verificar los pases de vacunas: en línea

Para su solución piloto, que se aplicó en dos condados alemanes, UBIRCH utilizó la tecnología blockchain para hacer que los pases de vacunas fueran verificables en cuanto a autenticidad e integridad de manera descentralizada.

    1. Las personas en el centro de vacunación completan un formulario web con sus datos: nombre, fecha de nacimiento, fecha de vacunación, qué tipo, todos los datos que la UE quiere recopilar.
    2. Al enviar, esta información se codifica junto con una sal, lo que la hace anónima.
    3. El hash se envía al backend donde se ancla en la cadena de bloques.
    4. Se genera una URL que contiene todos los datos proporcionados en el formulario web
    5. También se crea un QR que, al escanearlo, mostrará los datos capturados por el formulario web.
    6. Si alguien solo quiere validar la URL, puede ir a la URL, se decodifica y se envía un hash al servidor y se envía una respuesta si es válida con una firma.

UBIRCH todavía usa la tecnología blockchain en otros casos de uso. Sin embargo, en estrecha colaboración con el cliente y de acuerdo con los requisitos finales de la UE, se eligió otro enfoque para la implementación del certificado digital COVID en Alemania.

Este artículo se basó en un episodio de podcast de alphalist. El podcast alphalist presenta entrevistas de CTO y otras figuras de liderazgo técnico y los temas van desde la tecnología hasta la gestión.

Los invitados de las principales empresas tecnológicas comparten sus mejores prácticas y conocimientos.

El objetivo es apoyar a otros CTO en su viaje a través de la tecnología y la ingeniería, inspirar y permitir un adelanto de otras empresas exitosas para comprender cómo piensan y actúan. Obtenga información asombrosa sobre las principales empresas tecnológicas, personalidades y tendencias del mundo escuchándolas hoy en Apple , Spotify , Google , Deezer y más.

Si usted es un CTO de una empresa de productos tecnológicos, tal vez le interese unirse a alphalist , ¿una red exclusiva de CTO? Comuníquese con nosotros para obtener más información.