È sicuro generare client nonces utilizzando il generatore di numeri casuali?

1

Sto facendo chiamate HTTP sul lato client e il server si aspetta che fornisca un client nonce. Deve essere lungo 4 byte. Sto pensando di utilizzare questa combinazione:

base64(parts of the MAC address + random bits generated by RNG)

Dato che il protocollo è creato da esperti (quindi la sua sicurezza non deve essere messa in discussione), il mio calcolo del nonce è accettabile dal tuo punto di vista?

    
posta Jacques René Mesrine 24.04.2014 - 01:47
fonte

1 risposta

1

Da un punto di vista del protocollo crittografico, ciò che di solito è importante su un nonce (numero usato una volta) è la sua unicità. Averlo generato con un (P) RNG è piuttosto una questione di convenienza. Se un protocollo crittografico ha requisiti entropici specifici su un nonce o si presuppone che sia in qualche modo crittograficamente sicuro in qualche modo, questo sarebbe in genere noto, comunicato o dichiarato in anticipo, perché non è un'aspettativa standard.

I am making HTTP calls on the client side and the server expects me to supply a client nonce

Questo è uno scenario tipico per la prevenzione di un attacco di riproduzione, che si basa sulla precisione temporale di alcune parti dell'input del client.

I am planning to use this combination: base64(parts of the MAC address + random bits generated by RNG)

Quando ti affidi a parti dell'indirizzo MAC come input per una trasformazione lineare, ti stai ponendo per una maggiore probabilità di ripetizione del nonce, aumentando la possibilità di un attacco di replay riuscito, o in alternativa aumenti la possibilità di un avversario che indovina il prossimo nonce in anticipo, rendendo il suo lavoro più facile in un certo senso.

Nonostante, in un protocollo crittografico scelto da esperti (come ipotizzato nella domanda) sarà più comune per entrambe le parti scegliere un nonce, attenuando la scelta inadeguata di un nonce da una sola parte. Con un server nonce e un client nonce, stabilire una comunicazione spesso assomiglia a questo,

  • server - > client: [snonce, challenge]
  • client - > server: [cnonce, f (cnonce, snonce, challenge)]

e quando non scegli adeguatamente cnonce , o non hai affatto un nonce del client, un avversario può osservare f(snonce, challenge) risposte, dove tutti gli input sono scelti da esso, quando si maschera da server . A volte può peggiorare a causa di un attacco di testo in chiaro scelto.

Suggerisco di semplificare il nonce in modo che sia lungo le linee di

cnonce = base64(random bits generated by RNG)

dove RNG ha sufficiente entropia. E se hai bisogno di ripetibilità ai fini del test, ad esempio se esegui i test sul lato client del protocollo in una farm su diverse caselle puoi:

seed(RNG, parts of the MAC address)
cnonce = base64(random bits generated by RNG)

In questo modo i test su ogni casella saranno suscettibili di debugging.

    
risposta data 05.05.2014 - 12:29
fonte

Leggi altre domande sui tag