AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!
Thema durchsuchen
Ansicht
Themen-Optionen

MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!

Ein Thema von CodeX · begonnen am 17. Jan 2011 · letzter Beitrag vom 23. Jan 2011
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#11

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!

  Alt 18. Jan 2011, 12:36
Und was spricht gegen eine von der Allgemeinheit als sicher eingestufte und verbreitete Chiffre (egal ob nun Block oder Strom)?
Scheint mir persönlich zumindest besser zu sein, als einen nicht verbreiteten, proprietären Algorithmus zu nutzen, der wohl auch nie einem Peer-Review zugeführt wurde.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.

Geändert von Deep-Sea (18. Jan 2011 um 12:39 Uhr)
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#12

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!

  Alt 18. Jan 2011, 17:02
Man kann auch an der verschlüsselten Datei rumspielen.
Es geht nicht darum, Vandalismus vorzubeugen, sondern andere Verwendungszwecke als die vorgeschriebenen auszuschließen.

Was spricht denn gegen 128-Bit-AES/CBC, wobei Du für jeden Eintrag, den Du verschlüsselst, einen Zufalls-IV nimmst und diesen mit abspeicherst?
Nach ein paar Zeitmessungen war Rijndael (~AES) gibt etwas langsamer als RC4. Und der von Dir angesprochene RC4 Bug ("Bug in RC4 implementation: Ray Marron has reported a bug in the RC4 implementation in DCPcrypt that means that when encrypting data sets over 8192 bytes in size the results will non-standard.") besagt doch nur aus, dass die RC4 Verschlüsselung ab einer bestimmten Größe nicht mehr kompatibel mit einer korrekten RC4 Implementierung ist. Das ist aber für den Einsatzzweck hier imho völlig irrelevant, da zum Ver- und Entschlüsseln die gleiche Implementierung verwendet wird.

Aber nun gut, da die Unit mittlerweile nicht nur in meinem Projekt Verwendung finden soll, sondern auch anderen helfen könnte, werde ich die Standardverschlüsselung mal auf Rijndael umstellen und mal schauen, ob ich das mit dem Initialisierungsvektor hinbekomme...
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#13

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!

  Alt 18. Jan 2011, 18:49
Ich habe jetzt zwecks Kompatibilität doch auf Rijndael und SHA256 umgestellt. Aber das mit dem Initialisierungsvektor habe ich nicht hinbekommen. Ich weiß nicht, ob ich das richtig verstehe, aber für eine CBC-Verschlüsselung mit IV müsste ich doch sowieso erstmal statt EncryptStream EncryptCBC verwenden. Ach keine Ahnung. Wenn jemand seinen Teil zum Ganzen beitragen will, gerne direkt mit Code. Danke.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#14

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!

  Alt 18. Jan 2011, 20:33
