Подтвердить что ты не робот

Xkcd: Внешние эффекты

Итак, веб-комикс xkcd Внешние эффекты 1 мая 2011 года содержит хэш-код Skein 1024 1024, разбивающий . Я предполагаю, что это должно быть не что иное, как усилие грубой силы, когда случайные строки хэшируются в попытке сопоставить хэши Randall? Правильно ли это?

Кроме того, мои знания теории хэшинга Skein практически не существуют, но, будучи наполовину достойным программистом, я смог загрузить и запустить как SkeinFish (С#), и Maarten Bodewes Реализация Skein (Java) локально в режиме 1024 1024 с некоторыми входными строками. Однако хэши, которые они дали, отличались от хэша, который xkcd возвращал для одного входа. Это может быть чрезвычайно наивный вопрос, но разные реализации Скеина дают разные хэши? И какая реализация Skein является xkcd с помощью?

Спасибо, что помиловал мое невежество!

4b9b3361

Ответ 1

Существует несколько различных итераций алгоритма skein. XKCD использует версию 1.3, которая также является самой последней. Источники можно найти здесь (найдите "V1.3" )

Интересно, что этот метод грубой силы тот же, что и Биткойн, чтобы "добывать" биткойны. Большие различия - это алгоритм хэширования (SHA-256 в этом случае) и целевой хеш (который динамически определяется как любой хеш, начиная с определенного количества нулей.) Требуется много работы, чтобы обнаружить хэш, но один раз было обнаружено, что тривиально проверять исходные биты и что полученный хэш соответствует критериям.

Ответ 2

Здесь используется исходный код команды Стэнфорда. Мы провели это примерно на сотне 8-ядерных серверов EC2 некоторое время, но не весь конкурс.

https://github.com/jhiesey/skeincrack

Ответ 3

Если вы хешировали не буквенно-цифровые символы (пробелы, знаки пунктуации и т.д.), возможно, вы получили разные результаты из-за кодирования HTML-формы. Атрибутом "enctype" в форме XKCD был хостинг "application/octet-stream", который согласно https://developer.mozilla.org/en-US/docs/HTML/Element/form не является браузером, поддерживаемый стандарт. Я предполагаю, что браузер возвращается к типу URL-кодирования, когда видит тот, который он не распознает.

Я заметил, что строка "=" отправляется URL-кодировкой в ​​Chrome и возвращает другой хеш, чем то, что я получил локально с последним pyskein. Но когда я отправил его с этой командной строкой curl (больше не работает), я получил ожидаемый хеш:

curl -X POST --data-binary "hashable==" "http://almamater.xkcd.com/?edu=school.edu"

Код Стэнфорда в другом ответе делает то же самое, и они, по-видимому, имели некоторый успех. Я никогда не получал случайных данных для локального хеша к лучшему результату, чем даже моя собственная школа, поэтому у меня никогда не было возможности тщательно проверить, как правильно передавать произвольные данные. Я не знаю, что такое точное поведение (например, возможно, если вы опустили hashable = сервер обнаружил бы это и просто хэш всего тела POST), но он может быть преднамеренно немного сложным, как часть апрельского дурака.