[ Nedeljko @ 22.03.2010. 10:46 ] @
Kako generisati dug kriptografski slucajan niz slučajnih brojeva na Linux i Windows sistemima?
[ Tyler Durden @ 22.03.2010. 10:52 ] @
Na Linuxu možeš da iskoristiš /dev/urandom i napraviš mini skript koji će ti vratiti random niz brojeva.
Npr.

cat /dev/urandom | tr -cd 0-9 | fold -w15 | head -n1
[ combuster @ 22.03.2010. 10:58 ] @
Samo pustis neki compile u pozadini da bi ti slucajnost generisanog koda bila veca pre izvrsenja ove komande... Ili opteretis procesor kako znas i umes :)
[ mmix @ 22.03.2010. 11:12 ] @
Pa ako je zaista pravi PRNG u pitanju to ne bi trebalo da ima veze, zar ne? ;)

btw, na windowsu nemas takvu opciju iz komandne linije, eventualno da napravis svoju varijantu koja poziva CSPRNG
[ combuster @ 22.03.2010. 11:32 ] @
http://linux.about.com/library/cmd/blcmdl4_urandom.htm

Citat:

When a Linux system starts up without much operator interaction, the entropy pool may be in a fairly predictable state.


Mada nailazim i na informacije da za urandom ne treba (za /dev/random je pozeljno). Ne skodi u svakom slucaju :D Da ne bude ko na debian-u, 99999 :)
[ mmix @ 22.03.2010. 11:37 ] @
Evo ti mala alatka za windows, koristi RNGCryptoServiceProvider koji jeste CSPRNG. Da, treba ti .NET

use:

random n , gde je n broj batova koji ti trebaju. Mozes da uradis redirekciju standardnog izlaza u fajl ako ti trebaju u fajlu.

Evo ti i sros ako ti zatreba, jednostavan je

Code:
using System;
using System.Security.Cryptography;

namespace random
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = 128;
            if (args.Length > 0) int.TryParse(args[0], out n);
            RNGCryptoServiceProvider r = new RNGCryptoServiceProvider();
            byte[] buffer = new Byte[n];
            r.GetBytes(buffer);
            Console.OpenStandardOutput().Write(buffer, 0, n);
        }
    }
}
[ Nedeljko @ 22.03.2010. 12:04 ] @
1. Može li bez .Net-a? Recimo da koristim MinGW C++ kompajler.

2. Da li je na Linux-u dovoljno koristiti /dev/urandom?
[ Ivan Dimkovic @ 22.03.2010. 12:05 ] @
@Nedeljko,

http://msdn.microsoft.com/en-us/library/aa379942%28VS.85%29.aspx

Evo ti C kod za Windows - on generise 8 bajtova kriptografski sigurnih pseudo-slucajnih brojeva, ali naravno mozes generisati i vise:

Code:

//--------------------------------------------------------------------
// Declare and initialize variables.

HCRYPTPROV   hCryptProv;
BYTE         pbData[16];

//--------------------------------------------------------------------
//  This code assumes that a cryptographic context has been acquired 
//  For code details, see "Example C Program: Duplicating a Session 
//  Key."

//--------------------------------------------------------------------
// Generate a random initialization vector.

if(CryptGenRandom(
   hCryptProv, 
   8, 
   pbData)) 
{
     printf("Random sequence generated. \n");
}
else
{
     printf("Error during CryptGenRandom.\n");
     exit(1);
}


[ mmix @ 22.03.2010. 12:40 ] @
Ako ces vec na C/C++ bolje koristi RtlGenRandom, kriju je kao zmija noge i prete sa tom funkcijom ali ona ne ide nigde (sta vise na XP (sa SP3) i jacim CryptGenRandom poziva bas RtlGenRandom). Bolje je iz razloga sto ne moras da dizes ceo crypto api da bi dobio secure random broj. Ako imas u C++ biblioteci rand_s() funkcija (mada sumnjam jer je to microsoftvoa fora) ona takodje koristi RtlGenRandom();

