Funzione unidirezionale con condizioni come input

1

Ho bisogno di scrivere una funzione unidirezionale, con alcune condizioni come input, ad esempio:

if ((a==b && c==2 ) || (c > 10000))
    return 1;
else
    return 0;

Il risultato sarebbe solo 2 valori (ad es. 0 o 1).

Il punto chiave è, osservando la funzione e il risultato, non siamo in grado di capire quali siano le condizioni (ad esempio (if ((a==b && c==2 ) || (c > 10000))) ). Proprio come una funzione hash.

C'è qualche funzione (trucchi) per fare questo?

    
posta WindChaser 24.08.2016 - 21:58
fonte

1 risposta

0

Si potrebbe fare qualcosa di simile, dove si codificano tutte le condizioni in un hash, che è accuratamente costruito per restituire bit specifici in determinate posizioni. Tieni presente che l'hash genererà un valore casuale, quindi dovrai applicare bruteforce alcune delle costanti per ottenere l'output desiderato:

if chr(sha512((length(c) > 1000) + "764065445" + b + md5(b.substr(0,10))).substring(15,1)) % 64 then (repeat as many times as neccessary to pick out bits)

BUT: questo significa anche che devi accettare alcuni falsi positivi, ad esempio quando l'input viene rifiutato anche se ciò non si traduce in una vulnerabilità sfruttata.

Qui, l'attaccante ovviamente sarà in grado di vedere la prima condizione, che la lunghezza di c deve essere superiore o inferiore a 1000. Ma qui, i primi 10 caratteri di b, devono risultare in un hash md5 sconosciuto, che combinato con la lunghezza di c sia sopra o sotto 1000, e risultato di b, si tradurrà in bit specifici di un hash sha512 essendo 1 o 0.

Individuare più bit dell'hash sha512 renderà meno probabili i falsi positivi, ma aumenterà anche la possibilità di trovare la vulnerabilità utilizzando le tabelle dell'arcobaleno.

Individuando così tanti bit necessari per ridurre al minimo i falsi positivi, tentare di forzare l'hash o utilizzare le tabelle arcobaleno, si otterrà un numero illimitato di risultati.

Questo è simile a vanitygen per bitcoin, in cui bruteforce out alcuni costante per ottenere alcuni bit dell'hash che si desidera. Si noti che NON si esegue il test per l'hash sha512 completo, si verifica solo se alcuni bit sono veri o falsi.

    
risposta data 25.08.2016 - 02:14
fonte

Leggi altre domande sui tag