Przypadek kolizji BigQuery FARM_FINGERPRINT

0

Pytanie

Wartość farm_fingerprint w dużym zapytaniu równie dla dwóch różnych wierszy. Jakieś pomysły, dlaczego? Zwraca -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

Najlepsza odpowiedź

0

W sumie to dość trywialnie znalezienie kolizji w każdym 64-bitowym procesie mieszania. W ten sposób, żaden z 64-bitowych skrótów nie może zagwarantować swoją wyjątkowość podczas indeksowania dużej ilości wartości. FARM_FINGERPRINT wykorzystuje funkcję Fingerprint64 w bibliotece farmhash, która jest 64-bitowy algorytm mieszania, dlatego można również użyć innej funkcji mieszania, takie jak MD5, SHA256, SHA512, itp., Ponieważ jest bardziej standaryzowany. Zobacz dodatkowe opcje mieszania.

Został również otwarty publiczny отслеживатель problemów w związku z tym podobny problem, ale w końcu został zamknięty, ponieważ kolizji z użyciem dowolnego algorytmu mieszania nieuchronnie nastąpią. Ale to wciąż może być bardzo długo. Cm. https://crypto.stackexchange.com/questions/47809/why-havent-any-sha-256-collisions-been-found-yet

2021-11-24 05:20:21

Dzięki za wyjaśnienie!
Shawn

@Sean, jeśli to jest odpowiedź na twoje pytanie, pomyśl o tym, aby wziąć go, klikając pole wyboru po lewej stronie. Zobacz również, co należy zrobić, gdy ktoś odpowiada na moje pytanie?
Dondi

W innych językach

Ta strona jest w innych językach

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