Asymmetrische cryptografie in de Universa Blockchain

In het vorige artikel was meer te lezen over de basis principes van een hash functie die het Universa Blockchain Protocol gebruikt. De combinatie van drie hashfuncties, met de naam HashID, beschermt data zodat het veilig kan worden opgeslagen zonder dat je hier een vertrouwde derde partij voor nodig hebt. Een ander belangrijk aspect van het veilig opslaan van data is dat dit niet kan worden gewijzigd door partijen die er geen rechten voor hebben.

In dit artikel duiken we wat verder in de wereld van cryptografie. En dan in het bijzonder in de wereld van ‘asymmetrische cryptografie’ met encryptie/decryptie, private en public keys en signeren/verificatie.

Hashing en encryptie

Allereerst is het belangrijk om het verschil tussen hashing en encryptie te begrijpen. Encryptie is iets dat gebeurt als je een ‘origineel bericht’ om zet naar een ‘versleuteld bericht’ (met behulp van een encryptiesleutel). Daarna kun je het versleutelde bericht (met behulp van de decryption key) terug zetten naar het oorspronkelijke bericht.

Bij het algoritme voor encryptie/decryptie varieert de gecodeerde lengte van deze data op basis van de oorspronkelijke lengte of grootte van het bericht. Het houdt altijd dezelfde grootte.

Als je 10 miljoen aan symbolen encrypt, krijgt je 10 miljoen symbolen met gecodeerde tekst terug. Met de sleutel kunt je altijd het oorspronkelijke bericht van het terug krijgen vanuit het gecodeerde bericht.

Met het hashen is dat anders. Het punt met ‘hashing’ is dat je op een gecontroleerde manier te tekst of de input ‘lossy’ maakt. Ieder mogelijke bericht/input, ongeacht de grootte, krijgt dezelfde grootte of lengte in zijn hash.

In de Universa blockchain zijn het deze hashes die opgeslagen worden. Er is eigenlijk geen echte data die wordt opgeslagen in de DAG dat niet is versleuteld. De smart contracts zelf worden echter nooit versleuteld/gedecodeerd, omdat ze door de nodes moeten worden verwerkt. In het vorige artikel over HashID kon je lezen over deze ‘string’ van 128 tekens. Het maakt niet uit wat voor type smart contract je gebruikt, de status van het contract zal altijd hetzelfde zijn en gecheckt aan de hand van de corresponderende HashID van 128 karakters.

En wees echter niet ongerust: de communicatie tussen de clients en de nodes wordt versleuteld en ontsleuteld, zodat derden zich er niet mee kunnen bemoeien, of dit kunnen inzien.

Asymmetrische cryptografie

Het principe van een gedistribueerd en gedecentraliseerd netwerk is het zorgen voor betrouwbare en vertrouwelijke opslag van data. Dit kan uiteraard niet gebeuren zonder de mogelijkheid om deze data op een veilige manier te verzenden over het netwerk. Bij een dergelijke (door versleutelde) overdracht is de specifieke data alleen beschikbaar voor degenen dit ook écht mag zien. Dit moet vervolgens ook zijn verborgen voor degenen die dit niet zouden mogen kunnen lezen.

Kortom, om toegang te krijgen tot deze data heb je een digitale sleutel nodig. Wat nodig is, is een sleutel om gegevens te versleutelen en een sleutel om gegevens te ontsleutelen. En onthoud: de lengte van deze input is niet ‘lossy’ versleuteld naar een output van eenzelfde lengte.

Asymmetrische cryptografie wordt ook wel “public-key cryptography” genoemd. Het is een cryptografisch systeem dat key pairs gebruikt: public keys die openlijk mogen worden gedeeld en private keys die alleen bekend (mogen) zijn bij de eigenaar.

In een ‘asymmetrisch key encryption scheme’, kan iedereen berichten encrypten met de public key, maar kan de eigenaar van de bijbehorende privésleutel deze alleen maar decrypten. Dit is wat het een niet symmetrische (of omkeerbare) cryprografische manier maakt. En daarom heet dat asymmetrisch. De beveiliging van de data hangt af van de mate waarop je de private key veilig bewaart.

En deze asymmetrische encryption wordt gebruikt tijdens de communicatie tussen de nodes of tussen een node en een client.

Dus om het gemakkelijker te maken: asymmetrische cryptografie is als een eenrichtingsweg dat niet kan worden getraceerd of terug geredeneerd. Bij symmetrische cryptografie wordt de geheime sleutel gebruikt om zowel gegevens te versleutelen als te ontsleutelen (met slechts één enkele key).

