Cipher.MaxKeySize = Bytes der maximal nutzbaren Keylänge.
Wird mit Cipher.InitKey() gearbeitet so wird intern das Passwort mit hilfe von Cipher.HashClass in einen Sessionkey umgewandelt. Ist diese Funktion zB. MD4 dann würde somit mit 128 Bit Sessionkey gearbeitet.
Es gibt aber drei wichtige Größen eines Ciphers die die Eigenschaften bestimmen:
1.) MaxKeySize = maximal nutztbares Keymaterial, bei 128Bit sagt man es ist eine 128 Bit Verschlüsselung
2.) BlockSize = Datenbreite mit der der Algo. intern arbeitet, 1 Byte sind die meisten StreamCipher, 8-16 Bytes die meisten BlockCipher
3.) reale KeyBitSize / Wahrscheinlicheit für Password-Wörterbuch attacke IST die reale Sicherheit
Also, 1.) gibt die offizielle Sicherheit an, und es hört sich immer schön an wenn man behaupten kann das man einen 1024 Bit Algo. benutzt. Allerdings kann durch 3.) die Sicherheit des Algo. auf NULL gehen, nämlich wenn als Passort "A" benutzt wird. "A" stammt aus einen Alphabeth aus 256 Zeichen, wobei "A" selber aber mit 1/26 Wahrscheinlichkeit tatsächlich vorkommt. Nun noch diese 5 Bit durch die Wahrscheinlicht dividieren das eine Wörterbuchattack mit "A" beginnt und übrig bleibt 0 Prozent Sicherheit ! Selbst mit einen 13476 Trillion Bitcipher wäre eine simple 56 Bit DES mit echten 56 Bit Schlüssel weitaus sicherer.
Es ist also wichtig das wenn man eine 128 Bit Verschl. benutzten will das man auch ein echtes 128 Bit Passwort benutzt. Ein Passwort wie "Dies ist mein Passwort" hat bei weitem KEINE 128 Bit Datengehalt.
Im alten
DEC wird zur Erzeugung des Sessionkeys einfach der Hashdigest vom übergeben Passwort benutzt. Dies bedeutet das entweder der Hashdigest kürzer als die mögliche Bitlänge des Passwortes des Ciphers ist, oder aber das der Hashdigest zu lang ist und Keymaterial abgeschnitten wird. Dieses Vorgehen ist besser als ohne Hashfunktion zu arbeiten und trotzdem nicht gut. Im neuen
DEC wird dies eliminiert und eine sogenannte "KDF = Key Derviation Function" benutzt. Diese erzeugt aus dem Passwort per Hashfunktion exakt soviele Bytes wie der Cipher schlucken kann.
Rijndeal.MaxKeySize = 32, somit 256 bit.
Gruß Hagen