AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu DEC wie Random?

Ein Thema von Alexander Roth · begonnen am 21. Feb 2006 · letzter Beitrag vom 24. Feb 2006
Antwort Antwort
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#1

Frage zu DEC wie Random?

  Alt 21. Feb 2006, 12:14
Hallo,

ich habe eine Frage zu DEC.
Ich würde gerne einer IInteger Zahl einen Random Werte zuweisen.
So der Befehl nrnd funktioniert auch, jedoch generiert er bei jedem Programmstart die gleiche Zufallszahlen.

Muss man den Zufallsgenerator auch irgenwie initialisieren. (So wie randomize bei delphi?)
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Frage zu DEC wie Random?

  Alt 22. Feb 2006, 16:06
Ja must du. Alles andere wäre auch falsch vom Konzept der Library her.

Neueste Version von Luckie's Server:
Delphi-Quellcode:
uses NInts, DECRandom, DECUtils;

procedure Test;
var
  A: IInteger;
begin
  NRnd(A, 512); // 512 Bit Zufall erzeugen, 2^512 <= A < 2^513
end;

initialization
// a.)
  RandomSeed; // randomisiert den installierten RNG mit Systemtimer !

// b.)
  randomSeed(Daten, SizeOf(Datan)); // mit eigenen Daten
finalization
end.
Wichtig ist das Unit DECRandom eingebunden wurde um einen sicheren YARROW Zufallsgenerator zu initialisieren. Falls dies nicht erfolgte so benutzen die Funktionen in DECUtls.pas eine Abart des LCGs von Borland (unsicher).

Bei Programstart sollte nun dieser RNG randomisiert werden. Man kann den einfachen aber unsicheren Weg gehen indem man RandomSeed() ohne Paramater aufruft. Dann wird intern der RNG per Systemzeit initialisiert, also so wie es Randomize() im Borland RNG macht.

Oder man geht den sicheren Weg und erzeugt seine eigenen Seed Daten die dann sicher sein können. Diese sollten mehr als 128 Bit haben und eben sicher sein. Das bedeutet nicht reproduzierbar aber auch nicht echt zufällig sondern beweisbar sicher zufällig für den Angreifer.

Es hängt also davon ab WAS du mit den Zufallsdaten später machen möchtest. Einfache Statistiken brauchen keinen sicheren Zufall, probalistische Verfahren benötigen keinen sicheren Zufall. Aber kryptographische Systeme wie die Schlüsselerzeugungen beim RSA benötigen unbedingt einen sicheren Zufall. Die Systemzeit als Seed wäre damit absolut unsicher. Ein Angreifer könnte Pi*Daumen abschätzen wann ein Schlüssel erzeugt wurde und dann mit dem gleichen und bekannten Verfahren wie im DEC diesen Zufall reproduzieren.

Als sehr einfach und denoch sicher hat sich die Methode herausgestellt das man den Anwender einfach wahllos par Tasten drücken läst, oder die Maus parmal hin&her bewegen lässt. Diese Daten werden gesammelt und RandomSeed() als Daten übergeben.

Verwendet man heutzutage solche mathematisch sicheren Algorithmen, mit einer Library die technisch einwandfrei ist, so bleiben dem Angreifer nur 2 Angriffspunkte real übrig. Erstens die Brute Force Attacke deren Schranken aber so hoch gewählt wurden das sie absolut unpraktikabel ist. Und zweitens der Zufallsgenerator, denn zu jeder Zeit wird in der Kryptographie immer wieder Zufall benötigt. Ist also der RNG schlecht so stellt das eine theoretische Möglichkeit eines Angriffes dar.

Der in DECRandom enthalten RNG ist ein YARROW typischer Vertreter (YARROW = Bruce Schneier). Er arbeitet auf Basis der SHA1 secure Hash Funktion auf einem interen Register mit 1024 Bits Größe und einem 32 Bit Counter. Dh. bei jedem Aufruf zur Erzeugung 1 Bytes wird dieser Counter + 128 Bytes Register gehasht und der Hash Digest[1] als Resultat zurückgegeben. Vorher wird aber das 128 Bytes register aktualisiert=modifiziert mit FRegister[Counter mod 128] := FRegister[Counter mod 128] xor Hash.Digest[0];
Das bedeutet:
- es können 2^32 Bytes ohne Wiederholungen erzeugt werden bei gleichen Seedwerten. Dies Periode ist garantiert aber nicht die unterste Grenze für eine Wiederholung.
- die maximale Periode beträgt 2^1024 Bits auf Grund des Registers und der Hashfunktion.
- die Sichheitsrelevante Periode beträgt 2^(160+32) Bits auf Grund der Sichheirheit der hashfunktion (SHA1 = 160 Bits) und dem 32 Bit Counter.
- das Interne Register wird demzufolge alle 128 Aufrufe komplett modizifiert worden sein.
- um diesen RNG zu benutzen muß nur DECRandom in die Uses Klausel geschrieben werden.
- die Aktualisierung des Register ist algorithmisch getrennt vom erzeugten Zufall. Weil zur Modifikation des FRegister der Hash.Digest[0] benutzt wird und für das Zufallsresultat Hash.Digest[1]. Die SHA1 Funktion stellt algorithmisch sicher das diese beiden Bytes zueinander nur indirekt aber zwangsläufig direkt abhängig von dem 1024 Bit Register ist. Das ist quasi die Wirkungsweise jeder sicheren Hashfunktion.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Frage zu DEC wie Random?

  Alt 23. Feb 2006, 13:11
