C'è un hash continuo?


8

Domande:

Può esserci un hash (crittograficamente sicuro) che preserva la topologia delle informazioni di {0,1}?

Possiamo aggiungere un predicato di vicinanza calcolabile in modo efficiente quale dato hk(x) e hk(y) (o y stesso) ci dice se yè molto vicinox (ad es. la distanza di Levenshtein o la distanza di Hamming di x e y è inferiore a una costante fissa c)?


Sfondo:

Per topologia delle informazioni su Σ su intendo lo spazio della topologia con punti Σ e con la base {xΣ:xΣ}.

Un buon modo di pensare alla topologia è considerare gli insiemi aperti come proprietà di punti che sono affermabili / verificabili (cioè se è vero, può essere verificato / osservare che è vero). Con questo in mente, gli insiemi chiusi sono proprietà confutabili .

Una funzione f:ΣΣ*è continuo se l'immagine inversa degli insiemi aperti è aperta. Nel nostro caso questo significa che per tuttiyΣ*, c'è IΣ* tale che

f1(yΣ)=xioXΣ*.

Un bel modo di pensare alla topologia dell'informazione è guardarlo come un albero di stringhe binarie. Ogni sottostruttura è un set aperto di base (e altri set aperti possono essere ottenuti prendendo un'unione di set aperti di base).

Questo a volte viene indicato come topologia delle informazioni delle stringhe perché ogni punto in Σ* può essere considerata un'approssimazione finita di una stringa / sequenza binaria. X approssima y se e solo se X è una sottostringa iniziale di y (Xy). Per esempio0011Σ* è un'approssimazione a 00110* perché 001100110*.

E per continuità, se prendiamo una sequenza {Xio}io che si avvicinano e convergono alla sequenza binaria y (pensa a y come un ramo infinito nell'albero e Xios come punti su quel ramo) quindi {f(Xio)} convergere a f(y),

f(y)=iof(Xio).

Ho dimenticato tutto ciò che una volta sapevo sulla topologia. Sarebbe possibile decomprimere cosa significa "preservare la topologia delle informazioni" in termini autonomi? Inoltre, quando dici crittograficamente sicuro, quale versione di ciò vuoi dire? Intendi "si comporta come un oracolo casuale" o intendi "unidirezionale e resistente alle collisioni"?
DW

@DW Ho aggiunto qualche spiegazione, ma scrivendo che mi fa notare che la mia prima domanda non è chiara. Devo pensare un po 'per chiarirlo. La seconda domanda sembra a posto.
Kaveh,

1
L'hashing sensibile alla localizzazione può essere rilevante. en.wikipedia.org/wiki/Locality-sensitive_hashing
zenna

Risposte:


5

Per le moderne funzioni hash crittografiche, no, non esiste un predicato di prossimità calcolabile in modo efficiente, supponendo che la distribuzione su Xha entropia sufficiente. L'intuizione è che queste funzioni hash sono progettate per "non avere struttura", quindi non ammettono nulla del genere.

In termini tecnici, le moderne funzioni hash crittografiche si comportano "come un oracolo casuale". Per un oracolo casuale, non esiste un simile predicato di vicinanza: il meglio che puoi fare sembra essere invertire la funzione hash, quindi enumerare tutte le stringhe vicine e cancellarle. Di conseguenza, non c'è modo di farlo per le moderne funzioni hash crittografiche.

Dal punto di vista euristico, è possibile progettare una funzione hash personalizzata che ammetta un predicato di vicinanza efficiente e che sia (approssimativamente) "il più sicuro possibile" dato questo fatto. Supponiamo che le stringhe che stiamo per eseguire l'hash siano di lunghezza fissa. Supponiamo di avere un buon codice di correzione degli errori, e lasciaD essere l'algoritmo di decodifica (quindi, se possibile, associa una stringa di bit a una parola in codice vicina).

Per ottenere uno schema semplice ma imperfetto, immagina di definirlo h(X)=SHA256(D(X)). SeX,y sono due stringhe casuali sufficientemente vicine, quindi esiste una buona possibilità h(X)=h(y). SeX,y non sono vicini, quindi h(X) non assomiglierà per niente h(y)e non otterremo informazioni oltre al fatto che X,ynon sono vicini. Questo è semplice Tuttavia, è anche imperfetto. Ci sono molte coppieX,y che sono vicini ma da cui non possiamo rilevare questo fatto h(X),h(y) (ad es. perché la funzione di decodifica D non riesce).

Euristicamente, sembra possibile migliorare questa costruzione. In fase di progettazione, scegliere stringhe di bit casualir1,...,rK. Ora, definisci la seguente funzione hash:

h(X)=(SHA256(D(Xr1),...,SHA256(D(XrK)).

Ora se X,y sono sufficientemente vicini, è probabile che esista io tale che D(Xrio)=D(yrio), e quindi h(X)io=h(y)io. Ciò suggerisce immediatamente un predicato di vicinanza: seh(X) fiammiferi h(y) in uno dei suoi K componenti, quindi X,ysono vicini; altrimenti, dedurre che non sono vicini.

Se si desidera inoltre una resistenza alle collisioni, una semplice costruzione è la seguente: let h1()essere una funzione hash con un predicato di vicinanza; poih(X)=(h1(X),SHA256(X)) è resistente alle collisioni (qualsiasi collisione per questo è anche una collisione per SHA256) e ha un predicato di vicinanza (basta usare il predicato di vicinanza per h1). Puoi lasciareh1() essere la funzione hash definita sopra.

Questo è tutto per la distanza di Hamming. La modifica della distanza è probabilmente molto più difficile.

Nel venire con la costruzione di cui sopra, sono stato ispirato dal seguente documento:

Ari Juels, Martin Wattenberg. Uno schema di impegno fuzzy .

Ari Juels, Madhi Sudhan. Uno schema di Fuzzy Vault . Disegni, codici e crittografia 38 (2): 237-257, 2006.

Per inciso: nella crittografia, le funzioni hash non sono sotto chiave. Se volevi una cosa con chiave, potresti dare un'occhiata alle funzioni pseudocasuali.

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.