• Forum
      /  
    Programmering og webdesign
      /  
    Programmering
  • 02-06-2012 · 18:15 1141 visninger 7 svar
  • Denne tråd er over 6 måneder gammel

    Er du sikker på, at du har noget relevant at tilføje?

  • Pseudo-tilfældige tal i C#

    Af Janman Monsterbruger
Hej HOL!
Jeg har et lille spørgsmål om Pseudo-tilfældige tal i C#. Jeg laver et program hvor jeg skal bruge mange pseudo-tilfældige tal. Tallene skal være hemmelige, og må på igen måder hænge sammen eller kunne spores. Jeg ville derfor gerne vide hvor "tilfældige" tallene er ud fra denne kode:

[CODE]Random random = new Random();
int a = random.Next(0,255); // generer et tilfældigt tal
random = new Random(a); // brug det tal til at "seede" en ny liste
// return random.next() [/CODE]


Kan man på nogle måder spore ens random-seed?('a' i dette tilfælde) Eller kan man på nogen måder finde en sammenhæng mellem tallene?
Hvor sikker er programmet hvis brugeren selv vælger et seed?

Kom gerne med forslag til forbedring af koden :)

Monsterbruger
02-06-2012 18:21
Random i C# er overhovedet ikke random, og hvis du bruger det samme seed vil du ALTID få den samme talrække.

Derfor bruger C# fra standard ikke et fast seed, men bruger (efter hvad jeg husker) UNIX time som seed (Tiden i sekunder siden 1. Januar 1970)

Da koden altid laver den samme talrække kan man godt finde det originale seed, og derfra udregne hvad kommer næste gang, men med mindre du arbejder for militæret eller på hemmelige koder til et stort firma er der næppe nogen der vil bruge så meget tid på at finde næste tal.
Junior Nørd
02-06-2012 18:34
Kan ikke hjælpe konkret, men mht. pseudo tilfældighed vil du altid i princippet kunne spore den originale seed og derved forudse hvad det næste bliver. Spørgsmålet er dog om du kan gøre det indenfor rimelig tid (vi snakker om man har en "uendelighed" til at gøre det i).

Den her video forklarer det ret godt.

http://youtu.be/itaMNuWLzJo
palle

#3

Gæst
02-06-2012 18:53
Du kan evt. kigge på TrueCrypt. Dens måde at danne en tilfældig nøgle på kan måske give lidt inspiration.
Monsterbruger
02-06-2012 19:03
#1
tak for svaret. Jeg arbejder ikke for militæret. Dette er et personligt projekt, hvor jeg skriver et krypteringsprogram. Jeg regner ikke med at nogle meget hemmelige filer bliver krypteret med denne program, men det ville da være dejligt hvis programmet var sikkert :) .

#2
Meget interessant video. I videoen bruger de statisk-TV signal, som jeg desværre ikke kan bruge i programmet. Men tror du der er noget lignende som man kan bruge?
Jeg falder også over spørgsmålet: "Findes der noget 100% tilfældigt?".
#3
Skal jeg nok gøre, men leder lidt på nettet endnu. Så vidt jeg ved bruger de AES-256bit algoritme, som er meget svær at forstå (for mig), og dermed er deres kode sikkert også meget lang :S.
palle

#5

Gæst
02-06-2012 19:35
En af TrueCrypts kilder til input er brugerens gøren og laden med musen ved nøgledannelse. Som udgangspunkt giver det nogle rimelige tilfældige tal.
Semi Supporter
02-06-2012 21:12
Jeg mener også du kan anvende en kombination af tiden her og nu, temperaturen på din gpu eller cpu, samt din fanspeed. alle tre ting der ændre sig og med den kombination, er det svært at forudsige den næste!
Monsterbruger
02-06-2012 21:34
#3+5
Har kigget på TrueCrypts dokumentation og kildekoder, og jeg må sige at jeg helst ville undgå at bruge deres algoritmer/metoder.

#6
Det har du ret i, det burde være tilfældigt nok! Men jeg er lidt bange for at inden jeg får skrevet et program der med garanti kan finde temperaturen på CPUen, GPUen samt hastigheden på blæserne i computeren, ville der gå et par måneder hvis ikke år :D .
Men jeg har tænkt lidt over det, og kom frem til sådan noget med optaget bytes på harddisken. Det burde være tilfældigt nok, ikke? ps. Mens jeg researcher, fandt jeg http://xkcd.com/221/ ... Synes den er meget sjov ^^
Bruger påkrævet
En bruger er påkrævet for at oprette svar på Hardwareonline.dk

Log ind for at få flere funktioner