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