Het geheim achter Bar-, QR- en Hash-codes
In 1835 bedacht Samuel Morse een methode om letters, leestekens en cijfers te coderen met in tussenpozen uitgezonden signalen. De morsecode is de voorloper van onze huidige digitale communicatie. In 1952 patenteerden Woodland en Silver de streepjescode, die is afgeleid van de morsecode, echter nu met streepjes (een verticale punt) en balken (een verticale streep). Deze streepjescode of barcode bleef lang onbekend, tot de Britse spoorwegen in de jaren zestig deze code op hun wagons schilderden, waarna de code van voorbij-rijdende treinen makkelijk met een langs de rails geplaatste scanner kon worden gelezen. Met de opkomst van elektronische kassasystemen werd – nu vijftig jaar geleden – de streepjescode algemeen ingevoerd.
Barcode
Het Britse Sainbury was in 1972 de eerste supermarkt die met succes de streepjescode invoerde die op de zijkant van een plank werd geprint om de productcode te lezen. In 1974 werd de eerste code op een pakje Wrigley kauwgum geprint die met een UPC-scanner kon worden gescand. De rest is eigenlijk historie. De barcode – code 128 – is een variable lengte van ASCII-tekens. De volgorde is altijd zwart-wit. Een zwart of wit streepje kan vier breedtes hebben en één totale zwart/wit combinatie is elf. Omdat niet op wit kan worden geëindigd, is de eindcode een zwarte streep met breedte 2. De code begint met een startsymbool en eindigt met een controle en stopsymbool.
Hoewel de barcode in eerste instantie als 7-bit ASCCII-code was ontwikkeld, kan men door de breedte variatie nu alle 128 ASCII-karakters coderen. Er is formeel geen maximum lengte voor de barcode en je kunt hem zo lang maken als je wilt. In 1973 werd de Uniform Code Council (UCC) opgericht om de barcode-standaard te beheren. De European Article Numbering Association (EAN) volgde in 1977 waarna deze twee uiteindelijk in 1999 het Auto-ID center voor elektronische productcodes inrichtten, waardoor GS1-standaarden konden worden gebruikt. Hoewel GS1 geen acroniem is, verwijst het naar het mondiale standaardsysteem dat we nu voor barcodes hebben.
De QR-code
De QR-code is een opvolger van de streepjescode en is een soort in een vierkant ‘opgerolde’ streepjescode. QR staat voor Quick Response en is uitgevonden door het Japanse bedrijf Denso Wave voor het labelen van auto-producten. In plaats van verschillende barcodes hoeven te printen en te lezen, kan dat met een QR-code in één keer gebeuren. De code bestaat uit zwarte vierkanten die in een vierkant raster op een witte achtergrond zijn gerangschikt en met een gewone camera kunnen worden gelezen. Vooral de snelle leesbaarheid maakte dat de QR-code – mede door de opkomst van camera’s in mobiele telefoons – snel populair werd en heeft een veel grotere opslagcapaciteit dan barcodes. Hoewel het patent formeel van Denso Wave is, heeft het bedrijf de QR-code open source maakt en is nu wereldwijd een standaard geworden.
De afgelopen jaren is de QR-code de meest gebruikte tweedimensionale code geworden. Gegevens opgeslagen in een QR-code kunnen maximaal 3KB groot zijn, zoals website-URL’s, telefoonnummers, video’s, geolocaties enz. Via QR-codes kun je direct en foutloos linken naar websites en productpagina’s, aanmeldingsformulieren, betalingsopdrachten of algemene informatie. In juni 2011 heeft de Koninklijke Nederlandse Munt de eerste officiële munt ter wereld met een QR-code uitgegeven om haar eeuwfeest te vieren. De munt kan met een smartphone worden gescand en is gekoppeld aan een speciale website met inhoud over de historische gebeurtenis en het ontwerp van de munt. Maar ook creditcardfunctionaliteit is momenteel in ontwikkeling om op die manier betalingen te accepteren; de QR-code als factuur.
QR en hashcodes
Hoewel QR-codes een geweldige manier zijn om informatie op te slaan en te openen, brengen ze ook risico’s met zich meer. Er is zelfs al een woord voor bedacht: “Quishing’, het oude phishing maar nu via QR-codes. De code kan inherent natuurlijk niet worden gehackt, het optische beeld is niet makkelijk te veranderen. Maar fraudeurs kunnen onschuldig lijkende QR-codes genereren die je naar phishing-websites leiden. Een mooie advertentie, een kortingsaanbod of een aantrekkelijk verhaaltje of de oproep voor een update van je telefoon. De creativiteit van hackers is oneindig. Daarom is het steeds vaker nodig goed te weten waar een QR-code je eventueel naar toe stuurt. Een veilige QR-check voordat je doorklikt.
Daarom zien we ontwikkelingen waar in een QR-code een hashcode wordt mee gecodeerd die kan worden geverifieerd in een blockchain. Als de QR-code wordt gegenereerd, wordt de uniek hashcode zowel in de QR-code als op een blockchain geplaatst. Als de gebruiker of consument nu de QR-code leest, controleert het systeem de hashwaarde en veilige herkomst van die code. Als die hashwaarden overeenkomen, kun je veilig de URL-link volgen. Dat is het mooie van de onveranderlijkheid van de blockchain. Bovendien kunnen twee QR-codes of twee transacties nooit dezelfde hashwaarde hebben; elke transactie op de Blockchain heeft een unieke hashwaarde. Door een dApp op je mobiele telefoon te installeren die de hashcode in de Blockchain controleert, kun je dus Quishing voorkomen.
Het mooie van hashing en Blockchain
In een blog ‘Blockchain als onuitwisbare inkt’ heb ik eerder het grote belang van hashing uitgelegd. In een Blockchain leggen we informatie zowel met een uniek tijdstempel als een hashcode vast. De hash is een unieke ‘verhaspelingscode’, een unieke digitale vingerafdruk. Een hashcode is ontworpen om elk bericht van elke lengte te accepteren en een code met een vaste lengte terug te geven. De hashcode SHA2656 neemt bijvoorbeeld een code van elke lengte en verandert deze in een code van 64 tekens. Ga je gang en probeer het. Typ ‘John’ in de hash-encoder en zie dat het wordt uitgebreid tot 64 tekens. Typ de volledige Onafhankelijkheidsverklaring in en zie hoe deze wordt teruggebracht tot 64 tekens! Onmogelijk om te veranderen en te frauderen.
Hashing is een set data herhaaldelijk dusdanig te bewerken dat er áltijd een code met dezelfde lengte wordt gegenereerd. Het mooie is dat uit die gegenereerde code echter nóóit meer de oorspronkelijke informatie kan worden gegenereerd. Maar wel dat de oorspronkelijke informatie áltijd weer dezelfde hashcode oplevert. Daarom wordt deze techniek zo vaak in de wereld van encryptie gebruikt, het is immers een éénrichtingsweg die op geen enkele wijze teruggang mogelijk maakt. Door de hashcode nog unieker te maken met een timestamp, een moment in de tijd dat nooit meer terugkomt, is de Blockchain een unieke onveranderlijke database waar we ook voor QR-codes gebruik van kunnen maken. Zie ook mijn blog ‘De blockchain is een soort punniken’.
Door het Blockchain transactie verwerkingsproces met Proof-of-Work of Proof-of-Stake controle wordt daarnaast bij elke transactievastlegging ook nog een controleerbaar auditproces doorlopen om te zien of de transactie geldig is. Daarom is Blockchain is een van de mooiste ontdekkingen sinds het internet. En hashing is een belangrijk onderdeel daarvan.
Photo by Chris Curry on Unsplash