Может ли хэш * никогда * повторить?
Этот вопрос странно трудно в Bitcoin. В Bitcoin, хэши используются в качестве идентификаторов.
Как указывалось другими уже, криптографические системы хэширования, по существу, сжатие с потерями. Для заданного выхода SHA256, существует, по крайней мере, один вход, который создает его, и, возможно бесконечное число. Заголовок блока имеет длину 80 байт, и выход sha256 имеет длину 256 бит. Если предположить равномерное распределение как для бит заголовка (заведомо ложные) и для SHA256 (смотрите предыдущие посты, и мое добавление ниже), мы можем рассчитывать примерно на 2
384 возможные заголовки блоков в блок-ID, с 384 быть 640-256.
Он получает грязно в реальности. Большие части заголовка блока распределены неравномерно, и некоторые из этих частей двигаются целями. Кто-то, вероятно, может работать до разумных оценок для фактических бит свободы для данного кандидата заголовка блока, и из этой оценки, сколько таких кандидатов можно ожидать на выход. Я считаю, это достаточно интересно, но уже поздно, и я устал, так что я не буду беспокоить.
С этим бессмысленно в стороне от пути, обратно к идентификаторам. Мы используем хэш заголовка блока в качестве идентификаторов для блока. Сеть обеспечивает соблюдение уникальности этих идентификаторов странным образом. Допустим, вы хэширования вместе, и вы нашли временное значение, которое удовлетворяет заголовок для следующего блока, но по странной иронии судьбы, что хэш как раз случается быть равен чудовищно низкой хэш ранее найденного *, возможно, один, перечисленных в этой теме , Ваш узел объявляет об этом коллегам, отправив им сообщение с идентификатором нового блока. Все они игнорируют вас, потому что они уже "иметь" что блок, и поэтому нет никакого смысла просить вас за все остальное. Я на самом деле не знаю, как ваш узел будет даже обрабатывать его. Я должен проверить код, чтобы увидеть, если он будет перезаписывать старый блок, или уронить новый. Хорошие шансы, что мы никогда не узнаем, трудный путь.
С сделок, это еще хуже. Тот же механизм существует, но узлы не (по умолчанию) держать полный учет всех операций, только неизрасходованные из них. Вполне возможно ** создать новую транзакцию, что происходит, чтобы иметь один и тот же хэш, как старая транзакция. Опять же, я не знаю, как это будет в конечном итоге без чтения кода.
* Я не уверен, если это будет претендовать на невероятно удачу, или невероятно невезения. Конечно, одна из этих крайностей, хотя** На самом деле, нет. нападение на день рождения на 2256 по-прежнему невероятно огромен.Я на самом деле не знаю, что мы знаем, если есть хеш со всеми нулями. Пространство состояний функции сжатия SHA2-256 «только» 768 бит, и это вовсе не строится как перестановка на входе. Существует явная внутренняя отмена, поэтому AFAICT некоторые выходы могут быть недоступны, но мы не знаем, какие из них.
В самом деле. Выходное пространство SHA256 в настоящее время неизвестно. Мы подозреваем (надежда), что близко к [0-2
256], Но мы не совсем
знать что. Криптографические хэш выглядят чертовски много как случайные числа, дизайн. Один из стандартных тестов, чтобы генерировать пар хешей из пар входов, которые отличаются одним битом перевернутым. Мы ожидаем, что около половины выходных бит будет меняться между парами,
в среднем, и мы ожидаем, что довольно плоское распределение флипа рассчитывает для каждой позиции бита, опять же,
в среднем. Семейство Ша проходит эти испытания, и от этого мы получаем уверенность (но не уверенность) о распределении выходов.