Зачем же автору понадобилось рассказывать про мудреные асимметричные алгоритмы шифрования? Ведь при использовании гораздо более понятного симметричного алгоритма можно получить тот же самый результат: взять ключ K, зашифровать текст X, получить шифротекст Y и передать его вместе с ключом… Вы хорошо подумали? Допустим, «некто» получил Y и K, выполнил расшифровку, и ему не совсем понравилось содержание исходного текста. Настолько не понравилось, что он взял да и чуть-чуть его изменил, в результате чего получился текст X-штрих (по которому вы должны этому «некто», предположим, N-значную денежную сумму). А потом спокойненько зашифровал его ключом K и представил на суд шифротекст Y-штрих. Как вы сможете доказать, что это — не то, что вы хотели сказать?
Чтобы этого не произошло, приходится использовать более сложные, но единственно возможные в описанной ситуации асимметричные алгоритмы шифрования. Из приведенного примера должно быть понятно, что при использовании асимметричных алгоритмов ключ шифрования Q нужно хранить в секрете. Ведь с его помощью можно из любого открытого текста получить шифротекст, который подлежит расшифровке (а значит, и проверке) с помощью открытого ключа R. Если секретный ключ Q станет известен злоумышленнику (в такой ситуации говорят, что ключ Q скомпрометирован), то этот злоумышленник сможет зашифровать любой документ и представить его от вашего имени. Напротив, хранить открытый ключ R нет никакого смысла. Его предназначение как раз в том и состоит, чтобы любой желающий мог расшифровать созданный вами шифротекст и таким образом убедиться в его подлинности. Из-за описанных особенностей ключей асимметричные алгоритмы иногда называют алгоритмами с открытым ключом.
Говорят, что в старые времена разрубали монету и давали по одной половинке двум гонцам. Даже если они не были знакомы между собой, при встрече они могли сложить имеющиеся у них части монеты и убедиться, что служат общему делу. Для образности можно сравнить монету с ключом асимметричной криптографии, а части этой монеты — соответственно с секретным и открытым ключами. Вспомним о том, что секретный и открытый ключи, вообще говоря, взаимозаменяемы. То есть, если сообщение шифруется с помощью одного ключа, его можно расшифровать с помощью другого. Как можно использовать это свойство на практике?
Предположим, что кто-то хочет передать вам конфиденциальное сообщение таким образом, чтобы прочесть его мог только адресат. В этом случае ему достаточно узнать ваш открытый ключ (как было выяснено выше, это не составляет никакой проблемы и не несет никакой угрозы), а потом выполнить шифрование сообщения с его помощью. Полученный шифротекст может быть передан вам по открытым каналам связи. В соответствии с обсужденными выше свойствами криптографии с открытым ключом исходное сообщение может быть восстановлено из такого шифротекста только обладателем секретного ключа. Однако в этой статье основное внимание уделяется описанию средств защиты файлов от несанкционированных изменений. В этом направлении осталось рассмотреть еще один момент.
Предположим, что файл имеет достаточно большой размер. Если зашифровать его описанным выше способом, получится шифротекст, по размеру сравнимый с исходным файлом. Конечно, его можно расшифровать с помощью открытого ключа (заодно проверив целостность), но удобнее все-таки иметь перед глазами открытый текст, а количество абракадабры для служебных целей уменьшить. Для этих целей используются так называемые хэширующие преобразования, которые из текста произвольной длины позволяют получить текст фиксированной длины существенно меньше исходного текста. А основным свойством таких преобразований является то, что при небольших изменениях исходного текста результаты преобразования меняются очень сильно, так что практически невозможно для двух различных осмысленных исходных текстов получить одинаковые хэш-преобразования. Как этим воспользоваться? Выполняется хэширование исходного текста, а уже результат шифруется асимметричным алгоритмом с использованием секретного ключа.