Vinnaren i pepparkakshustävlingen!
  • 5
  • 6
2016-12-30, 23:27
  #61
Medlem
Bleppe_Bfs avatar
Citat:
Ursprungligen postat av WbZV
Vilken krypterad text som helst kommer att se ut som F222222222222222 med samma sannolikhet som ett slumptal gör det. Rent matematiskt är det ingen skillnad.

Sorry. Läs min edit ovan.
Citera
2016-12-30, 23:41
  #62
Medlem
Citat:
Ursprungligen postat av Bleppe_Bf
Sorry. Läs min edit ovan.
Du missförstår vad födelsedagsattacken används till. Den testar collision resistance, dvs hur svårt det är att hitta två olika lösenord som har samma hashvärde. Bra hash-funktioner skall vara randomiserande, så att hash-värdena för olika indata har precis samma egenskaper som äkta slumptal. Därför är samma test applicerbart på utdatan från /dev/urandom, den skall också ha samma egenskaper som äkta slumptal.
Citera
2017-01-02, 22:29
  #63
Medlem
Mysquos avatar
Om man verkligen är ute efter lite kvalificerad slump, så kan man ju alltid göra det hela lite mer komplicerat. Typ, läsa av brus från line-in utan att ha något anslutet och med hög förstärkning. Installera ett radiokort och läsa in brus från slumpad frekvens. Annars kan man säkert hitta en del intressanta register och räknare i nätverksdrivrutinen eller grafiskrutinerna som rör sig på sätt som är svåra att förutse. Däremot är det lite omständigare som du vill ha kod som är lätt att portera mellan olika operativsystem.
Då är det nog lättare att ta något som beror på tid, och hitta någon räknare som är baserat på millisekunder. Du borde hitta flera sådana med hjälp av google.
Citera
2017-02-12, 00:18
  #64
Medlem
Citat:
Ursprungligen postat av Mysquo
Om man verkligen är ute efter lite kvalificerad slump, så kan man ju alltid göra det hela lite mer komplicerat. Typ, läsa av brus från line-in utan att ha något anslutet och med hög förstärkning. Installera ett radiokort och läsa in brus från slumpad frekvens. Annars kan man säkert hitta en del intressanta register och räknare i nätverksdrivrutinen eller grafiskrutinerna som rör sig på sätt som är svåra att förutse. Däremot är det lite omständigare som du vill ha kod som är lätt att portera mellan olika operativsystem.
Då är det nog lättare att ta något som beror på tid, och hitta någon räknare som är baserat på millisekunder. Du borde hitta flera sådana med hjälp av google.
Världen är full av krypton som blivit hackade för att någon hittat någon räknare som är baserad på millisekunder.

Bättre med vanliga pseudoslumpgeneratorer. Bara det att maskinen skall skriva ner sitt state när man stänger ner så att den inte bootar med tom entropi. En stor del av hacken kommer just från att det gått gissa vilket state random-generatorn var i när kryptonyckeln genererades. Skall du ha 128-bit säker kryptering så behöver du även ha 128-bit säker seed. Då räcker inte ens nanosekund-räknare. Men slår du igång din laptop och den har seed ackumulerat ända sedan första dagen du köpte den så går det inte gissa utifrån klockslag och vilken nätverkstrafik som sprutat samt aktuell pid-lista vad slumptalsgeneratorn kommer att producera.

Just därför som det är tacksamt också att använda just termiskt brus. Får man 10000 bitar bra brus per sekund så kan man rätt snabbt kick-starta en bra pseudorandom-generator i fall bruset inte räcker för massgenerering av slump. Det viktiga är just att den som står och tittar på datorn inte kan förutsäga brus-bitarna och därför inte starta igång en egen pseudorandom-generator med likartad seed.
Citera
2017-03-18, 15:43
  #65
Medlem
Citat:
Ursprungligen postat av grabb1948
Och här är resultatet med 32-bitar för en Athlon x4-845:
C:\Users\Dator\Downloads\mc32>montecarlo.exe
Generating 200 Million random numbers with RDRAND.
That'll take a little while ...

Area = 0.249980610000000
Absolute Error = 0.000019390000000
Elapsed Time = 2020.56 Seconds

Generating 200 Million random numbers with C.
That'll take a little while ...

Area = 0.250008560000000
Absolute Error = 0.000008560000000
Elapsed Time = 7.70 Seconds

Snabbare än med 64-bitar men frågan är väl om någon kommer att använda RDRAND med en AMD.
Avläsningen går långsamt och felet blir inte lägre som hos Ivy Bridge.

Här är samma för Ryzen 1700:
Generating 200 Million random numbers with RDRAND.
That'll take a little while ...

Area = 0.249963490000000
Absolute Error = 0.000036510000000
Elapsed Time = 145.19 Seconds

Generating 200 Million random numbers with C.
That'll take a little while ...

Area = 0.250044445000000
Absolute Error = 0.000044445000000
Elapsed Time = 5.58 Seconds

Det går onekligen snabbare men felet är större i båda beräkningarna!
Citera
2017-04-02, 11:59
  #66
Medlem
beltramos avatar
Citat:
Ursprungligen postat av iKnugen
Varför måste du seeda om?

Annars borde väl time(0) räcka.
Kod:
srand(time(0));
const 
int MAX 100;
int first rand() % MAX//en slumpad integer
int second rand() % MAX//en annan, också slumpad, integer 
Kod:
inline int fastrand() { 
  
g_seed = (214013*g_seed+2531011); 
  return (
g_seed>>16)&0x7FFF



Väldigt onödigt att använda rand() som har en entropy på 2 ^ 16. Läs /dev/random istället.
__________________
Senast redigerad av beltramo 2017-04-02 kl. 12:06.
Citera
2017-04-02, 12:02
  #67
Medlem
beltramos avatar
Citat:
Ursprungligen postat av TorrentLover
Tjo!
Jag undrar lite vad som är det bästa sättet att slumpa fram tal. Att använda rand() och sätta fröet med time() är inte alls effektivt om du vill ha flera slumptal under en och samma sekund. Alternativt kan man skapa en pekare/låta malloc() returerna ett minnesadress.
Såhär:
Kod:
int *pekare malloc(1);
int MAX 101//Det största tal som kan ges nu är 100. 100 % 100 ger 0.
random_tal abs((int) pekare MAX); //Vi vill ha positiva tal
free(pekare); // Why not? 
Eller bara:
Kod:
int MAX 101;
int random_tal abs(&MAX MAX); 

Alternativt skulle man kunna läsa från /dev/random. Problemet här är då att programmet inte kommer att fungera på Windows, utan bara på Linux, OS X och annan *NIX.

Hur gör ni, och vad anser ni är säkrast och bäst?

Following is the declaration for abs() function.
int abs(int x)
Varför deklarerar du den som pointer? Helt onödigt..
__________________
Senast redigerad av beltramo 2017-04-02 kl. 12:10.
Citera
2017-04-02, 14:17
  #68
Medlem
Citat:
Ursprungligen postat av beltramo
Väldigt onödigt att använda rand() som har en entropy på 2 ^ 16. Läs /dev/random istället.
För det första är det ju intressant att du verkar länka till fel postning - du skriver ett svar och citerar iKnugen när du ju faktiskt kommenterar TorrentLover's ursprungspostning.

Detta är nu relevant, eftersom TS ju faktiskt explicit skrev om /dev/random:
Citat:
Alternativt skulle man kunna läsa från /dev/random. Problemet här är då att programmet inte kommer att fungera på Windows, utan bara på Linux, OS X och annan *NIX.

I detta fall framgår inte om TS behöver någon större kvalité på sina slumptal.

Citat:
Following is the declaration for abs() function.
int abs(int x)
Varför deklarerar du den som pointer? Helt onödigt..

Ser att du missade att förstå intentionen.
TS intention var att låta malloc() producera någon form av semi-random integer i form av den adress som den producerar vid en allokering. Så det intresanta är inte att abs() tar en integer-parameter, utan att pekaren malloc() returnerar i realiteten är ett integerresultat.

Skall man notera någonting så är det att malloc() producerar alldeles urusla integer för just denna användning eftersom malloc() producerar minnesblock med bra align som ju då innebär att de lägsta bitarna i adressen alltid är nollade. Samt att man kan anropa malloc()/free() många gånger och få samma svar tillbaka eftersom heapen är lokal för programmet.
Citera
2017-05-02, 01:04
  #69
Medlem
Citat:
Ursprungligen postat av TorrentLover
Tjo!
Jag undrar lite vad som är det bästa sättet att slumpa fram tal. Att använda rand() och sätta fröet med time() är inte alls effektivt om du vill ha flera slumptal under en och samma sekund. Alternativt kan man skapa en pekare/låta malloc() returerna ett minnesadress.
Såhär:
Kod:
int *pekare malloc(1);
int MAX 101//Det största tal som kan ges nu är 100. 100 % 100 ger 0.
random_tal abs((int) pekare MAX); //Vi vill ha positiva tal
free(pekare); // Why not? 
Eller bara:
Kod:
int MAX 101;
int random_tal abs(&MAX MAX); 

Alternativt skulle man kunna läsa från /dev/random. Problemet här är då att programmet inte kommer att fungera på Windows, utan bara på Linux, OS X och annan *NIX.

Hur gör ni, och vad anser ni är säkrast och bäst?


Det beror på vad du menar med "bäst". Om du vill ha riktiga slumptal så behövs hårdvara för 50 usd. Något i stil med det här http://moonbase.tictail.com
Citera
2018-05-31, 11:31
  #70
Medlem
Jag tar upp en gammal tråd om slumptal.
Här beräknar man pi med Monte Carlo-metoder:
https://rosettacode.org/wiki/Monte_Carlo_methods

Det som man ser är att det är stor skillnad på olika språk.
C ser ut att var bra då det räcker med att sampla 27 M för att komma till pi=3.141580 när det ska vara pi=3.141593. Men de flesta språk kommer inte dit ens med samples= 2 miljarder.
Dåliga och gamla bibliotek?
Citera
  • 5
  • 6

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback