Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schneller Code - Von Delete und Insert -> Copy -> ??? (https://www.delphipraxis.net/113372-schneller-code-von-delete-und-insert-copy.html)

-Lucky- 6. Mai 2008 21:33


Schneller Code - Von Delete und Insert -> Copy -> ???
 
Ich gebe gerade alles um meinen Quellcode so effektiv wie möglich zu machen. Kurz zum Thema, mein Programm führt ein paar Millionen Prozesse aus, was genau tut nix zur Sache.

Vor einiger Zeit bin ich schon dahinter gestiegen, dass Delete und Insert ein großes Problem darstellen. Bei mehreren Tausend aufrufen ist schon spürbar eine lange Zeitdauer erkennbar. Diesbezüglich habe ich Insert und Delete schon entfert und durch andere Prozeduren ersetzt. Durch die Funktion Copy war dies schon eine einfache Lösung, es geht nun um ein x faches schneller, aus mehreren Tagen Arbeitszeit wurden wenige Minuten - lol -

Nun wäre es aber optimal, wenn wir Copy auch noch durch etwas anderes in irgendeiner weise ersetzen können. Denn Copy dauert mir auch viel zu lange um es auf den Punkt zu bringen. Aber ich weiß auch, dass man nicht alles im Leben haben kann :zwinker:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var text1,text2: string;
i: integer;
begin
  ShowMessage('Messung starten');
  for i := 1 to 50 do
  begin
    text1 := FileToString('abc.xyz'); // datei hat nix zu sagen, dient als temp. Datenquelle
    text2 := copy(text1,20000,500000) + copy(text1,1,19999) + copy(text1,500001,length(text1));
  end;
  ShowMessage('Fertig');
end;
-->> Dies dauert knapp 3 Sekunden

Ein Versuch Copy effektiver zu machen scheiterte jedoch :oops:

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var text1,text2: string;
i,j: integer;
begin
  ShowMessage('Messung starten');
  for i := 1 to 50 do
  begin
    text2 := '';
    text1 := FileToString('abc.xyz'); // große Datei als temp. Datenquelle
    for j := 20000 to 500000 do
    text2 := text2 + text1[j];
    for j := 1 to 19999 do
    text2 := text2 + text1[j];
    for j := 500001 to length(text1) do
    text2 := text2 + text1[j];
  end;
  ShowMessage('Fertig');
end;
Dies dauert nun ca. 62 Minuten, damit habe ich also das Gegenteil erreicht von dem, was ich erreichen wollte.

Würde man dies oben, statt mit Copy, durch Delete und Insert versuchen zu erreichen, dann würde der ganze Prozess halt auch keine 3 Sekunden mehr dauern, sondern um einiges Länger. Wer mir nicht glaubt, einfach ausprobieren, hab hierfür auch nen Analyseprogramm geschrieben.

Nun ist die Frage, ob wir etwas noch effektiveres als Copy finden. Ich weiß, dass Copy im Vergleich zu Delete und Insert sehr, sehr effektiv ist, als schnelle Alternative. Aber könnte man das noch etwas umschreiben dass man hier noch schneller arbeitet?

Wenn das Programm einige Milliarde Zeichenketten analysieren soll, dann dauert dies so immer noch zu lange, da bin ich Opa bevor ich das Ergebnis habe :freak:

Sollte jedoch insgesammt nicht länger dauern, als dass man zwischendurch nen :cheers: trinken kann. Max. ne Stunde. Falls euch da was schnelleres einfällt, einfach sagen. Der Quellcode oben dient nur zum Zeitmessen, hat also keine Bedeutung. Die Datei ist ca. 12MB groß und besteht aus sinnlosen Daten.

nicodex 6. Mai 2008 21:46

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Die drei extrahierten Strings zu addieren dauert auch seine Zeit.
Du könntest den Zielstring bereits auf die richtige Länge bringen und die Daten per Move kopieren.
Schau dann mal im CPU-Fenster nach, ob diverse Compiler-Funktionen aufgerufen werden (UniqueString etc).

-Lucky- 6. Mai 2008 21:55

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Was ich mit diesem Delete und Insert meine ist folgendes. In diesem Beispiel werden einfach zwei Zeichen in einer in einem beliebigen Text getauscht, habe jetzt mal nur die Prozeduren aufgeführt:

Delphi-Quellcode:
procedure tauschen1(VAR text: string; x,y: integer);
var a,b: char;
Begin
  a := text[x];
  b := text[y];
  delete(text,x,1);
  insert(b,text,x);
  delete(text,y,1);
  insert(a,text,y);
End;

procedure tauschen2(VAR text: string; x,y: integer);
var b: char;
Begin
  b := text[x];
  text[x] := text[y];
  text[y] := b;
End;
Das Analyseergebnis:

Bei Tauschen 1:

Zeichen: - Zeit:
1.000 - 7,1 s
1.000.000 - 116 min, 0 s
1.000.000.000 - 80d, 13h, 12min


Bei Tauschen 2:

Zeichen: - Zeit:
1.000 - <0,1 s
1.000.000 - <0,1 s
1.000.000.000 - 14,6 s


Warum die eine Prozedur wesentlich länger braucht ist mir klar, ich kann logisch nachvollziehen wie Delete und Insert funktionieren, und dass dort mehr Schritte nötig sind, als wenn der Text einfach nur überschrieben wird, also dieses eine Zeichen.

Kann man irgendwo nachlesen, was bei den einzelnen Funktionen und Prozeduren genau gemacht wird? Weil diese setzen sich sicherlich aus anderen kleineren Bestandteilen zusammen wenn ihr versteht was ich meine. Versteht ihr? :gruebel:

-Lucky- 6. Mai 2008 21:58

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von nicodex
Du könntest den Zielstring bereits auf die richtige Länge bringen und die Daten per Move kopieren.

So genau habe ich das jetzt nicht verstanden... Könntest du mir einen Beispielquellcode geben damit ich das nachvollziehen kann? Dann werde ichs ausprobieren und analysieren.

himitsu 6. Mai 2008 22:04

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
für 2 Strings:
Delphi-Quellcode:
S := S1 + S2;

>>

SetLength(s, Length(s1) + Length(s2));
MoveMemory(@s[1], @s1[1], Length(s1));
MoveMemory(@s[1 + Length(s1)], @s2[1], Length(s2));
nja, aber eigentlich macht Delphi intern auch nix anderes und wandelt das etwa in S := LStrCat(s1, s2); um, welches auch sowas macht :stupid:

aber
Delphi-Quellcode:
s := Copy(s1, 10, 20) + Copy(s2, 1, 10);

>>

SetLength(s, 30);
MoveMemory(@s[1], @s1[10], 20);
MoveMemory(@s[21], @s2[1], 10);
Copy würde ja je einen neuen temporären String anlegen.

!! alles ohne Prüfung der Parameter

grenzgaenger 6. Mai 2008 22:39

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
sag mal, was willste da kopieren? ist das willkürlich oder gibt es da 'ne logik dahinter? falls logik, könnt man da vielleicht die grossen zeitfresser ausscheiden... :-) . aber so, schichtest du den ganzen speicher 'n paar mal um, und das kostet halt zeit...

<HTH>

-Lucky- 6. Mai 2008 23:21

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Also erstmal danke @ himitsu, ich werde gleich mal testen, wieviel % das schneller ist als mit der copy Methode, und das Ergebnis hier bekannt geben.

@grenzgaenger, nein, das hat in diesem Fall keine Logik :mrgreen:

Aber das Ergebnis kann man logisch verwenden. Es geht um das Thema Kryptologie. Der Quellcode muss so effektiv sein, dass man ihn mit keiner anderen Programmiersprache oder anderen Mitteln nachprogrammieren könnte, und es dann schneller weil der PC taktisch weniger Rechnen muss. Verstehen musst du das nicht. Die großen Zeitfresser habe ich ja schon aussortiert, aber da muss alles raus, was man womöglich mit anderen Mitteln effektiver erreichen kann. Es soll quasi unmöglich sein, den Code so zu schreiben, dass der PC es schneller entschlüsseln kann, als mit diesem Programm. Hierbei ist wirklich jeder Bruchteil einer Sekunde entscheidend.

nicodex 6. Mai 2008 23:28

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Vielleicht solltest du dir AQtime ansehen...

grenzgaenger 7. Mai 2008 02:09

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von -Lucky-
Also erstmal danke @ himitsu, ich werde gleich mal testen, wieviel % das schneller ist als mit der copy Methode, und das Ergebnis hier bekannt geben.

@grenzgaenger, nein, das hat in diesem Fall keine Logik :mrgreen:

Aber das Ergebnis kann man logisch verwenden. Es geht um das Thema Kryptologie. Der Quellcode muss so effektiv sein, dass man ihn mit keiner anderen Programmiersprache oder anderen Mitteln nachprogrammieren könnte, und es dann schneller weil der PC taktisch weniger Rechnen muss. Verstehen musst du das nicht. Die großen Zeitfresser habe ich ja schon aussortiert, aber da muss alles raus, was man womöglich mit anderen Mitteln effektiver erreichen kann. Es soll quasi unmöglich sein, den Code so zu schreiben, dass der PC es schneller entschlüsseln kann, als mit diesem Programm. Hierbei ist wirklich jeder Bruchteil einer Sekunde entscheidend.

machst da einen wettbewerb mit 'n kollegen? denn sonst, wirst du das ziel nicht erreichen. auf der anderen seite sitzen profis, welche das ganze jahr nix anderes zu tun haben ausser deinen code zu knacken ... und die haben auch die schnellsten rechner... :-) also, das ziel, wirst du nicht erreichen. ausserdem, heisst es nicht, dass 'n andere das nicht auch knacken kann, wenn er 'n paar minuten warten kann.

tja, wenn es keine logik hat, solltest du beim copy bleiben. das ist das beste. falls doch etwas mehr logik... den speicher zuerst ausrechnen und dann gemeinsam dort hin kopieren (himitsu hat den code bereits gequoted). sollte das noch nicht ausreichen kannst du nach der logischen optimeriung noch mit assembler anfangen... wenn die logik passt, dann wirst du da auch nicht mehr das grosse rausholen. denn der move in 'n bestimmten bereich ist schon sehr schnell.


Zitat:

Zitat von nicodex
Vielleicht solltest du dir AQtime ansehen...

aber erst, wenn die logik sauber durchdacht und optimiert ist...

<HTH> GG

QuickAndDirty 7. Mai 2008 08:33

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Ich weiß nicht aber Delphi Strings sind ja verwaltete Objekte vielleicht macht es sinn nicht mit Strings zu arbeiten,
sondern mit Speicherblöcken und dann mit den Zeichenketten Verarbeitungs Befehlen des Assemblers zu kopieren.

Einerseits fällt das bei 12MB Großen Strings auch nicht mehr ins Gewicht andererseits könnte jemand
anderes dadurch schneller sein.

Überhaupt hat eine Hochsprache keine Chance gegen einen handoptimierten Assemblercode ,
es ist meist nur einfach unwirtschaftlich.

nicodex 7. Mai 2008 08:43

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von QuickAndDirty
Überhaupt hat eine Hochsprache keine Chance gegen einen handoptimierten Assemblercode ,
es ist meist nur einfach unwirtschaftlich.

Das ist schon richtig, aber dazu muss man sich erstmal mit Assembler auskennen.
Versuch mal eine schnellere (generische) System.Move-Variante zu schreiben, als die vom Fastcode-Projekt optimierte Version in der aktuellen Delphi RTL...

jottkaerr 7. Mai 2008 08:59

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von -Lucky-
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var text1,text2: string;
i: integer;
begin
  ShowMessage('Messung starten');
  for i := 1 to 50 do
  begin
    text1 := FileToString('abc.xyz'); // datei hat nix zu sagen, dient als temp. Datenquelle
    text2 := copy(text1,20000,500000) + copy(text1,1,19999) + copy(text1,500001,length(text1));
  end;
  ShowMessage('Fertig');
end;

Abgesehen von Deinem Performanzproblem: Kann es sein, dass Du den dritten Parameter von Copy() nicht richtig verwendest? Dieser gibt die Länge des zu kopierenden Bereichs an. Ich habe den Eindruck, dass Du ihn aber für die Position des letzten Zeichen hältst, so dass der Bereich vom 500001. bis zum 519999. Zeichen doppelt im Zielstring landet . Richtig wäre meines Erachtens:

Delphi-Quellcode:
    text2 := copy(text1,20000,500000 - 19999) + copy(text1,1,19999) + copy(text1,500001,length(text1) - 500000);
jkr

shmia 7. Mai 2008 09:31

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Delphi-Quellcode:
  for i := 1 to 50 do
  begin
    // folgende Zeile sollte unbedingt ausserhalb der Schleife liegen,
    // ansonsten wird 50 Mal aus einer Datei gelesen, was natürlich viel mehr Zeit braucht,
    // als die Copy Funktionen
    text1 := FileToString('abc.xyz');
    text2 := copy(text1,20000,500000) + copy(text1,1,19999) + copy(text1,500001,length(text1));
  end;
Es ist wohl auch nicht die Copy-Funktion, die bremst, sondern das mehrfache zusammenhängen der Strings.
Bei D := A + B + C wird ja zuerst A + B gebildet (dazu muss erst Speicher reserviert werden)
Dann wird AB + C gebildet (schon wieder muss ein grosser Speicherblock reserviert werden und wieder werden die Datenblöcke im Speicher kopiert)
Ansonsten könnte man in diesem Fall auf Copy ganz verzichten und stattdessen das schnelle Move benützen:
Delphi-Quellcode:
  text1 := FileToString('abc.xyz');
  for i := 1 to 50 do
  begin
    SetLength(text2, Length(text1); // Speicher reservieren
//    text2 := copy(text1,20000,500000) + copy(text1,1,19999) + copy(text1,500001,length(text1));
    Move(text1[20000], text2[1], 50000);
    Move(text1[1],    text2[50001], 19999);
    Move(text1[50001], // hier wird es etwas schwierig, weil ich nicht sicher weiss wie gross length(text1) ist
  end;

skyobserver 7. Mai 2008 10:34

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Die schnellsten Ergebnisse wirst Du bekommen wenn die Verschlüsselung
in hochoptimiertem Assemblercode programmierst (wenn man es kann...)

Allerdings ist diese Art der Verschlüsselung die schlechteste Wahl!



1. :( Die schlechteste Art Daten zu verschlüsseln:

Die Verschlüsselung besteht aus einer Folge von Aktionen welche die Daten
des Originaltextes umstellen (von hinten nach vorn, Blöcke tauschen,...).
Wird das Verfahren einmal bekannt, so lassen sich alle jemals codierten
Texte sofort entschlüsseln. Da das Verfahren kompliziert ist, muß man es
aufschreiben und vergrößert so die Gefahr, das einem Anderem in die Hände
fällt. Schreibt man es nicht auf und die wissenden sterben, sind die Daten
für immer verloren. Ein solches Verfahren würde in der Öffentlichkeit
niemals akzeptiert: Da ich Niemandem sagen kann wie der Originaltext
verschlüsselt wird, kann auch Niemand prüfen ob das Verfahren ausreichend
sicher ist oder ob der Programmierer sein Wissen nicht missbraucht und die
Daten fremder Menschen ausspioniert.


2. :) Eine gute Art Daten zu verschlüsseln (So arbeiten alle modernen Verschlüsselungen):

Der Originaltext wird mit Hilfe eines Schlüssels (etwa ein Passwort oder
eine Zahl mit einer größe von bis zu 512 oder 1024 Bits) verschlüsselt.
Dabei wird der Originaltext Byte für Byte mit dem Schlüssel XOR-Verknüpft.
Da der Text länger als der Schlüssel ist, muß man nach dem letzten Byte
des Schlüssels wieder mit seinem ersten Anfangen (also den Schlüssel so
lange wiederholen/hintereinanderlegen bis man die Länge des Originaltextes
hat. Wenn man diesen Vorgang wiederholt wird des Code wieder entschlüsselt.
Bei dieser Verschlüsselung muß dem Empfänger bei jeder Botschaft der Schlüssel
mitgeteilt werden. Ein solches Verfahren würde von der Öffentlichkeit akzeptiert,
weil man Jedem sagen kann, wie die Verschlüsselung arbeitet und Jeder prüfen
kann, ob das Verfahren keine Hintertüren enthält. Wenn man für jede Nachricht
einen anderen Schlüssel verwendet, kann (wenn der Schlüssel abgefangen würde)
immer nur eine Nachricht entschlüsselt werden. Hier läßt sich über ein "Private-/
Public-Key" Verfahren mehr Sicherheit schaffen.
Um eine solche Verschlüsselung zu knacken, muß man den Code analysieren. Da der
Schlüssel sich ständig wiederholt kann man bei genügend langen Texten Muster
finden und über die Entropie (Häufigkeit) der Buchstaben (für jede Sprache anders)
lassen sich Rückschlüsse auf den Schlüssel ziehen. Das ist um so einfacher, je
einfacher das verwendete Wort ist. Deutsche Soldaten haben im zweiten Weltkrieg
teilweise die Namen ihrer Freundinnen als Schlüssel benutzt und diese auch für
mehrere Botschaften hintereinander verwendet. Dadurch war es englischen Spezialisten
möglich schnell auf den Schlüssel zu kommen. Daher liest man überall "...möglichst
Groß-, Kleinbuchstaben, Zahlen und Sonderzeichen verwenden und keine sinnvollen
Wörter...). Es gibt Datenbanken in denen die Beliebtesten Passwörter gespeichert
sind. Diese werden von Hackern als erstes durchprobiert bevor sie sich mehr Mühe
geben müssen.
Man erkennt auch, das die Sicherheit mit der Länge des Schlüssels wächst! Das bringt
uns zu der perfekten Verschlüsselung...siehe unten...


3. :twisted: Die pefekte Verschlüsselung (klingt komisch...iss aber so...):

Wenn man den Schlüssel so lang wie den Originaltext wählt gibt es keine Möglichkeiten
Muster zu finden oder sonst irgendwelche Rückschlüsse zu ziehen. Bei hundert Zeichen
Text braucht man nur Byte-Weise mit einem hundert Zeichen Schlüssel XOR verknüpfen.
Das wiederholen des Vorgangs entschlüsselt den Code wieder.
Dieses Verfahren ist absolut sicher! Kein NASA-Computer, FBI, CIA,
NSA, andere Vereine... oder Rechengenies sind in der Lage diesen Code
zu Knacken!

Der Grund ist einfach: die Anzahl der Möglichkeiten ist so groß wie die möglichen
Variationen des Originaltextes. Man wüsste beim probieren nicht, ob ein aufgetauchtes
(sinnvolles) Wort durch den richtigen Teil des Schlüssels oder nur durch puren Zufall
entstanden ist. Oder anders ausgedrückt: Mit dem richtigen Schlüssel kann man aus jedem
beliebigen Text jeden beliebigen anderen Text erzeugen (mit gleicher Länge).


Schlaue Köpfe werden sagen: "Die perfekte Verschlüsselung gibt es nicht! Sonst würde man
das doch überall einsetzen!". Das diese Verschlüsselung nicht verwendet wird liegt an zwei
Dingen:

1.Es gibt einen kleinen Haken: Der Schlüssel ist so lang wie der Originaltext und damit in
der Regel zu lang um ihn sich merkenzu können. Abtippen möchte ihn auch Niemand. Er muß
also in Form einer Diskette, CD/DVD-Rom oder USB-Stick mit jeder ausgetauschten Botschaft
weitergegeben werden. Dadurch besteht die Gefahr, das Code und Schlüssel "abgefangen" werden.
Sie müssen also auf verschiedenen Wegen transportiert werden.

2.Sämtliche Staaten haben kein Interesse an einer perfekten Verschlüsselung! In einigen Ländern
sind starke Verschlüsselungen sogar bei Strafe verboten und/oder fallen unter das Waffengesetz!
Man beachte: Verschlüsselungen werden als Waffe angesehen! Die Staaten sind neugierig und wollen
überall reinschnüffeln; es macht sie nervös wenn Menschen auf ihre Privatsphäre bestehen und Daten
so austauschen, daß man ihnen dabei nicht "über die Schulter blicken" kann. Es kommt noch schlimmer:
In den USA sollen (müssen? - so glaube ich jedenfalls) Verschlüsselungen immer über einen Zusätzlichen Key
zu entschlüsseln sein, welcher dann der NSA gegeben wird. Die wollen sich nicht (trotz Kenntniss des
Verfahrens) die Mühe machen alles auszuprobieren. Dies wurde durch einen einzigartigen Fall bekannt:
Als die Microsoft Programmierer das ServicePack3 (oder war's 4?) compilierten, haben Sie vergessen
die "Häckchen" für die Debug-Informationen rauszunehmen. In dem ausgeliefertem Code sind nun die
Kommentare der Programmierer zu lesen. Im Bereich des Verschlüsselung wurden zusätzliche Keys angelegt
welche (unter anderem) mit "NSA" dokumentiert waren! Ein Schlüssel wurde mit einem Fragezeichen
dokumentiert und gibt bis Heute Rätsel auf (Wer hat den Wohl bekommen? Hintertürchen eines
Programmierers?).


Mein Tipp für die perfekte Verschlüsselung:

-Generiere mit einem Zufallsgenerator (unbedingt selber bauen! Delphi's interner erzeugt wiederholbare
Wertefolgen) eine Datei mit einer Größe von z.B. 8GB.
-Datei auf DVD brennen und an deine Freunde schicken (per Post oder noch besser persönlich überreichen).
-Wähle eine Startposition in der Datei und verknüpfe den Originaltext Byte für Byte XOR mit den Bytes in
der Datei (ab deiner Startposition).
-Die Startposition ist eine überschaubare Zahl und kann gemerkt oder per Telefon ausgetauscht werden.
-Der Empfänger wiederholt den Vorgang zum Entschlüsseln.

Dieses Verfahren ist absolut sicher, solange Niemand Zugriff auf die 8GB-Datei hat. Daher auf einem Rechner
entschlüsseln welcher keinen Zugang zu einem Netzwerkzugang hat (weder intern, noch extern) oder die DVD
nur zum Entschlüsseln einlegen (Die ist zu groß als das sie Online-Schnüffler vom BKA "mal eben" übertragen
könnten :wink: ).


Mal nebenbei bemerkt: So schnell dein Code auch sein mag - in ein paar Jahren sind moderne PC's auch mit
einem langsamen Code schneller beim Entschlüsseln und der Stellenwert der Geschwindigkeit so nur temporär.


Stichworte für Google-Suche: "Private Public Key", "HASH Funktion"

-Lucky- 7. Mai 2008 11:50

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Ich fass mich kurz. Erst einmal oben, dieser Copy Fehler^^ Ja, Info liegt schon nen weilchen zurück. Habs mitlerweile korrigiert.

Ich habs jetzt mal umgeschrieben:

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var text1,text2: string;
i,x: integer;
begin
  text1 := FileToString('abc.xyz'); // datei hat nix zu sagen, dient als temp. Datenquelle
  x := length(text1);
  ShowMessage('Messung starten');
  for i := 1 to 50 do
  begin
    SetLength(text2, x); // Speicher reservieren
    Move(text1[20000], text2[1], 500000 - 19999);
    Move(text1[1],    text2[500001 - 20000], 19999);
    Move(text1[500001],text2[500001], x);
  end;
  ShowMessage('Fertig');
end;

procedure TForm1.Button7Click(Sender: TObject);
var text1,text2: string;
i,x: integer;
begin
  text1 := FileToString('abc.xyz'); // datei hat nix zu sagen, dient als temp. Datenquelle
  x := length(text1);
  ShowMessage('Messung starten');
  for i := 1 to 50 do
  begin
    SetLength(text2, x); // Speicher reservieren
    text2 := copy(text1,20000,500000 - 19999) + copy(text1,1,19999) + copy(text1,500001,length(text1) - 500000);
    SetLength(text2, x);
    MoveMemory(@text2[1], @text1[20000], 500000 - 19999);
    MoveMemory(@text2[500000 -19999 + 1], @text1[1], 19999);
    MoveMemory(@text2[500001], @text1[500001], x);
  end;
  ShowMessage('Fertig');
end;
Allerdings steigt der mir da immer aus. Ich vermute, dass es daran liegen muss:

Delphi-Quellcode:
MoveMemory(@text2[500001], @text1[500001], x);
// und daran:
Move(text1[500001],text2[500001], x);
Hab halt noch nie damit gearbeitet. Aber mein Algorithmus ist so programmiert, dass die Länge IMMER anders ist, auch wenn die Datei immer gleich groß ist.

Was AQtime angeht, werde ich mir gleich noch reinziehen. Die Zeit opfere ich. Sollte die Optimierung nur minimal sein, so kann man es sein lassen.

Was das Verschlüsseln angeht, das was skyobserver geschrieben hat ist mir bekannt und auch korrekt. In ähnlicher Art und Weise habe ich das alles schon ein paar mal gelesen. Mir ist auch klar, dass wenn man einen Schlüssel hat, der so lang ist, wie der zu verschlüsselnde Text, es nicht zu knacken ist. Was würdest du sagen, wenn ich dir sage, dass dies bei mir indirekt der Fall ist? :mrgreen:

Ich habe mich ungefähr einen Monat hingesetzt und etwas nahezu, nach meinen Begriffen, unknackbares geschaffen, obwohl der Schlüssel nicht so lang ist. Ich hoffe, dass sich dort jeder die Zähne dran ausbeißen wird, aber bevor ichs veröffentliche will ich noch nen Patent oder so :thumb:

Irgendetwas damit niemand auf die Idee kommt das von mir abzukupfern. Und dann können wir darüber streiten, ob man das knacken kann, ok? :zwinker:

Mir ist bereits eine Lösung eingefallen, wie man dieses Zeitproblem lösen könnte. Gar nicht! Man macht einfach den Schlüssel ein bisschen länger, dann gleicht sich das aus mit dem, was die "Profis" da programmieren könnten damit es schneller geht. Knacken ist eigentlich unmöglich.

Was vielleicht noch zu erwähnen ist... Mein Programm bastelt sich bei jeder Verschlüsselung quasi einen neuen Algorithmus zusammen, soll bedeuten, die Daten werden jeweils mit einem einmaligen Algorithmus verschlüsselt, wie genau das abläuft muss man nicht verstehen. Aber das Entschlüsseln funktioniert ebenfalls :nerd:

-Lucky- 7. Mai 2008 12:07

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Ich muss noch kurz zwei Sachen anmerken:

Zitat:

2.Sämtliche Staaten haben kein Interesse an einer perfekten Verschlüsselung! In einigen Ländern
sind starke Verschlüsselungen sogar bei Strafe verboten und/oder fallen unter das Waffengesetz!
Man beachte: Verschlüsselungen werden als Waffe angesehen! Die Staaten sind neugierig und wollen
überall reinschnüffeln; es macht sie nervös wenn Menschen auf ihre Privatsphäre bestehen und Daten
so austauschen, daß man ihnen dabei nicht "über die Schulter blicken" kann. Es kommt noch schlimmer:
In den USA sollen (müssen? - so glaube ich jedenfalls) Verschlüsselungen immer über einen Zusätzlichen Key
zu entschlüsseln sein, welcher dann der NSA gegeben wird. Die wollen sich nicht (trotz Kenntniss des
Verfahrens) die Mühe machen alles auszuprobieren. Dies wurde durch einen einzigartigen Fall bekannt:
Als die Microsoft Programmierer das ServicePack3 (oder war's 4?) compilierten, haben Sie vergessen
die "Häckchen" für die Debug-Informationen rauszunehmen. In dem ausgeliefertem Code sind nun die
Kommentare der Programmierer zu lesen. Im Bereich des Verschlüsselung wurden zusätzliche Keys angelegt
welche (unter anderem) mit "NSA" dokumentiert waren! Ein Schlüssel wurde mit einem Fragezeichen
dokumentiert und gibt bis Heute Rätsel auf (Wer hat den Wohl bekommen? Hintertürchen eines
Programmierers?).
-->> Nanu, kann ich da Probleme bekommen? Ich habe bereits etwas geschrieben, was als unknackbar zählt. Man hat mir diesbezüglich schon halbe Droh E-Mails und so etwas wie hier geschrieben. Ich solle doch nix unknackbares entwickeln.

Auch habe ich keine Hintertüren eingebaut. Alles bedacht.

Hash Funktion ist auch nicht möglich - jedenfalls wird kein Hash Wert des Passwortes gespeichert oder etwas ähnliches. :roll:


Aber eine Frage hätte ich noch:

Ist es möglich, aus den 1en und 0en in irgendeiner Art und Weise einen Quellcode zu erzeugen? Mein Algorithmus habe ich mit dem eigenen Programm verschlüsselt und wenn ich damit fertig bin bereinige ich die leeren 1en und 0en auf meinem PC. Indem ich sie überschreibe. Das klingt jetzt vielleicht paranoid, aber ich wollte was unknackbares machen.

Nen Kumpel von mir meinte, dass er nen Programm hat, wo er sehen kann, wie die Exe Datei immer zwischen den einzelnen Einträgen hin und her hopst. Somit kann man halt einfache sachen wie ne Warteschleife aushebeln. Kann man dadurch irgendwie an den Algorithmus kommen?

Wenn ichs mit UPX packe, dann komprimiert er dass ja alles noch ein bisschen. Wird es dann schwerer an den Algorithmus zu kommen?

nicodex 7. Mai 2008 12:21

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von -Lucky-
Allerdings steigt der mir da immer aus. Ich vermute, dass es daran liegen muss:

Delphi-Quellcode:
Move(text1[500001],text2[500001], x);

Du willst zum Schluß nicht x Bytes kopieren (alles), sondern den "Rest ab 500001" (x - 500001).

grenzgaenger 7. Mai 2008 12:32

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von skyobserver
1.Es gibt einen kleinen Haken: Der Schlüssel ist so lang wie der Originaltext und damit in der Regel zu lang um ihn sich merkenzu können. Abtippen möchte ihn auch Niemand. Er muß
also in Form einer Diskette, CD/DVD-Rom oder USB-Stick mit jeder ausgetauschten Botschaft
weitergegeben werden. Dadurch besteht die Gefahr, das Code und Schlüssel "abgefangen" werden.
Sie müssen also auf verschiedenen Wegen transportiert werden.

ausserdem muss der schlüssel einmalig sein. das heisst, bei jeder neuen verschlüsselung kommt ein neuer schlüssel zum einsatz :-)



Zitat:

Zitat von skyobserver
2.Sämtliche Staaten haben kein Interesse an einer perfekten Verschlüsselung! In einigen Ländern sind starke Verschlüsselungen sogar bei Strafe verboten und/oder fallen unter das Waffengesetz!
Man beachte: Verschlüsselungen werden als Waffe angesehen! Die Staaten sind neugierig und wollen
überall reinschnüffeln; es macht sie nervös wenn Menschen auf ihre Privatsphäre bestehen und Daten
so austauschen, daß man ihnen dabei nicht "über die Schulter blicken" kann. Es kommt noch schlimmer:
In den USA sollen (müssen? - so glaube ich jedenfalls) Verschlüsselungen immer über einen Zusätzlichen Key
zu entschlüsseln sein, welcher dann der NSA gegeben wird. Die wollen sich nicht (trotz Kenntniss des
Verfahrens) die Mühe machen alles auszuprobieren. Dies wurde durch einen einzigartigen Fall bekannt:
Als die Microsoft Programmierer das ServicePack3 (oder war's 4?) compilierten, haben Sie vergessen
die "Häckchen" für die Debug-Informationen rauszunehmen. In dem ausgeliefertem Code sind nun die
Kommentare der Programmierer zu lesen. Im Bereich des Verschlüsselung wurden zusätzliche Keys angelegt
welche (unter anderem) mit "NSA" dokumentiert waren! Ein Schlüssel wurde mit einem Fragezeichen
dokumentiert und gibt bis Heute Rätsel auf (Wer hat den Wohl bekommen? Hintertürchen eines
Programmierers?).

ausserdem sind kryptographische verfahren in verschiedenen ländern gänzlich verboten. in dennen darf noch nicht mal das passwort verschlüsselt auf die festplatte abgelegt werden.

grenzgaenger 7. Mai 2008 12:38

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von -Lucky-
Ich habe mich ungefähr einen Monat hingesetzt und etwas nahezu, nach meinen Begriffen, unknackbares geschaffen, obwohl der Schlüssel nicht so lang ist. Ich hoffe, dass sich dort jeder die Zähne dran ausbeißen wird, aber bevor ichs veröffentliche will ich noch nen Patent oder so :thumb:

Irgendetwas damit niemand auf die Idee kommt das von mir abzukupfern. Und dann können wir darüber streiten, ob man das knacken kann, ok? :zwinker:

wenn es wirklich gut ist, kannst den algo hier ins forum stellen und den quelltext dazu. sonst ist es einfach security by obscurity. und wohl mit das schlechteste was es gib. ausserdem ist es doch nicht schlecht, seinen code auf schwachstellen prüfen zu lassen. zu deinem patent (a) gibts hier in europa keine softwarepatente, (b) um ein patent in den USA anzumelden brauchst nur 'ne idee, 'n biserl papier und das war es schon... also kannst schon mal zum patentamt wackeln ;-)

grenzgaenger 7. Mai 2008 12:44

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von -Lucky-
Ich muss noch kurz zwei Sachen anmerken:

Aber eine Frage hätte ich noch:
Ist es möglich, aus den 1en und 0en in irgendeiner Art und Weise einen Quellcode zu erzeugen? Mein Algorithmus habe ich mit dem eigenen Programm verschlüsselt und wenn ich damit fertig bin bereinige ich die leeren 1en und 0en auf meinem PC. Indem ich sie überschreibe. Das klingt jetzt vielleicht paranoid, aber ich wollte was unknackbares machen.

ziel verfehlt, setzen! wenn du den algo im code ablegst, hastt du schon verlohren. das ist (fast) das leichteste zum knacken was es gibt. ebenfalls kann man prima die logik extrahieren... 'bei einer interpreter anwendung, kann man das ganze gar als hochsprachencode ausgeben...

denke, du solltest noch mal über die bücher!

himitsu 7. Mai 2008 12:51

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zum Thema UPX und Co.:
Als Schutz bringt das nichts, da man dieses leicht wieder entpacken/entschlüsseln kann.
Abgesehn davon, daß selbst bei gepackter/verschlüsselter EXE der Code(Algo) ungeschützt, ungepackt, unverschlüsselt im RAM liegt, denn sonst könnte Windows ja dein Programm nicht ausführen. :stupid:
Und dazu liegt auch noch alles Nötige für die Entschlüsselung und/oder das Entpacken direkt in der EXE (sie muß sich ja selbst entpacken/entschlüsseln können).

PS: such mal im Forum nach Beiträgen des Users "negah" (Hagen) ... ist einer der größten Verschlüsselungsexperten ... also gibt's viel guten Stoff zum lesen,
aber nach den Beschreibungen hier, würd ich jetzt einfach mal vermuten, daß er deinen Algo in der Luft zerreißt und dirleicht beweißt, daß er unsicher ist ... sind halt, selbst wenn in guter und sicherer Kern dahinterstecken könnte, zuviele Schwachstellen drin, welche das Ganze wieder insgesammt unsicher machen ...
jedenfalls scheint es mir so, denn wozu sollte es sonst nötig sein den Algo mit "billigen" Tricks zu verschleiern?

-Lucky- 7. Mai 2008 13:00

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

zu deinem patent (a) gibts hier in europa keine softwarepatente
Wie jetzt? Dann kann ich mir das also sparen... mhh...

Theoretisch könnte ich den Algorithmus ja dann doch ins Forum schreiben. Ich werd drüber nachdenken.

Was das copy angeht:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var text1,text2: string;
i,x: integer;
begin
  text1 := FileToString('abc.xyz'); // datei hat nix zu sagen, dient als temp. Datenquelle
  x := length(text1);
  ShowMessage('Messung starten');
  for i := 1 to 1000 do
  begin
     text2 := copy(text1,20000,500000 - 19999) + copy(text1,1,19999) + copy(text1,500001,x - 500000);
  end;
  ShowMessage('Fertig');
end;
Dauer: 37 Sekunden


Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var text1,text2: string;
i,x: integer;
begin
  text1 := FileToString('abc.xyz'); // datei hat nix zu sagen, dient als temp. Datenquelle
  x := length(text1);
  ShowMessage('Messung starten');
  for i := 1 to 1000 do
  begin
    SetLength(text2, x); // Speicher reservieren
    Move(text1[20000], text2[1], 500000 - 19999);
    Move(text1[1],    text2[500001 - 20000], 19999);
    Move(text1[500001],text2[500001], x - 500001);
  end;
  ShowMessage('Fertig');
end;
Dauer: 11 Sekunden


Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
var text1,text2: string;
i,x: integer;
begin
  text1 := FileToString('abc.xyz'); // datei hat nix zu sagen, dient als temp. Datenquelle
  x := length(text1);
  ShowMessage('Messung starten');
  for i := 1 to 1000 do
  begin
    SetLength(text2, x); // Speicher reservieren
    text2 := copy(text1,20000,500000 - 19999) + copy(text1,1,19999) + copy(text1,500001,length(text1) - 500000);
    SetLength(text2, x);
    MoveMemory(@text2[1], @text1[20000], 500000 - 19999);
    MoveMemory(@text2[500000 -19999 + 1], @text1[1], 19999);
    MoveMemory(@text2[500001], @text1[500001], x-500001);
  end;
  ShowMessage('Fertig');
end;
Dauer: 47 Sekunden


Damit wäre diese Frage auch beantwortet. Mit Move kann man die Meiste Zeit einsparen, dann geht das ganze 3 mal so schnell :wink:

Werd dies auch auf alle anderen Stellen übertragen, wo Zeichenketten zusammengefügt werden. Wieder etwas neues dazu gelernt :zwinker:

Aber eine Frage habe ich jetzt noch: :gruebel:

Wenn ich hier in Deutschland dieses Programm nun kostenlos zur Verfügung stelle, könnte ich dann von den anderen Ländern aus Ärger bekommen? Es liegt ja nahe, dass auch in diesen Ländern das Programm genutzt werden "könnte". Oder ist dann der Anwender schuld, der es benutzt?

Ich bin gerade dabei das Programm ins Englische zu übersetzen. Kann ich da Probleme bekommen wenn ich das Online stelle, und auch Englisch unterstützt wird? Weil damit fördere ich ja quasi die Verbreitung auf den anderen Kontinenten. Kennt sich da jemand aus?


Zitat:

PS: such mal im Forum nach Beiträgen des Users "negah" (Hagen) ... ist einer der größten Verschlüsselungsexperten ... also gibt's viel guten Stoff zum lesen,
aber nach den Beschreibungen hier, würd ich jetzt einfach mal vermuten, daß er deinen Algo in der Luft zerreißt und dirleicht beweißt, daß er unsicher ist ... sind halt, selbst wenn in guter und sicherer Kern dahinterstecken könnte, zuviele Schwachstellen drin, welche das Ganze wieder insgesammt unsicher machen.
Ich werde mich mit ihm in Kontakt setzen, das wäre schon krass wenn es da ne Schwachstelle gibt, denn ich habe keine Hintertüren eingebaut, es wird noch nicht mal erkannt, ob das Passwort richtig ist, also kein Rückgabewert geliefert. Naja, mal schauen.

p80286 7. Mai 2008 13:22

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Hallo Lucky,

Ich weiß ja nicht warum Du gerne ein Patent auf deinen Algoritmus haben möchtest, vermute aber Du hast falsche Vorstellungen von den Möglichkeiten eines Patentes.

1) Wie schon oben angemerkt, gibt es in Europa keine Softwarepatente! Wenn es sich allerdings um die Steuerung eines bestimmten Gerätes handelt, sind die Chancen schon größer.

2) Gesetzt der Fall Du hast ein (erteiltes) Patent, dann hast Du zunächst nur ein Stück Papier auf dem Patent steht. Weiterhin wird in diesem Patent die Vorgehensweise Deines Programms veröffentlicht! Jeder kann also Lesen was Du Dir ausgedacht hast, und jeder weiß, da? es sich hierbei um Deine Idee handelt.

3) Geld kannst Du mit dem Patent nur verdienen, wenn Du eine oder mehrere Lizenzen verkaufen kannst. Damit vergist Du an Deine Lizenznehmer das Recht, deine Idee zu nutzen. Die andere Möglichkeit ist es einem Wettbewerber/Konkurrenten nachzuweisen, daß er Dein Patent nutzt, dann kannst Du per Gerichtsbeschluß eine Zwangslizenz oder einen Schadenersatz erzwingen. Du mußt nur nachweisen, daß er Dein Patent nutzt.

4) Mach bitte nicht den Fehler Patent=Idee zu setzen. Letztendlich wird durch das Patent das geschützt was Du beschrieben hast. Im pratischen Beispiel hast Du den Code durch die Verwendung von MOVE optimiert. Wenn ich stattdessen copy nutzen würde, müßte letztendlich ein Gericht entscheiden, ob ich Dein Patent verletze. Und ohne Urteil gibt's kein Geld.

