De quoi s'agit-il
L'idée de créer mon propre petit projet Internet pour protéger les documents contre la falsification a été provoquée par une discussion au forum des défectoscopistes consacrée à la falsification totale des conclusions de contrôle de qualité qu'ils ont émises.
Lors de la mise en œuvre de mon projet, j'ai réalisé que j'en suis venu au concept de signature numérique électronique, c'est-à-dire un vélo, bien sûr, je n'ai pas inventé, mais l'histoire de mon parcours peut être instructive.
Pertinence de la tâche de protection contre les contrefaçons
Le fait est que, dans notre siècle d'informations sans papier, pas une seule construction d'immobilisations, qu'il s'agisse d'un gazoduc ou d'un centre commercial, ne peut se passer de préparer un ensemble complet de documents conformes à l'exécution, qui comprend des conclusions de tests non destructifs (visuels, radiographiques, échographiques).

Cette conclusion est un document établi sous une certaine forme avec une conclusion sur l'adéquation ou l'inadéquation, par exemple, d'une soudure. Les services d'essais non destructifs coûtent de l'argent et sont souvent assez considérables. Un client / intermédiaire sans scrupules peut engager un laboratoire accrédité, en recevoir plusieurs avis et arrêter ou suspendre les travaux.
Ce qui peut surprendre l'opérateur du détecteur de défauts ou le chef du laboratoire quand ils apprennent que même après la fin des travaux, des conclusions sont émises en leur nom, elles sont mises sur de faux sceaux et de fausses signatures. La réputation du laboratoire en souffre et, en fait, la loi est violée. C'est juste que dans un certain nombre de cas, personne ne le saura.
Dans le cadre de la discussion - comment protéger vos documents, l'idée a été exprimée de mettre un code QR sur le document, dans lequel le numéro de conclusion, la date et la conclusion sur l'adéquation ou l'inaptitude de l'objet de contrôle seront enregistrés. Pourquoi cette méthode est-elle bonne - le code QR restera clairement reconnaissable lors de la numérisation et de la copie d'un document.
Cependant, les escrocs pourront également générer simplement un code QR avec le contenu nécessaire.
La naissance d'une idée
Et puis une pensée m'est venue à l'esprit - pourquoi ne pas crypter le contenu d'un tel code QR avec un algorithme fiable. Si c'est le cas, vous devez trouver un moyen de le décrypter lors de la numérisation, par exemple, à travers la caméra d'un smartphone. Ici, l'idée est née de faire du déchiffrement du côté du service Web, qui stockera la clé du déchiffrement.
La dernière fois que j'ai créé un site en 2000 dans le bloc-notes et je ne suis pas très familier avec les technologies modernes de construction de sites, j'ai donc choisi Wix, pensant qu'avec l'aide du service, j'obtiendrai une belle image et des possibilités minimales pour travailler avec une base de données, et avec le code Wix, je coderai cela. de quoi ai-je besoin.
Je dois dire tout de suite que je l'ai fait sans trop de difficultés et en quelques soirées, en tant qu'amateur, j'ai pu assembler la solution dont j'avais besoin à partir de blocs plus ou moins prêts à l'emploi.
Cryptage
J'ai pris l'
algorithme de chiffrement AES 128 bits terminé avec l'implémentation Java Script sur Github et je l'ai placé dans la section backend du site.
C'était peut-être la partie la plus facile du travail. Le fonctionnement du cryptage lui-même ne m'était pas totalement inintéressant. J'étais inquiet de la grandeur du plan.
L'essentiel est de ne pas oublier de traduire le texte encodé en octets, et le résultat du cryptage 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);
Génération de code QR
J'ai utilisé l'
API prête à l'emploi.
Pour travailler, il suffit de créer un objet html1 - pour afficher du code html arbitraire et appeler la fonction API
let val = “ " $w("#html1").src = "https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=" + val.toString(); $w("#html1").show();
Travailler avec les utilisateurs
Wix prend en charge l'enregistrement d'utilisateur de base et les fonctions d'édition de profil. L'outil est quelque peu bogué, mais réalisable.
J'avais juste besoin d'ajouter un champ qui décrit le nom de l'organisation que représente l'utilisateur enregistré, mais ce champ est en lecture seule et il est rempli par l'administrateur du service lorsqu'il reçoit la confirmation que l'utilisateur enregistré représente vraiment l'organisation spécifiée.
Il était également nécessaire de fixer la logique la plus simple liée à l'accès payant / gratuit aux fonctions (jusqu'à 20 documents par mois peuvent être protégés gratuitement) et le délai de paiement des services.
Principe de fonctionnement
Une clé de chiffrement privée unique est liée au compte de l'utilisateur.
Un utilisateur connecté remplit un formulaire avec des informations sur la conclusion (numéro, date, résultat):