[ mmix @ 22.03.2010. 13:31 ] @
Evo ti primer sa RtlGenRandom, meni bar radi na MS C++, izbacio sam i deo sa bacanjem na cout, to mozes i sam. Ako bacas na cout, pazi da ga prvo prebacis u binray mode da ti ne bi pretvarao 0D u 0A0D

Code:
#include "windows.h"

typedef BOOLEAN (_stdcall* RtlGenRandomFunc)(
    __out PVOID RandomBuffer,
    __in ULONG RandomBufferLength
    );

int _tmain(int argc, char* argv[])
{
    HMODULE lib = LoadLibraryA("advapi32.dll");
    RtlGenRandomFunc RtlGenRandom = (RtlGenRandomFunc)GetProcAddress(lib, "SystemFunction036");
    BYTE* buffer = (BYTE*)malloc(128);
    RtlGenRandom(buffer, 128);
    // izbaci buffer negde, std:cout?

    delete buffer;
    return 0;
}
[ Nedeljko @ 22.03.2010. 15:09 ] @
Citat:
Ivan Dimkovic: @Nedeljko,

http://msdn.microsoft.com/en-us/library/aa379942(VS.85).aspx

Evo ti C kod za Windows - on generise 8 bajtova kriptografski sigurnih pseudo-slucajnih brojeva, ali naravno mozes generisati i vise:


Kod je odličan! Ima samo jednu manu - ne radi. Prilikom izvršavanja se ispisuje greška "Error during CryptGenRandom.". Ovako treba

Code:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <Wincrypt.h>

using namespace std;

BOOL acquire(HCRYPTPROV *hCryptProv, LPCSTR UserName) {
    if(CryptAcquireContext(hCryptProv, UserName, NULL, PROV_RSA_FULL, 0))
        return true;

    if (GetLastError() == (DWORD) NTE_BAD_KEYSET)
        return CryptAcquireContext(hCryptProv, UserName, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET);
    else
        return false;
}

BOOL release(HCRYPTPROV *hCryptProv) {
    return CryptReleaseContext(*hCryptProv, 0);
}

BOOL generate(HCRYPTPROV *hCryptProv, int bytes_num, BYTE buffer[]) {
    return CryptGenRandom(*hCryptProv, bytes_num, buffer);
}

int main() {
    const int bytes_num = 10;
    HCRYPTPROV   hCryptProv;
    BYTE         buffer[bytes_num];

    if (acquire(&hCryptProv, "MyKeyContainer")) {
        if (generate(&hCryptProv, bytes_num, buffer))
            printf("Success\n");
        else
            printf("The random bytes generating failed\n");

        if (release(&hCryptProv) == FALSE)
            printf("The key container can not be released\n");
    } else
        printf("The key container can not be acquired\n");

    return EXIT_SUCCESS;
}
[ mmix @ 22.03.2010. 16:06 ] @
Jesi probao uopste ovo sto sam ti dao za RtlGenRandom? Ne treba ti uopste crypto api
[ Nedeljko @ 22.03.2010. 16:22 ] @
Nisam, ali verujem tvom testu. Rekao si da kod tebe radi. Ne znam što onda ne bi i kod mene. Hvala.

Što se Linuksa tiče, igleda da je najbolje koristiti neki kriptografski siguran algoritam generisanja pseudoslučajnih brojeva, kao što je Yarrow osemenjen sa /dev/random (eventualno /dev/urandom).
[ black_dog @ 23.03.2010. 06:07 ] @
klap klap ...
volim ove randome :)
recimo al recimo da nemas nista od ovoga sto su clanovi naveli ...
recimo da imamo operativni sistem XY
ne znam nista ni kako , ni koji prog. jezik.
ja bih uradio sljedece:

izvor seed-a: (kao neka slucajno izabrana konstanta iz sistema)
-process ID
-unix time (ovo ima na svim sistemima) alternativno "daj_mi_vrijeme(sat,sekunda,minuta,dan,godina)"
-user (ovo ima jel tako?)
-verzija operativnog sistema
-cpu usage (ono koliko se vrti snage na cpu)
-ostalo

