Hallo zusammen Ich habe mich so ein wenig mit openssl versucht und habe es (glaube ich) ziemlich gut verstanden. Ist ja auch gut dokumentiert. Nur eine Sache will mir nicht in den Kopf gehen. Das ist die Sache mit der Optien -rand von openssl. Sie wird verwendet um irgendwelche Zufallszahlen aus eine Container zu bilden (?????!!!!!?????). Ich habe echt überhaubt keine Ahnung was da zu tun ist. Kann mir jemand helfen? Cheers, Raffaele --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hallo, Raffaele Sandrini wrote:
Ich habe mich so ein wenig mit openssl versucht und habe es (glaube ich) ziemlich gut verstanden. Ist ja auch gut dokumentiert. Nur eine Sache will mir nicht in den Kopf gehen. Das ist die Sache mit der Optien -rand von openssl. Sie wird verwendet um irgendwelche Zufallszahlen aus eine Container zu bilden (?????!!!!!?????). Ich habe echt überhaubt keine Ahnung was da zu tun ist. Kann mir jemand helfen?
Ich nehme an du beziehst dich auf /usr/ssl/man1/rand.1.gz: ==== NAME rand - generate pseudo-random bytes SYNOPSIS openssl rand [-out file] [-rand file(s)] [-base64] num [..] OPTIONS [..] -rand file(s) Use specified file or files or EGD socket (see RAND_egd(3)) for seeding the random number generator. ==== Nun. Ein "Seed" ("Samen") ist die Initialisierung eines Pseudo-Zufalls- generators (hier mal PZG genannt ;). Dieser seed ist deshalb nuetzlich, weil sich gute PZGs nicht nur auf irgendwelche (guten) Algorithmen stuetzen, sondern die teils wirklich zufaelligen Werte von z.B.: - Mauspostition und bewegung und zeitlicher Abstand dazwischen - Tastendruck mit Taste, zeitlicher Abstand - Festplatten/Dateizugriffe und deren zeitl. Abstaende mit einbeziehen. Ein PZG speichert nun i.A. einen 'Zustand von Zufaelligkeit' (Entropy-/Randomness-Pool) der z.B. bei /dev/random 128 Bytes gross ist. Dieser wird mit einem guten Algorithmus aus z.B. o.g. Quellen mit einem moeglichst guten 'zufaelligen' Wert gefuellt. Da diese 'fuellen' einige Zeit braucht[1], ist es sinnvoll, den "Pool" beim Herunterfahren des Rechners zu speichern und beim Hochfahren wieder einzulesen: "Saving random seed.... done" Aus diesem "Pool" (der mit dem "seed" initialisiert wird) kann man dann mit einem guten Algorithmus gute Zufallswerte erzeugen. Und diese verwendet z.B. OpenSSL um den Session-Key zu erzeugen. Es folgt: Je "zufaelliger" der "seed" ist, umso bessere Session-Keys koennen mit einem Algorithmus erzeugt werden. Bei OpenSSL (und anderen) basiert die Sicherheit auf der Zufaellig- keit des Session-Keys -- und diese wiederum auf der Zufaelligkeit des "seeds", der als Ausgangswert fuer den Schluesselerzeugungs- algorithmus verwendet wird. Ach so, bevor ich's vergesse: Mit dem -rand soll man wohl eine Datei mit eben einem solchen "seed" angeben, also z.B. '-rand "/var/run/random_seed"' [1] Gut zu beobachten bei: dd if=/dev/random of=/dev/stdout bs=1 count=1024 | hexdump Gibt man keinerlei Input (per Maus/Tastatur), so "troepfeln" die Bytes aus /dev/random, das eben nur "gute"[2] Werte hergibt und nicht wie /dev/urandom einfach nur "so gut wie grad verfuegbar"... Tippert man nun wild auf der Tastatur herum, dann "sprudeln" die Bytes regelrecht :) [2] Siehe 'man 4 random' (das 4 ist wichtig) und (bes.) den langen und guten Kommentar am Anfang von /usr/src/linux/drivers/char/random.c (den _nach_ den Copyright Hinweisen, der (zu Recht) mit /* * (now, with legal B.S. out of the way.....) beginnt :) Bei Verstaendnisfragen dazu helfe ich nach Moeglichkeit ebenfalls weiter... Und vor allem den 2. Absatz sollte man sich zu Herzen nehmen: * Theory of operation * =================== * * Computers are very predictable devices. Wenn man diesen Kommentar _gut_ durchliest, merkt man, dass die Autoren des Kommentar und von random.c die Probleme verstanden haben. Ein schlechter PZG ist z.B. $RANDOM sowie random() aus der libc... Also wenn es um Sicherheit und nicht nur um ein Spiel o.ae. geht, dann sollte man gefaelligst /dev/random verwenden[3]. [3] Fuer /dev/random habe ich auch einen kleinen C-Wrapper geschreibselt, der Zahlen zwischen 0 und 255 (und nicht Zeichen bzw. char's) zurueckgibt und so innerhalb von shell-scripts als Integer zu verwenden ist (mit Skalierung kann $RANDOM ersetzt werden: 'RANDNUM=$(getrandom)')... Nuja, die Mail ist so lang geworden und der Wrapper so kurz[4], da kann ich den Wrapper gleich mit einbauen ;) (mit 'gcc -Wall -o getrandom getrandom.c' zu kompilieren): ==== begin getrandom.c ==== #include <stdio.h> int main(int argc, char **argv) { char *fname = "/dev/random"; FILE* randdev; if(( randdev = fopen(fname, "r") ) == NULL) { fprintf(stderr,"Can't open random-device %s\n",fname); exit(1); } fprintf(stdout,"%i",fgetc(randdev)); if (fclose(randdev)) { fprintf(stderr,"Error closing %s\n",fname); exit(1); } exit(0); } ==== end getrandom.c ==== [4] Und das trotz einer so "aufwendigen" Fehlerbehandlung ;)) Um das Thema zu vertiefen ist 'Applied Cryptography' von 'Bruce Schneier' -- moeglichst im Original -- sehr zu empfehlen. Zur Not sollte es auch die Uebersetzung 'Angewandte Kryptographie' tun. Ersteres ist definitiv bei Amazon zu bekommen (und vermutlich auch anderswo ;), letzters wohl ebenfalls. Noch Fragen, Sandrini? (*SCNR*) CU David -- On two occasions I have been asked [by members of Parliament!], `Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question.--Charles Babbage --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (2)
-
David@dhaller.de
-
rasa@gmx.ch