In technisch opzicht is een blockchain niet veel meer dan een gedistribueerde database die bestaat uit een keten van datablokken. ‘Gedistribueerd’ betekent in dit geval dat deelnemers de data uitwisselen via een eigen peer-to-peer netwerk (P2P). Elke node beschikt daarbij over het volledige databasebestand.
Er bestaan zowel openbare als private blockchains. De bekendste openbare is die van de cryptomunt bitcoin. Een andere openbare blockchain is Ethereum. Die is vooral bekend geworden omdat hij in tegenstelling tot bitcoin ook smart contracts kan vastleggen. In theorie kan bij een openbare blockchain iedereen meedoen, alle data lezen en zelf nieuwe gegevens toevoegen. In het bedrijfsleven wordt meer gebruik gemaakt van private blockchains. Die bestaan alleen op het eigen netwerk en op computers van het betreffende bedrijf. Er zijn ook hybride vormen, waarbij niet alle data gedeeld wordt.
Een van de kenmerkendste eigenschappen van blockchains is dat eenmaal vastgelegde data naderhand in principe niet meer veranderd kunnen worden. Daardoor komen ze in aanmerking als opslagmedium voor toepassingen waarbij steeds nieuwe gegevens moeten worden bewaard zonder dat ze gemanipuleerd kunnen worden. Het kan gaan om gegevens van financiële transacties, maar net zo goed om een elektronisch patiëntendossier. De gebruikersdata in de bitcoin-blockchain zijn alle uitgevoerde transacties, oftewel de overboekingen van bedragen tussen deelnemers.
Het kleinste element van een blockchain is een block. Dat omvat behalve een index en een tijdstempel minstens drie andere componenten: de eigenlijke data, de hash van het voorgaande block en een zogeheten Proof of Work.
Doordat elk block de hash bevat van de voorganger, zijn ze aan elkaar gekoppeld en bieden ze onderlinge bescherming tegen manipulatie of onopzettelijke corruptie door bijvoorbeeld geheugen- of overdrachtsproblemen. Als je gegevens in een block achteraf zou wijzigen, verandert de hash en dit valt meteen op bij het volgende block. Maar dat niet alleen: de hash van de voorganger maakt deel uit van het block en wordt dus gebruikt bij het berekenen van de eigen hashwaarde, die weer in het volgende block wordt opgeslagen. Om de gegevens in een bestaand block aan te passen, moet je dus alle blocks vanaf dat punt opnieuw berekenen. Dat is in theorie wel mogelijk, maar veel meer werk. Hoe verder terug in de blockchain gegevens zijn vastgelegd, hoe moeilijker ze te manipuleren zijn.

Om zulke manipulaties nog lastiger en vanaf een bepaald punt haast onmogelijk te maken, verwerken de meeste blockchains in de hash een implementatie van Proof of Work. Dat is een getal dat moeilijk te berekenen, maar makkelijk te verifiëren is. De hashwaarde van een geldig block mag bijvoorbeeld niet groter zijn dan een bepaalde maximumwaarde. Om een nieuw block toe te voegen, moet net zo lang een Proof of Work-getal worden geprobeerd totdat een geldige hashwaarde is gevonden. Zolang het hash-algoritme niet gekraakt is, kan een geldig block alleen worden gevonden door lukraak getallen uit te proberen. In bitcoin-termen wordt het Proof of Work-getal trouwens de nonce genoemd. In de cryptografie staat dat eigenlijk voor ‘number used once’ en is het een soort eenmalig te gebruiken wachtwoord.
Door de regel voor een geldig block aan te passen, kan de hash-berekening moeilijker worden gemaakt. In de bitcoin-blockchain word de maximumwaarde voor een geldige hash geregeld zodanig aangepast dat alle deelnemers samen gemiddeld elke tien minuten een block kunnen toevoegen. De Ethereum-blockchain zou elke vier minuten met een block moeten groeien. Het bijbehorende hash-algoritme vereist niet alleen rekencapaciteit, maar ook een paar gigabyte aan opslagruimte. Daarmee moet worden verhinderd dat geldige blocks kunnen worden berekend met speciale hardware, zoals ASIC’s. Door een flinke investering in dergelijke hardware zou anders een meerderheid van de rekencapaciteit in handen kunnen komen van een beperkte groep deelnemers, wat de stabiliteit van de blockchain in gevaar kan brengen.
Elke deelnemer kan controleren of een blockchain intact is. Het werk daarvoor is te overzien. Je hoeft alleen de hash van elk block opnieuw te berekenen, die te vergelijken met de voorganger-hash in het volgende block en controleren of de nonce voldoet aan de gestelde voorwaarde. Hiervoor download je een blockhain-client.
