AGB  ·  Datenschutz  ·  Impressum  







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

Secure Chat

Ein Thema von cherry · begonnen am 2. Jul 2009 · letzter Beitrag vom 3. Jul 2009
Antwort Antwort
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Secure Chat

  Alt 2. Jul 2009, 14:24
Hallo zusammen

Ich würde gerne ein kleines Chat Programm realisieren, mit Clients und einem Server. Nun, das ist nur die halbe Warheit...
Die Kommunikation übers Netzwerk (LAN) soll verschlüsslet sein, sodass man die Nachrichten die hin- und hergeschickt werden nicht
in Klartext auslesen kann.

Nun, mit welchen Komponenten soll ich arbeiten? wie verschlüsseln?
gibts n Turorial?

Danke schon ma.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#2

Re: Secure Chat

  Alt 2. Jul 2009, 14:26
Nimm eines der zahllosen Chatprogrämmelchen, die hier kursieren, oder auch IP-Komponenten als Beispiele beiliegen und denk Dir halt was aus, wie die zu sendenden Strings ver und entschlüsselt werden können.

Wie Du verschlüsselst ist Geschmackssache:
http://de.wikipedia.org/wiki/Rot13
http://de.wikipedia.org/wiki/Shannon-Fano-Kodierung
oder echte Verschlüsselungen, die nicht so leicht zu knacken sind:
http://de.wikipedia.org/wiki/Data_Encryption_Standard
http://de.wikipedia.org/wiki/Rijndael
und hier jetzt ein Tut:
http://www.codeproject.com/KB/security/TEA.aspx

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: Secure Chat

  Alt 2. Jul 2009, 14:31
Ja, danke. Das ist ja mein Problem. Ich suche eine gute Möglichkeit wie ich die Informationen verschlüsselt austauschen kann. Desshalb frage ich ja auch hier im Forum
nach, damit mir jemand was empfehlen kann was gut und "modern" ist.

Wenns nicht sein muss, möchte ich die das ent- verschlüsseln nicht selber coden, sondern von vorhandenen Projekten wie OpenSSL oder ähnliches profitieren.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Secure Chat

  Alt 2. Jul 2009, 14:32
Verwende eine symmetrische Verschlüsselung für die Kommunikation. (z.B. AES oder Twofish)

Um den Schlüssel zu übermitteln, empfiehlt sich eine asymmetrische Verschlüsselung wie RSA.

Für dein eigentlichen "verschlüsselungs-Kram" kannst du das DEC verwenden
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#5

Re: Secure Chat

  Alt 2. Jul 2009, 14:34
Hier wird die Benutzung von DEC diskutiert:
http://www.delphipraxis.net/internal...t.php?t=127882

Sherlock
Oliver
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

Re: Secure Chat

  Alt 2. Jul 2009, 14:38
Warum nicht mit z.b. Indy die haben eine SSLHandler damit geht das ganz einfach
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#7

Re: Secure Chat

  Alt 2. Jul 2009, 15:01
Zitat von jfheins:
Für dein eigentlichen "verschlüsselungs-Kram" kannst du das DEC verwenden
Klingt interessant. Habe das hier -> http://www.michael-puff.de/Developer...agen_Reddmann/ heruntergeladen, kanns aber für D2009 nicht kompillieren ->

habe mal versucht die DEC.dpk für D7 zu kompillieren, anscheinend findet er die dateien nicht ->

[DCC Fataler Fehler] DEC.dpk(59): F2063 Verwendete Unit 'blablabla' kann nicht compiliert werden

EDIT:

Habe jetzt die Pfade angepasst, aber jetzt habe ich ein anderes Problem:

[DCC Fehler] NMath.pas(200): E2029 Deklaration erwartet, aber Dateiende gefunden
[DCC Fehler] NMath.pas(72): E2065 Ungenügende Forward- oder External-Deklaration: 'IsEqualGUID'
[DCC Fehler] NMath.pas(73): E2065 Ungenügende Forward- oder External-Deklaration: 'NPool'
.
.
.
[DCC Fataler Fehler] DEC.dpk(59): F2063 Verwendete Unit '..\Part_II\LibIntf\NMath.pas' kann nicht compiliert werden

Die Unit NMath.pas ist ja garnicht fertig?!

Wo krieg ich ein funktionierendes Realease für D2009?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: Secure Chat

  Alt 2. Jul 2009, 19:27
Zitat von cherry:
...

Wo krieg ich ein funktionierendes Realease für D2009?
Guck mal, ob das funktioniert: http://www.delphipraxis.net/internal...t.php?t=145563
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#9

Re: Secure Chat

  Alt 3. Jul 2009, 07:58
Super, Danke!

Scheint jedenfalls zu funktionieren. Habe mal das Beispielprogramm erstellt welches im ZIP-Archiv vorhanden war.

