Taggat med: secp256k1

NSA varnar för kvantdatorer

NSA Kvantdatorer

Eller rättare skrivet så gick den amerikanska myndigheten NSA ut för några dagar sedan och varnade för att många av nutidens algoritmer som används bör uppgraderas för att motstå beräkningar utförda av kvantdatorer.

Det rör framförallt RSA där nyckelstorlekar  är under 4096 bitar, men även elliptiska kurvor kan ligga dåligt till eftersom en variant av Shors algoritm kan användas. Eller som NSA uttrycker det:

Minimum 3072 bit-modulus to protect up to TOP SECRET.

Intressant också är gällande hashalgoritmer så rekommenderas minst SHA384, vilket i praktiken innebär SHA512.

Nu innebär detta inte att alla måste byta över en natt utan NSA rekommenderar att leverantörer slutar att leverera och tillverka produkter eller mjukvaror som implementerar algoritmer som ej kan motstå beräkningar utförda av kvantdatorer.

Och förutom RSA och SHA så rekommenderas ECDH (Elliptic Curve Diffie–Hellman) med med minst 384 bitar.

Personligen så föredrar jag Curve25519 av Daniel J Bernstein etc, se SafeCurves. Bitcoin exempelvis använder sig av secp256k1.

The RSA-2048 Challenge Problem would take 1 billion years with a classical computer. A quantum computer could do it in 100 seconds

– Dr. Krysta Svore, Microsoft Research

Uppdatering: Obs Curve25519 hjälper inte mot beräkningar utförda av en kvantdator.

Så knäcker du BitCoin

BitCoin är byggt med hjälp av ett antal olika algoritmer. Dessa algoritmer är skapade för att försvåra det som kallas för BitCoin-mining samt så används dem även för verifiering av BitCoins. Eventuella sårbarheter skulle ej resultera i att det går att skapa fiktiva pengar eftersom detta ligger i den decentraliserade strukturen (peer-to-peer).

De algoritmer som används är SHA-256 samt  RIPEMD-160 men även elliptiska kurvor (EC DSA) och mer specifikt secp256k1. Secp256k1 kommer från den öppna standarden SEC2 (läs även här).

När någon ska överföra BitCoins till en annan person så används ECDSA:

Alice signerar transaktionen med sin privata nyckel och publicerar denna signatur för andra på  Bitcoin-nätverket att kontrollera med sin publika nyckel

Dock så signeras enbart en hash av meddelandet pg.a. prestanda. För denna hash så används SHA-256 på följande sätt:

template<typename T1>
inline uint256 Hash(const T1 pbegin, const T1 pend)
{
    static unsigned char pblank[1];
    uint256 hash1;
    SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1);
    uint256 hash2;
    SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2);
    return hash2;
}

Ungefär som PGP så använder Bitcoin publika och privata -nyckelpar för att göra signaturer, men också för att publicera ett fingeravtryck vilket eg. är en RIPEMD-160-hash som gört det möjligt att skicka BitCoins till någon. BitCoin är ännu relativt otestat och svagheter eller implementationsbrister uppdagats kontinuerligt i BitCoin och här kan du läsa om en intressant uppdatering.

Så om du vill knäcka BitCoin så är det förfarande som skapar nya BitCoins det lättaste sättet i dagsläget. Ett antal metoder har publicerats och här hittar du en.

Uppdatering: Finurligt sätt att använda JavaScript för att låta webb-besökare söka efter BitCoins. Om Aftonbladet.se eller en annan stor sajt lägger in denna JavaScript-kod så kommer de att vinna lotteriet.