Случай столкновения BigQuery FARM_FINGERPRINT

0

Вопрос

Значение farm_fingerprint в большом запросе одинаково для двух разных строк. Есть идеи, почему? Он возвращает -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

Лучший ответ

0

В общем, довольно тривиально находить коллизии в любом 64-битном хэше. Таким образом, ни один из 64-разрядных хэшей не может гарантировать вашу уникальность при индексировании большого количества значений. FARM_FINGERPRINT использует функцию Fingerprint64 в библиотеке farmhash, которая представляет собой 64-битный алгоритм хэширования, поэтому вы можете также использовать другую функцию хэширования, такую как MD5, SHA256, SHA512 и т. Д., Поскольку она более стандартизирована. Смотрите дополнительные функции хэширования.

Также был открыт общедоступный отслеживатель проблем в связи с этой аналогичной проблемой, но в конечном итоге он был закрыт, так как столкновения с использованием любого алгоритма хэширования неизбежно произойдут. Но это все еще может быть очень долго. См. https://crypto.stackexchange.com/questions/47809/why-havent-any-sha-256-collisions-been-found-yet

2021-11-24 05:20:21

Спасибо за разъяснение!
Shawn

@Шон, если это ответ на ваш вопрос, подумайте о том, чтобы принять его, нажав на галочку слева. Также посмотрите, что я должен делать, когда кто-то отвечает на мой вопрос?
Dondi

На других языках

Эта страница на других языках

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