Частичное столкновение для уменьшенного хэша SHA1

я делаю проект, чтобы найти два разных предложения, которые дают частичное столкновение на основе сокращенного хеширования sha1. Моя программа будет генерировать два разных сообщения. Если первые 32 бита хеширования двух предложений совпадают, программа остановится, иначе она будет повторяться до тех пор, пока не будет обнаружено столкновение.

Моя программа работает хорошо, однако время на поиск столкновения очень медленное. Как я могу ускориться. Я прочитал и узнал, что могу использовать парадокс дня рождения, как мне это реализовать?

Я немного поискал и получил соответствующий ответ, но я все еще не понимаю парадокс дня рождения.

Вероятность коллизий SHA1

демонстрация/пример столкновения SHA1

http://www.metzdowd.com/pipermail/cryptography/2004-August/007409.html

http://www.freelists.org/post/hashcash/Hashcash-and-the-cracking-of-SHA1,2

Вот как работает моя программа:

Generate random number() // let say i generate 100 number
Generate random char1() // we will generate 100 char
Hash() // the first 100 char  
Generate random char2() // we will generate another 100 char
Hash2() // this 100 char again
Get the 32 bit of the random char1()
Get the 32 bit of the random char2()
compare the 32 bit for partial collision 
If they dont match we will keep on doing until partial collision is found.
  • Время, затрачиваемое на поиск, слишком велико по сравнению с некоторыми другими программами, которые могут искать за миллисекунды.

person Happy    schedule 10.05.2016    source источник
comment
Помогите понять, зачем нужен тег C ++?   -  person polfosol ఠ_ఠ    schedule 10.05.2016


Ответы (1)


Если вы ищете частичные коллизии в хеш-функции, пробуя случайную пару входных данных каждый раз, вам придется принять чрезвычайно долгое время выполнения. Для 32 бит и идеальной хэш-функции вероятность столкновения составляет 1/(2^32).

Чтобы использовать парадокс дня рождения, вам нужно сохранить сгенерированные вами хэши и сверить новый хэш со всеми ними. Это работает, потому что вы ищете коллизию, вам все равно, что сгенерировало хэши, которые в конечном итоге столкнулись. Прочтите, как работает парадокс дня рождения, используя людей и дни рождения, и убедитесь, что вы понимаете это, прежде чем применять его к хэшированию. Здесь по математике вам нужно всего ~77 000 хэшей, чтобы иметь 50 % шанс найти коллизию среди них для 32 бит.

person random passerby    schedule 10.05.2016