Example.txt

Delphi-Quellcode:
The following code-snippet shows how to use the encryption and decryption
for widestrings/unicodestrings in a safe way:

---

uses
  DECUtil, DECCipher, DECHash, DECFmt;
  
...

var
  ACipherClass: TDECCipherClass = TCipher_Rijndael;
  ACipherMode: TCipherMode = cmCBCx;
  AHashClass: TDECHashClass = THash_Whirlpool;
  ATextFormat: TDECFormatClass = TFormat_Mime64;
  AKDFIndex: LongWord = 1;

function Encrypt(const AText: String; const APassword: String): String; overload;
var
  ASalt: Binary;
  AData: Binary;
  APass: Binary;
begin
  with ValidCipher(ACipherClass).Create, Context do
  try
    ASalt := RandomBinary(16);
    APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
    Mode := ACipherMode;
    Init(APass);
    SetLength(AData, Length(AText) * SizeOf(AText[1]));
    Encode(AText[1], AData[1], Length(AData));
    Result := ValidFormat(ATextFormat).Encode(ASalt + AData + CalcMAC);
  finally
    Free;
    ProtectBinary(ASalt);
    ProtectBinary(AData);
    ProtectBinary(APass);
  end;
end;

function Encrypt(const AText: WideString; const APassword: WideString): WideString; overload;
var
  ASalt: Binary;
  AData: Binary;
  APass: Binary;
begin
  with ValidCipher(ACipherClass).Create, Context do
  try
    ASalt := RandomBinary(16);
    APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
    Mode := ACipherMode;
    Init(APass);
    SetLength(AData, Length(AText) * SizeOf(AText[1]));
    Encode(AText[1], AData[1], Length(AData));
    Result := ValidFormat(ATextFormat).Encode(ASalt + AData + CalcMAC);
  finally
    Free;
    ProtectBinary(ASalt);
    ProtectBinary(AData);
    ProtectBinary(APass);
  end;
end;

function Decrypt(const AText: String; const APassword: String): String; overload;
var
  ASalt: Binary;
  AData: Binary;
  ACheck: Binary;
  APass: Binary;
  ALen: Integer;
begin
  with ValidCipher(ACipherClass).Create, Context do
  try
    ASalt := ValidFormat(ATextFormat).Decode(AText);
    ALen := Length(ASalt) - 16 - BufferSize;
    AData := System.Copy(ASalt, 17, ALen);
    ACheck := System.Copy(ASalt, ALen + 17, BufferSize);
    SetLength(ASalt, 16);
    APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
    Mode := ACipherMode;
    Init(APass);
    SetLength(Result, ALen div SizeOf(AText[1]));
    Decode(AData[1], Result[1], ALen);
    if ACheck <> CalcMAC then
      raise Exception.Create('Invalid data');
  finally
    Free;
    ProtectBinary(ASalt);
    ProtectBinary(AData);
    ProtectBinary(ACheck);
    ProtectBinary(APass);
  end;
end;

function Decrypt(const AText: WideString; const APassword: WideString): WideString; overload;
var
  ASalt: Binary;
  AData: Binary;
  ACheck: Binary;
  APass: Binary;
  ALen: Integer;
begin
  with ValidCipher(ACipherClass).Create, Context do
  try
    ASalt := ValidFormat(ATextFormat).Decode(AText);
    ALen := Length(ASalt) - 16 - BufferSize;
    AData := System.Copy(ASalt, 17, ALen);
    ACheck := System.Copy(ASalt, ALen + 17, BufferSize);
    SetLength(ASalt, 16);
    APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
    Mode := ACipherMode;
    Init(APass);
    SetLength(Result, ALen div SizeOf(AText[1]));
    Decode(AData[1], Result[1], ALen);
    if ACheck <> CalcMAC then
      raise Exception.Create('Invalid data');
  finally
    Free;
    ProtectBinary(ASalt);
    ProtectBinary(AData);
    ProtectBinary(ACheck);
    ProtectBinary(APass);
  end;
end;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  s, k: WideString;
begin
  s := 'The quick brown fox jumps over the lazy dog';
  k := 'password';
  Memo1.Lines.Clear;
  Memo1.Lines.Add(
    'Encode Test: ' + Encrypt(s, k) + sLineBreak +
    'Decode Test: ' + Decrypt(Encrypt(s, k), k)
  );
end;
wenn ich das richtig verstehe, wird der Text mit dem Rijndael (AES) verschlüsselt?!
Dann kann ich ja so einen ziemlich sicheren Chat machen oder?! - Spielt die Passwortlänge eine Rolle für die
Sicherheit, wenn ja, wie lange sollte das Passwort mindestens sein?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  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 21:45 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