Taggat med: sha1

Så lagrar Dropbox ditt lösenord

Att Dropbox blev hackade och samtliga lösenord hamnade på vift 2012 är något som är välkänt. Av analys visade det sig att hälften av lösenorden var SHA1-hashade och andra hälften använde sig av bcrypt-hash. Detta troligtvis pga en pågående övergång från SHA1 till bcrypt.

Det har hänt en hel del sedan 2012 och Dropbox avslöjade nyligen hur de lagrar sina lösenord på ett säkert sätt.

Först och främst använder Dropbox precis som Facebook (se nedan) flertalet lager, som en lök. Att använda SHA512 före bcrypt är främst av två anledningar: överbelastningsattack om långa lösenord används samt att vissa implementationer av bcrypt kortar ner lösenordet till 72 bytes.

bcrypt används med en cost på 10 (arbetsfaktor/work factor) samt en unik salt för varje användare. Detta steg tar ungefär 100ms på Dropbox servrar.

Sista steget är AES256 med en global nyckel som är samma för alla hashar. Detta är för att om hela databasen blir snodd eller servern där lösenorden lagras så finns det ett extra skydd med en nyckel som är svår att hitta.

Dropbox lösenord

Även Facebook använder flertalet lager för sina lösenord (läs mer här):

Facebook lösenord

Dropbox har sedan tidigare utvecklat zxcvbn som ser till att användarna väljer bra lösenord först och främst. Även så kan vi anta att Dropbox kontinuerligt bevakar läckage av lösenord på nätet och informerar användare om just deras lösenord finns med eller går att knäcka.

Givetvis kan man alltid argumentera att det nu finns säkrare alternativ till bcrypt såsom argon2 och scrypt. Men bcrypt har bra stöd i många programbibliotek och har funnits ända sedan 1999. Dock uppger Dropbox att de har mer erfarenhet av bcrypt men kommer troligtvis att uppgradera till argon2.

Även uppger Dropbox att de kommer i framtiden att överväga att använda en HSM (kanske CrypTech?) för att lagra den globala nyckeln. Denna nyckel roteras också regelbundet uppger de på sin blogg.

Två nya kryptoattacker mot Telegram

Telegram

Telegram är en app för att skicka krypterade meddelanden mellan telefoner eller till dator. Appen är skapad av grundaren till ryska motsvarigheten till Facebook, VK. Men på grund av ryska myndigheter så valde Pavel Durov att lämna landet i exil.

Även så har Telegram fått stor uppmärksamhet på sistone då det framkommer att ISIS använder en funktionalitet i Telegram som gör det möjligt att skapa krypterade chatt-kanaler.

Ny forskning från Århus Universitet visar dock på att appen innehåller ett antal svagheter. Men grundproblemet med appen är att man har valt att implementera ett eget kryptoprotokoll.

Dessa två sårbarheter som uppdagats är relaterad till padding i dess eget protokoll vid namn MTProto. Klienten är i dagsläget öppen källkod, men ej serverdelen.

Intressant att notera är även att varje nyckel används för 100 stycken chatt-meddelanden eller max 1 vecka.

Så om en nyckel röjs så går det att återskapa max 100 meddelanden:

This means that if an adversary gets hold of an old auth_key he will be able to derive AES keys and read 100 encrypted messages, but he will not be able to construct the next key from the public DH values.

En av attackerna går ut på att lägga på extra padding, enligt följande:

Telegram padding-attack

Denna attack kan motverkas lätt genom att kontrollera längden på padding, vilket även föreslås i uppsatsen som är länkad nedan.

Sen ifrågasätts även användningen av SHA1 i Telegram. Och skulle exempelvis all kraft som finnes i Bitcoin mining-nätverket användas för att hitta en kollisionsattack i SHA1 så skulle det ta 4 sekunder.

Beskrivning av MTProto-protokollet:
MTProto

Här kan du ladda hem hela uppsatsen från Århus universitet:

Framtidssäkra krypteringen

Kryptoframtiden

Går det att sia in i framtiden om hur och vilka krypteringsalgoritmer som kommer att bestå?

Både Ja och Nej. Vi kan däremot titta i backspegeln och se vad vi har lärt oss av historien, vilka algoritmer som varit säkra och vilka som knäckts. För att jobba med krypton handlar om att alltid vara på tårna och följa vad som händer i omvärlden gällande nya rön, forskningsrapporter och best practices.

Det gäller att ha en plan för den dagen ett byte ska ske. Hur migrerar vi från SHA1 till SHA256? Kan vi byta hashfuktion på ett enkelt sätt eller blir vi kvar med MD5?

För de handlar inte enbart om att välja bra och trendiga algoritmer, det gäller även att bygga ett förtroende över tid.

Men skulle jag blicka framåt så är ChaCha20 + Poly1305 av Daniel J Bernstein (DJB), Peter Schwabe och Tanja Lange helt klart intressant som nu fått RFC-nummer 7539.

Så klart är elliptiska kurvor (ECC) intressant men titta innan framförallt på arbetet som DJB genomfört i samband med SafeCurves. Och när det gäller end-to-end kryptering så titta på axolotl (som nu WhatsApp använder).

krypto memeHåll Er borta från SHA1, 3DES, MD5 samt snake oil där utvecklare eller tillverkare skryter med löjligt stora nyckellängder eller oknäckbara system.

Och glöm framförallt inte att valet av algoritmer bara är en liten del av ett mycket större arbete som omfattar nyckelhantering, signering, kodgranskning, lökprincipen, patchning och uppsäkrade system och framförallt användare som ska använda systemet samt utbildas.

Kryptering med PHP

PHP är ett mycket väl använt programmeringsspråk som används i samband med webb-programmering. Krypteringsfunktionerna i PHP kan delas upp i följande kategorier:

  • mcrypt
  • openssl
  • inbyggda

Här följer en mycket liten sammanställning av dessa tre kategorier:

mcrypt

Mcrypt som är ett tredjepartsbibliotek innefattar en mängd kryptering/dekrypterings-funktioner såsom:

Vill du exempelvis skapa en SHA256 hexsträng på godtycklig sträng kan du göra enligt följande:

$sha256b= base64_encode(bin2hex(mhash(MHASH_SHA256,$phrase)));

openssl

OpenSSL är också ett tredjepartsbibliotek och innefattar bl.a dessa funktioner:

De funktioner OpenSSL tillhandahåller i PHP är mer inriktade på assymetrisk kryptering.

inbyggda funktioner

Den mest använda krypteringsfunktionen i PHP är crypt() som stödjer följande krypteringsalgoritmer:

  • CRYPT_STD_DES – Standard DES-based encryption with a two character salt
  • CRYPT_EXT_DES – Extended DES-based encryption with a nine character salt
  • CRYPT_MD5 – MD5 encryption with a twelve character salt starting with $1$
  • CRYPT_BLOWFISH – Blowfish encryption with a sixteen character salt starting with $2$ or $2a$

Övriga kryptorelaterade funktioner som återfinns som standard i PHP är exempelvis sha1 och md5.