Виды алгоритмов


Каждый криптоалгоритм решает конкретную проблему или задачу. Для каждой такой задачи, как правило, существует целый ряд эквивалентных алгоритмов, так что программист может выбрать любой. В PGP алгоритмы нужны для решения четырех задач, которые будут описаны ниже. PRZ первоначально избрал по одному алгоритму для каждой задачи, но новейшие версии PGP дают выбор из целого множества алгоритмов. Это соответствует распространенной философии PGP: каждый человек может использовать тот алгоритм, который кажется ему безопасным. Другой хорошей причиной для такого разнообразия является то, что не все алгоритмы могут свободно использоваться во всех странах. Это также полезно в случаях, когда алгоритмы имеют отличные друг от друга характеристики.

Право выбора алгоритма может быть удобным для шифрующей стороны, однако расшифровывающей может быть затруднительно (вернее, невозможно) расшифровать неизвестный ей алгоритм. Пользователи вынуждены всегда обновляться до новейшей версии. 1 NAI, текущий разработчик PGP, само собой, не имеет ничего против такого результата. В будущем было бы неплохой мыслью добавлять идентификатор алгоритма в PERL-реализации, чтобы старые версии тоже могли расшифровывать новые алгоритмы :-). А если более серьезно, быть может, создателям PGP не стоит реализовывать все алгоритмы, как они пытаются делать. Это не ведет к улучшению безопасности, ведь одного слабого алгоритма и доли невезения хватит, чтобы скомпрометировать всю систему. Не стоит рассчитывать, что среднестатистический пользователь сделает правильный выбор между алгоритмами PGP.

Блочные шифры

Алгоритмы симметричного шифрования предназначены для обычного шифрования, когда один и тот же пароль или ключ используется и для зашифрования, и для расшифрования данных. Блочные шифры – это симметричные шифры, которые оперируют с блоками, скажем, по 8 или 16 байт. Ключ тоже имеет фиксированный размер (обычно 16 байт, или 128 бит). Блочные шифры – это рабочие лошадки криптографии: они быстры, легки в программировании, эффективно расходуют место (не раздувают данные), поэтому могут обрабатывать крупные массивы информации. Концептуально, они заменяют большие секреты (информацию) малыми секретами (ключом). Но делать какие-то впечатляющие вещи с последними – это уже задача продвинутых протоколов.

Алгоритмы с открытым ключом

Алгоритмы с открытым ключом делают хитрые штуки с открытыми и закрытыми ключами. Они, как правило, медлительны и более уязвимыми к особым видам атак, поэтому эти ключи применяют только для шифрования небольших объемов случайных данных, например, случайных сеансовых ключей для блочного шифра или выходов хэш-функции. Алгоритмы с открытым ключом обычно используют для шифрования и цифровой подписи.

Хэш-функции

Хэш-функция принимает файл произвольной длины и вырабатывает короткую свертку, или отпечаток, этого файла фиксированного размера (обычно 16 или 20 байт). Хэш-функции имеют сходство с блочными шифрами в том смысле, что они оптимизированы для обработки больших объемов данных, и заменяют большое доказательство (документ) малым (сверткой). Аналогично, это уже задача других алгоритмов, что делать с полученным отпечатком.

Отпечатки обладают двумя важными свойствами: располагая отпечатком, взломщик не может подобрать другой файл с таким же отпечатком, и взломщик не может подобрать два файла с одинаковым отпечатком. (Не может подобрать практически. Теоретически совпадения существуют, но из-за большого числа потенциально возможных хэш-значений взломщику не хватит времени вычислить достаточно сверток, чтобы их обнаружить.) Благодаря этим свойствам достаточно подписать хэш файла, а не весь нужный файл. Хэш-функции также используются для преобразования парольных фраз (различной длины) в ключи для блочных шифров (фиксированной длины) и для превращения данных с некоторой случайностью в данные, которые выглядят истинно случайными. PGP с помощью хэш-функции вычисляет отпечатки открытых ключей. Так, вместо проверки всего ключа вам достаточно сверить его отпечаток.

Алгоритмы разделения секрета

Эти алгоритмы не применяются для базовых функций PGP, но доступны в последних из версий. С помощью алгоритмов разделения секрета можно разбить закрытый ключ на произвольное количество блоков m таким образом, что если снова объединить любые n этих блоков, вы получите закрытый ключ, однако не сможете этого сделать, если блоков будет меньше n (т.е. n≤m). Пример такой возможности – это компания с тремя исполнительными директорами, где любые двое из них вместе могут подписать контракт.

Назад[link1] | Дальше[link2]


1 Автор несколько утрирует масштаб проблемы. Большинство версий PGP совместимы хотя бы по одному симметричному шифру и алгоритму хэширования. Ситуация с PK-алгоритмами немного иная, поскольку они также привязаны к определенным форматам ключей, но, в любом случае, это не ломает общую совместимость даже с ранними версиями программы, – прим. пер.

Ссылки
[link1] http://www.pgpru.com/biblioteka/statji/analiznadezhnostipgp/istorija/obzorversijj

[link2] http://www.pgpru.com/biblioteka/statji/analiznadezhnostipgp/algoritmypgp/simmetrichnyeblochnyeshifry