Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: DES-56 / VNC Passwort erzeugen

  Alt 26. Jul 2007, 12:01
Also das ist kein Standard DES Algorithmus.
Ich habe den Source mit dem Testvector aus der "Original" Source verglichen, da kommt was ganz anderes raus. Der obige C Source muß geändert worden sein, und die darin enthaltenen Testvektoren stimmen nicht mehr mit dem überein was der Source jetzt berechnen würde.

Die Änderung ist:
  ByteBit : array[0..7] of Word = (1, 2, 4, 8, 16, 32, 64, 128); richtig für Original DES ist

  ByteBit : array[0..7] of Word = (128, 64, 32, 16, 8, 4, 2, 1); Diese Änderung ist sehr gefährlich, ja höchst gefährlich.

DES ist ein 64Bit Cipher der auf Grund der internen SBOX Struktur aber nur 56 Bits des Passwortes benutzen kann. Dazu werden 8 Bits im Passwort während des KeySetups ausmaskiert. Bentzt man eine andere Ausmaskierung so reduziert sich die Sicheherit nochmals um 8 Bits, denn die im original Ausmaskierten Bits würden sowieso keinen Einfluß haben durch die DES-SBOX Struktur. Maskiert man aber andere Bits aus so entfernt man zusätzliche Passwort-Informationen. Man reduziert die real verwnedete Anzahl der Passwortbits von 56 Bit auf 48 Bit.

Möchtest du mit DEC arbeiten dann öffne Unit DECCipher.pas und ändere in

Delphi-Quellcode:
procedure TCipher_1DES.DoInitKey(const Data: array of Byte; Key: PLongArray; Reverse: Boolean);
const
  ROT: array[0..15] of Byte = (1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28);
var
  I,J,L,M,N: LongWord;
  PC_M,PC_R: array[0..55] of Byte;
  K: array[0..31] of LongWord;
begin
  FillChar(K, SizeOf(K), 0);
  for I := 0 to 55 do
// if Data[DES_PC1[I] shr 3] and ($80 shr (DES_PC1[I] and $07)) <> 0 then PC_M[I] := 1
// else PC_M[I] := 0;

    if Data[DES_PC1[I] shr 3] and ($01 shl (DES_PC1[I] and $07)) <> 0 then PC_M[I] := 1
      else PC_M[I] := 0;
Dann bekommst du mit obigen Source die deine gewünschten Ausgaben.

Gruß hagen
  Mit Zitat antworten Zitat