• Névjegy
    • Önéletrajz
    • Magamról
  • Informatika
    • Komplex rendszerek készítése
    • Többrétegű alkalmazások
  • Utazások
    • Barcelona
    • Ciprusi nyaralás
    • Tiroli hegymászás
    • Koppenhága
  • Blog

Sólyom-Nagy Péter

.Net titkosítási problémák (frissítve)

Ha szimmetrikus kulcsú titkosítást (Rijndael, AES) akarsz használni, nem mindegy, hogyan.

A .NET framework ugyanis önmagában jól működik, de ha más rendszerekkel kompatibilis kódot szeretnénk készíteni, akkor oda kell figyelni.

Alapesetben a titkosításhoz elő kell állítani egy kulcsot (Key) és egy inicializáló vektort (IV).

Ehhez az alábbi kódot lehet használni:

byte[] salt = new byte[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
PasswordDeriveBytes pdb = new PasswordDeriveBytes( “mypassword”, salt );
byte[] key = pdb.GetBytes( 16 );
byte[] iv = pdb.GetBytes( 8 );

Ez jó lenne, de mivel a Microsoft nem igazán dokumentálta a PasswordDeriveBytes osztály működését, Mono – azaz Linux alatt csak egy hasonló eljárást tudtak létrehozni, ami viszont nem kompatibilis a MS féle megvalósítással. Ha olyan kódot írunk, aminél szükség van az átjárhatóságra (például Windows szerver, Linux kliens), akkor ez nem fog működni, mert a két platformon teljesen más értékeket fogunk visszakapni.

Mit lehet tenni? Szerencsére van egy alternatív megoldás, az Rfc2898DeriveBytes osztály, ami viszont mindkét platformon ugyanúgy működik.

Rfc2898DeriveBytes rdb = new Rfc2898DeriveBytes( “mypassword”, salt );

A kettő közt a fő különbség az, hogy a PasswordDeriveBytes a PBKDF1 algoritmust használja a byte tömbök előállítására, míg az Rfc2898DeriveBytes ennek a következő verzióját, a PBKDF2-t, és ez kellően dokumentált.

De mire ezt kideríti az ember!

Frissítés!

Arra viszont figyelni kell, hogy az Rfc2898DeriveBytes kódolási időigénye kb 25x nagyobb, mint a PasswordDeriveBytes algoritmusé egy 14 karakteres jelszó és egy 20 byte-os salt esetén. Ez azt jelenti, hogy a hash-elt Key és IV tömböket érdemes a memóriában tárolni a futási idő alatt, mert jelentős időveszteséget jelenthet egy ciklikus feldolgozás esetén.

.NET cryptography Microsoft
2010-04-15 Sólyom-Nagy Péter

Post navigation

HTPC könnyedén → ← Szilveszteri éjszaka

Vélemény, hozzászólás? Kilépés a válaszból

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.

  • Magyar
  • English
  • English
© Copyright 2003-2016 - Sólyom-Nagy Péter
Impresszum
We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.Ok