Om je random key te genereren moet je dan factoren gebruiken die niet te beïnvloeden zijn of niet te voorspellen zijn.
Bijvoorbeeld de tijd dat een USB stick ooit al verbonden is geweest met de PC, in miliseconden.
Je kan het nog moeilijker maken door de volgende methode te gebruiken:
Houd ergens in het eprom geheugen twee tellers bij van 128 bits. Van zodra de usbstick voedingsspanning krijgt haalt hij deze twee waarden uit het eprom, zet ze naar het ramgeheugen en vervangt de twee waarden door de MD5 hash van de opgeslage waarden. Zo bekom je weer 2 tellerwaarden van 128 bits (samen dus 256 bits). Zolang de usbstick spanning krijgt via usb telt hij bij allebei de tellers iedere milliseconde één bij. Als de stick uit de pc gehaald word na een onbekende tijd, worden de waarde van de tellers snel weer opgeslagen in het eprom.
Van zodra de stick weer op een pc aangesloten is word alles weer herhaald:
Tellers uit eprom naar ram verplaatsen
tellers vervangen door de MD5 hashen van de tellers
zolang de stick spanning krijgt: per ms de tellers één bijtellen
als de spanning wegvalt: tellers uit ram weer veiligstellen in eprom
...
enz
Zo krijg je door die MD5 hashen te nemen op een onbekend tijdstip (afhankelijk van hoelang de stick ooit al gebruikt is) een redelijk onvoorspelbaare 256 bits code. Die waarde van de tellers kan je dan gebruiken om een 'random' key uit te genereren. Eventueel kan bij het branden van de firmware bijde tellers een willekeurige startwaarde (en verschillende van elkaar) meegegeven worden.
't is natuurlijk niet écht radom, maar het kan wel voldoen voor onze toepassing én het is niet te beïnvloeden.
[
Voor 4% gewijzigd door
flux_w42 op 20-03-2008 23:04
]