e sad a sta ce nam seed ?
jednostavno zbog toga da "nahranimo" nasu md5/sha1 funkciju :)

algo ide vak:

pocetak:
md5rand = md5(seed) (ovo gore navedeno ) // prvi put kad se inicijalizuje

func prng(md5rand)
md5rand = md5(md5rand)

sad svaki put kad koristis ovo samo ga nahranis sa md5rand-om, i tako on ide i ide do n-kruga
da, sha1 preporucujem, i bilo koju drugu hash funkciju.
ne i kripto algoritme (aes, blowfish ... kontate?)


poenta je napraviti PRNG koji ne ovisi o sistemu, mislim da sam jednom to uspio napraviti iz ciste zabave
i impresioniranja nekih tamo djevocica
(lie like a dog !)
[ EArthquake @ 23.03.2010. 06:58 ] @
kad vec pomenu,
zasto nebi koristio neki cipher ?
koju prednost hash funkcije imaju u odnosu na blok ili stream ciphere u ovoj situaciji?
uzmes bilo koji stream cipher, sa dobrim inicijalizacionim vektorima , on generise keystream koji bi
trebaod da zadovoljava osobinu kriptografske sigurnosti



u svakom slucaju, da bi ovo ilo iole korisno potreban ti je skroz random inicijalizaccioni vektor,
kod tebe su to vreme, cpu usage i sl sto se sve da vrlo lako pogoditi

[ mmix @ 23.03.2010. 08:48 ] @
Da, potreban ti je bas kvalitetan izvor entropije a sve to sto si naveo nije dovoljno dobar izvor jer je podlozno side-channel napadima, potrebno je pored toga jos nesto sto je tesko predvidivo (recimo timing interapta iz environemnta, neponovljivi dogadjaji, itd). Bilo bi dovoljno za neki PRNG, ali za CSPRNG potrebno je vise. Ako bas hoces da se iskusavas u izradi CSPRNG implementacija NIST ima neke testove koje mozes da pustis ali ni oni ne obezbedjuju sigurnost od side-channel napada. Bezvezno je pokusavati da napravis CSPRNG koji ne zavisi od platforme i OSa, nit za tim ima potrebe nit je dobro uopste jer svodjenjem na najmanji zajednicki sadrzalac ogranicavas izvore entropije.

A inace, mislim da je svejedno dal se koriste hashevi ili cipheri dok god se menja state. Npr, ona matora MS implementacija koja je ukinuta koristila je RC4 cipher, nova verzija koristi SHA-1 hash. Mnogo vaznije je da imas kvalitetan izvor entropije.

[ black_dog @ 23.03.2010. 16:20 ] @
kad vec pomenu,
zasto nebi koristio neki cipher ?
koju prednost hash funkcije imaju u odnosu na blok ili stream ciphere u ovoj situaciji?
uzmes bilo koji stream cipher, sa dobrim inicijalizacionim vektorima , on generise keystream koji bi
trebaod da zadovoljava osobinu kriptografske sigurnosti



u svakom slucaju, da bi ovo ilo iole korisno potreban ti je skroz random inicijalizaccioni vektor,
kod tebe su to vreme, cpu usage i sl sto se sve da vrlo lako pogoditi



ja sam naveo samo neke a ima jos:
mouse(x,y)
ostali PID
UID, free mem, size of ram , serial number (disk), voulme serial numb ....

zasto ne kriptoalgoritam ?
zato sto su neki algoritmi dizajnirani za jednu stvar:
sakrivanje podataka , dok su hash funkcije dizajnirane sa kompresionim algoritimima (unutar sebe)
i samim tim sakrivaju ulaz na kvalitetniji nacin
dok kriptoalgoritmi ovise o nekompresiji
i dizajnirani su da sakriju podatke sa kljucem

npr md5 ima unutar sebe kompresionu rutinu koja ulaz ...imas link
o kompresiji unutar hash funkcija


