AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language AES-Encryption zwischen Delphi und Rest der Welt
Thema durchsuchen
Ansicht
Themen-Optionen

AES-Encryption zwischen Delphi und Rest der Welt

Ein Thema von Benutzername12345 · begonnen am 25. Jan 2016 · letzter Beitrag vom 25. Jan 2016
Antwort Antwort
Seite 1 von 2  1 2      
Benutzername12345

Registriert seit: 25. Jan 2016
3 Beiträge
 
#1

AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 11:10
Delphi-Version: XE
Hallo Delphi-Praxis-Community,

suche nun schon seit mehreren Stunden nach einer Lösung zu einem (meiner Meinung nach simplen) Problem, konnte bisher aber leider nichts finden und wende mich nun verzweifelt an euch

Eigentliches Ziel ist folgendes:
Wir arbeiten mit einem C#-Webservice der derzeit die Daten unverschlüsselt an die aufrufende Stelle zurückgibt. Da der Webservice allerdings nicht für die Öffentlichkeit bestimmt ist wollen wir diesen mit AES Rjindael verschlüsseln.
Mein Kollege hat schon irgendwo aus dem Internet eine Verschlüsselung kopiert. Diese kann zwischen C# Webservice und C# Anwendung kommunizieren. Da er selbst aber keine genaue Ahnung hat was da passiert, dachte ich, bevor ich die Verschlüsselung am Webservice nun anpasse, stelle ich sicher, dass Delphi erstmal irgendwas ver- und entschlüsselt, dass einem Allgemein kompatiblen Standard entspricht. Delphi ist aus Erfahrung immer etwas weniger flexibel, daher mein Gedanke: "Wenn ich was finde, bei dem es mit Delphi klappt, klappt das dann höchstwahrscheinlich auch in C#"

