Kryptorekommendationer från Microsoft och agila säkerhetsalgoritmer

För ett tag sedan bloggade jag om Ciscos kryptorekommendationer. Microsoft har också bublicerat ett antal kryptorekommendationer. Sidan hos Microsoft är från 2009, men är fortfarande relevant. Inte minst diskussionen om att vara agil, flexibel i sin användning av algoritmer för att på så sätt kunna anpassa sig till förändrad verklighet är högst relevanta och bra. Vad gäller specifika algoritmer ansåg Micrsofoft 2009 att följande gällde:

Tabell över algoritmer och Microsofts bedömning
Tabell över algoritmer och Microsofts bedömning

Intressant nog har Microsoft själva inte följt dessa rekommendationer själv. Detta har vi kunnat se den senaste dryga veckan med trojanen Flame där skaparna av Flame använt en ny metod för att hitta kollisioner i hashfunktionen md5 för att skapa falska certifikat som ser ut att vara utgivna av Microsoft.

Kryptografisk agilitet var även temat för en postning av Poul-Henning Kamp (PHK), dansk FreeBSD-guru och skaparen av bland annat webbcachen Varnish samt lösenordssystemet md5crypt. I sin postning, Md5crypt Password scrambler is no longer considered safe by author skriver PHK att tiden hunnit i kapp md5crypt, att en modern dator kan göra så många md5-operartioner att md5crypt inte är tillräckligt säkert. PKH skriver:

The md5crypt password scrambler was created in 1995 by yours truly and was, back then, a sufficiently strong protection for passwords.

New research has shown that it can be run at a rate close to 1 million checks per second on COTS GPU hardware, which means that it is as prone to brute-force attacks as the DES based UNIX crypt was back in 1995: Any 8 character password can be found in a couple of days.

As the author of md5crypt, I implore everybody to migrate to a stronger password scrambler without undue delay.

I will NOT design the next standard password scrambler, I am not a card-carrying cryptographer, and don’t want to be hazzeled by those who are.

But I will give the following guidance to the process:

On a state of the art COTS computer, the algorithm should take at the very least 0.1 second (100 milliseconds) when implemented in software, preferably more.

Some kind of “round count” parameter should be made run-time tweakable so that the runtime/complexity can be increased over time by system administrators.

The algorithm should be based on repeated data-dependent iterations of several different complex one-way hash functions (MD5, SHA1, SHA2, BLOWFISH, you name it, use them all) in order to “soak up area” in hardware based attack implementations.

Några bra exempel på algoritmer PKH pratar om är PBKDF2, bcrypt och scrypt. Dessa algoritmer har alla någon slags iterationsräknare och förmåga att skala sin beräkningsmässiga komplexitet så att dom är relevanta även när beräkningsprestanda och parallella beräkningar skalar ett antal tiopotenser uppåt.

Däremot tycker jag att PHK är fel ute när han rekommenderar följande:

Please notice that there is _no_ advantage in everybody in the world using the exact same algorithm, quite the contrary in fact.

All major internet sites, anybody with more than 50.000 passwords, should design or configure a unique algorithm (consisting of course of standard one-way hash functions like SHA2 etc) for their site, in order to make development of highly optimized password brute-force technologies a “per-site” exercise for attackers.

Att designa sina egna algoritmer, även om dom i sin tur baseras på SHA-256 eller bcrypt är bortkastat arbete. Säkerheten i ditt system ska inte bero på att ingen vet hur det fungerar utan i de enkla, men viktiga hemligheter du använder. kryptonycklar, slumptal som används som startvärden (frö, salt) är det som ska skilja din lösning åt.

Är det hemligheten runt vilka algoritmer, kod och strukturer som säkerheten beror på blir det jobbigt att byta om/när det behövs vilket gör att det tar längre tid och kostar mer att åter nå ett säkert tillstånd. Och chansen att du skapar något säkrare än bcrypt, scrypt är ganska liten. Välj en välkänd, väl beprövad, skalbar mekanism samt generera enkla men starka hemligheter så blir det mycket bättre och mer kostnadseffektivt än att hacka själv.

2 reaktioner på ”Kryptorekommendationer från Microsoft och agila säkerhetsalgoritmer

  1. Skulle det gå att ”salta algoritmen” så att en effektiv hårdvaruimplementation berodde på saltet? PHK har ju en poäng i att om alla använder samma algoritm kommer det utvecklas hårdvaruaccelererade lösningar som kan användas för att snabbt generera hashar.
    Är det kanske sådana algoritmer som kallas för ”memory hard”?

  2. Aloha! Det finns algoritmer som tar en extra parameter, en tweak. Denna tweak gör varje instans av algoritmen unik. Ett exempel är Elephant-algoritmen i Microsofts BitLocker. För övrigt en av de bättre säkerhetsbeskrivningarna som skrivits:
    http://download.microsoft.com/download/0/2/3/0238acaf-d3bf-4a6d-b3d6-0a0be4bbb36e/BitLockerCipher200608.pdf

    Den enklare varianten är att generera site-specifikt salt.

    Jag ser inte att rätt sätt att bemöta bättre hårdvara är att skapa unika algoritmer, utan att lägga på fler iterationer. Dvs om prestandan för att ex köra SHA-1 går upp med 10x kan man helt enkelt hasha om databasen, men utöka antalet iterationer till 20x och använda samma algoritmer/system ändå. Undantaget är när algoritmen i sig har rejäla svagheter, typ md5. Men är det uttömmande sökning som krävs är det bättre att lägga på fler iterationer. Och salta för att få unika hashar och ev salt för siten i sig.

Kommentera

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

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>