takodje navescu da je takodje extra stvar md5_hmac
zasto je to extra ?
zato evo posmatram , koji god hash da "pukne" obicno hmac prezivi taj pad.
gledao sam kada je implementacija rng na linuxu uspjesno analizirana i doslo se do zakljucka da input bas nije ni slucajan
zato sto su koristili konstantno neke ulaze koje sam ja naveo u onom mom primjeru za seed
tu lezi zec. sta ako server samo tamo lezi i npr nema mouse inputa, nekog veceg cpu loadinga , i slicno ?
sta ako se to koristi svaki put (sve ovo navedeno za seed) ?
onda ne dobijamo slucajnost.
e onda su cike rekle
sha1_hmac, md5_hmac , i tako. ja sam rekao samo 1 koristis seed, svaki naredni se generise is md5_rand tj iz prethodnog
sa sha1_hmac to bi bilo predivno
i da , onda mozes zadnji npr sha1_rand koji bi koristio za sha1_hmac(sha1_rand) da sacuvas u neki fajl i da ponovo ga koristis

meni se najvise dopala situacija kad su ljudi davno nekad radili otp ovako:
(ovo je 199x i neka m4jk u mu)

seed(time())
x = rand()
y = text xor x
sacuvaj kljuc x

:) e onda uzmes time sa fajla i malo se igras , pomjeras unix time , i dodjes do pocetnog seed-a
znas koliko je ljudi znalo za ovo ?
0

e da mala napomena: dobra entropija, ne IV, po pravilu IV je statitcan
jedna od caka je sto se cesto traze ti IV u .exe i tako se i moze utvrditi
da se koristi neki sistem za sifrovanje

navodim:
"In cryptography, an initialization vector (IV) is a block of bits that is required to allow a stream cipher or a block cipher to be executed in any of several modes of operation to produce a unique stream independent from other streams produced by the same encryption key, without having to go through a (usually lengthy) re-keying process."

means mmix +1
eartquick -1
bambija X)

[Ovu poruku je menjao black_dog dana 23.03.2010. u 18:04 GMT+1]
[ black_dog @ 23.03.2010. 16:25 ] @
Da, potreban ti je bas kvalitetan izvor entropije a sve to sto si naveo nije dovoljno dobar izvor jer je podlozno side-channel napadima, potrebno je pored toga jos nesto sto je tesko predvidivo (recimo timing interapta iz environemnta, neponovljivi dogadjaji, itd). Bilo bi dovoljno za neki PRNG, ali za CSPRNG potrebno je vise. Ako bas hoces da se iskusavas u izradi CSPRNG implementacija NIST ima neke testove koje mozes da pustis ali ni oni ne obezbedjuju sigurnost od side-channel napada. Bezvezno je pokusavati da napravis CSPRNG koji ne zavisi od platforme i OSa, nit za tim ima potrebe nit je dobro uopste jer svodjenjem na najmanji zajednicki sadrzalac ogranicavas izvore entropije.

A inace, mislim da je svejedno dal se koriste hashevi ili cipheri dok god se menja state. Npr, ona matora MS implementacija koja je ukinuta koristila je RC4 cipher, nova verzija koristi SHA-1 hash. Mnogo vaznije je da imas kvalitetan izvor entropije.


zar mislis da je slucajno se preslo sa RC4 na SHA-1?
ja ne mislim tako :)
a zasto je to tako ?
hash ima kompresionu rutinu koja mu omogucuje da se ne moze reverse nazad do ulaza
m$ jos jednom dosao pameti i molim te guglaj XTEA xbox microsoft 17 security mistakes
ako lazem ja, ne laze NSA X)


ja bih:
nasao implementaciju npr u c md5 ili sha-1
onda bih pogledao kako ide md5_hmac ()
PHP implementacija iz SMF cini mi se:

function md5_hmac($data, $key)
{
if (strlen($key) > 64)
$key = pack('H*', md5($key));
$key = str_pad($key, 64, chr(0x00));

$k_ipad = $key ^ str_repeat(chr(0x36), 64);
$k_opad = $key ^ str_repeat(chr(0x5c), 64);

return md5($k_opad . pack('H*', md5($k_ipad . $data)));
}

