Ho partecipato a questo problema per circa tre giorni e penso di aver bisogno di una seconda serie di occhi sul problema. Sto implementando il HASH_DRBG
di NIST da SP 800-90A Rev. 1, giugno 2015 (è l'ultimo documento in base alla pagina delle pubblicazioni speciali NIST ). I vettori di test si trovano all'indirizzo Test CAVP: generatori di numeri casuali .
Il problema che sto avendo è che non posso arrivare al risultato del test vettoriale se seguo l'algoritmo come pubblicato. Se passo di un passo verso il basso per alcuni slot, quindi posso arrivare al risultato corretto. È molto insolito, e non sono sicuro di cosa sto sbagliando.
L'algoritmo con cui ho problemi Hash_DRBG_Generate Process . Ecco l'algoritmo come cattura dello schermo dalla sezione 10.1.1.4 alla pagina 50:
Passaggio 3, Hashgen , produce i bit pseduo-casuali per il chiamante. Passaggi 4-6 quindi aggiornare lo stato per la prossima chiamata da generare.
Se eseguo l'algoritmo esattamente come specificato, quindi restituisco la stringa di bit seguente al chiamante, che non è corretto. In effetti utilizza Current V .
6C58FE76D644750EA5BE880BB1BDD2D54C98139D70BA0F7CA8637EB2527F8BFD223DEB9187976E87
91B706804FB28534D13EC4818FB59DB430C9F04F55AA8549EAD53B39624DAD6CFDAAD99412B8AEB0
Se passo al passaggio 3 tra il passaggio 6 e il passaggio 7, quindi posso arrivare al risultato corretto. In effetti utilizza Next V .
56f33d4fdbb9a5b64d26234497e9dcb87798c68d08f7c41199d4bddf97ebbf6cb5550e5d149ff4d5
bd0f05f25a6988c17436396227184af84a564335658e2f8572bea333eee2abff22ffa6de3e22aca2
Le mie domande sono piuttosto scadenti:
- Sto analizzando le cose in modo errato o facendo qualcosa di evidentemente sbagliato?
- Perché devo spostare il passaggio 3 al passaggio 6 e al passaggio 7?
- Se devo scegliere, dovrei selezionare (a) algoritmo corretto e risultato errato, o (b) algoritmo errato e risultato corretto?
Ecco il vettore di prova da cui lavoro. È il primo vettore test ( COUNT 0
) che utilizza SHA1 con resistenza predittiva no . Il problema si verifica in GENERATE (FIRST CALL) . Il valore V
mostrato, 1658...ed56b
, è il valore dopo l'esecuzione dei passaggi 4-6. Tuttavia, V non assume quel valore se non dopo aver eseguito il Passaggio 3, Hashgen .
[SHA-1]
[PredictionResistance = False]
[EntropyInputLen = 128]
[NonceLen = 64]
[PersonalizationStringLen = 0]
[AdditionalInputLen = 0]
[ReturnedBitsLen = 640]
COUNT = 0
EntropyInput = 1610b828ccd27de08ceea032a20e9208
Nonce = 492cf1709242f6b5
PersonalizationString =
** INSTANTIATE:
V = 9e8301725d5f133b4ab7d329fd2f87ae5f89d96a9dd7e2b98beee1c707b8c3fe412d1125b58bae5dc08a11dac3be4a3147347160fef218
C = e5e12450450efe5fdc777c95b8c23c938fcd592e2d788f12461936e4a16131b1f2d11ce7f0159ee1e635e62f3df8bda4fea077ad5f9d06
reseed counter = 1
EntropyInputReseed = 72d28c908edaf9a4d1e526d8f2ded544
AdditionalInputReseed =
** RESEED:
V = 745c659f2944829ca6e209c8ca2dddecf9f1861383e34e94007a3a51b8444fd5ae738e7d9c0d5e69aa97ee16c49cfd2432eb32ba5738fa
C = a1fc40009357a024d878818cf6f979a88d4cc5d760b308ae1a5b9f067972e6f7cf92ddb129a8d3c1bb0005bcf3f8871fd65e794f1990b7
reseed counter = 1
AdditionalInput =
** GENERATE (FIRST CALL):
V = 1658a59fbc9c22c17f5a8b55c1275795873e4beae49657421ad5d95831b736cd7e066c738bcbb343933c411c7c17917593c03a77bed56b
C = a1fc40009357a024d878818cf6f979a88d4cc5d760b308ae1a5b9f067972e6f7cf92ddb129a8d3c1bb0005bcf3f8871fd65e794f1990b7
reseed counter = 2
AdditionalInput =
ReturnedBits = 56f33d4fdbb9a5b64d26234497e9dcb87798c68d08f7c41199d4bddf97ebbf6cb5550e5d149ff4d5bd0f05f25a6988c17436396227184af84a564335658e2f8572bea333eee2abff22ffa6de3e22aca2
** GENERATE (SECOND CALL):
V = b854e5a04ff3c2e657d30ce2b820d13e148b11c245495ff03531785eab2a1dc54d994a5597b15c5b10001f49606c88b4ff0d61acb61820
C = a1fc40009357a024d878818cf6f979a88d4cc5d760b308ae1a5b9f067972e6f7cf92ddb129a8d3c1bb0005bcf3f8871fd65e794f1990b7
reseed counter = 3