Jag har tidigare lovat att inte skriva mer om Craig Wright så jag ber om ursäkt för den korta referensen till honom i den här artikeln som egentligen handlar om något annat. För några dagar sedan publicerade en okänd person ett meddelande som löd såhär:
Craig Steven Wright is a liar and a fraud. He doesn't have the keys used to sign this message.
The Lightning Network is a significant achievement. However, we need to continue work on improving on-chain capacity.
Unfortunately, the solution is not to just change a constant in the code or to allow powerful participants to force out others.
We are all Satoshi
Meddelandet var signerat med de privata nycklar som tillhör 145 olika bitcoinadresser som Craig Wright i samband med ett stämningsförfarande påstått att han kontrollerar. Adresserna är adresser som tidigt i Bitcoins historia användes av en miner för att ta emot blockbelöningen, 50 bitcoin per adress som sedan dess legat orörda. Craigs påstående att han äger dessa adresser är förstås en del i hans argumentation om att han är Satoshi. Lite tråkigt därför för Craig att den som faktiskt kontrollerar adresserna på ett enkelt sätt kan bevisa det med en s.k. digital signatur, och valde att göra just detta (något som även borde vara det självklara sättet för Craig att bevisa att han är Satoshi, om han nu hade varit det). Så vad är då en digital signatur? Ja det är det jag tänkte att vi skulle gå in lite närmre på i den här artikeln.
En digital signatur fyller samma syfte som en vanlig signatur, alltså en namnunderskrift, är tänkt att göra, nämligen att bevisa att en viss person står bakom ett påstående, uttalande eller annan typ av information. När man skriver ett kontrakt så skriver båda parter under längst ner på pappret och det gör alltså att man senare vid en eventuell dispyt kan komma tillbaka och visa upp pappret, peka och säga: “Titta här, det här är vad vi kom överens om. Jag kan bevisa det, för det är din underskrift där på pappret”. Det här systemet har fungerat förvånansvärt bra under många år trots den uppenbara svagheten i att det är relativt enkelt att förfalska någons signatur. Den här svagheten kompenseras för genom vårt rättssystem. Att förfalska någons underskrift kan ge fängelsestraff och det stoppar de flesta från att ens försöka. Man kan nog till och med säga att den största delen av säkerheten i ett sådant här system ligger i just rättsystemet, snarare än underskrifterna i sig.
Så visst vore det bättre med ett system där själva signaturen faktiskt är mycket svår att förfalska? Digitala signaturer baseras på s.k. asymmetrisk kryptering där olika nycklar används för kryptering respektive dekryptering av ett meddelande. En fördel med sådana system är att man inte i förväg behöver hitta ett säkert sätt att utbyta krypteringsnycklar med sin motpart. Vill du skicka ett krypterat meddelande till någon så använder du helt enkelt dennes publika nyckel (som det är helt OK att vem som helst känner till) för att kryptera ditt meddelande med vetskapen om att det endast är den privata nyckeln (som endast mottagaren känner till) som kan dekryptera meddelandet.
Digitala signaturer fungerar som asymmetrisk kryptering fast tvärtom. Där använder du istället den privata nyckeln och kombinerar den med ett visst innehåll för att skapa en s.k. signatur. Eftersom endast du känner till den privata nyckeln så är det endast du som kan skapa en sådan signatur. Den publika nyckeln kan däremot användas av vem som helst för att bekräfta att signaturen är korrekt. Till skillnad från en underskrift på ett papper så ser signaturen olika ut beroende vilket innehållet är. Signaturen är alltså hårt knuten till det innehåll som har signerats vilket också är en stor fördel jämfört med klassiska underskrifter. Om du sätter din kråka längst ned på ett papper så finns ändå möjligheten att någon i efterhand ändrar i innehållet på pappret så att det ser ut som att du har signerat något annat än vad du avsåg. Skriver du t.ex. ut en check så vill du förmodligen vara noga med att se till att det inte på ett enkelt sätt går att lägga till en nolla i slutet av beloppet. På exempelchecken nedan kan du se flera olika åtgärder som är tänkt som ett skydd mot detta. Med digitala signaturer kan du vara säker på exakt vilket innehåll som har signerats och av vem (eller för att vara petig, vems privata nyckel som använts - om du råkar låta någon komma över din privata nyckel så har du problem). Det går inte att i efterhand modifiera innehållet ens litegrann eftersom minsta ändring ger upphov till en helt ny digital signatur.
När du använder vanligt mobilt BankID så används digitala signaturer och här kan man ofta se att de som implementerar lösningen inte riktigt förstått fördelarna med digitala signaturer. När du ska signera något brukar du på skärmen få upp texten som ska signeras. Handlar det här om ett kontrakt så bör alltså själva kontraket visas där, så att det faktiskt är den texten du signerar. På så sätt går det i efterhand att gå tillbaka och bevisa att du skrev under en viss, faktisk text. Många, även svenska myndigheter, missar det här och låter dig istället signera en generisk och helt intetsägande text. Nedan är ett exempel från verksamt.se:
Det här är alltså motsvarigheten till att sätta din underskrift på ett papper där det står: “Jag skriver härmed under på att det som står på det där andra pappret som vi nyss kollade på är korrekt”. Inte speciellt bra användning av en teknik som har potential att vara mycket kraftfull när den används rätt.
En bitcoinadress är i princip samma sak som en publik nyckel (i själva verket är det hashad version av den publika nyckeln) och den privata nyckel som hör till en bitcoinadress är vad som förvaras i din plånbok. Digitala signaturer används varje gång du skickar bitcoin för att signera den transaktion som du vill utföra och nätverket kommer bara att acceptera transaktionen om du kan producera en sådan signatur, som alltså är ett bevis på att du äger de bitcoin du försöker skicka. Det är dock möjligt att istället för att signera en transaktion signera precis vilket meddelande som helst och på sätt bevisa att du kontrollerar en viss bitcoinadress och det är alltså just det som personen vi nämnde i början av inlägget har gjort. Vi vet inte vem personen är men vi vet att det är ägaren till en mängd adresser som Craig påstått sig äga och vi vet att denne person anser att Craig är en lögnare och bedragare. Det har hen skrivit under på.