Почему хэши в протоколе биткойна обычно вычисляются дважды (дважды вычисляются)?

В соответствии с спецификацией wiki протокола биткойна хеши обычно «вычисляются дважды» ». Например, :

hello
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (first round of sha-256)
9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (second round of sha-256)

В чем причина этого? Я предполагаю, что это каким-то образом обеспечивает дополнительную безопасность или защиту от потенциальных векторов атаки, но я не могу объяснить, что эти атаки могут быть.

27 голосов | спросил Stephen McCarthy 7 Jam1000000amMon, 07 Jan 2013 07:54:49 +040013 2013, 07:54:49

4 ответа


12

wiki отвечает на это . TLDR: для предотвращения атак на день рождения .

  

Биткойн использует две итерации хэша (обозначается SHA256 ^ 2, т. е. «квадрат функции SHA256»), и причина этого связана с частичной атакой на меньший, но связанный хэш SHA1. Устойчивость SHA1 к атакам на день рождения была частично нарушена по состоянию на 2005 год в O (2 ^ 64) по сравнению с дизайном O (2 ^ 80). В то время как hashcash полагается на сопротивление до изображения и поэтому не уязвим для атак на день рождения, общий метод упрочнения SHA1 против атаки на столкновение с днем ​​рождения - это повторить его дважды. Сопоставимая атака на SHA256 пока не существует, однако, поскольку дизайн SHA256 похож на SHA1, он, вероятно, защищает приложения от использования двойного SHA256. И это то, что делает биткойн, это не обязательно, учитывая необходимость использования hashcash для защиты от проприема, но это защитный шаг против будущих криптоаналитических разработок. Атака на SHA1 и, в принципе, другие хэши аналогичного дизайна, такие как SHA256, также была мотивацией для конкурса дизайна NIST SHA3, который все еще продолжается.

ответил Claudiu 7 MaramFri, 07 Mar 2014 06:44:18 +04002014-03-07T06:44:18+04:0006 2014, 06:44:18
15

Мы не знаем точно, но самая популярная теория состоит в том, что двойной хэш был выбран для защиты от атак с расширением длины .

ответил David Schwartz 7 Jam1000000amMon, 07 Jan 2013 10:35:01 +040013 2013, 10:35:01
9

Вики утверждают, что это предотвращает атаки на день рождения неправильно. Если вы можете успешно выполнить атаку дня рождения на один вызов хеш-функции, вы получите успешную атаку на день рождения во время второго вызова. Это легко увидеть, поскольку наличие hash(x) == hash(y) подразумевает hash(hash(x)) == hash(hash(y)).

Если вы действительно хотели бы защититься от этого, вы бы сделали что-то вроде hash(x||hash(x)). Поиск столкновения в одном вызове hash в этом случае не даст прямого столкновения при двойном вызове.

ответил mikeazo 5 Jpm1000000pmThu, 05 Jan 2017 21:38:01 +030017 2017, 21:38:01
5

Как и другие, заявка на вики на это, предотвращающая атаки на день рождения, неверна. Скорее, это предназначалось для предотвращения атак длины расширения .

Из https://crypto.stackexchange.com/a/884/56797 :

  

SHA-256 (SHA-256 (x)) был предложен Фергюсоном и Шнайером в их   отличная книга «Практическая криптография» (позже обновленная Фергюсоном,   Шнайер и Коно и переименовали «Криптографическую инженерию») в качестве способа   сделать SHA-256 неуязвимым для атаки с расширением длины. Они позвонили   это «SHA-256d». Мы начали использовать SHA-256d для всех, когда мы   запустил проект Tahoe-LAFS в 2006 году по принципу, согласно которому   вряд ли менее эффективен, чем SHA-256, и что он освобождает нас от   рассуждать о том, опасны ли атаки на растяжение по длине   место, которое мы используем хеш-функцию. Я не удивлюсь, если   изобретатели Биткойна использовали его по аналогичным причинам. Почему бы не использовать SHA-256d   вместо SHA-256?

     

Обратите внимание, что проект SHA-3 потребовал, чтобы все кандидаты имели некоторые   метод предотвращения атак с расширением длины. Некоторые из них используют   метод, который скорее напоминает SHA-256d, т. е. делает дополнительный   «финализация» хэша их состояния в конце, прежде чем   результат.

ответил Zain Rizvi 9 MaramFri, 09 Mar 2018 11:14:43 +03002018-03-09T11:14:43+03:0011 2018, 11:14:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132