07. juli 2011 - 16:22Der er
17 kommentarer og 1 løsning
Valg af krypteringsalgoritme/-metode
Hej,
Jeg står og skal kryptere en del filer ved hjælp af php. Jeg er dog kommet lidt i tvivl om hvilken algoritme og hvilken mode jeg skal anvende.
Rent tidsmæssigt skal det jo ikke tage tusind år, da krypteringen bliver udført af php på en hjemmeside, derfor spiller tid også en vigtig faktor. Dog vil jeg også gerne have at der stadigvæk er en del sikkerhed i selve krypteringen.
Jeg har foretaget en hastighedstest på en 1 mb tekst string. Resultatet kan ses herunder i millisekunder:
Men ud fra min læsning er CFB den mest sikre, men den er tilsyneladende ~30 gange langsommere end CBC. Men er CFB så tilsvarende 30 gange mere sikker end CBC?
Med hensyn til forskellige IV'er er problemet bare at det tager op til 30 sekunder at genererer blot ét. Så det ender nok med at jeg nøjes med nogle få forskellige IV'er.
Med CBC skal du lige tænke over padding mode osse; jeg ved ikke hvilke modes PHP stiller til rådighed, men med mindre du kender (eller gemmer) filstørrelserne, så er 0-padding ikke heldig.
Og du må ikke give forskellig ekstern fejlkode afhængig af om padding fejler eller ej (men det håndterer dit crypto bibliotek formodenlig for dig)
arne_v: Har altid fået af vide, at DES ikke er specielt sikker, men til gengæld skulle den være hurtigere. Derfor undrer det mig også, at rijndael faktisk slog den i hastighed.
Med hensyn til padding mode tager min kode også højde for det:
Hvis du laver nøglen ud fra en hash (som i dit eksempel), så vil et brute force angreb på den variable ukendte (password) i store træk være et angreb på nøglen. Så et password med masser af entropi giver mest entropi for nøglen.
Hvis du selv vælger psw, så brug hele suiten af store og små bogstaver, tal og specialtegn. En 10-12 karakterer er umiddelbart fint. Læg et par karakterer til for hver metode (store/små/tal/special) du ikke bruger. Ellers så meget af førnævnte som du kan tillade dig at tvinge brugerne til.
Hvis du selv vælger, så overvej 256 random bits, så har du fuld entropi på nøglen.
Oprindeligt havde jeg som sagt tænkt mig, at det skulle være en kombination af brugernavn og password, men det er vel næsten bedre at udskrive en 30+ cifret key til vedkommende i stedet så? I hvert fald ud fra den, at de færreste vælger sikre passwords selv med krav om store, små bogstaver, specialtegn og tal
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.