Worum geht es?
Die Idee, mein eigenes kleines Internetprojekt zum Schutz von Dokumenten vor Fälschungen zu erstellen, wurde durch eine Diskussion im Forum von Defektoskopikern angeregt, die sich der vollständigen Fälschung der von ihnen herausgegebenen Schlussfolgerungen zur Qualitätskontrolle widmete.
Während der Umsetzung meines Projekts wurde mir klar, dass ich zum Konzept der elektronischen digitalen Signatur gekommen bin, dh zu einem Fahrrad, das ich natürlich nicht erfunden habe, aber die Geschichte meines Weges kann lehrreich sein.
Relevanz der Aufgabe des Schutzes vor Fälschungen
Tatsache ist, dass in unserem Jahrhundert papierloser Informationen keine einzige Kapitalkonstruktion, sei es eine Gaspipeline oder ein Einkaufszentrum, auf die Erstellung eines vollständigen Satzes von Bestandsdokumentationen verzichten kann, der zerstörungsfreie Prüfergebnisse (visuell, radiologisch, Ultraschall) enthält.

Diese Schlussfolgerung ist ein Dokument, das in einer bestimmten Form erstellt wurde und eine Schlussfolgerung zur Eignung oder Ungeeignetheit von beispielsweise einer Schweißnaht enthält. Zerstörungsfreie Prüfdienste kosten Geld und sind oftmals beträchtlich. Ein skrupelloser Kunde / Vermittler kann ein akkreditiertes Labor beauftragen, mehrere Meinungen von ihm erhalten und die Arbeit einstellen oder aussetzen.
Stellen Sie sich die Überraschung des Fehlerdetektorbetreibers oder des Laborleiters vor, als er erfährt, dass auch nach Beendigung der Arbeiten in seinem Namen Schlussfolgerungen gezogen und gefälschte Siegel und gefälschte Unterschriften angebracht werden. Der Ruf des Labors leidet, und tatsächlich wird gegen das Gesetz verstoßen. Es ist nur so, dass in einigen Fällen niemand davon weiß.
Im Rahmen der Diskussion - wie Sie Ihre Dokumente schützen können - wurde die Idee geäußert, einen QR-Code auf das Dokument zu setzen, in dem die Abschlussnummer, das Datum und die Schlussfolgerung über die Eignung oder Ungeeignetheit des Kontrollobjekts aufgezeichnet werden. Warum ist diese Methode gut? Der QR-Code bleibt beim Scannen und Kopieren eines Dokuments klar unterscheidbar.
Betrüger können jedoch auch einfach einen QR-Code mit dem erforderlichen Inhalt generieren.
Die Geburt einer Idee
Und dann kam mir ein Gedanke - warum nicht den Inhalt eines solchen QR-Codes mit einem zuverlässigen Algorithmus verschlüsseln? In diesem Fall müssen Sie eine Möglichkeit finden, diese zu entschlüsseln, wenn Sie beispielsweise über die Kamera eines Smartphones scannen. Hier wurde die Idee geboren, die Entschlüsselung auf der Seite des Webdienstes durchzuführen, der den Schlüssel für die Entschlüsselung speichert.
Das letzte Mal, als ich im Jahr 2000 eine Site im Editor erstellt habe und mit modernen Site-Building-Technologien nicht sehr vertraut bin, habe ich mich für Wix entschieden. Ich dachte, dass ich mit Hilfe des Dienstes ein schönes Bild und minimale Möglichkeiten für die Arbeit mit einer Datenbank bekomme und mit Wix-Code das codieren werde Was brauche ich?
Ich muss sofort sagen, dass ich es ohne große Schwierigkeiten geschafft habe und an einigen Abenden als Amateur die Lösung, die ich brauchte, aus mehr oder weniger vorgefertigten Blöcken zusammenstellen konnte.
Verschlüsselung
Ich habe den fertigen AES 128-Bit-Verschlüsselungsalgorithmus mit Java Script-Implementierung auf Github verwendet und ihn im Backend-Bereich der Site platziert.
Dies war vielleicht der einfachste Teil des Jobs. Wie die Verschlüsselung selbst funktioniert, war für mich nicht ganz uninteressant. Ich war besorgt über die Größe des Plans.
Die Hauptsache ist, nicht zu vergessen, den codierten Text in Bytes zu übersetzen, und das Verschlüsselungsergebnis in 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);
QR-Code-Generierung
Ich habe die vorgefertigte
API verwendet .
Um zu arbeiten, erstellen Sie einfach ein HTML1-Objekt, um beliebigen HTML-Code anzuzeigen und die API-Funktion aufzurufen
let val = “ " $w("#html1").src = "https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=" + val.toString(); $w("#html1").show();
Arbeiten Sie mit Benutzern
Wix unterstützt grundlegende Funktionen zur Benutzerregistrierung und Profilbearbeitung. Das Tool ist etwas fehlerhaft, aber funktionsfähig.
Ich musste nur ein Feld hinzufügen, das den Namen der Organisation beschreibt, die der registrierte Benutzer repräsentiert. Dieses Feld ist jedoch schreibgeschützt und wird vom Dienstadministrator ausgefüllt, wenn er die Bestätigung erhält, dass der registrierte Benutzer die angegebene Organisation wirklich repräsentiert.
Es war auch notwendig, die einfachste Logik für den kostenpflichtigen / kostenlosen Zugriff auf Funktionen (bis zu 20 Dokumente pro Monat können kostenlos geschützt werden) und die Zahlungsfrist für Dienstleistungen festzulegen.
Arbeitsprinzip
Ein eindeutiger privater Verschlüsselungsschlüssel ist an das Benutzerkonto gebunden.
Ein angemeldeter Benutzer füllt ein Formular mit Informationen zum Abschluss (Nummer, Datum, Ergebnis) aus:

