Но тут возникает роковое, на первый взгляд, противоречие: с одной стороны, необходимо иметь запись о всех транзакциях, которую могли бы контролировать все участники (видеть ковер в целом и все итоговые стежки, читать все страницы в своей электронной копии «гроссбуха»); но, с другой стороны, индивидуальную конфиденциальную информацию, дающую доступ к деньгам, надо надежно защитить от всех, в том числе и участников системы. Как же это сделать? На помощь приходит гениальное открытие — хеш-функция (хеширование).
Рискну сказать, что хеширование — это особый вид шифрования, хотя подозреваю, что математики могут возражать против использования этого слова в данном контексте. Действительно, строго говоря, это нечто другое: ведь каждый шифр, независимо от его сложности, теоретически может быть расшифрован, но не хеш-функция, она работает только в одну сторону. Это сложный алгоритм, который превращает любое (практически бесконечное) количество информации в буквенно-цифровой шестнадцатеричный код — хеш-сумму. Меня особенно поражает то, что можно хешировать как полный текст «Войны и мира», так и любые числа, например 123, или даже одну-единственную какую-нибудь цифру, и получить похожую по внешнему виду строку, что-то вроде вот этого:
c3xс2483p0b2923820dcc509a6f7549b
Совершенно невозможно угадать, что такой набор 32 знаков означает: или все перипетии великой исторической драмы, или какую-то цифру, или вообще ничего. Но! Если изменить в тексте романа хоть одну (!) букву, то и этот его хешированный «итог» тут же изменится. При этом вы никогда не сможете произвести вычисление в противоположную сторону, то есть невозможно превратить хеш-сумму обратно в роман. Но можно доказать, что этот на вид бессмысленный и случайный набор цифр и букв «принадлежит» или соответствует «Войне и миру». Между ними существует некая неразрывная, роковая, почти мистическая связь.
Вот еще одна метафора: хеш-сумма подобна отпечатку пальца, по которому можно точно определить личность. Но вы не сможете по нему узнать ни размер пальца, ни форму ногтя, и тем более ничего он вам не скажет о цвете глаз, росте, весе и поле владельца пальца. Личность удостоверит надежно. Но не даст вам доступа к чувствительной личной информации. Точно так же транзакции записываются в сети, чтобы все участники могли их проверить, но при этом частные коды биткоинов надежно защищены. Что-то похожее на хеширование происходит в онлайн-банкинге: компьютеру банка не разрешается знать ваш пароль, но он хранит полученное с помощью алгоритма его производное и может проверить по нему, что это именно вы, а не кто-то другой. Это своего рода «электронный отпечаток» вашего «электронного пальца», и он позволяет надежно удостоверить вашу личность.
Не буду притворяться, будто полностью понимаю математическую суть происходящего в хеш-алгоритме. Но некую общую идею, мне кажется, дает одно из ранних описаний хеш-суммы как остатка от деления исходных данных на натуральные числа. Но только современный алгоритм SHA 265 использует формулы во много раз более сложные.
Некоторые полагают, что история хеширования восходит к 1610 году, когда Галилео Галилей зашифровал свое сообщение о наблюдении колец Сатурна. Он хотел «застолбить» открытие за собой, не выдавая раньше времени его сути. Записал фразу: Smaismrmilmepoetaleumibunenugttauiras.
Пришло время, и он сделал достоянием гласности оригинал: Altissimum planetam tergeminum obseruaui. То есть, в переводе с латыни, «Высочайшую планету тройною наблюдал». Что, конечно, было пока еще довольно сырым, невнятным наблюдением, но то, что Сатурн — необычная планета, было установлено, и начало ее исследованию положено. Но для истории криптографии важнее, что это был пример своеобразной хеш-суммы. Только, разумеется, на выходе она получилась не фиксированной длины и тем более не шестнадцатеричной. Но, по сути, близко. Или прочитайте такую строчку: ааааааа, ссссс, d, еееее, g, h, iiiiiii, lllll, mm, nnnnnnnnn, oooo, pp, q, rr, s, ttttt, uuuuu. Механизм алгоритма здесь предельно простой: все буквы зашифрованной фразы расставлены по алфавиту. Но мыслимо ли ее расшифровать, вычислить в обратную сторону? Нет, практически невозможно. Но это как раз и есть способ получить доказательство связи с исходной фразой, но так, чтобы угадать ее нельзя было. Это и есть суть хеширования. А исходная фраза была такая: Annulo cingitur, tenui plano, nusquam cohaerente, ad eclipticam inclinator. То есть «Окружен кольцом тонким, плоским, нигде не подвешенным, наклоненным к эклиптике». И речь шла о все том же Сатурне и его кольцах, с которыми более толково разобрался голландский физик, астроном и изобретатель Христиан Гюйгенс, почти полвека спустя продолживший дело Галилея.