Cómo decidí proteger los documentos de la falsificación e "inventé" una firma digital electrónica

De que se trata


La idea de crear mi propio pequeño proyecto de Internet para proteger los documentos de la falsificación fue motivada por una discusión en el foro de defectoscopistas dedicada a la falsificación total de las conclusiones de control de calidad que emitieron.

Durante la implementación de mi proyecto, me di cuenta de que llegué al concepto de firma digital electrónica, es decir, una bicicleta, por supuesto, no la inventé, pero la historia sobre mi camino puede ser instructiva.

Relevancia de la tarea de protección contra falsificaciones


El hecho es que en nuestro siglo de información sin papel, ni una sola construcción de capital, ya sea un gasoducto o un centro comercial, puede prescindir de la preparación de un conjunto completo de documentación tal como está construida, que incluye conclusiones de pruebas no destructivas (visuales, radiográficas, de ultrasonido).



Esta conclusión es un documento elaborado en cierta forma con una conclusión sobre la idoneidad o no de, por ejemplo, una soldadura. Los servicios de pruebas no destructivas cuestan dinero y, a menudo, son bastante considerables. Un cliente / intermediario sin escrúpulos puede contratar un laboratorio acreditado, recibir varias opiniones de este y detener o suspender el trabajo.

Lo que puede sorprender al operador del detector de fallas o al jefe del laboratorio cuando se enteran de que incluso después de la finalización del trabajo, se emiten conclusiones en su nombre, se colocan sellos falsos y firmas falsificadas. La reputación del laboratorio está sufriendo y, de hecho, se está violando la ley. Es solo que en varios casos nadie lo sabrá.

Como parte de la discusión: cómo proteger sus documentos, se expresó la idea de poner un código QR en el documento en el que se registrará el número de conclusión, la fecha y la conclusión sobre la idoneidad o no idoneidad del objeto de control. ¿Por qué es bueno este método? El código QR seguirá siendo claramente distinguible al escanear y copiar un documento.

Sin embargo, los estafadores también podrán generar simplemente un código QR con el contenido necesario.

El nacimiento de una idea


Y luego se me ocurrió una idea: ¿por qué no cifrar el contenido de dicho código QR con un algoritmo confiable? Si es así, debe encontrar una forma de descifrarlo al escanear, por ejemplo, a través de la cámara de un teléfono inteligente. Aquí nació la idea de descifrar del lado del servicio web, que almacenará la clave para el descifrado.

La última vez que hice un sitio en 2000 en el bloc de notas y no estoy muy familiarizado con las tecnologías modernas de construcción de sitios, elegí Wix, pensando que con la ayuda del servicio obtendré una imagen hermosa y posibilidades mínimas para trabajar con una base de datos, y con el código Wix codificaré eso que necesito

Debo decir de inmediato que lo hice sin mucha dificultad y, en algunas tardes, como aficionado, pude reunir la solución que necesitaba a partir de bloques más o menos preparados.

Cifrado


Tomé el algoritmo de encriptación AES de 128 bits con la implementación de Java Script en Github y lo coloqué en la sección de fondo del sitio.

Esta fue quizás la parte más fácil del trabajo. Cómo funciona el cifrado en sí mismo no fue del todo desinteresado para mí. Estaba preocupado por la grandeza del plan.

Lo principal es no olvidar traducir el texto codificado a Bytes, y el resultado del cifrado en HEX.

// Convert text to bytes var textBytes = aesjs.utils.utf8.toBytes(text); // The counter is optional, and if omitted will begin at 1 var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); var encryptedBytes = aesCtr.encrypt(textBytes); // To print or store the binary data, you may convert it to hex var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); 

Generación de código QR


Usé la API ya hecha.

Para trabajar, simplemente cree un objeto html1: para mostrar un código html arbitrario y llamar a la función API

 let val = “ " $w("#html1").src = "https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=" + val.toString(); $w("#html1").show(); 

Trabajar con los usuarios


Wix admite funciones básicas de registro de usuarios y edición de perfiles. La herramienta es algo defectuosa, pero viable.

Solo necesitaba agregar un campo que describa el nombre de la organización que representa el usuario registrado, pero este campo es de solo lectura y el administrador del servicio lo completa cuando recibe la confirmación de que el usuario registrado realmente representa la organización especificada.

También fue necesario ajustar la lógica más simple asociada con el acceso pagado / gratuito a las funciones (se pueden proteger hasta 20 documentos por mes de forma gratuita) y el plazo para pagar los servicios.

Principio de funcionamiento


Una clave de cifrado privada única está vinculada a la cuenta del usuario.

Un usuario conectado completa un formulario con información sobre la conclusión (número, fecha, resultado):



Luego, el algoritmo devuelve una URL que contiene el texto cifrado TEXTO y actúa como la clave pública USER_ID, como en el siguiente ejemplo:

https:// * * /checkqr?user=3b01b0aa-68a0-4521-ab12-f17b86d3eabc&v=1.0&text=8a026594c26be959f4280e28fe8402c1acef233e369a31613d654d3b0a5bbaca206f3058d27d2fde66b65cb64a5a6caecb69b07ad39c0015e923dad89eb723

La URL se convierte en un código QR, que el usuario ya coloca en su documento copiándolo en el portapapeles (puede incluirlo en el archivo de origen o pegarlo como una pegatina en un documento impreso terminado).



Lo que es importante aquí: como tal, la información no ingresa a la base de datos del sitio, sino que solo permanece en la forma de este enlace y un código QR que contiene este enlace. Por lo tanto, no se almacena información sobre el contenido del documento protegido en el servidor.

El sitio verifica el código al analizar el enlace


Para analizar cuando un sitio reconoce un enlace, utilicé la ayuda sobre el código Wix
www.wix.com/code/reference/wix-http-functions.html

Si algo salió mal durante el descifrado, podría ser si se hicieron algunos cambios en el código QR original
“El código del documento fue descifrado con un error. Posible falso. Póngase en contacto con la organización que preparó el documento para su aclaración ".
Si el descifrado se completa con éxito, se emite el texto descifrado que contiene el nombre del laboratorio, el número de documento, la fecha de emisión y el resultado, y se le pide al usuario que compare el resultado del descifrado con lo que ve en el documento real.

Conclusión


Desde el nacimiento de la idea, con la ayuda de varios ladrillos prefabricados, llegué a una implementación funcional.

Los invito a una discusión sobre la idea que se me ocurrió, un intento de probar / piratear mi servicio.

Lo que queda por completar


  • Escriba sobre los resultados de la implementación en habr
  • Comprenda cómo restablecer la consulta si ya ha habido una comprobación de enlace una vez
  • Para descubrir cómo reducir el texto cifrado, porque cuando se codifica una URL larga, el tamaño del código QR es demasiado grande
  • Agregue la capacidad de copiar código al portapapeles o enviarlo por correo electrónico con solo hacer clic en un botón (hasta que descubra cómo hacerlo en JavaScript)
  • Mejora el trabajo con la versión móvil

Respuesta preliminar a posibles críticas:


¿No es más fácil para un laboratorio mantener un registro de conclusiones en su sitio web, y una etiqueta QR similar conducirá a este registro o incluso mostrará una copia del informe?
Esto se puede hacer, pero se requerirá un trabajo manual significativo o la introducción de su propia solución de TI como la desarrollada por mí, pero obviamente costará más que usar una solución preparada.

Es imposible hacer que dicho registro sea completamente accesible al público, porque la información no es pública, pero solo puede ser considerada por el contratista, el cliente y Rostekhnadzor.

Source: https://habr.com/ru/post/442210/


All Articles