
Каждый, кто интересуется криптографией, может назвать огромное количество областей, в которых применяется хеширование. Оно используется для хранения паролей в базе данных, для проверки целостности файлов, для организации словарей типа ключ-значение. Также без хеширования было бы очень сложно сделать электронную подпись на основе ассиметричной криптографии. Ведь операции шифрования данных закрытым ключём и последущей расшифровки открытым являются достаточно ресурсоёмкими, поэтому данные сначала подвергаются хешированию, а затем полученный цифровой дайджест подписывают электронной подписью. Без кеширования было бы невозможным и существование тех самых Bitcoins, вызвавших большой интерес в последнее время.
Но в этот раз хотелось бы обсудить менее известный аспект применения хеширования. Помните игру «Угадай число»? Вы загадываете число от 1 до 100, а ваш друг должен его угадать. Он называет свои предположения, а вы отвечаете: больше, меньше или равно. Очевидно, если вы захотите жульничать, то будете подгонять «загаданное» число так, чтобы друг не отгадал его как можно дольше. Выход состоит в том, чтобы записать загаданное число на бумажку и показать другу в конце игры. А если он живёт в другой стране? Если вы каким-то способом сообщите ему число заранее, игра потеряет смысл. Пятьдесят лет назад единственным выходом было написать заказное письмо, отправить его, а на следующий день начинать играть. Результаты игры друг узнает сразу, а через две недели, получив письмо, сможет проверить, действительно ли вы загадали то самое число (проверив при этом и дату отправки по почтовому штемпелю).
К счастью, сейчас существует более лёгкий способ проверить честность игры. Необходимо лишь вычислить хеш от исходных данных (тех случайных чисел, которые вы должны загадать сами) и отправить его другу. При этом очень важно добавить к хешируемым данным соль — достаточно длинную последовательность случайных чисел. Иначе ваш друг мог бы перебрать все варианты исходных данных (которые обычно ограничены правилами игры) и найти тот вариант, который соответствует хешу. Итак, ваш друг не сможет определить загаданное число по известному хешу, но сможет проверить число (+соль), которое вы ему пришлёте после игры. При этом подбор соли таким образом, чтобы она вместе с некоторыми исходными данными генерировала определённый кеш, является вычислительно очень сложной задачей, что исключает жульничество с вашей стороны.
Описанный принцип контроля честности используется во многих онлайн-казино, тем самым гарантируя, что результат игры подчиняется только теории вероятности. Это, на самом деле, значительно увеличивает риски казино, ведь ваш выигрыш практически не ограничен!
Многие наверное уже ждут реф-ссылку на онлайн-казино, но это не цель данной статьи. Вместо этого хотелось бы развить идею и показать, что она применима не только в азартных играх. Описанный метод можно применить всегда, когда у вас есть некоторая идея, которая не тянет на получение официального патента, но вы всё-таки хотите «застолбить» своё право первооткрывателя. Для этого достаточно описать свою мысль в виде обычного текста и вычислить хеш полученного файла. Этот хеш вы сможете распространять, как хотите, даже постить на форумах. Когда придёт время, просто выложите исходный текст, и каждый сможет убедиться, что всё описанное там вы знали гораздо раньше. Когда это может пригодиться? Например, вы знаете, кто будет следующим президентом, но не хотите раньше времени всех шокировать или просто не хотите повлиять на результаты выборов. Просто выложите хеш 60bdbc9ea29895bc9ec06d6e, а после выборов вы сможете с гордостью сказать, что ещё полгода назад вы знали, что этим человеком будет… Ой :)
Как видите, хеш — это ещё и отличный способ делать предсказания… Подумайте, какой след в истории можете оставить вы.
Удачи!