5) Wenn Du denn ein Patent in den USA hättest, dann wäre die Nutzung auch nur in den USA geschützt und überall sonst auf der Welt könnte Dir jeder eine lange Nase drehen.

Gruß
K-H

grenzgaenger 7. Mai 2008 13:23

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von -Lucky-
Wenn ich hier in Deutschland dieses Programm nun kostenlos zur Verfügung stelle, könnte ich dann von den anderen Ländern aus Ärger bekommen? Es liegt ja nahe, dass auch in diesen Ländern das Programm genutzt werden "könnte". Oder ist dann der Anwender schuld, der es benutzt?

musst halt vertraglich ausschliessen, dass es in den ländern benutzt werden kann, wo du probleme bekommen würdest. z.b. beschränkung auf deutschland... wenn er akzeptiert und es doch in die USA oder z.b. nach lybien nimmt, ist er für die konsequenzen selber schuld ...

p80286 7. Mai 2008 13:49

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Wenn ich hier in Deutschland dieses Programm nun kostenlos zur Verfügung stelle, könnte ich dann von den anderen Ländern aus Ärger bekommen? Es liegt ja nahe, dass auch in diesen Ländern das Programm genutzt werden "könnte". Oder ist dann der Anwender schuld, der es benutzt?

Ich bin gerade dabei das Programm ins Englische zu übersetzen. Kann ich da Probleme bekommen wenn ich das Online stelle, und auch Englisch unterstützt wird? Weil damit fördere ich ja quasi die Verbreitung auf den anderen Kontinenten. Kennt sich da jemand aus?
Na Ja, auf legalem Wege wird Dir wohl keiner in die Parade fahren können. Soweit ich weiß kanns Du in Deutschland keinen Ärger bekommen. Aber es gibt ja noch ein paar andere Länder, und die haben u.U. ein anderes Verständnis von freiem Gedankenaustausch.

