железоComputer Review#8(80)

Секреты сети

Одним из направлений деятельности при обеспечении информационной безопасности в крупных сетях является передача секретных сообщений. Для этого используются различные криптографические системы. Цель криптосистемы заключается в том, чтобы зашифровать осмысленный исходный (открытый) текст, получив в результате совершенно бессмысленный на взгляд шифрованный текст, или, коротко, криптограмму. Получатель, которому текст предназначен, должен быть способен расшифровать эту криптограмму, восстановив, таким образом, соответствующий ей открытый текст. При этом злоумышленник (криптоаналитик) должен быть неспособен его раскрыть. Существует важное отличие между расшифрованием и раскрытием криптограммы. Раскрытием криптосистемы называется результат работы криптоаналитика, приводящий к возможности эффективного раскрытия любого, зашифрованного с помощью данной криптосистемы, открытого текста. Степень неспособности криптосистемы к раскрытию называется ее стойкостью. Существующие криптосистемы могут классифицироваться несколькими способами, но в основном их можно делить на криптосистемы ограниченного и общего использования, а последние в свою очередь на криптосистемы с секретным ключом и с открытым ключом.

Стойкость криптографической системы ограниченного использования, основывается на сохранении в секрете самого характера алгоритмов шифрования и дешифрования. Простейшим историческим примером такой системы можно считать так называемый шифр Цезаря, который представляет собой простую замену каждого символа открытого текста третьим следующим за ним символом алфавита. Здесь и везде далее мы, разумеется, имеем в виду латинский алфавит. Например, слово "TEXT" превращается в "WHAW".

Криптосистемы ограниченного использования обычно разрабатываются любителями и почти никогда не являются крепким орешком для опытного криптоаналитика-профессионала. Но самое главное, что такие системы вообще не используются для конфиденциальной связи в нынешней ситуации, когда в сети должна обеспечиваться работа большого числа абонентов. Стойкость же криптосистемы общего использования основывается не на секретности алгоритмов шифрования и дешифрования, а на секретности некоторого сравнительно короткого значения, которое называется ее ключом.

Такой ключ должен легко вырабатываться конкретными пользователями при помощи их собственных ключей таким образом, чтобы даже разработчик криптосистемы не мог раскрыть ее, не имея доступа к тому ключу, который в ней в действительности использовался. Для некоторых применений (главным образом в военных, дипломатических и разведывательных ведомствах) для разработчика общей криптосистемы нет никаких причин для того, чтобы открытым образом описывать характер ее алгоритмов. Сохраняя эту информацию в тайне, можно обеспечить даже некоторую дополнительную безопасность. Однако, решающим обстоятельством, позволяющим полагаться на такую секретность, это не является, поскольку ничего нельзя сказать о том, когда она может быть скомпрометирована. По этой причине, исследования надежности таких систем всегда должны проводиться в предположении, что потенциальному противнику о криптосистеме известно все, за исключением реально используемого секретного ключа. А если на самом деле противник такими знаниями не обладает, то это даже лучше. Для других типов применений, подобных, например, большим финансовым комплексам, в действительности лучше раскрывать, как работают их криптосистемы. В противном случае пользователи всегда будут предполагать возможность существования некоего секретного метода раскрытия такой криптосистемы.

Одним из очевидных требований обеспечения стойкости общей криптографической системы является огромное количество возможных ключей, не позволяющее провести исчерпывающий поиск (в котором осуществляется попытка систематического дешифровывания заданной криптограммы, используя при этом каждый из возможных ключей до тех пор, пока не получится некий осмысленный открытый текст). Например, при наивном подходе шифр Цезаря можно рассматривать как пример общей криптосистемы (с ключом K=3), шифрование в которой заключается в замене каждого очередного символа открытого текста K-ым после него символом соответствующего алфавита, где K - некий секретный ключ. Но такое обобщение является бесполезным, потому что оно предоставляет возможность использования лишь 25 нетривиальных ключей, и тем самым обеспечивает простоту полного перебора для любого, кто предположительно знает метод шифрования (по крайней мере, если шифрованное сообщение имеет достаточную избыточность, чтобы у него была единственная осмысленная расшифровка).

Однако необходимо осознавать, что большое число ключей само по себе стойкости криптосистемы не обеспечивает. Так, например, еще одно обобщение шифра Цезаря состоит в том, что в качестве ключа выбирается произвольная перестановка всех 26 букв алфавита, а шифрование каждого символа открытого текста производится в соответствии с этой перестановкой.

Заметим, что существует 26! различных перестановок из 26 символов, которое является числом большим, чем 4•1026, можно было бы предположить, что полный перебор на таком множестве ключей невозможен, потому что, если опробовать каждый возможный ключ, когда в течении каждой секунды проверяется миллиард ключей, это заняло бы десять миллиардов лет! И все-таки такие одноалфавитные шифры простой замены являются довольно легкими для криптоанализа хотя бы только из-за разницы в частотах, с которыми в естественном языке встречаются различные символы открытого текста. Известны намного более надежные криптографические системы, которые были разработаны и со значительно меньшим ключевым пространством.

