Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

schnelles Veschlüsseln

0 views
Skip to first unread message

Christian Stüben

unread,
Nov 24, 2009, 2:57:53 AM11/24/09
to
Hallo allerseits,
in System.Security.Cryptography sind ja verschiedene Methoden definiert
(noch ein Buch mit sieben Siegeln f�r mich).

Um jetzt beispielsweise einen String mit 30 bis 60 Zeichen zu verschl�sseln,
welche Methoden nimmt man da am besten? Gibt es Anwendungsbeispiele?

Anforderung ist nicht der "harte" Schutz vor brutalem Dechiffrieren mit
umpfzigtausend CPU-Cores im Hintergrund, sondern um einen Setupstring vor
"au ja, da schau ich mal schnell rein, mal gucken wie der das macht" zu
sch�tzen. Der Laufzeitbedarf f�r Instanziieren der Komponenten,
Verschl�sselung und Entschl�sseln sollte angemessen niedrig liegen.

Ein einfaches XOR des Strings mit einem Schl�sselstring w�re mir zu niedrig
angesetzt, aber der CPU-Bedarf darf auch nicht zu stark steigen.

Danke im Voraus.

mfg Chris

Immo Landwerth

unread,
Nov 24, 2009, 3:21:16 AM11/24/09
to
Christian St�ben wrote:

> Anforderung ist nicht der "harte" Schutz vor brutalem Dechiffrieren mit
> umpfzigtausend CPU-Cores im Hintergrund, sondern um einen Setupstring
> vor "au ja, da schau ich mal schnell rein, mal gucken wie der das macht"
> zu sch�tzen.

Also willst Du Dich vor Zugriffen mit dem .NET Reflector "sch�tzen". Da
w�rde ich Dir nahelegen, einfach einen Obfuskator zu benutzen. Die
meisten k�nnen n�mlich String Verschl�sselung.

Wenn es wirklich nur um einen einzelnen String geht, ist das aber
vermutlich Overkill bzw. zu teuer. Da w�rde ich mir selber einen
einfachen String Scrambler schreiben (also ein bisschen XOR und so) weil
das Aufrufen Deiner Methode immer noch ein wenig aufw�ndiger ist, als
den Text mit den zugeh�rigen Schl�sseln in ein Konsolenprojekte zu
kopieren und kurz zu entschl�sseln. Aber einem ehrlich gemeinten
"Angriff" (und damit meine ich nicht Brute Force mit tausenden von
Computern, sondern einfach nur eine halbwegs intelligente Nutzung von
.NET Reflector/ILASM/ILDASM) h�lt auch das nat�rlich nicht l�nger stand.

Ohne angeben zu wollen: bisher habe ich alle solchen Lizenz/IP Ged�ns in
unter zwei Stunden aushebeln k�nnen. Das liegt nicht daran, dass ich so
ein begnadeterer Hacker bin (bin ich nicht), sondern weil der Tool
Suppport f�r Managed Code so wahnsinnig gut ist. Und ja, ich mache das
ausschlie�lich zur pers�nlichen Belustigung :-)

--
Immo Landwerth

Frederic Luchting

unread,
Nov 26, 2009, 9:19:55 AM11/26/09
to
Hallo ihr,

> (also ein bisschen XOR und so)

ich poste mal einen Link zu einem Artikel, den ich dazu sehr
unterhaltsam fand:

http://aktuell.de.selfhtml.org/weblog/php-verschluesselung-100-euro-wette

Viele Gr��e

Frederic
.

Roma@discussions.microsoft.com Marcel Roma

unread,
Nov 30, 2009, 8:54:01 AM11/30/09
to
Wenn ich dich richtig verstehe, findet sowohl die Verschlüsselung als auch
die Entschlüsselung im Speicher einer fremden Maschine statt. Der zu
verschlüsselnde Text liegt also mindestens zwei Mal ungeschützt im gemanagten
Speicher. Zu allem Unglück handelt es sich dabei auch noch um einen immutable
String bei dessen Manipulation jedes Mal ein neues String-Objekt im Speicher
abgelegt wird (das auf die Gnade des Garbage Collectors angewiesen ist). Bei
einem solchen Design sollte die Geschwindigkeit der Verschlüsselung ein
unwichtiger Faktor sein, und ich will gar nicht erst damit beginnen über
elliptische Kurven nachzudenken. Und angenommen du hättest einen schnellen
Algorithmus gefunden (also einen mit möglichst wenigen
Verarbeitungsschritten): Wo würdest du nun den Schlüssel speichern? Stellst
du dein Tresor auf die Strasse und drückst dem (potentiellen) Einbrecher den
Schlüssel in die Hand?

Thomas Huebner

unread,
Dec 3, 2009, 2:55:22 AM12/3/09
to
Am 24.11.2009 08:57, schrieb Christian St�ben:

> Um jetzt beispielsweise einen String mit 30 bis 60 Zeichen zu
> verschl�sseln, welche Methoden nimmt man da am besten? Gibt es
> Anwendungsbeispiele?

Das nutze ich f�r eine _simple_ peer2peer Verbindung von ~250 Zeichen.
Wie Du ein String zum Byte() machst sollte ja bekannt sein. Wenn nicht
frag nochmal.

Gru�,
Thomas

Imports System.Security.Cryptography


Public Function GetMD5Array(ByVal value As String) As Byte()
Dim md5 As New MD5CryptoServiceProvider
GetMD5Array = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(value))
md5.Clear()
End Function

Public Function Decrypt(ByVal toDecrypt() As Byte, ByVal passMD5()
As Byte) As Byte()
Dim rDel As New RijndaelManaged()
rDel.Key = passMD5
rDel.Mode = CipherMode.ECB
rDel.Padding = PaddingMode.Zeros
Using cTransform As ICryptoTransform = rDel.CreateDecryptor()
Dim resultArray As Byte() =
cTransform.TransformFinalBlock(toDecrypt, 0, toDecrypt.Length)
rDel.Clear()
Decrypt = resultArray
End Using
End Function

Public Function Encrypt(ByVal toEncrypt() As Byte, ByVal passMD5()
As Byte) As Byte()
Dim rDel As New RijndaelManaged()
rDel.Key = passMD5
rDel.Mode = CipherMode.ECB
rDel.Padding = PaddingMode.Zeros
Using cTransform As ICryptoTransform = rDel.CreateEncryptor()
Dim resultArray As Byte() =
cTransform.TransformFinalBlock(toEncrypt, 0, toEncrypt.Length)
rDel.Clear()
Encrypt = resultArray
End Using
End Function

0 new messages