Problemet med græsrødder...

... er at der er så mange af dem.

Hvis jeg havde skrevet md5crypt i et eller andet stort firma, kunne jeg have sendt et memo op igennem organisationen og forklaret at vi skulle have en ny algoritme på plads fra næste version fordi bla. bla. bla. bla.

Men md5crypt er sandsynligvis verdens mest kopierede passwordscrambler, og i mangel af et Vogon Tannoy anlæg ("People of Earth, Your attention please...") er vilkårene at skrive sig vej igennem filtrene på hackernews, slashdot, reddit osv.

Disse filtre er meritokratiske, hvis ikke en stor nok andel af dem fatter hvad du taler om, drunker din advarsel i nuttede Ruby On Rails eksempler, kattekillinger eller hvad det nu lige er de forstår.

Jeg har faktisk gået i et par år og vidst at jeg burde slå md5crypt en pæl igennem hjertet, forskellige forskere har holdt mig orienteret med deres brute-force fremskridt og det var indlysende at nu skal der mere til.

Men hele denne process med at få nyheden ud, visheden om at 99.4% af alle nyhedsmedier ville taste "md5" i google og ikke fatte forskellen, eller hvad der blev talt om overhovedet har afholdt mig fra det.

Det var et slagsmål jeg simpelthen ikke havde lyst til at tage og jeg håbede i mit stille sind at en eller anden kryptograf med fagforeningsbogen i orden ville sige det for mig.

LinkedIn's grænseløse inkomptence betød at jeg flere steder så "du skal bare bruge md5crypt, så er du sikker" og jeg måtte indse at det sure æble var mit at bide i.

Jeg afskrev fra starten Slashdot, der er md5/md5crypt en alt for subtil forskel og publikum slet ikke modne til en så præcisionskrævende besked som denne.

Reddit er god nok, hvis det du skriver har en bred appel, men når du sigter efter en bestemt demografi er det stort set umuligt at finde netop den subreddit hvor du har det rigtige publikum.

Så det blev HackerNews der måtte holde for. Hackernews skal man skrive til så de første 10-20 der piller ved prioriteten tænker "Jep, det ved jeg godt, men det er der sikkert mange andre der ikke gør". Hvis man skriver noget de ikke allerede ved, vender tommlen ikke opad. De finere nuancer og muligvis det centrale budskab, må man så smugle ind senere.

Den anden grund til at jeg har skubbet denne annoncering foran mig, er at jeg er træt af kryptografer der har oceaner af tid til at bitche og kritisere, men som aldrig har tid til at skrive noget kode vi kan bruge.

For selvfølgelig skal det ikke være en amatør der har stress fordi hans operativsystem har misset deadline, har søvnunderskud fordi hans nyfødte søn er nyfødt og ikke har adgang til sin litteratur om emnet fordi han sidder på et bart gulv i USA, der skriver vores password-scrambling kode.

Men det blev det, for kryptografer anser det for et allerede løst problem og derfor skriver de ikke noget kode til at løse problemet, folk kan jo bare læse deres bøger og beviser.

Da jeg kom hjem i aften lå der et antal mere eller mindre bedrevidende og harmdirrende emails til mig fra forskellige kryptografer, der påpegede alle mulige ting og henviste til alle mulige af deres publikationer, men ikke en eneste af dem skrev noget der kom i nærheden af "I'll write som code we can use".

Shit-stormen fortsætter sikkert imorgen, hvor danske journalister vil ringe uden at kende forskel på MD5 og A38 og hvor ældre kryptografer med mere konventionelle døgnrytmer vil brokke sig.

Og jeg vil svare dem, som jeg svarede de første:

As we say in FreeBSD: "Shut up and code"

phk

Kommentarer (24)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Søren Schrøder

Jeg vil gerne sige tak for $1$ og dets trofaste arbejde i mange år. Og så troløst kaste mig videre til den næste. Om det skal være blowfish eller sha-2 skal jeg lige læse op på.

