AGB  ·  Datenschutz  ·  Impressum  







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

Verschlüsselung erkennen

Ein Thema von Luckie · begonnen am 8. Aug 2003 · letzter Beitrag vom 10. Aug 2003
 
Benutzerbild von negaH
negaH

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

Re: Verschlüsselung erkennen

  Alt 10. Aug 2003, 11:32
Ok ich versuche mal einen kurzen Abriß zu geben.

Was benötigen wir:
1.) eine Hashfunktion wie SHA1
2.) einen symmetrischen Cipher wie AES Rijndael
3.) einen Zufallsgenerator wie YARROW
4.) einen Komprimierungsalgo. eventuell

Man will eine Datei verschlüsseln, hat das Passwort und einen Dateisourcestream und Outputstream.

Zuerst erzeugen wir mir dem Randomgenerator YARROW einen Salt. Dieser Salt dient dazu das Password zu sichern und es zufällig zu machen. Desweiteren dient er zu randomisierung des Verschlüsselungsprozesses.
Nachfolgend NUR ein Pseudocode um besser den Algo. zu zeigen.

Delphi-Quellcode:
type
  THeader = packed record
    Ident: Cardinal; // identifiziert das Dateiformat
    Salt: array[0..19] of Byte; // randomisiert das Passwort
    SessionKey: array[0..19] of Byte; // zur überprüfung des Passwortes
  end;

procedure Encrypt(const Source,Dest: TStream; const Password: String);
var
  Header: THeader;
begin
// initialisiere Header
  Header.Ident := $12345678;

// erzeuge Salt, ein "Zufallswert" der NICHT zurückberechnenbar ist
  RunYarrow(Header.Salt, SizeOf(Header.Salt));

// erzeuge Sessionkey
  Header.SessionKey := RunSHA1(Header.Salt + Password);
  
  InitEncrypt(Header.SessionKey);
  EncryptCBC(Header.SessionKey);
  Dest.Write(Header);
  EncryptCBC(Source, Dest);
  EncryptCBCDone(Dest);

{ man erzeugt Zufallsdaten, diese + Password werden durch eine
  Hashfunktion in ein SessionKey umgewandelt mit dem Verschlüsselt wird.
  Der SessionKey wird mit sich selber verschlüsselt.
  Der Header wird in Dest geschrieben.
  Die Source wird nach Dest verschlüsselt.
  WICHTIG! dabei ist das Encrypt(SessionKey) + Encrypt(Source, Dest)
  keine voneinander getrennten Verschlüsselungen sind. Es werden also
  SessionKey + Source als ein zusammengehöriger Datenstrom behandelt.
 
  D.h. Man kann SessionKey nur entschlüsseln wenn man den korrekten
  Sessionkey kennt. Wird entschlüsselt muß aus dem gespeichert Salt +
  Password der gleiche SessionKey erzeugt werden, dann wird
  Header.SessionKey entschlüsselt und mit dem aktuellen Schlüssel
  verglichen. Sollten sie ungleich sein so ist das Entschlüsselungs-
  passwort falsch. Da der Salt aus dem Passwort einen Zufäligen SessionKey
  erzeugt MUSS demzufolge die Verschlüsselung auch zufällig sein.
  Da der Header.SessionKey als erster Block verschlüsselt wird wird
  auch der Schlüsselstrom zufällig.
}

end;
So das ertmal zum Prinizp. Jetzt stellst du erstmal mehr Fragen und dann sehen wir mal ob ich eine kleine Unit baue

Gruß Hagen
  Mit Zitat antworten Zitat
 


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 12:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz