Door Erik van Straten: Ik ben het eens met anoniem van gisteren 21:53, een stroom van waardes met alle bits één wordt onmiddellijk ontdekt (mits je kijkt, en dat hebben de testers van AMD duidelijk niet gedaan - ik vraag me dan meteen af wat ze nog meer over het hoofd hebben gezien).
Als je een backdoor in RDRAND zou willen maken, zou dat, vereenvoudigd, als volgt kunnen:
1) Neem na cold start/reset eenmalig 8 bits af van de echte CSPRNG, dat getal 0..255) noemen we X;
2) Bereken van X een hash met een functie naar keuze (met lengte >= 32 bit, bijv. CRC32) en bewaar het resultaat in X;
3) Geef als resultaat van de RDRAND functie de laatste 32 bits van X;
4) Ga naar 2).
Als "aanvaller" weet je dan dat er 256 verschillende reeksen van RDRAND outputs zijn die je, van tevoren kunt uitrekenen en opslaan in een opzoektabel. Een serieuze tester kan de voorspelbaarheid van RDRAND wel ontdekken, maar hoe meer bits er in stap 1 echt random zijn, hoe lastiger dat wordt (en hoe groter de tabel van de aanvaller).
(21:53 weer hier. )
crypto uit de losse pols blijft tricky - een goede backdoored RNG is niet van buiten te herkennen.
Ook een fysische random-bron kan een bias hebben, of een niet-uniform spectrum, of sporen bevatten van voorspelbare signalen (50 Hz, of een klokfrequentie , e.d.) . Die worden in de bron, of in het samplen geintroduceerd.
Je moet zo'n signaal dus bewerken om daar geen probleem van te ondervinden.
Een simpel begrijpelijk voorbeeld : als je een munt wilt gebruiken met stevige bias (90% kop, 10% munt, maar wel random, bijvoorbeeld).
Met de Von Neumann multiplication trick kun je die toch gebruiken als een 50/50 random bron :
(simpele uitleg
https://abcnews.go.com/Technology/WhosCounting/counting-crooked-coins-fair-probabilities-strange-sequences/story?id=12067023 )
Je gooit series van twee :
Bij Kop-Munt wint partij A
Bij Munt-Kop wint partij B
Bij Kop-Kop of Munt-Munt gooi je nog een serie van twee.
Dat werkt omdat de kans op Kop-Munt (0.9 * 0.1 ) net zo groot is als de kans op Munt-Kop (0.1 * 0.9 ).
Hier ruil je bandbreedte in voor entropie (het kost je minimaal twee worpen om één bit resultaat te krijgen ).
De RDRAND functies van (intel) CPUs worden gebruikt als input voor AES , en _die_ output wordt teruggegeven.
Als de input van AES gewoon een 32 bit teller is, is de output nog steeds niet van random te onderscheiden.
Het na-bewerken van een fysische random source om bias e.d. van sampling te verwijderen is volstrekt normaal en aanbevolen.
En helaas - als je dat goed doet kun je een niet van random onderscheidbare datastroom leveren zelfs met een backdoor- source.
zie
https://www.electronicdesign.com/learning-resources/understanding-intels-ivy-bridge-random-number-generatorvoor een review van het design van Intel's rdrand
Ik heb niet meteen een goede link van AMD's design. Dit lijkt een beschrijving:
https://crypto.stackexchange.com/questions/29894/amds-implementation-of-rdrand-instructionMaar ook AMD zal een output check hebben, een de-biassing en een crypto output processing stage.
Vwbt de bug - die leek een relatie te hebben met suspend-resume .
Afgezien van kernel state moet bij suspend ook veel CPU powerdown's ook cpu state bewaard worden en later teruggezet, of opnieuw geinitialiseerd.
Het lijkt erop dat bij de AMD bug dat deel gemist is, of het zetten van de vlag 'rng is geinitialiseerd' onterecht gedaan wordt.
https://lore.kernel.org/linux-pm/776cb5c2d33e7fd0d2893904724c0e52b394f24a.1565817448.git.thomas.lendacky@amd.com lijkt te zeggen dat het mn een BIOS bug is , in de resume code .
Recente kernel discussies over de kernel RNG zijn boeiend - er zijn series apparaten zonder CPU hardware rng en met minimale IO en daarmee heel weinig manieren om random data te verzamelen . Maar die wel verwachten om extreem vroeg in het boot proces crypto-kwaliteit random data te krijgen (voor ssh keys, of certificaten e.d.).
Met komst van flashdrives zijn harddisken dubieus als bron van random bits. En "mensen die wat op een toetsenbord spelen" zijn ook niet altijd aangesloten - denk STBs, routers.
(harddisk gesample random bits zouden uiteindelijk afkomstig zijn van turbulentie rondom de leeskop )