AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DES-56 / VNC Passwort erzeugen

Ein Thema von Gruber_Hans_12345 · begonnen am 24. Jul 2007 · letzter Beitrag vom 26. Jul 2007
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#1

DES-56 / VNC Passwort erzeugen

  Alt 24. Jul 2007, 09:41
Hi, ich bin gerade auf der suche nach einer Delphi/Pascal implementierung des DES-56 (Verschlüsselung von VNC-Passworten)

Ich habe mir schon die C-Codes runtergeladen, aber bevor ich nun anfange, von C nach Pascal zu konvertieren, wollte ich mal fragen, ob nicht irgendwer schon wo so ne DES-56 implementierung hat.

Ich will einfach nur ein passwort für UltraVNC erzeugen (und das OHNE externe Tools, eine DLL könnte ich schon einbinden, aber eine externe EXE auf keinen Fall, und am liebsten wäre mit, wenn man wo einen Pascal Sourcecode für das DES-56 bekommen könnte)
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#2

Re: DES-56 / VNC Passwort erzeugen

  Alt 25. Jul 2007, 18:11
*push*

Ich hätte das ganze mal mit Hagens DEC probiert, aber irgendwie kommt bei mir was anderes raus als was sollte ... (liegt vermutlich daran, das ich noch nicht genau weiss, wie und was ich biem aufruf verwenden muß ...)

... so hab ichs probiert (das Shared Secret, habe ich mal mit dem fixedkey gleich gesetzt???? unsigned char fixedkey[8] = {23,82,107,6,35,78,88,7};)

und TCipher_1DES sollte es auch sein, da das mit (Keysize 56 bits relevant) steht und vermute daher mal auch DES56 heisst?

Delphi-Quellcode:
var
    FSharedSecret: Binary;
begin
  FSharedSecret := #23#82#107#6#35#78#88#7;
  with TCipher_1DES.Create do
  try
    Mode := cmCBCx;
    Init(FSharedSecret);
    Edit2.Text := EncodeBinary(Edit1.Text, TFormat_HEX);
  finally
    Free;
  end;

Delphi-Quellcode:
12345678->f0e43164f6c2e373 // sollte rauskommen
12345678->3DFAE700B8924001 // kommt raus
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: DES-56 / VNC Passwort erzeugen

  Alt 25. Jul 2007, 19:35
so einfach ist das leider nicht ;(

Wir benötigen folgende Informationen

1.) welcher Algo. wurde benutzt, vom DES-56 gibts verschiedene Varianten, im DEC heisen sie 1DES, 2DES, 3DES, 2TDES und 3TDES. Alles sind DES Varianten vom originalem DES. DES-56 heist er nur deshalb weil der 64Bit breite DES real auf Grund von "Fehlkonstruktionen" eben nur 56Bit Sicherheit sitzt.

2.) mit welchem Ciphermode arbeit der DES in VNC ? der Ciphermode sagt uns was darüber wie die einzelnen Datenblöcke untereindern verknüpft sind. Es gibt ECB -> Electonic Code Book, CBC Cipher Block Chaining, OFB,CFB,CTS uva. Verwendet man immer die gleichen Daten und den gleichen DES aber andere Ciphermodis so entstehen immer andere Outputs.

3.) benutzt der DES in VNC einen IV -> InitVector ? Wenn ja dann ist wichtig zu wissen wie groß und mit welchen Daten der IV initialisiert wurde

4.) gibt es sonstiges Pre- oder Postprocessing der Daten. Zb. Passwort wird nach Umwandlung in anderes textformat konvertiert.

Das sind erstmal diw wichtigsten Informationen die man benötigt. Wird beim InitVector zb. nur 1 Bit anders benutzt wie beim VNC, so wird das Resultat sich komplett unterscheiden.

Eines weis ich mit Sicherheit, wenn VNC original DES benutzt hat, dann wirst du das mit dem DES aus DEC exakt identisch hinbekommen. DES aus dem DEC habe ich intensive mit Testvektoren verglichen.

Hilfrech wäre der relevante Sourceauszug aus VNC. Ich vermute nämlich nur die UNIX-Crypt-Variante zum "hashen" eines Passwortes benutzt. Ich persönlich kann diese Variante ein Passwort zu schützen nicht empfehlen.

Gruß Hagen
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#4

Re: DES-56 / VNC Passwort erzeugen

  Alt 25. Jul 2007, 20:32
zu 1.) wie erkenne ich das, welcher von den DES es ist? habe im Source die Array DES_pc1, DES_pc2 und DES_Data (0..7) gefunden, die sehen gleich aus, im c source findet sich auch überall die 56 wieder (ist das das zeichen, das es der 1er DES ist (nur 56 Bit relevant?) ) ... der Key ist auch genau 8 Bytes lang

zu 3.) ich sehe nirgends etwas, wo ein IV verwendet wird (ausser den array DES_Pc1, DES_PC2 und DES_DATA scheint es keine weiteren Daten zu geben)

zu 4.) also das passwort wird immer auf genau 8 zeichen aufgeüllt (einfacherhalber hab ichs deshalb gleich mit einem 8 zeichen langen passwort probiert) ... es werden auch immer nur die ersten 8 zeichen verwendet.

zusätzlich : This is D3DES (V5.09) by Richard Outerbridge with the double and triple-length support removed for use in VNC
Also the bytebit[] array has been reversed so that the most significant bit in each byte of the key is ignored, not the least significant

ich hänge mal die c files an, vielleicht kannste ja bei gelegenheit mal nen kurzen blick drauf werfen ... eventuell kannste dann kurz sehen, ob ichs damit schaffen kann oder nicht
Angehängte Dateien
Dateityp: c vncauth_172.c (4,1 KB, 9x aufgerufen)
Dateityp: c d3des_125.c (18,4 KB, 8x aufgerufen)
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: DES-56 / VNC Passwort erzeugen

  Alt 26. Jul 2007, 00:18
Hi

ich habe das mal überprüft

Delphi-Quellcode:
  with TCipher_1DES.Create do
  try
    Mode := cmECBx;
    Init(TFormat_HEX.Decode('0123456789abcdef'), '', 0);
    WriteLn(EncodeBinary(TFormat_HEX.Decode('0123456789abcde7'), TFormat_HEX));
    // c957 4425 6a5e d31d

    Init(#23#82#107#6#35#78#88#7);
    WriteLn(EncodeBinary('12345678', TFormat_HEX));

  finally
    Free;
  end;
Die 1. Verschlüsselung liefert uns c95744256a5ed31d und das stimmt exakt mit dem Testvektor aus D3DES-1.c überein. Beide DES Implementierungen stimmen also überein.

Aber die 2. Verschl. gibt mir nicht das was du erwartest. Also entweder hast du irgendwo bei deinen Testvektoren einen Fehler gemacht oder der Source im Attachment spiegelt nicht das wieder was du in deiner Software benutzt.

12345678 verschl. mit #23#82#107#6#35#78#88#7 ergibt B71577F4D67CE817.

Auch wenn ich deinen Wert f0e43164f6c2e373 entschl. bekomme ich nur Mist angezeigt.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

Re: DES-56 / VNC Passwort erzeugen

  Alt 26. Jul 2007, 06:03
Wenn es nicht grad UltraVNC sein muss, sondern auch RealVNC sein kann, hilft dir das vielleicht weiter.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#7

Re: DES-56 / VNC Passwort erzeugen

  Alt 26. Jul 2007, 07:39
Zitat von chaosben:
Wenn es nicht grad UltraVNC sein muss, sondern auch RealVNC sein kann, hilft dir das vielleicht weiter.
Hey danke

*vnc = *vnc (egal ob jetzt ultra oder real) - die funktion von der unit funkte auf anhieb
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
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, 11: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
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#9

Re: DES-56 / VNC Passwort erzeugen

  Alt 26. Jul 2007, 11:35
ahhhh, danke

habe mir nen TCipher_VncDES = class(TCipher_1DES) gemacht (einfach die DoInitKey ersetzt) jetzt funkt es für den VNC ohne probs, und kann dann auch noch den rest normal verwenden.

Das mit dem bytebit hatten die auch dazugeschrieben, nur hat es mir nicht wirklich was gesagt ...
Zitat von Gruber_Hans_12345:
zusätzlich : .... Also the bytebit[] array has been reversed so that the most significant bit in each byte of the key is ignored, not the least significant
das dieser algo nicht wirklich sicher und empfehlenswert ist, habe ich auch schon rausgefunden (als ich einen entschlüssler für VNC passwörter gefunden habe) deshalb wollte ich das erzeugen von passwörtern selber machen, damit ich das automatisieren kann, und bei jeder installation von VNC ein anderes automatisch generiertes passwort verwenden kann (ist zwar nicht sichererer, aber es kann dann zumindest niemand mit dem passwort auf einem anderem system was anfangen ..., und der, auf dem VNC läuft, darf ruhig das passwort kennen auf seinem eigenem pc ...)

nochmals dank an euch beide
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: DES-56 / VNC Passwort erzeugen

  Alt 26. Jul 2007, 11:50
Naja, die Anwendung einer Verschlüsselung zum Schutz und Abprüfen eines Passwortes ist eh konzeptionell ein Fehler. Dafür gibt es sichere Einwegfunktionen, sogenannte Hashfunktionen. Denn es gilt

Was nicht entschlüsselbar ist kann auch nicht entschlüsselt werden.

Der Output einer Hashfunktion kann nicht zurückgerechnet werden zum Input. Ergo nicht "entschlüsselbar".
Wandelt man stattdessen ein Password mit einer Verschl. um so kann man das auch wieder entschlüsseln und hat das originale Passwort.

Für ein passwortbasiertes Loginsystem ist die Anwendung der Hashfunktionen weitaus sicherer als die Anwendung von Verschlüsselungen (auf das passwort bezogen).

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz