Questões:
Pode haver um hash (criptograficamente seguro) que preserva a topologia de informações de ?
Podemos adicionar um predicado de proximidade eficientemente computável que, dado e (ou próprio) nos diz se está muito perto de (por exemplo, a distância de Levenshtein ou distância de Hamming de e é menor que uma constante fixa )?
Fundo:
Por topologia de informações em em eu quero dizer o espaço de topologia com pontos e com a base .
Uma boa maneira de pensar em topologia é considerar conjuntos abertos como propriedades de pontos que são afirmados / verificáveis (ou seja, se for verdade, pode-se verificar / observar que é verdade). Com isso em mente, conjuntos fechados são propriedades refutáveis .
Uma função é contínuo se a imagem inversa de conjuntos abertos estiver aberta. No nosso caso, isso significa que, para todos, Há sim de tal modo que
Uma boa maneira de pensar sobre a topologia da informação é vê-la como uma árvore de cadeias binárias. Cada subárvore é um conjunto aberto de base (e outro conjunto aberto pode ser obtido através da união de conjuntos abertos de base).
Às vezes, isso é chamado de topologia de informações de cadeias, porque cada ponto pode ser considerado como uma aproximação finita de uma sequência / sequência binária. aproxima iff é uma substring inicial de () Por exemplo é uma aproximação para Porque .
E para continuidade, se dermos uma sequência que aproximam e convergem para sequência binária (Imagine como um galho infinito na árvore e s como pontos nesse ramo) então convergir para ,
Respostas:
Para funções hash criptográficas modernas, não, não há predicado de proximidade computável com eficiência, assumindo a distribuição emx tem entropia suficiente. A intuição é que essas funções de hash são projetadas para "não ter estrutura", para que não admitam nada assim.
Em termos técnicos, as funções hash criptográficas modernas se comportam "como um oráculo aleatório". Para um oráculo aleatório, não existe esse predicado de proximidade: o melhor que você pode fazer é inverter a função hash e, em seguida, enumerar todas as strings próximas e as hash. Como resultado, não há como fazer isso para funções hash criptográficas modernas.
Heuristicamente, é possível projetar uma função de hash personalizada que admita um predicado de proximidade eficiente e que é (aproximadamente) o mais seguro possível, considerando esse fato. Vamos supor que as strings que vamos hash tenham comprimento fixo. Suponha que tenhamos um bom código de correção de erros e permitaD seja o algoritmo de decodificação (para mapear uma cadeia de bits para uma palavra de código próxima, se possível).
Para obter um esquema simples, mas imperfeito, imagine definirh ( x ) = SHA256 ( D ( x ) ) . E sex , y são duas seqüências aleatórias suficientemente próximas, então há uma chance decente de h ( x ) = h ( y) . E sex , y não estão perto, então h ( x ) não será nada parecido h ( y) , e não obteremos informações além do fato de que x , y não estão perto. Isto é simples. No entanto, também é imperfeito. Existem muitos paresx , y que estão próximos, mas onde não podemos detectar esse fato h ( x ) , h ( y) (por exemplo, porque a função de decodificação D falha).
Heuristicamente, parece possível melhorar essa construção. Em tempo de design, escolha seqüências de bits aleatóriasr1, ... ,rk . Agora, defina a seguinte função de hash:
Agora sex , y suficientemente perto, é provável que exista Eu de tal modo que D ( x ⊕rEu) = D ( y⊕rEu) e assim h ( x)Eu= h ( y)Eu . Isso sugere imediatamente um predicado de proximidade: seh ( x ) fósforos h ( y) em qualquer um de seus k componentes, então x , y são próximos; caso contrário, deduza que eles não estão próximos.
Se você deseja adicionalmente resistência à colisão, uma construção simples é a seguinte: deixeh1( ⋅ ) ser uma função hash com um predicado de proximidade; entãoh ( x ) = (h1( x ) , SHA256 ( x ) ) é resistente a colisões (qualquer colisão para isso também é uma colisão para o SHA256) e tem um predicado de proximidade (basta usar o predicado de proximidade para h1 ) Você pode deixarh1( ⋅ ) seja a função hash definida acima.
Isso é tudo para a distância de Hamming. A distância de edição é provavelmente significativamente mais difícil.
Ao apresentar a construção acima, fui inspirado pelo seguinte artigo:
Ari Juels, Martin Wattenberg. Um Esquema de Compromisso Difuso .
Ari Juels, Madhi Sudhan. Um esquema de cofre difuso . Designs, Codes and Cryptography 38 (2): 237-257, 2006.
Aliás: na criptografia, as funções de hash não são codificadas. Se você deseja algo com chave, pode dar uma olhada nas funções pseudo-aleatórias.
fonte