npr kljuc je prethodni md5_rand u nasem slucaju
mislim da je ovo dovoljno da napravis taj projekat za skolu.
takodje preoprucujem ako radis za neke vladine agencije
(BIA , JSO, FER, DRE...)
da pokrenes sljedece:
test randomnesa 1
rng tools

ovde se nalaze svi testovi koji su potrebni da bi dokazao da imas pravi RAND nesto ...
X)
ja sam sam ja sam ja sam super kul. odo na livadu utekose mi ovce :)
[ EArthquake @ 23.03.2010. 19:23 ] @
nisam kritikovao ideju o koriscenju hash funkcija
vec sam hteo da cujem prednosti u odnosu na koriscenje blok ili stream ciphera

nisam siguran da sam razumeo zasto postojanje kompresione funkcije
poboljsava sigurnost ali moram priznati da nisam citao radove na ovu temu

mozes li mi dati neku referencu za dizajn SCPRNGa koriscenjem hash funkcija ?
[ Nedeljko @ 23.03.2010. 20:27 ] @
Pa, akko je seme široko najmanje koliko i zbir širina svih izvora entropije, heširanje nema nikakvog smisla, jer primena nikakve funkcije ne može da proizvede veću entropiju od argumenta, već samo manju ili un najboljem slučaju istu.

E, sad, ako je seme širine npr 128 bita, heš može imati smisla da sabije izvore entropije na širinu semena sa što manjim gubitkom entropije.
[ black_dog @ 23.03.2010. 22:05 ] @
hmh ma nije to kritika ... to je nidje veze.
pazi ovako:
Randome number generation and monte carlo methods , second edition - james e. gentle
Cryptography for Developers , Tom ...
Takodje bih uzeo prezentacije linux/windows PRNG i analiza istih (ima na netu , davno sam to gledao)


zasto bih uzeo hash funkcije md5/sha-1 za rand funkcije ?
zamisli da imate prijatelja koji hoce da napravi prng.
medjutim svi znamo da ma kako da krene negdje ce napraviti gresku.
ali izlaz ovih funkcija jeste slucajan broj koji nema veze sa ulazom.
onda ne mora biti 128, moze biti 512, ili po sha-3 veci
znaci ako bi neko mora da napravi PRNG a nismo sigurni kakav ulaz ima , sigurni smo da ce ako za PRNG uzme hash funkciju dobiti kvalitetan PRNG
medjutim , sa hmac dobijate ojacan PRNG poprilicno , bez mogucnosti ponavljanja
takodje predlazem da u prvoj knjizi pogledate developing RNG , on je ljudi tu stavio samo dio mogucnosti
vi mozete , sve sto vam masta dozvoljava + koristi te programe da vidite da li je ulaz stv stv RNG, nema veze
i ako nije samo ne smije da se ponavlja , a izlaz je svi znamo po NIST kako treba.
naravno , poker grupe , vezivanja , trigrami , periodicnost i tako dalje

za pocetnike preporucujem Kriptografija , aleksandar trivun , 1971 , Vojna Knjiga , Slucajni Brojevi
(ma preporuka , za ljude koji krecu sa tim)
onda preporucujem bilo koju knjigu statistike , vjerovatnoce koja ima CHI Square , kineska kutija ??
monte karlo test , i jos par testova koje niko ne spominje a koriste se od SETI pa do utvrdjivanja slucajnosti u saobracaju

[ Nedeljko @ 23.03.2010. 23:19 ] @
Citat:
black_dog: zasto bih uzeo hash funkcije md5/sha-1 za rand funkcije ?
zamisli da imate prijatelja koji hoce da napravi prng.
medjutim svi znamo da ma kako da krene negdje ce napraviti gresku.
ali izlaz ovih funkcija jeste slucajan broj koji nema veze sa ulazom.


Kako to misliš da izlaz nema veze sa ulazom? Izlaz je jednoznačno određen ulazom. Za isti ulaz ćeš uvek dobiti isti izlaz.

Citat:
black_dog: znaci ako bi neko mora da napravi PRNG a nismo sigurni kakav ulaz ima , sigurni smo da ce ako za PRNG uzme hash funkciju dobiti kvalitetan PRNG


Heš može imati samo manju ili jednaku entropiju od ulaza, pa ne može biti bolji od njega. Druga je stvar ako generator zahteva seme neke širine, a mi sa ulaza imamo više bitova, pa da ih "skrešemo" sa što manjim gubicima u entropiji. Džaba heš bez dobrog ulaza.
[ black_dog @ 23.03.2010. 23:40 ] @
Heš može imati samo manju ili jednaku entropiju od ulaza, pa ne može biti bolji od njega. Druga je stvar ako generator zahteva seme neke širine, a mi sa ulaza imamo više bitova, pa da ih "skrešemo" sa što manjim gubicima u entropiji. Džaba heš bez dobrog ulaza.


ja pricam o izlazu , ulaz je vrlo bitan naravno. zasto pricam o izlazu ?
zato sto koristimo taj izlaz za slucajne brojeve.
entropija je kod hash je prilicno dobra
znas i sam ako promjenis jedan bit da ce hash svaki put biti drugaciji , po pravilu
ulaz != izlaz ako je samo 1 bit drugaciji ... o tome govorimo
sad , entropija je dobra jer hash funkcije imaju difuziju (to je proces u kojem izlaz ulaz nemaju nista zajednicko)

linka ka randomness

dio:

Reduce to independent bits
As a third step, one can compute a hash of the harvested bits to reduce them to independent, random bits. The hash function for this stage of operation needs to have each output bit functionally dependent on all input bits and functionally independent of all other output bits. Barring formal analysis, we assume that the hash functions which are claimed to be cryptographically strong (MD5 and SHA) have this characteristic.

The output of this third step is a set of independent, unguessable bits. These can be used with confidence wherever random bits are called for, subject of course to the assumptions involved in the three steps above.


imas programe , koje sam ranije naveo , testiraj moje predpodstavke :
md5
sha1
md5_hmac
sha1_hmac

mislim da mozemo doci do istog rezultata. (e da mislim da su autori AES ostavili mogucnost za koriscenje kao hash funkcije , al toplo preporucujem sa aspketima koje sam ranije naveo XBox, rc4 => sha1 , da ne koristite na taj nacin.)
i naveo sam da hmac funkcije md5 i sha1 nikada nisu dovedene u pitanje.
ma nije to bitno , evo krenite od cinjenice kako napraviti , brzo , lako jednostavno i sigurno ?
tu lezi moj odgovor.
a sa druge strane , ispitajte ostale algoritme za PRNG, pa uporedite sa mojim odg, md5_hmac vs ti algoritmi
mislim da ce se nakon odredjenog perioda poceti ponavljati odredjeni algoritmi (da , ima dokumentovano za mnoge algoritme da nakon 1 milion, milijardu se ponavljaju)
sa druge strane , jos nisam vidio neki papir na kojem pise da hmac-md5 i sha1 su pod "napustiti taj model"
mada opet mozda niko nije gledao :)


ulaz ostavljam da nadjes sam , naveo sam sve moguice opcije , mozda i nisam al ima ih dosta dosta
mreza, memorija , cpu, pid, tastatura , baterija , vrijeme, fajlovi - hdd
meni se dopada jedan hardwerski generator rn. ide preko USB i ono dopada mi se 1/1
usb rand generator
[ Nedeljko @ 24.03.2010. 00:07 ] @
Citat:
black_dog: ja pricam o izlazu , ulaz je vrlo bitan naravno.


Sa ovim se slažem, ali time pobijaš ono što si malopre rekao.

Citat:
black_dog: znaci ako bi neko mora da napravi PRNG a nismo sigurni kakav ulaz ima , sigurni smo da ce ako za PRNG uzme hash funkciju dobiti kvalitetan PRNG


Ovo nije u skladu sa bitnošću ulaza, ali dobro, složili smo se da je ulaz jaaako bitan.