Ensuite, l'algorithme renvoie une URL contenant le texte chiffré TEXT et agissant comme la clé publique USER_ID, comme dans l'exemple ci-dessous:
https:// * * /checkqr?user=3b01b0aa-68a0-4521-ab12-f17b86d3eabc&v=1.0&text=8a026594c26be959f4280e28fe8402c1acef233e369a31613d654d3b0a5bbaca206f3058d27d2fde66b65cb64a5a6caecb69b07ad39c0015e923dad89eb723
L'URL se transforme en un code QR, que l'utilisateur met déjà sur son document en le copiant dans le presse-papiers (vous pouvez l'inclure dans le fichier source ou le coller comme autocollant sur un document imprimé fini).

Ce qui est important ici - en tant que tel, les informations n'entrent pas dans la base de données du site, mais restent uniquement sous la forme de ce lien et d'un code QR contenant ce lien. Ainsi, aucune information sur le contenu du document protégé n'est stockée sur le serveur.
Le code est vérifié par le site lors de l'analyse du lien
Pour analyser quand un site reconnaît un lien, j'ai utilisé l'aide sur le code Wix
www.wix.com/code/reference/wix-http-functions.htmlSi quelque chose s'est mal passé pendant le décryptage, cela pourrait être le cas si certaines modifications ont été apportées au code QR d'origine
«Le code du document a été déchiffré avec une erreur. Faux possible. Contactez l'organisation qui a préparé le document pour obtenir des éclaircissements. »
Si le déchiffrement est terminé avec succès, le texte déchiffré est émis contenant le nom du laboratoire, le numéro de document, la date d'émission et le résultat, et l'utilisateur est invité à comparer le résultat du déchiffrement avec ce qu'il voit sur le document réel.
Conclusion
Dès la naissance de l'idée, je suis arrivé à une mise en œuvre fonctionnelle avec un certain nombre de briques pré-faites.
Je vous invite à une discussion sur l'idée que j'ai eue, une tentative de tester / pirater mon service.
Ce qui reste à compléter
Écrivez sur les résultats de la mise en œuvre sur habr- Comprendre comment réinitialiser la requête s'il y a déjà eu une vérification de lien une fois
- Pour comprendre comment réduire le texte chiffré, car lorsqu'une URL longue est codée, la taille du code QR est trop grande
- Ajouter la possibilité de copier du code dans le presse-papiers ou de l'envoyer par e-mail en cliquant sur un bouton (jusqu'à ce que je comprenne comment le faire en javascript)
- Améliorez votre travail avec la version mobile
Réponse préliminaire à d'éventuelles critiques:
N'est-il pas plus facile pour un laboratoire de tenir un registre des conclusions sur son site Web, et une balise QR similaire mènera-t-elle à ce registre ou même afficher une copie du rapport?
Cela peut être fait, mais un travail manuel important ou l'introduction de votre propre solution informatique comme celle développée par moi sera nécessaire, mais cela coûtera évidemment plus cher que d'utiliser une solution prête à l'emploi.
Il est impossible de rendre un tel registre complètement accessible au public, car les informations ne sont pas publiques, mais ne peuvent être prises en compte que par le contractant, le client et Rostekhnadzor.