Nu hvor md5crypt er EOL så forestiller jeg mig der allerede er folk igang med at ændre at "passwd_format=md5" er standard i FreeBSD (det er det i den 9.0 jeg lige installerede i forgårs). Ved du hvad valget bliver ?

PS: hvis man leger med bogstaverne i EOL (end of life) bliver det til OEL. Skal vi drikke MD5 OEL i krypten (ja ja.. plat.)

Jesper Lund Stocholm Blogger

@PHK: Du blev refereret i gårsdagens udgave af Tech News Today i forbindelse med Linkedin/eHarmony/MD5 historien. http://twit.tv/show/tech-news-today/517


Det er pudsigt at Poul-Hennings kommentar om sites, der reelt ikke forstår hvad det drejer sig om er helt på sin plads i dette indslag.

Ankermanden udtaler 10:31 inde i klippet, at

"That comes straight out of the mouth of Danish developer Poul-Henning Kamp who developed MD5, a hash-technology I think in 1995, that he now says: Don't use!"

:o)

Søren Løvborg

Problemet har været løst siden sidste årtusind:
http://en.wikipedia.org/wiki/Bcrypt

Bcrypt er en dedikeret password-algoritme, salting er obligatorisk, og man kan "skrue på den" så den kører tilpas langsomt til at brute-force angreb forpurres.

Nu kræver det bare:
1) folk begynder at bruge algoritmen, frem for at rulle deres egne SHA-* baserede løsninger,
2) at folk kan finde ud af at bruge algoritmen korrekt (såsom at løbende skrue på hastighedshåndtaget, og kun bruge random salts), og
3) at populære implementationer ikke indeholder pinlige sikkerhedsfejl (se fx http://lwn.net/Articles/448699/).

Problem 1 er svært, men løser sig tildels med tiden.

BCrypt.NET har faktisk løst problem 2. Password-håndtering fås vist ikke simplere:

string pw_hash = BCrypt.HashPassword(plain_password);

bool ok = BCrypt.Verify(plain_password, pw_hash);

HashPassword genererer selv et tilfældig salt, og benytter en "passende" work factor, som dog er hardcoded i librariet (runtime benchmarking ville være mere fremtidssikkert).

De andre language bindings kan desværre ikke konkurrere med dette.

Problem 3 kan tildels løses ved at fuzze inputs til forskellige implementationer og kontrollere at svarene matcher. Det kræver selvfølgelig at reimplementationer ikke kopierer sikkerhedsfejlene i originalen, som flere af librariesne desværre gjorde. :(

Lars Bjerregaard

Tak til PHK for:

At skrive md5crypt i 1995 da der var brug for den.

At have modet og integriteten til at bide i det sure æble, og slå sin egen baby ihjel, offentligt(!), på http://phk.freebsd.dk/sagas/md5crypt_eol.html.

At give nogen gode guidelines til vejen frem.

Der er ikke så mange med det niveau af ansvarlighed, faglig stolthed og integritet i behold, så synes lige det var værd at tippe med hatten herfra.

Lars Tørnes Hansen

Jeg har svært ved at se hvordan man kan bruge et tilfældigt salt. Hele ideen med password hashing er jo at processen er eksakt reproducerbar når man har passworded. Så man bliver da nødt til at styre hvilken salt der bliver brugt.

De skriver at man bare skal gøre sådan her:

// Pass a logRounds parameter to GenerateSalt to explicitly specify the
// amount of resources required to check the password. The work factor
// increases exponentially, so each increment is twice as much work. If
// omitted, a default of 10 is used.
string hashed = BCrypt.HashPassword(password, BCrypt.GenerateSalt(12));

// Check the password.
bool matches = BCrypt.CheckPassword(candidate, hashed);

Bcrypt.net koden er on-line på:
http://derekslager.com/blog/attachment.ashx/bcrypt-dotnet-strong-passwor...

Kigger man i

public static string HashPassword(string password, string salt)

i metoden finder man blandt andet:
http://pastebin.com/v57AQGVS

så ' salt' er altså indlejret i 'hashed'.

Log ind eller Opret konto for at kommentere