2014-09-26 19 views

risposta

12

Vedi l'secure_compare doctring:

confrontare due stringhe mentre la protezione contro Timing Attacks

Con costringendo valutazione di ogni personaggio un attaccante non può utilizzare il tempo impiegato per indovinare dove la la differenza si è verificata - con un'implementazione "normale" che è ritornata immediatamente alla prima differenza, questo sarebbe possibile.

Il contatore semantico su result &= c1 == c2 (esito positivo quando sono tutti uguali) è in realtà return c1 != c2 (errore/interruzione sulla prima differenza), e non la condizione proposta la domanda.

Ora, result &= c1 == c2 è lo stesso di result = result & (c1 == c2), dove & (noto anche come un bitwsie-E) è un severe logico-E oltre booleani. Ciò significa che l'utilizzo dell'accumulatore di risultati rimarrà True se e solo se il risultato è stato precedentemente True e anche la compassione è True.

+0

Sinceramente sarei interessato all'assemblaggio prodotto, il modo in cui è configurato sembra ridurlo in funzioni semi atomiche per ciclo. Ciò contribuirebbe ulteriormente a mantenere sicura l'azione thread-safe. –

+0

A un certo punto lo rende ancora compilato. Quindi è ancora una valida ragione su cui riflettere. –

+0

@JeffLangemeier: Dal momento che le stringhe sono immutabili, non c'è alcun problema di sicurezza dei thread. – Blckknght