Esistono algoritmi hash "riflessivi"?


11

Esiste una classe di algoritmi hash, sia teorici che pratici, in modo tale che un algoritmo nella classe possa essere considerato "riflessivo" secondo una definizione fornita di seguito:

  • hash1 = algo1 ("input text 1")
  • hash1 = algo1 ("input text 1" + hash1)

L'operatore + potrebbe essere la concatenazione o qualsiasi altra operazione specificata per combinare l'output (hash1) nell'input ("testo di input 1") in modo che l'algoritmo (algo1) produca esattamente lo stesso risultato. cioè collisione su input e input + output. L'operatore + deve combinare tutti e due gli input e l'algo non può scartare parte dell'input.

L'algoritmo deve produrre un'entropia elevata nell'output. Potrebbe, ma non è necessario, essere crittograficamente difficile invertire l'uscita su uno o entrambi i possibili ingressi.

Non sono un matematico, ma una buona risposta potrebbe includere una prova del perché una tale classe di algoritmi non può esistere. Questa non è una domanda astratta, tuttavia. Sono sinceramente interessato a utilizzare un tale algoritmo nel mio sistema, se ne esiste uno.

Questo è un duplicato di una domanda che è stata pubblicata per la prima volta su /programming/4823680/reflexive-hash



2
Sei interessato a questa proprietà per tutto il testo di input o per un testo di input? Se vuoi che rimanga per tutto il testo di input, la costruzione di collisioni è banale in base alla progettazione, quindi non penso che possa essere considerata una buona funzione hash.
Peter Taylor,

Qualcuno vuole file hash che contengono i propri hash! ;)
Raffaello,

@Peter Taylor - Sto cercando una funzione che funzioni come descritto per un testo di input arbitrario. Ogni input diverso produce un hash che in generale ha un'entropia reciproca elevata rispetto a ogni altro input possibile. Proprio come una buona funzione di hash irreversibile funziona. Tuttavia, la funzione hash che sto cercando non deve avere la proprietà dell'irreversibilità. L'entropia elevata è sufficiente.

@Raphael - Sì, è un modo sintetico per dirlo.

Risposte:


9

Dò una costruzione banale che soddisfa il requisito. Lo fornisco per rispondere semplicemente all'esistenza della funzione hash "riflessiva".

Sia qualsiasi funzione di hash che produce elevata entropia nell'output. Si supponga che G hash arbitraria lunghezza binario stringhe di k bit binario stringhe, dove k è un numero intero positivo. Let + denota l' operatore di concatenazione e let | x | indica la lunghezza della stringa binaria x .GGkK+|X|X

Definire la funzione hash sull'ingresso x come segue:HX

  1. Se , quindi H ( x ) def = G ( x ) .|X|KH(X)=DEFsol(X)
  2. Se , lascia che L e R siano il prefisso ( | x | - k ) -bit e il suffisso k -bit di x , rispettivamente. Cioè, x = L + R e | R | = k . Se R = H ( L ) (dove H ( L ) viene calcolato in modo ricorsivo ), quindi H ( x )|X|>KLR(|X|-K)KXX=L+R|R|=KR=H(L)H(L); altrimenti,H(x) def = G(x).H(X)=DEFRH(X)=DEFsol(X)

Come ho già detto, questa è una costruzione banale. Può essere applicato a qualsiasi funzione hash, pratica (come MD5, SHA-1, ...) o teorica.


Non sono molto sicuro nei regni delle codifiche, ma ancora un'entropia elevata? Per costruzione, ha certamente lo stesso hash per il doppio di tutte le stringhe di prima. E vengono in coppie molto vicine tra loro. (Oh, dovrebbe essere | R | = k nella seconda riga di 2.)H|R|=K
Raphael,

@Raphael: Grazie per aver segnalato l'errore di battitura (corretto). H ha la stessa entropia di G, a meno che nella condizione in cui R = G (L). Per condizione, in questa condizione, H (x) dovrebbe essere uguale a R. Non possiamo fare nulla qui per aumentare l'entropia; poiché il requisito di "riflessività" ci impedisce di modificare l'output.
MS Dousti,

@Sadeq: è necessario che la funzione hash venga calcolata in modo ricorsivo? In qualche modo l'algoritmo che trae beneficio da questo fatto?
Yasser Sobhdel,

H(M+H(M)+H(M)+...+H(M))H(M)

Sadeq, grazie. Credo che questo possa rispondere alla mia domanda, come è stato chiesto. Hai espresso la risposta in un avvertimento adeguato. Da un punto di vista pragmatico, mi piace il fatto che sia un overlay per qualsiasi algoritmo noto come SHA-1. Se ho capito bene, il tuo algoritmo continuerà a calcolare gli hash in modo ricorsivo fino a quando non colpisce la collisione richiesta e poi si ferma. Nel qual caso forse possiamo duplicare questa soluzione ingenua. La mia preoccupazione è che sembra esserci
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.