Also habe ich mir einen Online-Encrypter gesucht ( https://www.tools4noobs.com/online_tools/encrypt/ )
mit der Prämisse: In Delphi einen verschlüsselten String zu generieren, den ich dort nachstellen kann.

Habe nun bereits mehrere verschiedene Lösungen und Libraries durchprobiert und nutze derzeit DEC mit folgendem Code (vermutlich irgendwo von Stackoverflow kopiert)

Delphi-Quellcode:
function CCFDecrypt(const CCF: Binary; const Password: Binary): Binary;
begin
  with TCipher_Rijndael.Create do
    try
      Mode := cmCFB8;
      Init(Password, #0, $00);
      result := DecodeBinary(CCF, TFormat_MIME64);
    finally
      Free;
    end;
end;

function CCFEncrypt(const CCF: Binary; const Password: Binary): Binary;
begin
  with TCipher_Rijndael.Create do
    try
      Mode := cmCFB8;
      Init(Password, #0, $00);
      result := EncodeBinary(CCF, TFormat_MIME64);
    finally
      Free;
    end;
end;
dazu diesen Aufruf:
Delphi-Quellcode:
var
  Password, Data: Binary;
begin
  Password := 'asd';
  Data := CCFEncrypt('asd', Password);
  Data := CCFDecrypt(Data, Password);
Der verschlüsselte Text "asd" mit dem Password "asd" ergibt den String "htz5"
nun schaffe ich es aber nicht, auch nicht mit anderen Modes in Delphi, einen String zusammenzubauen den ich in dem Onlinetool genauso generieren kann.

Ich weiß nicht was ich falsch mache aber habe das Gefühl gehörig auf dem Schlauch zu stehen.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 11:20
Wenn du das Gleiche mit etwas Gleichem bearbeitest/umwandelst, kommt auch das Gleiche heraus.

Jede Verschlüsselung/Komprimierung arbeitet mit einer Bytefolge.

Alles muss also vorher in so eine Bytefolge rein und da hat der Frosch die Locken.

Was denn für eine Kodierung bei dem String? ANSI, UTF8, UTF16, ... da muss man sich auf das Gleiche einigen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
gammatester

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

AW: AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 11:38
Zusätzlich zum vorherigen Beitrag:

Wie wird denn der AES-Schlüssel aus dem Passwort abgeleitet? Welche Schlüsselgröße wird überhaupt benutzt (128,192 oder 256 Bit)?

Ich finde keine Angaben dazu in Deiner Frage.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#4

AW: AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 11:58
Wenn die Daten nur während der Übertragung verschlüsselt sein sollen, würde ich Transport Layer Security verwenden: wenn der Webservice HTTP basiert ist, einfach auf HTTPS umstellen.
Michael Justin
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
305 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 12:28
Wenn die Daten nur während der Übertragung verschlüsselt sein sollen, würde ich Transport Layer Security verwenden: wenn der Webservice HTTP basiert ist, einfach auf HTTPS umstellen.
Manchmal liegt das offensichtliche im Verborgenen - danke für den Hinweis, eh sich jetzt wieder eine große DEC Diskussion ausbreitet.
  Mit Zitat antworten Zitat
Benutzername12345

Registriert seit: 25. Jan 2016
3 Beiträge
 
#6

AW: AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 12:43
Wenn die Daten nur während der Übertragung verschlüsselt sein sollen, würde ich Transport Layer Security verwenden: wenn der Webservice HTTP basiert ist, einfach auf HTTPS umstellen.
Wir hatten erst eine HTTPS Verschlüsselung allerdings hilft das ja nur gegen man-in-the-middle Attacken. Wir wollen aber auch sicherstellen, dass jemand der zufällig den Webservice findet und zufällig mit korrekten Parametern aufruft, mit dem Ergebnis nichts anfangen kann (geht dabei um rohe Datenbankzugriffe). Sowohl Webservice als auch die angebotenen Funktionen haben zwar unleserliche Namen allerdings "security through obscurity is no security"

Zusätzlich zum vorherigen Beitrag:

Wie wird denn der AES-Schlüssel aus dem Passwort abgeleitet? Welche Schlüsselgröße wird überhaupt benutzt (128,192 oder 256 Bit)?

Ich finde keine Angaben dazu in Deiner Frage.
Wie der Schlüssel abgeleitet wird, weiß ich nicht. Wie finde ich das raus?
Die Schlüsselgröße, habe ich online gelesen, ist bei DEC 128 Bit


Wenn du das Gleiche mit etwas Gleichem bearbeitest/umwandelst, kommt auch das Gleiche heraus.

Jede Verschlüsselung/Komprimierung arbeitet mit einer Bytefolge.

Alles muss also vorher in so eine Bytefolge rein und da hat der Frosch die Locken.

Was denn für eine Kodierung bei dem String? ANSI, UTF8, UTF16, ... da muss man sich auf das Gleiche einigen
Bin mir nicht ganz sicher, ob ich dich richtig verstehe aber bei beiden (online Tool und Delphi) ist das Ergebnis ein Base64 String
  Mit Zitat antworten Zitat
gammatester

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

AW: AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 13:07
Zusätzlich zum vorherigen Beitrag:

Wie wird denn der AES-Schlüssel aus dem Passwort abgeleitet? Welche Schlüsselgröße wird überhaupt benutzt (128,192 oder 256 Bit)?

Ich finde keine Angaben dazu in Deiner Frage.
Wie der Schlüssel abgeleitet wird, weiß ich nicht. Wie finde ich das raus?
Die Schlüsselgröße, habe ich online gelesen, ist bei DEC 128 Bit
Du must doch zumindest beim Online-Algorithmus die Schlüssellänge auswählen. (Dort gibt es Rijndael-128, 192, 256. Ich nehme an daß damit AES-xxx gemeint sein soll). Im übrigen muß es schon Verdacht erregen, daß ein Quasi-Stream-Modus wie CFB-8, der Text beliebiger Länge verarbeiten kann, aus 3 Zeichen plötzlich 4 macht. Entweder gleiche Länge oder Vielfaches von 16. Oder ist Deine Angabe "htz5" in Base-64? Umso deutlicher wird es, alles in Bytes zu kommunizieren.

Im übrigen wäre ich skeptisch, wenn gesagt wird uses the mcrypt_encrypt() in PHP ohne daß das genauer spezifiziert ist. In dem PHP manual link wird gesagt, daß, wenn eine Schlüssellänge nicht unterstützt wird, false geliefert wird. Ein 24-Bit Schlüssel a la ASCII "asd" kann nun garantiert nicht benutzt werden. Also ...???

Da Du CFB-8 benutzen willst, hast Du noch ein anderes Problem: Dieser Modus benutzt einen IV (Initialisierungs-Vektor), ich sehe keine Möglichkeit der Eingabe (und das bedeutet noch mehr implizite Annahmen).

Geändert von gammatester (25. Jan 2016 um 13:21 Uhr) Grund: Hinweis auf IV
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 13:20
Bin mir nicht ganz sicher, ob ich dich richtig verstehe aber bei beiden (online Tool und Delphi) ist das Ergebnis ein Base64 String
Und was gibst du da rein?

Im Web ist UTF8 üblich in Delphi UTF16
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#9

AW: AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 13:33
...
Michael Justin

Geändert von mjustin (25. Jan 2016 um 13:39 Uhr)
  Mit Zitat antworten Zitat
Benutzername12345

Registriert seit: 25. Jan 2016
3 Beiträge
 
#10

AW: AES-Encryption zwischen Delphi und Rest der Welt

  Alt 25. Jan 2016, 13:35
Vorweg: Es klappt nun, trotzdem noch Antworten zu allen Fragen.


Und was gibst du da rein?

Im Web ist UTF8 üblich in Delphi UTF16
Hab den Code angepasst mit UTF8Decode bei den Parametern. Allerdings selbes Ergebnis

Du must doch zumindest beim Online-Algorithmus die Schlüssellänge auswählen. (Dort gibt es Rijndael-128, 192, 256. Ich nehme an daß damit AES-xxx gemeint sein soll). Im übrigen muß es schon Verdacht erregen, daß ein Quasi-Stream-Modus wie CFB-8, der Text beliebiger Länge verarbeiten kann, aus 3 Zeichen plötzlich 4 macht. Entweder gleiche Länge oder Vielfaches von 16. Oder ist Deine Angabe "htz5" in Base-64? Umso deutlicher wird es, alles in Bytes zu kommunizieren.
Ist alles Base64

Im übrigen wäre ich skeptisch, wenn gesagt wird uses the mcrypt_encrypt() in PHP ohne daß das genauer spezifiziert ist. In dem PHP manual link wird gesagt, daß, wenn eine Schlüssellänge nicht unterstützt wird, false geliefert wird. Ein 24-Bit Schlüssel a la ASCII "asd" kann nun garantiert nicht benutzt werden. Also ...???
Habe jetzt mal das Tool probiert: http://aes.online-domain-tools.com/

Da Du CFB-8 benutzen willst, hast Du noch ein anderes Problem: Dieser Modus benutzt einen IV (Initialisierungs-Vektor), ich sehe keine Möglichkeit der Eingabe (und das bedeutet noch mehr implizite Annahmen).
Danke. Der Initialisierungsvektor ist bei dem neuen Tool veränderbar.
DEC bietet bei Init als zweitem Parameter
Init(Password, #0, $00); die Möglichkeit diesen zu setzen.

Lasse mir jetzt alles als Hexvalue statt Base64 ausgeben (da das zweite Tool nur Hex anbietet)
Tool gibt bei Eingabe: Text "asd" Password "617364" (Hexwert von asd) und IV von #0 dem Wert 86dcf9 aus.
Delphi mit den eingangs verwendeten Parametern ebenfalls. Ich vermute also, der Code war die ganze Zeit richtig, das Tool mit dem ich die Richtigkeit prüfen wollte war einfach nur nutzlos

Danke euch allen für das (in einem Delphi-Forum) immens schnelle Feedback und schönen Tag


Edit:
Verstehe ich es richtigt: der Webservice ist öffentlich und ohne Authentifizierung erreichbar, nur die Daten sollen verschlüsselt werden? Sobald die Verschlüsselung geknackt ist, müssen dann ja alle Clients erst einmal offline gehen, bis eine neue Lösung gefunden ist
Leider ja.
Haben damals (bei der Erstentwicklung des Webservice) auch Authentifizierungsmethoden gesucht. Allerdings konnte ich damals absolut nichts finden, das kompatibel war zwischen c# REST-Webservice und Delphi Anwendung.

Geändert von Benutzername12345 (25. Jan 2016 um 13:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:37 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