MD5 (" abc ") = 900150983cd24fb0d6963f7d28e17f72 основан на математическом свойстве факторизации больших чисел .
Результатом является 128-битная строчка показанная здесь в шестнадцатеричном формате . Если хеш результат представленный в какой-либо форме дать опять на вход хеш- функции , то получится новый хеш . Если этот процесс повторять и результаты собрать в последовательность , мы получим хешчейн .
Хешчейн
Хешчейн - это последовательность гомогенных блоков данных , попросту блоков , соединенных вместе хешфункцией . Рисунок 1 схематично показывает простой хешчейн .
Рис 2
Рис 1
Каждый блок состоит из хеша и пэйлоуда ( payload - полезная нагрузка ). Хеш каждого блока вычисляется из целого предыдущего блока . Пэйлоуд каждого блока - это произвольные данные . Такой хешчейн обладает важным свойством : данные в блоке не могут быть изменены без нарушения целостности цепочки . Например если пэйлоуд первого блока изменить , тогда нужно изменить хеш второго блока , а значит и третьего , и так далее .
Следующий шаг - разрешить только одному человеку создавать новый блок в цепочке . Одним из способов является криптография публичного ключа ( PKC - Public Key Cryptography ).
Криптография Публичного Ключа
Основная идея PKC такая же , как и у хеш-функций - одностороннее вычисление . Имея некоторые данные m любой может вычислить зашифрованное значение Enc ( m ). Но только тот , кто знает специальный ключ шифра , может сделать обратное вычисление , то есть найти m из Enc ( m ). Этот процесс называется раcшифрование .
Для достижения PKC нужно создать так называемую пару ключей : публичный и приватный . Публичный ключ используется для шифрования данных и может быть открыт для всех . Приватный ключ используется для расшифрования и должен быть сохранен в секрете .
Рисунок 2 схематично показывает направления вычислений . Верхняя стрелка представляет теоретическую возможность расшифрования без знания наперед приватного ключа . Например , RSA шифр
Если кто-нибудь найдет способ факторизовать большое число ( что и есть публичный ключ в RSA ), тогда он сможет расшифровать данные без знания наперед приватного ключа , фактически взламывая криптографию .
Есть два сценария работы PKC . В первом сценарии одна сторона , желающая передать секретное сообщение другой стороне , шифрует это сообщение публичным ключом второй стороны . Зашифрованное сообщение может быть открыто , поскольку только вторая сторона способна читать зашифрованные сообщения закодированные их публичным ключом . Единственная уязвимость этого метода ( очевидно исключая решение проблемы факторизации ) заключается в знании и доверии публичному ключу изначально . Чтобы обеспечить надежность метода существует целая система иерархии публичных сертификатов , например , в протоколе https .
Второй сценарий противоположен первому . Предположим Алис шифрует некоторые данные используя свой собственный приватный ключ ( либо шифрует только хеш взятый от этих данных ) и затем открывает все : и изначальные данные и шифр . Теперь любой человек , знающий публичный ключ , может проверить что шифр действительно вычислен с помощью приватного ключа связанного с этим публичным ключом . Такая проверка работает как удостоверение что именно Алис сделала шифрование . Этот процесс и зашифрованная часть называются цифровой подписью .
Рисунок 2 показывает первый сценарий . Во втором сценарии приватный и публичный ключи поменяны местами . Давайте проследим еще раз . Алис вычисляет хеш из документа m и шифрует этот хеш своим приватным ключом , затем публично открывает документ и зашифрованный хеш . Теперь любой может взять хеш из документа и в то же время расшифровать зашифрованный хеш используя публичный ключ Алис . Если оба значения одинаковые , это значит , что Алис в самом деле подписала документ m . Этот сценарий
17