#хэшфункции — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #хэшфункции, aggregated by home.social.
-
Коллизии хэш-функций и парадокс дней рождения
Как работает хэш-функция ? На вход подаются произвольные данные — слово, веб-сайт, файл или ДНК человека — а на выходе получаем 16-теричное число (hex). Очень удобно, чтобы стандартизировать различные объекты, присвоить им уникальные ID, цифровые отпечатки. К сожалению, отпечатки иногда получаются одинаковыми — происходят коллизии. Коллизии хэш-функций похожи на парадокс дней рождения , который недавно вызвал бурные дебаты на Хабре и на HN . Почему люди так горячо спорят? Наверное, потому что человеческая интуиция иногда не совпадает с математическими формулами. Другими словами, язык математики ≠ человеческому. Интересно сравнить разные хэш-функции с математической точки зрения. Насколько часто встречаются «парадоксы»?
https://habr.com/ru/companies/ruvds/articles/946342/
#хэшфункции #хэшколлизии #вероятность_коллизии #задача_о_днях_рождения #парадокс_дней_рождения #SMhasher #rapidhash #rapidhashMicro #rapidhashNano #ruvds_статьи
-
[Перевод] Ломаем хэши CityHash64, MurmurHash2/3, wyhash и не только…
Хэш-функции — невероятно красивые математические объекты. Они могут отображать произвольные данные на небольшую область выходных данных фиксированного размера таким образом, что отображение оказывается детерминированным, хоть и кажется случайным. Такая «детерминированная случайность» невероятно полезна для широкого спектра применений, например, для хэш-таблиц , контрольных сумм , алгоритмов Монте-Карло , распределённых алгоритмов без коммуникаций и так далее. В этой статье мы взглянем на тёмную сторону хэш-функций: ситуации, когда всё идёт не так. К счастью, такое, по сути, в реальной жизни никогда не происходит из-за неудачных входных данных (по крайней мере, в случае хороших хэш-функций). Однако кроме программ существуют и люди, и не все из них настроены миролюбиво, поэтому нам следует обратиться за ответами к сфере компьютерной безопасности. Я вкратце объясню основы безопасности хэш-функций, а затем покажу, насколько легко поломать эту безопасность для некоторых популярных некриптографических хэш-фукнкций. Для затравки скажу, что в этой статье объясняется, как генерировать за секунду тысячи подобных строк: cityhash64("orlp-cityhash64-D-:K5yx*zkgaaaaa") == 1337 murmurhash2("orlp-murmurhash64-bkiaaa&JInaNcZ") == 1337 murmurhash3("orlp-murmurhash3_x86_32-haaaPa*+") == 1337 farmhash64("orlp-farmhash64-/v^CqdPvziuheaaa") == 1337 Также я покажу, как можно создавать очень специфичные пары строк, которые можно произвольно конкатенировать таким образом, что при конкатенации k строк любая из 2 k комбинаций будет иметь одинаковый хэш вне зависимости от использованного для хэш-функции порождающего значения (seed): a = "xx0rlpx!xxsXъВ" b = "xxsXъВxx0rlpx!" murmurhash2(a + a, seed) == murmurhash2(a + b, seed) murmurhash2(a + a, seed) == murmurhash2(b + a, seed) murmurhash2(a + a, seed) == murmurhash2(b + b, seed) a = "!&orlpՓ" b = "yǏglp$X" murmurhash3(a + a, seed) == murmurhash3(a + b, seed) murmurhash3(a + a, seed) == murmurhash3(b + a, seed) murmurhash3(a + a, seed) == murmurhash3(b + b, seed)
-
[Перевод] Ломаем хэши CityHash64, MurmurHash2/3, wyhash и не только…
Хэш-функции — невероятно красивые математические объекты. Они могут отображать произвольные данные на небольшую область выходных данных фиксированного размера таким образом, что отображение оказывается детерминированным, хоть и кажется случайным. Такая «детерминированная случайность» невероятно полезна для широкого спектра применений, например, для хэш-таблиц , контрольных сумм , алгоритмов Монте-Карло , распределённых алгоритмов без коммуникаций и так далее. В этой статье мы взглянем на тёмную сторону хэш-функций: ситуации, когда всё идёт не так. К счастью, такое, по сути, в реальной жизни никогда не происходит из-за неудачных входных данных (по крайней мере, в случае хороших хэш-функций). Однако кроме программ существуют и люди, и не все из них настроены миролюбиво, поэтому нам следует обратиться за ответами к сфере компьютерной безопасности. Я вкратце объясню основы безопасности хэш-функций, а затем покажу, насколько легко поломать эту безопасность для некоторых популярных некриптографических хэш-фукнкций. Для затравки скажу, что в этой статье объясняется, как генерировать за секунду тысячи подобных строк: cityhash64("orlp-cityhash64-D-:K5yx*zkgaaaaa") == 1337 murmurhash2("orlp-murmurhash64-bkiaaa&JInaNcZ") == 1337 murmurhash3("orlp-murmurhash3_x86_32-haaaPa*+") == 1337 farmhash64("orlp-farmhash64-/v^CqdPvziuheaaa") == 1337 Также я покажу, как можно создавать очень специфичные пары строк, которые можно произвольно конкатенировать таким образом, что при конкатенации k строк любая из 2 k комбинаций будет иметь одинаковый хэш вне зависимости от использованного для хэш-функции порождающего значения (seed): a = "xx0rlpx!xxsXъВ" b = "xxsXъВxx0rlpx!" murmurhash2(a + a, seed) == murmurhash2(a + b, seed) murmurhash2(a + a, seed) == murmurhash2(b + a, seed) murmurhash2(a + a, seed) == murmurhash2(b + b, seed) a = "!&orlpՓ" b = "yǏglp$X" murmurhash3(a + a, seed) == murmurhash3(a + b, seed) murmurhash3(a + a, seed) == murmurhash3(b + a, seed) murmurhash3(a + a, seed) == murmurhash3(b + b, seed)
-
[Перевод] Ломаем хэши CityHash64, MurmurHash2/3, wyhash и не только…
Хэш-функции — невероятно красивые математические объекты. Они могут отображать произвольные данные на небольшую область выходных данных фиксированного размера таким образом, что отображение оказывается детерминированным, хоть и кажется случайным. Такая «детерминированная случайность» невероятно полезна для широкого спектра применений, например, для хэш-таблиц , контрольных сумм , алгоритмов Монте-Карло , распределённых алгоритмов без коммуникаций и так далее. В этой статье мы взглянем на тёмную сторону хэш-функций: ситуации, когда всё идёт не так. К счастью, такое, по сути, в реальной жизни никогда не происходит из-за неудачных входных данных (по крайней мере, в случае хороших хэш-функций). Однако кроме программ существуют и люди, и не все из них настроены миролюбиво, поэтому нам следует обратиться за ответами к сфере компьютерной безопасности. Я вкратце объясню основы безопасности хэш-функций, а затем покажу, насколько легко поломать эту безопасность для некоторых популярных некриптографических хэш-фукнкций. Для затравки скажу, что в этой статье объясняется, как генерировать за секунду тысячи подобных строк: cityhash64("orlp-cityhash64-D-:K5yx*zkgaaaaa") == 1337 murmurhash2("orlp-murmurhash64-bkiaaa&JInaNcZ") == 1337 murmurhash3("orlp-murmurhash3_x86_32-haaaPa*+") == 1337 farmhash64("orlp-farmhash64-/v^CqdPvziuheaaa") == 1337 Также я покажу, как можно создавать очень специфичные пары строк, которые можно произвольно конкатенировать таким образом, что при конкатенации k строк любая из 2 k комбинаций будет иметь одинаковый хэш вне зависимости от использованного для хэш-функции порождающего значения (seed): a = "xx0rlpx!xxsXъВ" b = "xxsXъВxx0rlpx!" murmurhash2(a + a, seed) == murmurhash2(a + b, seed) murmurhash2(a + a, seed) == murmurhash2(b + a, seed) murmurhash2(a + a, seed) == murmurhash2(b + b, seed) a = "!&orlpՓ" b = "yǏglp$X" murmurhash3(a + a, seed) == murmurhash3(a + b, seed) murmurhash3(a + a, seed) == murmurhash3(b + a, seed) murmurhash3(a + a, seed) == murmurhash3(b + b, seed)
-
[Перевод] Ломаем хэши CityHash64, MurmurHash2/3, wyhash и не только…
Хэш-функции — невероятно красивые математические объекты. Они могут отображать произвольные данные на небольшую область выходных данных фиксированного размера таким образом, что отображение оказывается детерминированным, хоть и кажется случайным. Такая «детерминированная случайность» невероятно полезна для широкого спектра применений, например, для хэш-таблиц , контрольных сумм , алгоритмов Монте-Карло , распределённых алгоритмов без коммуникаций и так далее. В этой статье мы взглянем на тёмную сторону хэш-функций: ситуации, когда всё идёт не так. К счастью, такое, по сути, в реальной жизни никогда не происходит из-за неудачных входных данных (по крайней мере, в случае хороших хэш-функций). Однако кроме программ существуют и люди, и не все из них настроены миролюбиво, поэтому нам следует обратиться за ответами к сфере компьютерной безопасности. Я вкратце объясню основы безопасности хэш-функций, а затем покажу, насколько легко поломать эту безопасность для некоторых популярных некриптографических хэш-фукнкций. Для затравки скажу, что в этой статье объясняется, как генерировать за секунду тысячи подобных строк: cityhash64("orlp-cityhash64-D-:K5yx*zkgaaaaa") == 1337 murmurhash2("orlp-murmurhash64-bkiaaa&JInaNcZ") == 1337 murmurhash3("orlp-murmurhash3_x86_32-haaaPa*+") == 1337 farmhash64("orlp-farmhash64-/v^CqdPvziuheaaa") == 1337 Также я покажу, как можно создавать очень специфичные пары строк, которые можно произвольно конкатенировать таким образом, что при конкатенации k строк любая из 2 k комбинаций будет иметь одинаковый хэш вне зависимости от использованного для хэш-функции порождающего значения (seed): a = "xx0rlpx!xxsXъВ" b = "xxsXъВxx0rlpx!" murmurhash2(a + a, seed) == murmurhash2(a + b, seed) murmurhash2(a + a, seed) == murmurhash2(b + a, seed) murmurhash2(a + a, seed) == murmurhash2(b + b, seed) a = "!&orlpՓ" b = "yǏglp$X" murmurhash3(a + a, seed) == murmurhash3(a + b, seed) murmurhash3(a + a, seed) == murmurhash3(b + a, seed) murmurhash3(a + a, seed) == murmurhash3(b + b, seed)
-
[Перевод] Находим случайный seed, решающий задачу с LeetCode
У меня есть хобби — решать задачи LeetCode непредназначенным для этого образом, часто при помощи запутанных однострочников. Такие самостоятельно накладываемые ограничения делают задачки интереснее и заставляют искать нестандартные решения. Одним из ежедневных челленджей LeetCode была такая задача (я немного упростил её для понятности): Есть список из уникальных строк битов, каждая из которых имеет длину . Сгенерировать новую строку длиной , отсутствующую в этом списке. Например, если у нас есть список "010", "110", "111" , то возможным решением будет "001" . Задача с LeetCode имеет большой набор тестов — 183 тестовых сценариев с , а точную формулировку задачи можно найти здесь . Я решил её, подобрав такое случайное порождающее значение (seed), что случайно генерируемые строки битов проходили бы все тестовые сценарии. Вот код решения: class Solution:
def findDifferentBinaryString(self, nums: List[str]) -> str:
random.seed((69299878 + sum(ord(c)*(i*j+111) for (i, n) in enumerate(nums) for (j, c) in enumerate(n))) % 999999999)
return ''.join(random.choice('01') for _ in nums) Можете попробовать это решение самостоятельно (оно должно работать, если LeetCode не обновил свой набор тестов. Если это произошло, сообщите мне об этом). Ниже я расскажу, как это сделал.https://habr.com/ru/companies/ruvds/articles/832748/
#ruvds_переводы #leetcode #челлендж #нестандартные_решения #задачи_для_программистов #случайные_числа #хэшфункции
-
Идеальный алгоритм шифрования? HASH-CRYPT
Кажется, я придумал новый алгоритм шифрования! Или такой уже существует? В любом случае - здесь есть его описание, и даже программа для проверки. > ENCRYPT <
https://habr.com/ru/articles/816025/
#хэш #хэширование #хэшфункция #хэшфункции #шифрование #си #безопасность #иб #информационная_безопасность
-
[Перевод] Юристы продолжают пользоваться MD5 только из-за своего консерватизма
Недавно я узнала один загадочный факт: Международный уголовный суд хэширует электронные доказательства при помощи MD5 . Что в этом плохого? MD5 ужасно поломан. Настолько поломан, что специалисты уже больше десятка лет говорят , что никто не должен пользоваться MD5. Учитывая широкий выбор альтернатив, сегодня применение MD5 не имеет никакого смысла. И ещё одна загадка: MD5 использует не только МУС. Очевидно, им пользуется всё юридическое и криминалистическое сообщество США. Так почему же юристы по-прежнему применяют поломанную и устаревшую технологию? Для начала мне нужно уточнить: я не юрист и не криптограф. Я разработчик ПО и консультант в сфере прикладной криптографии. И подозреваю, что я, возможно, единственный человек, интересующийся и криптографией, и юриспруденцией, в противном случае эту статью уже написал бы кто-то другой. Юристы продолжают пользоваться этой поломанной и устаревшей технологией по нескольким причинам. По существу, юридическое сообщество обсуждает, действительно ли MD5 поломан в их конкретном случае. Они говорят «да, MD5 поломан в случае шифрования », но поскольку они не занимаются шифрованием, то им вполне можно его использовать. В этом посте я расскажу о том, как возникло это обсуждение, и разберусь, правы ли юристы в том, что им можно безопасно применять MD5.
https://habr.com/ru/companies/ruvds/articles/785444/
#md5 #коллизии_хеша #алгоритмы_хэширования #криптографические_алгоритмы #хэшфункции
-
[Перевод] Юристы продолжают пользоваться MD5 только из-за своего консерватизма
Недавно я узнала один загадочный факт: Международный уголовный суд хэширует электронные доказательства при помощи MD5 . Что в этом плохого? MD5 ужасно поломан. Настолько поломан, что специалисты уже больше десятка лет говорят , что никто не должен пользоваться MD5. Учитывая широкий выбор альтернатив, сегодня применение MD5 не имеет никакого смысла. И ещё одна загадка: MD5 использует не только МУС. Очевидно, им пользуется всё юридическое и криминалистическое сообщество США. Так почему же юристы по-прежнему применяют поломанную и устаревшую технологию? Для начала мне нужно уточнить: я не юрист и не криптограф. Я разработчик ПО и консультант в сфере прикладной криптографии. И подозреваю, что я, возможно, единственный человек, интересующийся и криптографией, и юриспруденцией, в противном случае эту статью уже написал бы кто-то другой. Юристы продолжают пользоваться этой поломанной и устаревшей технологией по нескольким причинам. По существу, юридическое сообщество обсуждает, действительно ли MD5 поломан в их конкретном случае. Они говорят «да, MD5 поломан в случае шифрования », но поскольку они не занимаются шифрованием, то им вполне можно его использовать. В этом посте я расскажу о том, как возникло это обсуждение, и разберусь, правы ли юристы в том, что им можно безопасно применять MD5.
https://habr.com/ru/companies/ruvds/articles/785444/
#md5 #коллизии_хеша #алгоритмы_хэширования #криптографические_алгоритмы #хэшфункции