Citat:
black_dog: zasto pricam o izlazu ?
zato sto koristimo taj izlaz za slucajne brojeve.
entropija je kod hash je prilicno dobra
znas i sam ako promjenis jedan bit da ce hash svaki put biti drugaciji , po pravilu
ulaz != izlaz ako je samo 1 bit drugaciji ... o tome govorimo
sad , entropija je dobra jer hash funkcije imaju difuziju (to je proces u kojem izlaz ulaz nemaju nista zajednicko)


Ovo je OK. Difuzija kod heša ti obezbeđuje da ako ulaz entropije 200 "krešeš" na 128 bita, da će entropija izlaza biti samo malo manja od 128. Izlaz je seme generatora pseudoslučajnih brojeva i naravno da mu je entropija esencijalna.
[ black_dog @ 24.03.2010. 00:25 ] @
ma meni je bilo bitnije izlaz , naravno pod uslovom da se ulaz ne ponavlja.
zasto ?
pa bas zato sto ulaz moze biti bilo sta , al je najbitnije da izlaz nema veze sa ulazom
da je zamaskirao sve zivo
resistance to polard paradox (auuu ovo je meni prejako , vecina ljudi to i ne prati) tzv rodjendanski paradox
medjutim evo primjera jel md5 "prso" ?
jeste
al sta kazu za md5_hmac ?
it safe for use.
jel XTEA prso ? jeste
al kazu do not use
prva knjiga , cryptography for developer , jako jako ... mene nervira CAPI pod m$, zasto ne znam.
guglaj NSA key windows 2000
mislim da ima logike ako imas kljuc pod OS... mozes da citas sta oces a da te drugi ne prate .. heh
ugasiti racunar i ne prilaziti mu :)
[ Nedeljko @ 24.03.2010. 01:57 ] @
Pa, da bi imao dobar izlaz, moraš imati još bolji ulaz.

Debian je imao bezbednosnu rupu da mu je ulaz bio samo pid (16 bita), što se vrlo se lako razbijalo. Ponovi sa svakim od 65534 mogućih ulaza ceo postupak od heširanja, pa nadalje, dok ne dobiješ šta treba i razbio si ga.

Te heš funkcije (md5 i sl.) su dobre ako je ulaz dobar. Bez dobrog ulaza nijedna heš funkcija ne vredi ni po lule duvana.
[ black_dog @ 24.03.2010. 03:17 ] @
kerberos , 1995 ,
x = rand() % 256
:P
[ EArthquake @ 24.03.2010. 06:42 ] @
procitao sam par radova na temu dizajna CSPRNGa (fortuna i yarrow recimo)
i koliko vidim, hash funkcije se koriste iz dva razloga,
prvo , da "kompresuju" ulaz na zeljenu duzinu a da pritom ocuvaju entropiju sto omogucava kompresiona funckija svakog hasha
a drugo, i bitnije, da omoguce sigurnost PRNGa i u slucaju da je vecina izvora, ali ne svi, originalnog semena kompromitovana sto omogucava izrazen efekat lavine

[ Nedeljko @ 24.03.2010. 10:08 ] @
Citat:
EArthquake: da "kompresuju" ulaz na zeljenu duzinu a da pritom ocuvaju entropiju sto omogucava kompresiona funckija svakog hasha


O tome pričam. Dobro, ne može baš da očuva, ali da se izgubi što manje, tj. da entropija izlaza bude bliska širini izlaza.

Citat:
EArthquake: da omoguce sigurnost PRNGa i u slucaju da je vecina izvora, ali ne svi, originalnog semena kompromitovana sto omogucava izrazen efekat lavine


Ovo već ima smisla. Ako je većina izvora kompromitovana, bez heša bi se znao oblik semena, pa bi na osnovu poznatih informacija (recimo javnog ključa) rekonstruisali više informacija o semenu it. Kad se hešira, opet se mogu koristiti poznate informacije o ulazu, ali se ostatak "rešava" grubom silom.
[ antraks @ 25.09.2016. 09:53 ] @
Da li je moguce na osnovu neke sekvence brojeva dobiti pseudo generator? npr. ako imam 5-10 tih sekvenci da se moze dobiti formula za generator, tako da kasnije mogu sam da generisem nove sekvence.