Если вернуться к нашей классификации, то общая криптографическая система называется криптосистемой с секретным ключом, если в ней любые две стороны, перед тем, как связаться друг с другом, должны заранее договориться между собой об использовании в дальнейшем некоторой секретной части информации, которая и называется секретным ключом.

В нашем предыдущем примере, когда, скажем, Вася зашифровывает сообщение, используя известную перестановку в качестве ключа, и посылает криптограмму Пете, то в самом лучшем случае, Петя должен заранее знать, какой ключ был использован при шифровании открытого текста.

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

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

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

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

Само собой разумеется, что такие системы могут быть стойкими, только если по свойствам общедоступного алгоритма шифрования невозможно "вычислить" или подобрать соответствующий ему алгоритм дешифрования.

Центральными понятиями всей криптографии с открытым ключом являются понятия однонаправленной функции и однонаправленной функции с "потайным ходом". Однонаправленными называются такие функции, восстановление аргумента которых по их значению является сложным. Это понятие не нужно путать с функциями, которые являются математически необратимыми из-за того, что они не взаимнооднозначны (т.е. из-за того, что существует несколько или не существует ни одного значения аргумента для одного значения функции).

Современная математика и наши нынешние знания не позволяют доказать, что однонаправленные функции вообще существуют. Однако, несмотря ни на что, у нас имеются кандидаты в этом смысле среди функций. Как эффективно вычислить их мы знаем, тогда как никаких эффективных алгоритмов их обращения неизвестно. В этом преимущество, но и недостаток. Некий ученый однажды может открыть такой эффективный алгоритм, и все криптосистемы, использующие данную функцию, будут обречены на полный провал. И тем не менее, считается, что надежность некоторых методов достаточно высока.

Простой пример однонаправленной функции - целочисленное умножение. Известно, что умножать даже очень большие числа относительно нетрудно, в то время как даже самый мощный компьютер не в состоянии разложить на множители с наилучшим имеющимся в его распоряжении алгоритмом двухсотзначное десятичное число, являющееся произведением двух примерно одинакового размера простых чисел. Конечно, необходимо понимать, что "не в состоянии" означает "не в состоянии за приемлемое время даже при использовании самой мощной вычислительной техники".

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

Многие криптосистемы с открытым ключом к настоящему времени уже раскрыты, однако наилучшая из них все еще остается несокрушимой. Она же была и самой первой криптосистемой с открытым ключом из вообще предложенных в открытой литературе. Это криптосистема Райвеста, Шамира и Эдльмана, более известная под названием RSA. Основана она на вере в то, что модульное возведение в степень при фиксированных экспоненте и модуле является однонаправленной функцией с потайным ходом.

Система достаточно надежна, однако, пользователи RSA должны быть осведомлены о том, что эта криптосхема является слабой при некоторых видах атак на основе перехваченной шифрограммы. Злоумышленник тогда может, замаскировавшись под законного получателя, попытаться спровоцировать ответ пользователя на свой запрос, на основе которого сможет раскрыть исходный текст. Неизвестно, может ли более хитроумная атака на основе перехваченной шифрограммы действительно раскрыть RSA в том смысле, что позволит нарушителю вычислить все (или хотя бы одно) секретные значения потайных ходов алгоритма. Если бы это было так, то последующие шифрограммы можно было бы расшифровывать без необходимости обращения к законному получателю.

От такой проблемы в некоторой степени избавлено вероятностное шифрование. В таких системах одно и то же сообщение в открытом тексте может привести к возникновению большого числа различных шифрограмм. В результате криптоаналитик, имеющий по его предположению истинный открытый текст не сможет долго проверять свою догадку посредством его шифрования (с помощью алгоритма законного получателя) и сравнения полученного результата с переданной шифрограммой. Однако, такие системы имеют другие проблемы - раскрытие данных при накоплении перехваченных шифрограмм.

Несмотря на все преимущества криптографии с открытым ключом и вероятностного шифрования, ни одна из их реализаций, предложенных до сих пор, не может конкурировать в скорости с системами с секретным ключом, такими, например, как DES или ГОСТ 28147-89. Когда необходимо передать большое количество информации, может оказаться, что использование RSA было бы слишком медленным, тогда как использование DES было бы либо невозможным (из-за отсутствия разделенного секретного ключа), либо не отвечающим требованиям секретности.

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

Если сообщение достаточно длинное, предпочтительно использовать криптосистему с открытым ключом несколько раз в течении этой передачи, с тем чтобы секретные ключи почаще менялись. Без особого замедления протокола это значительно повышает стойкость гибридной системы по двум причинам. Во-первых, при атаке только на основе перехваченной криптограммы криптосистему с секретным ключом раскрыть легче, если доступна большая шифрограмма. Такая атака является единственным типом атаки, имеющим смысл в этой ситуации. И во-вторых, даже если криптоаналитику и удастся определить один из секретных ключей, он сможет расшифровать лишь соответствующую часть сообщения.

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

Ольга Хомкова, CR

железоComputer Review#8(80)

Copyright © 1998 "Компьютерное обозрение"
Поддержка - "Иркутский Издательский Дом" - www.iid.irk.ru
Дизайн - leidenwebdesign - http://leiden.irkutsk.ru