Beveiliging van data
SHA-256 (Secure Hash Algorithm 256-bit) is een cryptografische hashfunctie, die veel wordt gebruikt om data binnen digitale systemen te beveiligen. Een hashfunctie is een wiskundige procedure of set van regels die een invoer (gegevens), omzet in een unieke, vaste grootte van uitvoer (de hashwaarde). SHA-256 neemt een bepaalde invoer (zoals bijvoorbeeld een bestand of tekst), en verandert dit in een unieke, vaste reeks van 256 bits. Elke verandering in de invoer (hoe klein de wijziging ook is), levert een compleet andere hashwaarde op. SHA-256 wordt onder meer gebruikt om wachtwoorden veilig op te slaan, digitale handtekeningen te creëren en transacties op de blockchain te beveiligen. Doordat iedere hashwaarde uniek is, is het bijna onmogelijk om de oorspronkelijke invoer te achterhalen. SHA-256 behoort tot de zogenaamde SHA-familie.
Waarvoor wordt SHA-256 gebruikt binnen blockchainnetwerken?
Waarom is SHA-256 zo’n veilige hashfunctie?
Welke cryptovaluta maken gebruik van SHA-256?
Waarvoor wordt SHA-256 gebruikt binnen blockchainnetwerken?
SHA-256 speelt een zeer belangrijke rol binnen sommige blockchain-ecosystemen en wordt op verschillende manieren gebruikt om de integriteit, veiligheid en consensus van deze netwerken te waarborgen. Binnen de blockchain wordt SHA-256 gebruikt voor:
- Hashing van transacties
- Merkle trees
- Proof of Work (PoW) consensus
- Beveiliging van de blockchain
- Wallet-adressen
Hashing van transacties
In blockchain-ecosystemen worden transacties (zoals het overdragen van cryptovaluta en smart contract-gegevens) gehasht met SHA-256 voordat ze worden opgenomen in een blok. Dit creëert een unieke hashwaarde voor iedere transactie, die fungeert als een identificatie en controle van de integriteit van de gegevens.
Merkle trees
SHA-256 wordt gebruik om zogenaamde ‘Merkle trees’ (hash-bomen) te construeren. Merkle trees zijn een hiërarchische gegevensstructuur die de transacties van een blok in een boomachtige indeling organiseert. Het maken van deze boom maakt snelle en efficiënte verificatie mogelijk van transacties in een blok, wat bijdraagt aan de schaalbaarheid van blockchainnetwerken.
Proof of Work (PoW) consensus
In PoW-gebaseerde blockchain-ecosystemen (zoals het Bitcoin-netwerk), gebruiken de miners de SHA-256 hashfunctie om de hash van een blok te berekenen. Daarbij passen ze de ‘block-header’ (inclusief tijdstempel, transactiegegevens en een nonce) aan, om een hashwaarde te vinden die aan bepaalde moeilijkheidsvereisten voldoet. Deze procedure (het mining-proces) vereist veel rekenkracht en energie, maar bewijst dat de miner aanzienlijke inspanningen heeft verricht, om het blok te produceren (waardoor consensus over het geldige blok wordt bereikt).
Beveiliging van de blockchain
De cryptografische veiligheid van SHA-256 wordt gebruikt om de integriteit van de blokken te waarborgen. Omdat iedere block-header de hash van het vorige blok bevat, creëert SHA-256 een onbreekbare ketting die voorkomt dat eerdere blokken worden gewijzigd, zonder de hele blokketen te herbouwen.
Wallet-adressen
SHA-256 wordt gebruikt om openbare sleutels van cryptografische sleutelparen om te zetten in verkorte, leesbare wallet-adressen. Hierdoor kunnen gebruikers van de blockchain gemakkelijk transacties ontvangen en verzenden, zonder de lange openbare sleutels te hoeven gebruiken.
Hoe werkt SHA-256?
De SHA-256 hashfunctie verloopt als volgt:
- Blokverdeling
- Initialisatie van waarden
- Verschillende verwerkingsstappen
- Berichtplanning
- Hash berekenen
- Update van de hashwaarde
- Voltooiing en output
Blokverdeling
SHA-256 verwerkt gegevens in blokken van 512 bits. Als de invoer niet precies in deze blokken past (dus te lang is), wordt het opgevuld met extra bits. Bij het verdelen van blokken wordt de invoerdata (meestal een lang bericht of bestand) opgedeeld in kleinere blokken van een vast formaat, voordat het hashproces begint. Het verdelen van blokken is nodig omdat SHA-256 is ontworpen om te werken met blokken van 512 bits (64 bytes). De invoer wordt opgedeeld in blokken van 512 bits om efficiëntie en uniformiteit te waarborgen, bij het verwerken van gegevens (ongeacht de lengte van het oorspronkelijke bericht). Als de gegevenslengte niet exact deelbaar is door 512 bits, worden extra bits toegevoegd om de invoer op te vullen en ervoor te zorgen dat het laatste blok precies 512 bits is.
Herhaaldelijke bewerkingen
De reden voor het werken met blokken is dat SHA-256 een iteratieve hashfunctie is, wat betekent dat het herhaaldelijk een reeks bewerkingen op de blokken uitvoert, om uiteindelijk tot de uiteindelijke hashwaarde te komen. Het verdelen van blokken maakt het mogelijk om het hashproces stap voor stap uit te voeren, wat efficiënter is dan het hashen van het hele bericht in één keer. Ieder blok van 512 bits doorloopt vervolgens verschillende verwerkingsstappen in het SHA-256-algoritme (zoals gegevensmanipulatie, bit-verschuivingen en bitwise-operaties). Uiteindelijk worden alle blokken samengevoegd en verwerkt, om de 256-bits lange hashwaarde te genereren. Deze hashwaarde is uniek voor ieder bericht en wordt gebruikt om de integriteit en authenticiteit van gegevens te waarborgen in cryptografische toepassingen.
Bit-verschuivingen
Bit-verschuivingen (bit shifts) zijn eenvoudige bewerkingen waarbij de bits van een binair getal naar links of naar rechts worden verplaatst. Deze bit shifts kunnen zowel ‘logisch’ als ‘aritmetisch’ worden uitgevoerd, en ze kunnen worden toegepast op zowel positieve als negatieve gehele getallen, die intern als binaire waarden worden gerepresenteerd.
Bitwise-operaties
Bitwise-operaties zijn specifieke operaties die worden uitgevoerd op individuele bits van een binair getal. Deze operaties kunnen worden uitgevoerd op ‘integers’ of andere datatypes, die intern als binaire waarden worden gerepresenteerd. Integers zijn gegevens die verwijzen naar gehele getallen (zonder decimale punten). Integers kunnen positief, negatief of nul zijn en omvatten alle gehele getallen van negatieve oneindigheid tot positieve oneindigheid. Het gebruik van bitwise en logische operaties, rotaties en constanten zorgt voor complexiteit en onvoorspelbaarheid in het hashproces, wat cruciaal is voor de beveiliging en bescherming tegen aanvallen. De resulterende 256-bits lange hashwaarde is een unieke vingerafdruk van het oorspronkelijke bericht.
Initialisatie van waarden
De SHA-256 hashfunctie heeft 8 initiële constanten (32-bits woorden) die als beginwaarden worden gebruikt voordat het hashproces begint. Deze constante waarden worden ook wel ‘hashwaarde-uitgang’ genoemd. Deze 8 initiële constante waarden worden in hexadecimale notatie weergegeven en worden gebruikt om de eerste status van de hashberekening in te stellen. Deze waarden zijn vooraf gedefinieerd en zijn bedoel om de onvoorspelbaarheid en veiligheid van het hashproces te vergroten. Deze 8 initiële waarden worden meestal weergegeven als:
h0 = 0x6A09E667
h1 = 0xBB67AE85
h2 = 0x3C6EF372
h3 = 0xA54FF53A
h4 = 0x510E527F
h5 = 0x9B05688C
h6 = 0x1F83D9AB
h7 = 0x5BE0CD19
Vergroten van de cryptografische veiligheid en onvoorspelbaarheid
Wanneer het SHA-256 algoritme wordt gestart voor een nieuw hashproces, dan worden deze 8 constante waarden gebruikt om de interne hashstatus te initialiseren, voordat de eigenlijke verwerkingsstappen beginnen. Tijde de iteratieve (herhalende) stappen worden deze waarden gecombineerd, verwerkt en aangepast op basis van de gegevensblokken, om uiteindelijk de 256-bits lange hashwaarde te genereren. Door gebruik te maken van vaste en voorgedefinieerde hashwaarde-uitgangen, worden de cryptografische veiligheid en de onvoorspelbaarheid van de hashwaarde vergroot. Hierdoor wordt het moeilijker om aanvallen te creëren, die afhankelijk zijn van het voorspellen van de initiële staat van het SHA-256-algoritme.
Verschillende verwerkingsstappen
De hashfunctie doorloopt een reeks verwerkingsstappen, waarin bits worden verschoven, ‘geXORd’ en bitwisselingen plaatsvinden. XOR (exclusieve OR) is een logische operatie die twee bits vergelijkt. Het resultaat is 1 als de bits verschillend zijn en 0 als ze hetzelfde zijn. Bijvoorbeeld:
0 XOR 1 = 1, en 1 XOR 1 = 0
XOR heeft unieke eigenschappen waardoor het nuttig is voor het omkeren van bits, het controleren van pariteit en het creëren van versleutelingssleutels. Pariteit geeft aan of een set van bits een even of oneven aantal 1-bits bevat. Het wordt gebruikt om gegevensfouten te detecteren, waarbij de pariteit wordt berekend en vergeleken met de ontvangen gegevens, om te zien of er bits zijn gewijzigd. Een even-pariteit betekent dat het aantal 1-bits even moet zijn, terwijl een oneven-pariteit betekent dat het aantal 1-bits oneven moet zijn. Als de pariteit niet overeenkomt, dan kan er een fout zijn opgetreden in de gegevens.
Berichtplanning
De blokken van 512 bits worden in 16 woorden van 32 bits verdeeld om verdere verwerking mogelijk te maken. Ieder blok wordt uitgebreid naar een 64-elementen tellende ‘berichtplanning’. De berichtplanning is een uitbreiding van het 512-bits blok dat extra woorden toevoegt, die nodig zijn voor de verwerkingsstappen.
Hash berekenen
SHA-256 berekent de uiteindelijke hashwaarde door het combineren van de bewerkte blokken en de initiële constanten.
Update van de hashwaarde
Na iedere iteratie worden de 8 hash-hoofdletters bijgewerkt door ze te combineren met tijdelijke waarden, die zijn berekend tijdens de verwerkingsstappen.
Voltooiing en output
Nadat alle blokken zijn verwerkt, wordt de resulterende hashwaarde gevormd door de bijgewerkte hash-hoofdletters in een bepaalde volgorde samen te voegen. Deze 256-bits lange hashwaarde vertegenwoordigt het unieke resultaat van de SHA-256-hashfunctie voor het oorspronkelijke invoerbericht.
Waarom is SHA-256 zo’n veilige hashfunctie?
Met het SHA-256-algoritme is het onmogelijk om vanuit de hashwaarde, de originele invoer te achterhalen. Hierdoor is SHA-256 bestand tegen zogenaamde ‘preimage-aanvallen’. Zelfs de kleinste wijzigingen in de invoer leiden tot een volledig andere hashwaarde. Het is voor aanvallers in principe niet mogelijk om SHA-256 te kraken. Om SHA-256 te kraken moet er een andere invoer worden gevonden die dezelfde hashwaarde oplevert (hashbotsingen), of moet de hashwaarde worden omgekeerd om het oorspronkelijke bericht te herstellen. Dat is zeer lastig vanwege de:
Sterke versleuteling
SHA-256 gebruikt een iteratieve en complexe mix van bitwise en logische operaties, rotaties en constanten, wat het algoritme moeilijk te doorbreken maakt.
Uniforme verdeling
Kleine wijzigingen in het invoerbericht leiden tot verschillende hashwaarden. Dit betekent dat zelfs hele kleine veranderingen in de invoer, grote en onvoorspelbare veranderingen in de hashwaarde veroorzaken.
Hashlengte
De 256-bits lange hashwaarde biedt een zeer groot aantal mogelijke combinaties, wat het vinden van een specifieke invoer die overeenkomt met een bepaalde hashwaarde zeer moeilijk maakt.
Tijdsintensiviteit
Het uitvoeren van zogenaamde ‘brute-force-aanvallen’ om alle mogelijke invoeren te proberen (om zo een bepaalde hashwaarde te matchen), is tijds- en rekensysteem intensief.
Digitale handtekeningen
SHA-256 wordt vaak gebruikt om een hashwaarde van gegevens te berekenen, die als invoer fungeert voor algoritmen die gebaseerd zijn op elliptische krommen, zoals bijvoorbeeld het Elliptic Curve Digital Signature Algorithm (ECDSA) en het Diffie-Hellman-protocol. Deze combinatie biedt een sterke beveiligingsbasis voor verschillende cryptografische toepassingen. ECDSA is een algoritme dat gebruikmaakt van elliptische krommen om digitale handtekeningen te maken. Daarbij wordt een hashwaarde van het bericht berekend met behulp van SHA-256. Vervolgens wordt er een privésleutel in het ECDSA-algoritme gebruikt om een digitale handtekening te genereren. Deze handtekening wordt met het bericht verzonden en kan worden geverifieerd door de ontvanger, met behulp van de corresponderende openbare sleutel en SHA-256.
Sleuteluitwisselingsprotocol
Het Diffie-Hellman-protocol (Elliptic Curve Diffie-Hellman) is een sleuteluitwisselingsprotocol dat eveneens gebruikmaakt van elliptische krommen. Met behulp van dit protocol kunnen twee partijen een gedeeld geheim berekenen, zonder het geheim daadwerkelijk te verzenden. Dit wordt bereikt door een combinatie van elliptische krommen en hashing. SHA-256 kan worden gebruikt om een gedeeld geheim af te leiden uit de gegenereerde punten op de elliptische krommen.
Welke cryptovaluta maken gebruik van SHA-256?
Er zijn verschillende cryptocurrency’s die gebruikmaken van SHA-256, waaronder:
- Bitcoin (BTC)
- Bitcoin Cash (BCH)
- Bitcoin SV (BSV)
- Namecoin (NMC)
- Peercoin (PPC)
- Unobtanium (UNO)
- Neutron (NTRN)
- Crown (CRW)
- Litecoin Cash (LCC)
- Deutsche eMark (DEM)
- Terracoin (TRC)
- Gridcoin (GRC)
- Zettacoin (ZET)
- Freicoin (FCR)
- Sprouts (SPRTS)
Andere hashing-algoritmen
Naast SHA-256 worden er nog verschillende andere hashing-algoritmen gebruikt binnen blockchain-ecosystemen, waaronder:
- Equihash
- Whirlpool
- X11
- CryptoNight
- Scrypt
- Blake
- Tiger
- BMW
- Groestl
- JH
- Keccak
- Skein
- Luffa
- Cubehash
- Shavite
- Simd
- Echo
Conclusie
SHA-256 is een krachtige, veilige en betrouwbare cryptografische hashfunctie, die gebruikt wordt voor digitale beveiliging. Verschillende blockchain-ecosystemen (waaronder het Bitcoin-netwerk) maken gebruik van dit algoritme om consensus tot stand te brengen. SHA-256 zet invoer om in unieke, onveranderlijke hashwaarden van 256 bits. Door zijn complexiteit en bestendigheid tegen preimage-aanvallen, biedt deze hashfunctie een sterke beveiligingslaag voor wachtwoorden, digitale handtekeningen en cryptocurrency-transacties. En hoewel SHA-256 als solide en betrouwbaar wordt beschouwd, is het belangrijk om te onthouden dat de veiligheid van cryptografische algoritmen afhankelijk is van allerlei verschillende factoren, zoals de lengte en complexiteit van de wachtwoorden, de omgeving waarin ze worden toegepast en mogelijke zwakke punten in de implementaties. Hashfuncties zoals SHA-256 moeten daarom worden gebruikt in combinatie met andere best practices om de veiligheid van gegevens binnen blockchainnetwerken of andere digitale systemen te waarborgen.
Op de hoogte blijven van de ontwikkelingen op het gebied van blockchaintechnologie? Meld je dan nu aan voor de blogpost!