Dit is het RSA-cryptosysteem, genoemd naar de beginletters van de achternamen van de bedenkers (Rivest – Shamir – Adleman). De coderingssleutel is openbaar en verschilt van de decoderingssleutel die geheim wordt gehouden (privé).

Encryptie en Decryptie

Laten we beginnen met een simpel voorbeeld. Stel je voor dat je een beetje data wilt verzenden. Dit kan een betaling/transactie of iets anders zijn. Om dit te doen, moet je het smart contract ondertekenen met jouw key.

De public key kun je opslaan in het smart contract. Of je deelt deze gewoon met mensen met wie jij wilt. Als je de private key hebt, kunt je elke bewerking ondertekenen om het smart contract te gebruiken.

De private key en de public key (samen ook wel het “key pair” genoemd) zijn wiskundig aan elkaar gerelateerd.

Private en public key

Als je een private key genereert (en daarmee in feite een hele ‘key pair’) in de web client, download je doorgaans automatisch een bestandje, met de extensie .unikey.

Je hoeft deze niet te openen in kladblok of een andere editor. Dit bestandje is jouw sleutel. Niets meer niets minder.

Je mag deze nooit, nooit en helemaal nooit delen met derden. En als je probeert te openen in een editor, loop je het risico dat je het onherstelbaar verandert waardoor je de toegang tot jouw data voor altijd verliest.

Dit is het belangrijkste punt als je de Universa Blockchain gebruikt: met het key pair kun je contracten ondertekenen en verifiëren. Zoals je je misschien herinnert, slaat het Universa Blockchain Protocol alleen de hashes op van een revisie van het smart contract.

Om deze aan te passen, moet je bewijzen dat je de corresponderende private key van dit smart contract hebt. Op de Knowledge Base website kun je meer lezen over de key pairs in Universa.

Signing en verifying

Als je een transactie wilt doen in de Universa Blockchain, moet je deze ondertekenen met je sleutels. Beschouw de private key als jouw unieke persoonlijke stempel of handtekening die niemand anders dan jij kan gebruiken.

De public key is beschikbaar voor verschillende partijen waarmee je communiceert.

Om een smart contract te registreren, moet je deze ondertekenen. Je kunt het wel aanpassen, maar als je dat wilt doen, moet je de sleutel hebben om het te ondertekenen. Het systeem controleert of je hiervoor de benodigde rechten hebt.

Overigens, de stap van de public key naar jouw corresponderende adressen wordt gedaan door te hashen (maar overigens niet de HashID function. Deze is vrij complex en wordt daarom alleen gebruikt om het hele contract te hashen).

Door een bericht te versleutelen met iemands public key, wordt automatisch geverifieerd dat de afzender daadwerkelijk is wie hij zegt dat hij is, aangezien de public key openbaar is voor iedereen. Om de oorsprong van een bericht te verifiëren, kan RSA ook worden gebruikt om een bericht te ondertekenen.

Stel dat je een ondertekend bericht naar Alexander wilt sturen. Je kunt het decoderen en er een hash aan toevoegen als “handtekening” aan het bericht

Als Alexander het ondertekende bericht ontvangt, gebruikt hij hetzelfde hash-algoritme in combinatie met jouw publieke sleutel. Het versleutelt het bericht en vergelijkt de resulterende hash met de werkelijke hash van het bericht.

Als de twee het erover eens zijn, weet het netwerk ook dat de auteur van het bericht in het bezit was van uw private key en dat er sindsdien niet meer met het bericht is geknoeid.

Lange en korte adressen

Het adres is een korte alternatieve weergave van jouw public key, wat handig is om te gebruiken als je deze ergens moet invoeren. Je kunt ook een kort adres (51 symbolen lang) of een lang adres (72 symbolen lang) gebruiken.

Ze verwijzen allebei naar dezelfde public key. Het lange adres biedt een ultiem beveiligingsniveau en het korte adres biedt nog steeds voldoende beveiliging voor de meeste scenario’s. Het lange adres gebruikt SHA3-384 en de korte versie SHA3-256.

Je kunt meer lezen over de binaire en text representaties van de adressen op de Knowledge Based website.

In Universa kan het enkele key pair worden gebruikt om meerdere adressen uit af te leiden. Elk van deze adressen kan onafhankelijk worden gebruikt, maar verwijst nog steeds naar dezelfde public key. Heb je nog vragen? Neem contact op met @starnold via Telegram.

Help translating this post to Engels Duits Frans Italiaans Spaans Kroatisch Russisch. Contact @starnold to participate!

Related posts

Identiteit van Universa’s (en Ricardian) Smart Contracts

Arnold

Binnen in de Universa DAG

Arnold

Binnen in een Universa Smart Contract

Arnold

Leave a Comment