AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Verbindung verschlüsseln ( RSA + AES )

Verbindung verschlüsseln ( RSA + AES )

Ein Thema von jokerfacehro · begonnen am 21. Feb 2012 · letzter Beitrag vom 22. Feb 2012
Antwort Antwort
Benutzerbild von jokerfacehro
jokerfacehro
Registriert seit: 13. Feb 2007
Hallo,

ich habe eine kleine Lib erstellt namens CryptConn.

Diese dient zur verschlüsselten Übertragung von Daten per Delphi zu PHP und umgekehrt.

Es wird vor dem Senden ein zufälliger AES-Schlüssel generiert. Mit diesem wird der Text verschlüsselt
und der Schlüssel wird RSA-verschlüsselt mitgeschickt.

Verwendet wurde: AES-CBC 128Bit Key mit Padding und RSA-OAEP mit einem leeren Init-Hash (kann leicht geändert werden)


In der Delphi-Unit wurde ein Standard-Random verwendet, dieses kann aber leicht ausgetauscht werden.
In der PHP-Unit wurde ein relativ sicherer Random-Algo verwendet.


Folgende Libs wurden verwendet:

Delphi:

- DEC von negaH
(SHA1, AES, Base64)

- BigInteger von F. Rienhardt aka peanut (editiert von mir)
->Basis 256 hinzugefügt
(RSA)


PHP:

- SecurePHPLib



Weitere Angaben:


Der AES Schlüssel hat eine feste Länge von 128Bit.
Der RSA-Algo ist auf Delphi-Seite fest für Längen <= 20 Zeichen gestaltet ( kann aber leicht für beliebige Längen modifiziert werden).

Auf PHP-Seite gibt es keine Einschränkungen.


Für jeden Aufruf wird ein neuer AES-Schlüssel generiert.

Die RSA-Schlüssel müssen vorher ausgetauscht werden.
Im PHP-Script sind die Schlüssel Base64-kodiert um sie im Quelltext unter zubringen und sind im PKCS1-Format.

Es können beliebige Formate genutzt werden (einfach mal in die RSA.php schauen).


Die RSA-Schlüssel in der Delphi-Unit liegen als BigInteger ( e, d, n) vor.
Andere Formate müssen selber implementiert werden


PHP-Seitig können vorinstallierte Libs wie mcrypt etc. genutzt werden, sind aber nicht notwendig.

Hauptsächlich wurden Teile der securePHPLib nach Delphi übertragen.



Edit: Ihr könnt die Lib frei verwenden und abändern. Sie ist sicherlich noch nicht perfekt. Falls jemand diese erweitert, bitte hier reinposten, damit alle etwas davon haben

Edit 2: Fehler mit Randomize, Random und XOR korrigiert


Keywords: RSA , AES , Verschlüsselung , Kodierung , Encode , Encryption
Angehängte Dateien
Dateityp: rar CryptConn.rar (285,4 KB, 68x aufgerufen)
"Never touch a running system administrator !"

Geändert von jokerfacehro (22. Feb 2012 um 12:06 Uhr)
 
gammatester
 
#2
  Alt 22. Feb 2012, 09:14
Ein paar Bemerkungen zu CryptConn
  • Randomize wird bei jeder AES-Schlüsselerzeugung aufgerufen und auch sonst noch einige Male! Das ist kontraproduktiv und vermindert die eh schon schlechte Sicherheit.
  • Selbst wenn random optimal wäre, ist der AES-Schlüssel nicht zufällig: Es müßte zumindest char(random(256)) heißen!
  • Es wird keine Möglichkeit gegeben, andere als den fixen RSA-Schüssel zu erzeugen. Wozu also die ganze RSA-Verschlüsselei?
und zu BigInt
  • Die reingehackte Initialisierung mit Basis 256 ist im besten Fall falsch, kann aber auch crashen, weil immer mindestens 4 Bytes verarbeitet werden: 1 (base 256) -> '16777216'
  • 2 und 5 sind abgeblich nicht prim!
  • 2^3 mod(-10) hängt (in BarrettReduction)
  • 3^(-1) mod 10 gibt 3, richtig ist 7
  • x.gcd(0) hängt
  • etc
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#3
  Alt 22. Feb 2012, 09:59
Zitat:
Randomize wird bei jeder AES-Schlüsselerzeugung aufgerufen und auch sonst noch einige Male! Das ist kontraproduktiv und vermindert die eh schon schlechte Sicherheit.
Danke für die Info. Wie gesagt, ist die externe RandomLib von DEC dabei.


Zitat:
Selbst wenn random optimal wäre, ist der AES-Schlüssel nicht zufällig: Es müßte zumindest char(random(256)) heißen!
wurde von vornherein gesagt, dass die Delphi-Random-Funktion nicht sicher ist.


char(random(256)) ist falsch, da der Wertebereich von 0 bis 255 geht.


Zitat:
Es wird keine Möglichkeit gegeben, andere als den fixen RSA-Schüssel zu erzeugen. Wozu also die ganze RSA-Verschlüsselei?
Von Schlüsselgenerierung habe ich nichts gesagt.
Diese ist aber leicht mit der securePHPLib zu bewerkstelligen.

Die eingetragenen Schlüssel sind nur Beispielwerte zum Testen.


Zitat:
Die reingehackte Initialisierung mit Basis 256 ist im besten Fall falsch, kann aber auch crashen, weil immer mindestens 4 Bytes verarbeitet werden: 1 (base 256) -> '16777216'
Die Funktion ist so aus der securePHPLib übernommen.



Danke für die Info. Für die weiteren Sachen habe ich gerade keine Zeit.
  Mit Zitat antworten Zitat
gammatester
 
#4
  Alt 22. Feb 2012, 10:14
char(random(256)) ist falsch, da der Wertebereich von 0 bis 255 geht.
Nein, Dein random(255) ist falsch, weil es nur Werte von 0 .. 254 liefert. Es kommen also nicht alle möglichen Werte 0 .. 255 vor!
  Mit Zitat antworten Zitat
Benutzerbild von jokerfacehro
jokerfacehro

 
Delphi 7 Enterprise
 
#5
  Alt 22. Feb 2012, 10:22
da steht wirklich nur < Range in der Hilfe, hatte das überlesen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:05 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