aber "Ideen sind wie Zahnpasta, man kann sie nicht wieder in die Tube zurück drücken".
(ist leider nicht von mir!)

Auf der anderen Seite wenn Du deine Idee nicht veröffentlichst, bekommt auch keiner mit wie gut Du bist!

Gruß
K-H

skyobserver 7. Mai 2008 14:02

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zum Thema Patent...

Kannst Du mathematisch beweisen wieviele Möglichkeiten es braucht um den richtigen Schlüssel zu finden?
Kannst Du mathematisch die Warscheinlichkeit des Auftretens von Mustern zur verkürzten Suche berechnen?

Ich will dich nicht entmutigen, aber wenn nicht, kannst Du den Gedanken abschreiben das jemals Jemand
Interesse an deinem Verfahren hat! "Glauben" ist halt nicht "Wissen" und wer heute hochsensible Daten
verschlüsselt (und Gebühren für das Verfahren zahlt) der will halt "Wissen" wie sicher es ist.
Schon oft haben sich scheinbar sichere Verfahren als einfach zu knacken herausgestellt, wenn erstmal
ein Angriffspunkt gefunden ist.

Wenn Du hunderte von Misch- und Umstellverfahren in einer Geheimen Reihenfolge anwendest mußt Du
sicherstellen das keine Vereinfachung existiert: x*10/2 und x*5 sind unterschiedliche Operationen
die zum gleichen Ergebnis führen.
Wenn Du einen Rubik-Würfel verdrehst indem Du immer den gleichen Zug machst kommst Du irgendwann
wieder zum Ausgangspunkt zurück, sagen wir mal nach 128 Zügen. Wenn Du jetzt drei verschiedene
Züge mit je 128er Zyklus kombinierst (1,2,3,1,2,3,...) erwartest Du sicher einen Gesamt-Zyklus von
128*128*128=2097152 Zügen. Das wird selten der fall sein! Es wird Dir fast immer passieren, daß
während dieser 2097152 Züge der Würfel mehrmals die Ausgangsposition durchläuft und in diesen
Fällen sinkt die Anzahl der Möglichkeiten dann auf 2097152 geteilt durch die Anzahl der passagen
der Ausgangsposition. Das Große Ziel der Kryptologie ist es also ein Verfahren mir einem möglichst
großen und vor allem perfekten Zyklus ohne Wiederholungen zu finden. Da kommen die HASH-Funktionen
wieder ins Spiel: Eine HASH-Funktion liefert zu einem Wert "A" einem Wert "B". Allerdings können
mehrere verschiedene Werte "A" zum gleichen Wert "B" führen (der umgekehrte Weg ist also nicht
eindeutig).
HASH-Funktionen werden heutzutage von Mathe-Genies und Supercomputern Tag und Nacht analysiert um
herauszufinden welche "A"s zum gleichen "B" führen. Es gibt bekannte HASH-Funktionen die lange als
sicher galten bis man einen Weg fand mit relativ geringem Rechenaufwand zu einem bestimmten "A" alle
Gegenstücke zu finden. Soviel ich weiß gibt es nur wenige HASH-Funktionen bei denen bis zum heutigen
Tage keine Pärchen gefunden werden konnten.

Ein Verschlüsselungsverfahren wird heute nur noch akzeptiert, wenn das Verfahren bekannt und für
Jedermann zugänglich ist. Die Sicherheit darf nur von dem Schlüssel (oder den Schlüsseln) abhängen;
nicht aber von dem Verfahren an sich. Darum wird auch bei jeder Verschlüsselung immer der Name
angegeben (z.B. PGP). Es ist halt kein Geheimnis wie es funktioniert...das kann man im Internet nachlesen!

Da Du uns aber nicht sagen möchtest wie Dein Verfahren funktioniert, folgere ich daraus, daß Niemand
den verschlüsselungsvorgang kennen darf, weil er sonst in der Lage wäre deinen Code zu knacken.

Daraus ergibt sich ein gewaltiges Sicherheitsloch: Du must dem Anwender ja eine Software geben, damit
er die Daten wieder entschlüsseln kann. Ein Hacker wird den Binärcode deiner Software reassemblieren
und sehen was dein Programm macht. Dagegen kann man nichts unternehmen. Ein Programm das ein Computer
abarbeiten kann, kann auch ein Programmierer interpretieren. Und schon ist das Geheimnis kein Geheimnis mehr.


Also wie willst Du mich von der Sicherheit deines Verfahren überzeugen damit ich es kaufe?
Du kannst mir ja nicht sagen wie es funktioniert damit ich einschätzen kann ob es sicher ist.
Jeder der was verkaufen will erzählt mir doch heute das blaue vom Himmel und sein Produkt sei
das beste. Da verlange ich schon ein paar Expertiesen von namhaften Forschungsinstitutionen.
Hast Du das Geld eine Solche Expertiese anfertigen zu lassen?

Was wenn sich herausstellt, das eine Vereinfachung existiert oder dein Programm analysiert wurde?
Die vertraulichen Daten all meiner Kunden können von jedermann im Internet gelesen werden.
Meine Kunden verklagen mich auf Schadensersatz und ich bin pleite!
Ich wiederum verklage dich auf mehrere Millionen!


Wenn Du jetzt nicht nachdenklich geworden bist und Dir immer noch sicher bist dann wünsche ich
Dir auf jeden Fall viel Erfolg (vielleicht kannst Du ja wirklich früher mit dem Arbeiten aufhören)!

-Lucky- 7. Mai 2008 14:36

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Kannst Du mathematisch beweisen wieviele Möglichkeiten es braucht um den richtigen Schlüssel zu finden?
Ja. Das Passwort muss mind. 10 Zeichen lang sein, und für jedes Zeichen gibt es 256 Möglichkeiten. Das Programm achtet auch darauf, dass nicht nur Buchstaben und Zahlen vorhanden sind und hilft bei der Eingabe von Steuerzeichen etc.

Macht mindestens!!! 256^10 Möglichkeiten = 1208925819614629174706176 Möglichkeiten.

Im Durchschnitt braucht man jedoch nur 604462909807314587353088 Versuche.

Noch einmal möchte ich anmerken, für den Fall dass das Passwort minimal ist, also 10 Zeichen. Es wird länger sein, darum gibt es nahezu unmöglich viele Möglichkeiten.

Gehen wir mal von einem Rechner aus, der knapp 4 mal so schnell wie der schnellste Rechner der Welt ist - also wir denken schon mal in die Zukunft vorraus. das wären 10^15 Befehle die er in einer Sekunde ausführen kann. Grob gerechnet, 1.000.000 mal so schnell wie nen durchschnitts PC.

Wenn der Algorithmus exakt 5 Sekunden benötigt, und irgend jemand das irgendwie auf 1 Sekunde reduzieren könnte, dann bräuchte man zum Knacken durchschnittlich 19167393131891000 Jahre auf einem Handelsüblichen PC.

Zweiter Fall: Der Super Rechner. Benötigt immer noch 19167393131 Jahre. :cheer:

Zitat:

Kannst Du mathematisch die Warscheinlichkeit des Auftretens von Mustern zur verkürzten Suche berechnen?
Ja. Dafür müsste ich dir aber das Verschlüsselungsverfahren erklären, das mache ich aber erst im November, da ich bei einem Wettbewerb teilnehmen möchte.

Zitat:

Schon oft haben sich scheinbar sichere Verfahren als einfach zu knacken herausgestellt, wenn erstmal
ein Angriffspunkt gefunden ist.
Ich werde den Algorithmus im November offen legen. Denn selbst wenn ich dies tue sind die Daten noch sicher. Die Verschlüsselung hängt 100% vom Passwort ab. Muster können nicht gefunden werden, das geht nicht, da jede Verschlüsselung einzigartig ist. Selbst wenn man eine Million mal die gleiche Datei auf diese Art mit dem gleichen Passwort verschlüsseln würde, hätte man anschließend eine Million verschiedene verschlüsselte Dateien. Auch wenn ihr es mir nicht glaubt, das funktioniert. Auch das Entschlüsseln.

Zitat:

Wenn Du hunderte von Misch- und Umstellverfahren in einer Geheimen Reihenfolge anwendest mußt Du
sicherstellen das keine Vereinfachung existiert:
Habe ich sicher gestellt, glaub mir einfach :roteyes:

So etwas wie Hash Funktion gibts bei mir gar nicht. Einfach aber Sicher - davon bin ich überzeugt.

Als ich mein Projekt im Infounterricht in 90 Minuten präsentiert habe, da hat mein Info Lehrer einfach nur "krass" gesagt, mehr nicht. Dort habe ich das Verfahren auf einfache Art und Weise erklärt.

Zitat:

Da Du uns aber nicht sagen möchtest wie Dein Verfahren funktioniert, folgere ich daraus, daß Niemand
den verschlüsselungsvorgang kennen darf, weil er sonst in der Lage wäre deinen Code zu knacken.
Das stimmt nicht, ich möchte nur nicht, dass andere meine Ideen verwenden, bevor ich es getan habe. Ich wäre dafür, dass wir dieses Thema hier schließen, diese Topic wenn das möglich ist. Die Eigentliche Frage wurde beantwortet, mit der Prozedur Move kann man das copy etwas beschleunigen, also nicht direkt das copy, aber das mit den strings zusammen setzen.

Zitat:

Daraus ergibt sich ein gewaltiges Sicherheitsloch: Du must dem Anwender ja eine Software geben, damit
er die Daten wieder entschlüsseln kann. Ein Hacker wird den Binärcode deiner Software reassemblieren
und sehen was dein Programm macht. Dagegen kann man nichts unternehmen. Ein Programm das ein Computer
abarbeiten kann, kann auch ein Programmierer interpretieren. Und schon ist das Geheimnis kein Geheimnis mehr.

Wie gesagt, da gebe ich dir Recht. Darum werde ich den Algorithmus offen legen, wenn das Programm öffentlich ist. Dies wird anfang November sein. Ich verspreche, dass dieses Forum das erste sein wird, welches den Code einsehen kann. Dann dürft ihrs auseinander schlachten und negative Kritik äußern.

Zitat:

Also wie willst Du mich von der Sicherheit deines Verfahren überzeugen damit ich es kaufe?
Zu kaufen gibts das nicht, das wird kostenlos sein.

Zitat:

Was wenn sich herausstellt, das eine Vereinfachung existiert oder dein Programm analysiert wurde?
Das kann nicht passieren. Es ist nicht so ertwas wie Zwei Zeichen austauschen, Substitution oder Transposition. Indirekt schon, aber das Ergebnis hat nichts mit dem Originaltext zu tun. Ich mache mir mehr Gedanken um die Rechtlichen Sachen.

Noch mal zu dem Post davor:

Zitat:

musst halt vertraglich ausschliessen, dass es in den ländern benutzt werden kann, wo du probleme bekommen würdest. z.b. beschränkung auf deutschland... wenn er akzeptiert und es doch in die USA oder z.b. nach lybien nimmt, ist er für die konsequenzen selber schuld ...
:wiejetzt:

Wie kann ich das machen? Das Programm ist eine normale Exe Datei. Da wird nichts installiert. Es wird zwar eine Readme.txt erzeugt und geöffnet, aber erst nach dem Programmstart. Wo kann ich eine solche Beschränkung also bekannt geben?

Könnte ich so etwas schreiben wie: Falls sie nicht aus Deutschland sind, dann informieren Sie sich bitte, ob das Programm in Ihrem Land zugelassen ist. Es handelt sich hierbei um ein Verschlüsselungsverfahren, welches wohl sehr schwer zu knacken sein wird.

Geht das?

grenzgaenger 7. Mai 2008 14:59

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von -Lucky-
Ja. Das Passwort muss mind. 10 Zeichen lang sein, und für jedes Zeichen gibt es 256 Möglichkeiten. Das Programm achtet auch darauf, dass nicht nur Buchstaben und Zahlen vorhanden sind und hilft bei der Eingabe von Steuerzeichen etc.

Macht mindestens!!! 256^10 Möglichkeiten = 1208925819614629174706176 Möglichkeiten.

Im Durchschnitt braucht man jedoch nur 604462909807314587353088 Versuche.

tja, hier ist schon der erste denkfehler. die passwörter sind nicht über den gesamten zeichensatz gleichverteilt. somit hast du hier schon eine viel geringere sequenz. selbst wenn du auf die gross- und kleinschreibung achtet, wirst du da wohl nur auf 70 verschiedene zeichen kommen. damit reduzierst du den verschlüsselungsraum schon gewaltig.

ausserdem weigerst dich auch behaarlich, den code offen zu legen. spätestens beim wettbewerb werden sie deinen code auseinandernehmen und dir die schwachstellen auflisten.

falls es das doch überleben sollte, solltest du vor einer veröffentlichung erst mal deinen quälcode hier prüfen lassen. ansonsten würd ich gleich auf eine veröffnetlichung verzichten. dann hast du das problem nicht, mit den unterschiedlichen rechtsvorschriften ... und schadensersatzforderungen ...

für die lizinzfrage, musst du dir vor dem herunterladen und vor dem programmstart bestätigen lassen (am besten mit rückmeldung), dass das programm vom kunden nur im definierten rahmen (z. b. land) eingesetzt werden darf. z.b. über freischaltcode und registrierung. den code könntest dann direkt an die ECHSE ran hängen... dann kann er das progry auch auf 'n USB stick verwenden...

Klaus01 7. Mai 2008 15:04

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von grenzgaenger
Zitat:

Zitat von -Lucky-
Ja. Das Passwort muss mind. 10 Zeichen lang sein, und für jedes Zeichen gibt es 256 Möglichkeiten. Das Programm achtet auch darauf, dass nicht nur Buchstaben und Zahlen vorhanden sind und hilft bei der Eingabe von Steuerzeichen etc.

Macht mindestens!!! 256^10 Möglichkeiten = 1208925819614629174706176 Möglichkeiten.

Im Durchschnitt braucht man jedoch nur 604462909807314587353088 Versuche.

tja, hier ist schon der erste denkfehler. die passwörter sind nicht über den gesamten zeichensatz gleichverteilt. somit hast du hier schon eine viel geringere sequenz. selbst wenn du auf die gross- und kleinschreibung achtet, wirst du da wohl nur auf 70 verschiedene zeichen kommen. damit reduzierst du den verschlüsselungsraum schon gewaltig.

.. nun, man könnte das Passwort ja als mindestens 20 stellige HexNotation eingeben.
Dann hätte man den Spielraum von 0 bis 255.

Grüße
Klaus

skyobserver 7. Mai 2008 15:22

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Ist es möglich, aus den 1en und 0en in irgendeiner Art und Weise einen Quellcode zu erzeugen?
Ja, man kann den Binärcode wenigstens wieder zurück in Assemblercode übersetzen. Der kann dann von einem
guten Programmierer halbwegs gelesen werden. Zurück in einen Hochsprachen-Quelltext (Basic/Delphi/C++) kommt
man nicht wirklich (Die meisten Strukturen und Variablennamen gehen beim Compilieren verloren).

Zitat:

Dann dürft ihrs auseinander schlachten und negative Kritik äußern
Die hier geäußerten Bedenken sollen deinen Code sicher nicht madig machen. Niemand
von uns weiß schließlich wieviel Du über die Mathematik weißt oder wie lange Du Dich
schon mit dem Thema beschäftigt hast. Wir wollen nur das Du deinen Code selber kritisch
betrachtest ob er unseren Bedenken standhält.

Man will hier nur sicherstellen, daß Du kein Träumer bist den man auf dem Boden der
Tatsachen zurückholen muß damit er sich nicht eventuell fürchterlich blamiert.

Wie oft liest man nicht im Forum: "Ich habe seit gestern Delphi! Wie schreibe ich
einen unknackbaren Code?" :stupid:


:thumb: Ich drücke Dir jedenfalls die Daumen für den Wettbewerb! :thumb:

-Lucky- 7. Mai 2008 15:37

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

.. nun, man könnte das Passwort ja als mindestens 20 stellige HexNotation eingeben.
Dann hätte man den Spielraum von 0 bis 255.
Genau das habe ich vor^^ Also kein Denkfehler meinerseits :mrgreen:

Was noch einmal die Sicherheit des Codes angeht, selbst an den Zufallsgenerator habe ich gedacht, dass diese ja berechnet werden. Also werden auch diese Werte vom Anwender beeinflusst.

Zitat:

Ich drücke Dir jedenfalls die Daumen für den Wettbewerb!
Thx.

grenzgaenger 7. Mai 2008 15:45

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von Klaus01
.. nun, man könnte das Passwort ja als mindestens 20 stellige HexNotation eingeben.
Dann hätte man den Spielraum von 0 bis 255.

tzzz, tzzz, das wär was ... :-) . nur, wer soll sich dann das passwort merken? das wird dann wohl wieder per postit an den bildschirm gepickt ... ;-)

skyobserver 7. Mai 2008 20:09

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Auch habe ich keine Hintertüren eingebaut. Alles bedacht.
Darauf kommt es nicht an. Wenn dein Code nicht Open Source
ist, kann das nicht verifiziert werden und ist somit nicht
vertrauenswürdig.


Zitat:

Muster können nicht gefunden werden, das geht nicht, da jede Verschlüsselung
einzigartig ist. Selbst wenn man eine Million mal die gleiche Datei auf diese Art
mit dem gleichen Passwort verschlüsseln würde, hätte man anschließend eine Million
verschiedene verschlüsselte Dateien
Die Sache hat einen Denkfehler. Wenn die gleiche Datei mit dem gleichen Passwort
zu unterschiedlichen Ergebnissen führt muß in der codierten Datei ein Hinweis
gespeichert sein welcher Aufschluss über die Art der Veränderung gibt.
Sonst könnte der Empfänger aus einer Millionen Möglichkeiten nicht die richtige
herausfinden. Da diese Information ganz zu Anfang beim entschlüsseln benötigt wird,
kann sie nicht zusammen mit den eigentlichen Daten verschlüsselt werden.
Sie wird in einem definierten Bereich (Header) der Datei stehen. Ich gehe mal stark
davon aus, daß Du das Datum+Uhrzeit (zum Zeitpunkt der Codierung) in Millisekunden
umrechnest und diesen Wert als Variablen Faktor verwendest. Datum und Uhrzeit müssen
aber dann irgendwo schwach oder ganz unverschlüsselt in der Datei stehen.
Vielleicht änderst Du auch künstlich die Länge der Datei in dem Du mehr oder Weniger
"Zufalls Datenschrott" anhängst. In diesem Fall muß auch irgendwo die Länge der
Originaldatei stehen um den Vorgang eindeutig rückgängig zu machen.


Zitat:

Macht mindestens!!! 256^10 Möglichkeiten = 1208925819614629174706176 Möglichkeiten.
Das wäre dann in diesem Fall "nur" eine 80 Bit Verschlüsselung. Heutige Standards haben minimal 128 Bit
oder mehr. Durch ein Verfahren namen "Geburtstagsangriff" (siehe Wikipedia) muß man nicht einmal alle Möglichkeiten
durchprobieren. Ich habe einen Artikel gelesen, das man kurz davor ist eine 1024(!!!) Bit Verschlüsselung zu knacken:PC-Welt News
Keine Ahnung wie die das anstellen - die Mathematik dahinter ist mir zu hoch :shock:

alzaimar 7. Mai 2008 20:41

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Bei dem Niveau fällt mir der Crypto Chef ein. :mrgreen:

mquadrat 8. Mai 2008 07:40

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Zitat:

Zitat von alzaimar
Bei dem Niveau fällt mir der Crypto Chef ein. :mrgreen:


*rofl* Das Ding is ja mal geil...

Besonders gut find ich

Zitat:

Handy SMS-Dienst mit KRYPTO !
Mit einen kleinen Trick können sie KRYPTO auch für Handy SMS-Verschlüsselung einsetzen. Nachdem Sie ihre SMS-Datei
verschlüsselt haben mit KRYPTO, können sie mit einen Hex-Editor die verschlüsselte Datei anschauen und die Hex-Werte
(nicht die Adressen) ins Handy übertragen und abschicken.
Sie können somit alle Arten von Daten auch über den Handy SMS-Dienst verschicken.

alzaimar 8. Mai 2008 07:56

Re: Schneller Code - Von Delete und Insert -> Copy ->
 
Neu! Endgenial! Sie können nun auch mit KRYPTOSCHEFF kommunisieren! Datsu müssen Sie einfag das was sie sagen wollen verschlüsselt haben mit KRYPTO, können sie mit einen Hex-Editor die verschlüsselte Datei anschauen und die Hex-Werte VORLESEN. Sie können somit alle Arten von GEHEIM-Informationen auch DIREKT ERZÄHLEN!!!!!1!!11!!!Eins!!!EINS!!ELF!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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