Für den Initialsierungsvektor nimmst bei jedem Verschlüsseln ein Zufalls-16-Bytearray, und rufst AES.Init(key128,16,IV,16), danach AES.Encode(plain,ct,sizeof(plain)) auf. Dann schreibst Du den selbstverständlich unverschlüsselten IV und den Ciphertext ct in Deine INI (HEX oder Base64-kodiert, halt wie Du's jetzt auch schon kodierst).

Beim Entschlüsseln liest Du die kodierten IV, CT; decodierst, und rufst dann AES.Init(key128,16,IV,16), anschließend AES.Decode(ct,pt,sizeof(ct)) auf.

Hier eine Demo mit Testvektoren:
Delphi-Quellcode:
program t_AES_CBC;

{$apptype console}

uses
  SysUtils, Classes, DECCipher;

var
  AES: TCipher_Rijndael;

var
  key128 : array[0..15] of byte = ($2b,$7e,$15,$16,$28,$ae,$d2,$a6,
                                   $ab,$f7,$15,$88,$09,$cf,$4f,$3c);

      IV : array[0..15] of byte = ($00,$01,$02,$03,$04,$05,$06,$07,
                                   $08,$09,$0a,$0b,$0c,$0d,$0e,$0f);

  plain : array[0..63] of byte = ($6b,$c1,$be,$e2,$2e,$40,$9f,$96,
                                   $e9,$3d,$7e,$11,$73,$93,$17,$2a,
                                   $ae,$2d,$8a,$57,$1e,$03,$ac,$9c,
                                   $9e,$b7,$6f,$ac,$45,$af,$8e,$51,
                                   $30,$c8,$1c,$46,$a3,$5c,$e4,$11,
                                   $e5,$fb,$c1,$19,$1a,$0a,$52,$ef,
                                   $f6,$9f,$24,$45,$df,$4f,$9b,$17,
                                   $ad,$2b,$41,$7b,$e6,$6c,$37,$10);

  ct_cbc : array[0..63] of byte = ($76,$49,$ab,$ac,$81,$19,$b2,$46,
                                   $ce,$e9,$8e,$9b,$12,$e9,$19,$7d,
                                   $50,$86,$cb,$9b,$50,$72,$19,$ee,
                                   $95,$db,$11,$3a,$91,$76,$78,$b2,
                                   $73,$be,$d6,$b8,$e3,$c1,$74,$3b,
                                   $71,$16,$e6,$9e,$22,$22,$95,$16,
                                   $3f,$f1,$ca,$a1,$68,$1f,$ac,$09,
                                   $12,$0e,$ca,$30,$75,$86,$e1,$a7);


function test(px,py: pointer): string;
begin
  if CompareMem(px,py,64) then test := 'OKelse test := 'Error';
end;

var
  pt,ct: array[0..63] of byte;

begin
  AES := TCipher_Rijndael.Create;
  //Verschl³sseln
  AES.Mode := cmCBCx;
  AES.Init(key128,16,IV,16);
  AES.Encode(plain,ct,sizeof(plain));
  writeln('CBC test: ', test(@ct,@ct_cbc));
  //Entschl³sseln
  AES.Mode := cmCBCx;
  AES.Init(key128,16,IV,16);
  AES.Decode(ct,pt,sizeof(plain));
  writeln('CBC test: ', test(@pt,@plain));
end.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#15

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!

  Alt 21. Jan 2011, 16:54
Ich würde in MemIniCrypt noch gerne eine neue Funktion (RenameSection) einbauen. Dafür bräuchte ich aber Zugriff auf FSections, das in TMemIniFile als private deklariert ist. Gibt es irgendeine Möglichkeit, doch direkt auf diese Liste zuzugreifen?
edit: Mit GetStrings und SetStrings kann ich natürlich über eine Hilfsliste darauf zugreifen, aber ich würde generell gerne wissen, ob Delphi beim Ableiten vielleicht doch irgendeine Möglichkeit bietet, eine private Variable umzudeklarieren. Bei den ganzen Möglichkeiten (override, reinroduce, inherited, overload, etc.), weiß ich jetzt leider nicht, ob da nicht irgendwas davon auch für private Variablen gilt.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.

Geändert von CodeX (21. Jan 2011 um 17:08 Uhr)
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#16

AW: MemIniCrypt: Vollverschlüsseltes Arbeiten mit ini-Dateien - Kommentare erwünscht!

  Alt 23. Jan 2011, 15:17
Im Anhang eine neue Version (MemIniCrypt 1.1) mit einem notwendigen Fix, ein paar Änderungen und Erweiterungen.
Das Beispielprogramm aus dem ersten Posting müsste leicht angepasst werden, um mit dieser Version zu funktionieren.
Delphi-Quellcode:
// History
// 2011-01-17 1.0 Release
// 2011-01-23 1.1
// - Fix for ReadInteger/Bool etc.
// - Added Encryption as parameter for more control
// - Added two custom functions RenameSection & CloneSection
Das mit dem Initialisierungsvektor habe ich nicht eingebaut, weil mir das immer noch nicht klar genug ist, als dass ich das schnell korrekt einbauen könnte. Sollte jemand Lust haben, das umzusetzen, gerne. Letztlich ist das hier als universelle Lösung für alle Delphi-Programmierer gedacht.
Angehängte Dateien
Dateityp: pas MemIniCrypt.pas (11,4 KB, 32x aufgerufen)
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 10:31 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