Riesen Dank.

Deine Library ist einfach klasse!!!
Alle Achtung.


PS: Ich brauche nur einen ganz einfachen Zufall.
PPS: Danke für die Erklärung. Wenn ich mit Verschlüsselung beschäftige wird sie sicher sehr hilfreich sein.
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Frage zu DEC wie Random?

  Alt 23. Feb 2006, 17:43
Hi ich war wohl ein bisschen zu voreilig mit der Annahme, das alles klappt.
Ich finde die Unit DECRandom garnicht; DECUtil hab ich.
Aber auch mit der DECUtil findet er RandomSeed nicht.
Welche Funktion in DECUtil entspricht denn RandomSeed?


PS: Wenn das nicht klappt könntest du mir die DECRandom.dcu schicken?
E-Mail: roth-a@gmx.de
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Frage zu DEC wie Random?

  Alt 24. Feb 2006, 06:37
Schau mal hier http://www.michael-puff.de/dirindex....agen_Reddmann/

Datei: DEC_5_1.zip.

Michael war so freundlich die neueste Version vom DEC inklusive DECmath auf seinem Server bereitzustellen. Diese Version enthält auch denn DEC Part I neueste Version in Sourcen. Zusätzlich eben das neuste DECMath in binärer Form für Delphi 5,6,7 und 2006. Das ist natürlich dann keine Freeware sondern nur für akademische und private Zwecke angedacht.

Entscheidend für die neu Version war ein Gedanke: einfacher, besser, schneller nicht so komplex und denoch universeller Soll heisen: diese Version ist weitestgehend kompatibel zum alten DEC, aber eben nicht 100% kompatibel. Ein solcher Punkt sind die Zufallsgeneratoren und deren Benutzung wie in der alten Version gewohnt. Kurz gesagt: es gibt sie in der neuen Version nicht mehr. Sie wurden ersetzt zu gunsten eines "dynamsich installierbaren" YARROW RNGs. Dabei befindet sich das API für alle solche RNGs immer in der Unit DECUtils.pas. Einfach downloaden, unzippen und im Ordner \DEC\PART_I\ findest du die Sourcen.

Gruß Hagen

[edit]
Übrigens, findest du unit DECRandom.pas ebenfalls als vollständigen Source im diesem ZIP.
Da hätte ich mir ja die Beschreibungen oben sparen können.
[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Frage zu DEC wie Random?

  Alt 24. Feb 2006, 13:45
Zitat:
Diese Version enthält auch denn DEC Part I neueste Version in Sourcen. Zusätzlich eben das neuste DECMath in binärer Form für Delphi 5,6,7 und 2006.
Ahh OK ich hatte mir letztens nur DECMathD7.zip runtergeladen, weil ich gedacht hatte DEC_5_1.zip ist wohl nur für Delphi 5.
Ich lade mir die Datei gerade runter (modem: dauert seine 10 bis 20 min).
Zitat:
Ein solcher Punkt sind die Zufallsgeneratoren und deren Benutzung wie in der alten Version gewohnt. Kurz gesagt: es gibt sie in der neuen Version nicht mehr.
Dann war die Beschreibung im letzten Beitrag auf die alte Version von DEC bezogen?
Ich probiere es (sobald es runtergeladen hat) aus.

Danke für alles.


Zitat:
Das ist natürlich dann keine Freeware sondern nur für akademische und private Zwecke angedacht.
Keine Sorge ich geb das nicht weiter und so.

Aber nur so: Bedeutet Freeware nicht genau für "private Zwecke"? Also keine gewerblichen.

Zur Sicherheit: Darf ich in Freeware-Programmen dein DEC benutzen? //Kommt natürlich in das Info-Fenster rein.
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#7

Re: Frage zu DEC wie Random?

  Alt 24. Feb 2006, 16:03
Zitat:
Aber nur so: Bedeutet Freeware nicht genau für "private Zwecke"? Also keine gewerblichen.

Zur Sicherheit: Darf ich in Freeware-Programmen dein DEC benutzen? //Kommt natürlich in das Info-Fenster rein.
Freeware bedeutet Frei, man kann sie also immer benutzen egal wie, solange man nicht das Copyright fälscht. Das Problem ist einfach folgendes: während DEC Part I vollkommen Freeware ist, so ist es der Part II & III eben nicht. Wobei es den Part III noch garnicht gibt. In DEC_5_1.zip sind aber nun beide Teile vom DEC in einer gemeinsammen Distributation enthalten, und das könnte Probleme schaffen.

DEC darf immer in Freewareprogrammen benutzt werden, selbstverständlich. Und in echten Freewareprogrammen ist es auch üblich auf die Verwendung fremder Libraries hinzuweisen. Erst wenn Profit ins Spiel kommt fangen die Späße&Tricksereien an.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Frage zu DEC wie Random?

  Alt 24. Feb 2006, 17:10
RandomSeed; // randomisiert den installierten RNG mit Systemtimer ! Klappt prima.

Danke.

Tschüss
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:29 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