Avatar billede moddi100 Seniormester
07. juli 2011 - 16:22 Der 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:

    rijndael-256    des
cbc    55            151
cfb    1,710            1,166
ofb    1,691            1,163

Som det fremgår er rijndael-256 kombineret med cbc langt den hurtigste. Men er den derfor mindre sikker?

Med venlig hilsen
Morten

PS: Har anvendt mcrypt funktionerne til forsøget. Tidstagningen er kun for mcrypt_generic().
Avatar billede clausc Nybegynder
07. juli 2011 - 17:17 #1
Ud fra hvad du skriver, så har du ikke brug for CFB eller OFB mode - ergo vælg CBC.

Læs iøvrigt: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

Overvej forskellige IV'er til forskellige filer (med mindre du samler alle filer i én stor krypteret bunke).
Avatar billede moddi100 Seniormester
07. juli 2011 - 18:57 #2
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?

PHP-manualen skriver at man ikke bør vælge OFB, da den ikke er helt så sikker som CFB, men det er måske stadigvæk mere sikker end CBC?
http://dk2.php.net/manual/en/mcrypt.constants.php

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.
Avatar billede arne_v Ekspert
07. juli 2011 - 19:03 #3
AES er langt bedre end DES.

DES (ikke at forveksle med 3DES/TDES) boer *aldrig* bruges idag.
Avatar billede arne_v Ekspert
07. juli 2011 - 19:05 #4
CBC er god nok.
Avatar billede clausc Nybegynder
07. juli 2011 - 19:12 #5
Med algoritmer som 3DES, AES og Rijndael er selv en faktor 30 forsvindende lidt; så CBC er glimrende.

Generering af en IV bør være nærmest øjeblikkelig - det er bare 16 random bytes. Hvad gør du i din kode???
Avatar billede clausc Nybegynder
07. juli 2011 - 19:18 #6
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)
Avatar billede moddi100 Seniormester
07. juli 2011 - 20:15 #7
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:

$iv = mcrypt_create_iv(32);
$key = hash('sha256','something secret',true);

function encrypt($input, $key, $iv) {
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $input, MCRYPT_MODE_CBC, $iv));
}

function decrypt($input, $key, $iv) {
    return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($input), MCRYPT_MODE_CBC, $iv), "\0");
}
Avatar billede arne_v Ekspert
07. juli 2011 - 20:39 #8
AES er designet til at vaere hurtigt.

DES blev saa vidt jeg ved designet til hardware implementering.
Avatar billede arne_v Ekspert
07. juli 2011 - 20:40 #9
'something secret' skal vaere ret lang for at du faar den fulde AES security!
Avatar billede moddi100 Seniormester
08. juli 2011 - 00:36 #10
Nu havde jeg tænkt mig at 'something secret' skulle dannes ud fra en kombination af brugernavn og password, men hvor langt vil du mene det bør være?
Avatar billede arne_v Ekspert
08. juli 2011 - 01:20 #11
30 tegn maa vaere absolut minimum - mere er bedre.

Idag hedder det passphrase og ikke password af en grund.
Avatar billede clausc Nybegynder
08. juli 2011 - 01:26 #12
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.
Avatar billede clausc Nybegynder
08. juli 2011 - 02:04 #13
Undskyld; de sidste to sætninger blev lidt rodede...

Hvis du selv kan vælge fuldstændig frit, så generer 32 random bytes.

Hvis du vil bruge password / passphrase og selv bestemmer password, så brug så mange forskellige tegn som muligt.

Hvis du har brugere som selv vælger password, så gennemtving så mange tegn og så langt et password som du kan slippe afsted med.

Bemærk, at brugernavn || password ikke er optimalt; ja du får noget længde og noget der minder om et salt, men brug hellere 20 random bytes.
Avatar billede moddi100 Seniormester
08. juli 2011 - 08:05 #14
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
Avatar billede clausc Nybegynder
08. juli 2011 - 10:01 #15
Det er svært at kommentere på uden at kende mere til, hvem brugerne er og hvilke data der er tale om.

Har dine brugere nogen grund til at forvente, at filen beskyttes bedre end deres password?
Avatar billede moddi100 Seniormester
10. juli 2011 - 18:30 #16
Normale brugere plejer ikke at vælge de bedste passwords, men du har formodentlig ret i, at de heller ikke kan forvente bedre beskyttelse.

Så tror jeg vil kigge nærmere på en kombination af brugernavn, password og en engangskode.

Takker for hjælpen begge to. Smid gerne et svar, så jeg kan give jer point.
Avatar billede clausc Nybegynder
10. juli 2011 - 19:24 #17
Jeg går ikke op i point. Hvis Arne vil ha' dem så bare gi' ham hele dyngen.
Avatar billede arne_v Ekspert
08. august 2011 - 00:56 #18
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester