Varför rasade kursen?

Den som följde Bitcoins värde runt lunchtid idag såg kursen falla från runt 700 dollar ner till 530 under loppet av en dryg timme. Kursen har nu återhämtat sig till nära den ursprungliga nivån. Så vad var det som hände? Mt.Gox, som trots stora problem fortfarande är en av världens största Bitcoinbörser, har den senaste tiden haft problem med uttag av bitcoin och publicerade idag ett meddelande som förklarade orsaken. Nedan är ett citat ur meddelandet.

Non-technical Explanation:
A bug in the bitcoin software makes it possible for someone to use the Bitcoin network to alter transaction details to make it seem like a sending of bitcoins to a bitcoin wallet did not occur when in fact it did occur. Since the transaction appears as if it has not proceeded correctly, the bitcoins may be resent. MtGox is working with the Bitcoin core development team and others to mitigate this issue.

Meddelandet skapade lätt panik då många tolkade det som en kritisk bugg i Bitcoinprotokollet. Sanningen är dock att denna bugg eller begränsning i protokollet är känd ända sedan 2011 och en sida på Bitcoinwikin som förklarar problemet finns redan. I princip är den tekniska beskrivningen i meddelandet från Mt.Gox korrekt men många har reagerat på hur Mt.Gox lägger skulden på protokollet när det handlar om ett väldokumenterat beteende. Mt.Gox bör ha känt till detta, speciellt eftersom de använder egenutvecklad mjukvara för att hantera transaktioner, och borde ha anpassat sin mjukvara för att hantera situationen istället för att anta att den inte skulle uppstå.

Tekniskt

Såhär står det på wikin:

While transactions are signed, the signature does not currently cover all the data in a transaction that is hashed to create the transaction hash. Thus while uncommon it is possible for a node on the network to change a transaction you send in such a way that the hash is invalidated. Note that this just changes the hash, the output of the transaction remains the same and the bitcoins will go to their intended recipient.

Alltså, om man förlitar sig på det transaktions-ID (den hash) som man får när man skapar och skickar en transaktion för att senare kolla upp om transaktionen faktiskt accepterades av nätverket så kan det hända att man missar den. Men, bitcoin kan fortfarande att ha skickats från den adress man angav till den adress man angav, det är bara det att transaktionen har ett annat ID än det man förväntar sig. Genom att kolla upp vilka transaktioner som skett från/till de aktuella adresserna kan man ändå kontrollera om transaktionen man skickade ägt rum. Detta har Mt.Gox missat att göra och eftersom de istället skickat om transaktionen så har vissa personer kunnat lura till sig dubbla uttag.

3 Kommentarer

  • Jonas Lihnell
    11 februari, 2014 - 11:28 | Permalänk

    Den praktiska lösningen på problemet för Mt. Gox är således mycket enkel. Ta alla transaktioner som hamnar i blockkjedjan och omberäkna deras transaktions ID med den kod Mt. Gox egna mjukvara använder och jämför sedan med dem transaktions ID som samma mjukvara räknade ut innan den gjorde utskicken.

    • Alexander Bottema
      11 februari, 2014 - 15:09 | Permalänk

      Nja, det är snarare så att man måste titta på transaktionens inputs+outputs istället för transaktions-hashen. Jag är lite osäker på om det går att splitta en transaktion i två st. malleables (om transaktionen har flera inputs). I så fall blir problemet lite mer komplicerat. Självfallet är allting görbart. Det är otroligt svagt av MtGox att skylla på Bitcoin-protokollet, men dessutom är ju inte grunden till problemet, utan snarare att MtGox själva hamnade ur synk med bitcoin 0.8+ som förbjuder 0-paddning av EDCSA signaturer, men som MtGox producerade. Detta gjorde att någon kunde göra uttag ur MtGox tills 0-paddning skedde, och sedan rebroadcasta transaktionen själv (fixad). Detta i sin tur gjorde att MtGox trodde att vissa coins var ospenderade, och försökte återanvända dessa i kommande transaktioner, vilket gjorde att allting blev ett h-e med dubbelspenderingsförsök.

      • Alexander Bottema
        17 februari, 2014 - 13:48 | Permalänk

        Bekräftat själv: Eftersom ECDSA-signaturen täcker alla TxIn och TxOut så är det omöjligt att dela upp en transaktion i flera. Däremot måste man vara noga med att en transaktion alltid går igenom. Så fort man broadcastat en transaktion och den (av någon anledning) inte kommer in i blockchain, så måste man åtminstone spendera ett av mynten (till sig själv) omedelbart för att kreditera transaktionen. Signeringsprocessen är väldigt komplex (see https://en.bitcoin.it/wiki/OP_CHECKSIG) och anledningen till det är script-språket. Vissa bitar går inte att signera då det blir ett cirkulärt problem, och de bitar som inte blir signerade är då öppna för ”malleability”. Sakta med säkert håller bitcoin core-dev att stänga alla dessa ”hål”, men det kommer ta tid. Så länge får man helt enkelt leva med att det alltid föreligger en risk att din transaktion du broadcastat kan hamna i blockchain med annat txhash. Något stort problem är det inte så länge man är medveten om problemet.

  • Kommentera

    E-postadressen publiceras inte. Obligatoriska fält är märkta *