Anschließend gibt der Algorithmus eine URL zurück, die den TEXT-Chiffretext enthält und als öffentlicher Schlüssel USER_ID fungiert, wie im folgenden Beispiel:
https:// * * /checkqr?user=3b01b0aa-68a0-4521-ab12-f17b86d3eabc&v=1.0&text=8a026594c26be959f4280e28fe8402c1acef233e369a31613d654d3b0a5bbaca206f3058d27d2fde66b65cb64a5a6caecb69b07ad39c0015e923dad89eb723
Die URL wird zu einem QR-Code, den der Benutzer bereits in sein Dokument einfügt, indem er es in die Zwischenablage kopiert (Sie können ihn in die Quelldatei aufnehmen oder als Aufkleber auf ein fertiges gedrucktes Dokument kleben).

Was hier wichtig ist - als solches gelangen die Informationen nicht in die Site-Datenbank, sondern bleiben nur in Form dieses Links und eines QR-Codes, der diesen Link enthält. Somit werden keine Informationen über den Inhalt des geschützten Dokuments auf dem Server gespeichert.
Der Code wird von der Site beim Parsen des Links überprüft
Zum Parsen, wenn eine Site einen Link erkennt, habe ich die Hilfe für Wix-Code verwendet
www.wix.com/code/reference/wix-http-functions.htmlWenn während der Entschlüsselung ein Fehler aufgetreten ist, wurden möglicherweise einige Änderungen am ursprünglichen QR-Code vorgenommen
„Der Dokumentcode wurde mit einem Fehler entschlüsselt. Mögliche Fälschung. Wenden Sie sich zur Klärung an die Organisation, die das Dokument vorbereitet hat. “
Wenn die Entschlüsselung erfolgreich abgeschlossen wurde, wird der entschlüsselte Text ausgegeben, der den Namen des Labors, die Dokumentennummer, das Ausstellungsdatum und das Ergebnis enthält, und der Benutzer wird aufgefordert, das Entschlüsselungsergebnis mit dem zu vergleichen, was er auf dem tatsächlichen Dokument sieht.
Fazit
Von der Geburt der Idee an kam ich zu einer funktionierenden Implementierung mit einer Reihe von vorgefertigten Steinen.
Ich lade Sie zu einer Diskussion über die Idee ein, die ich mir ausgedacht habe, um meinen Service zu testen / zu hacken.
Was bleibt noch zu erledigen
Schreiben Sie über die Ergebnisse der Implementierung auf habr- Verstehen Sie, wie Sie die Abfrage zurücksetzen, wenn bereits einmal eine Linkprüfung durchgeführt wurde
- Um herauszufinden, wie der Chiffretext verkleinert werden kann, denn wenn eine lange URL codiert ist, ist der QR-Code zu groß
- Fügen Sie die Möglichkeit hinzu, Code in die Zwischenablage zu kopieren oder per E-Mail per Knopfdruck zu senden (bis ich herausgefunden habe, wie das in Javascript geht).
- Verbessern Sie die Arbeit mit der mobilen Version
Vorläufige Antwort auf mögliche Kritik:
Ist es für ein Labor nicht einfacher, ein Schlussfolgerungenregister auf seiner Website zu führen, und führt ein ähnliches QR-Tag zu dieser Registrierung oder zeigt sogar eine Kopie des Berichts an?
Dies ist möglich, aber erhebliche manuelle Arbeiten oder die Einführung einer eigenen IT-Lösung wie der von mir entwickelten sind erforderlich, kosten jedoch offensichtlich mehr als die Verwendung einer vorgefertigten Lösung.
Es ist unmöglich, ein solches Register vollständig öffentlich zugänglich zu machen, da die Informationen nicht öffentlich sind, sondern nur vom Auftragnehmer, Kunden und Rostekhnadzor berücksichtigt werden können.