BigQuery FARM_FINGERPRINT caso de Colisão

0

Pergunta

O farm_fingerprint valor em BigQuery é o mesmo para duas cadeias diferentes. Todas as Ideias por que? Ele retorna -2660876244907183769

SELECT id1, id2, id1=id2 AS is_equal
FROM (SELECT FARM_FINGERPRINT(TO_JSON_STRING(STRUCT('19BD0AF0854E2B90E10080000A802438','599D7E2A47B31E20E10080000A7824B8','001','020','100'))) AS id1,
FARM_FINGERPRINT(TO_JSON_STRING(STRUCT('DCE500729B5800F0E10080010A7824BA','5AF0A97293195320E10080010A782421','001','001','110'))) AS id2)
google-bigquery hash
2021-11-24 00:09:05
1

Melhor resposta

0

Em geral, é trivial encontrar colisões em qualquer versão de 64 bits do hash. Então, nenhum de 64 bits hashes pode garantir-lhe singularidade quando grande quantidade de valores é indexado. FARM_FINGERPRINT usa Fingerprint64 função farmhash biblioteca , que é um de 64 bits do algoritmo de hash, assim você pode muito bem usar uma diferente função de hash como MD5, SHA256, SHA512, etc. como é mais padronizado. Veja mais hash funções.

Também uma questão pública tracker foi aberta em relação a este problema semelhante, mas que acabou por ser fechado desde colisões usando qualquer algoritmo de hash está prestes a acontecer. Mas ele ainda pode ser um tempo muito longo. Ver https://crypto.stackexchange.com/questions/47809/why-havent-any-sha-256-collisions-been-found-yet

2021-11-24 05:20:21

Obrigado pelo esclarecimento!
Shawn

@Shawn, se isto respondeu à sua pergunta, considere a possibilidade de aceitá-lo clicando na marca de seleção no lado esquerdo. Veja também o Que devo fazer quando alguém responde a minha pergunta?
Dondi

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................