Генерация ключей

Часто в литературе или в разговорах людей, мало искушенных в криптологии, путаются понятия ключа, пароля (парольной фразы) и шифра. Есть тенденция делать эквивалентными термины шифра и ключа. Понятие ключа тождественно шифру при использовании шифрования гаммированием (посимвольное наложение случайной последовательности) или при потоковом шифровании (побитовое наложение случайной последовательности). В этих случаях ключ и шифр действительно по сути одно и то же, так как собственно криптоалгоритм банален - сложение по модулю (XOR для бинарных операций). При использовании других криптоалгоритмов приравнивать понятия шифра и ключа было бы технически неверным, здесь ключ то же самое, что и пароль. Ученая братия, чаще всего для поднятия престижа в глазах непосвященных, склонна изобретать новые термины. Ключ - типичный тому пример. Далее в статье "ключ" будет использоваться как эквивалент пароля.

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

  1. Постановка активного "стража". Охрана активного или пассивного типа: будь-то взвод красноармейцев с трехлинейками (ОМОНа в современных реалиях), крепкие стены и пуленепробиваемые двери, наличие сигнализации, организация патрулей для выборочной проверки охраняемой территории и т.п. Применительно к компьютерной области - это создание нестандартных или модифицированных операционных систем и сетевых протоколов, использование программ-ревизоров (вирусов, дисков, оперативной памяти, портов TCP/IP, системного реестра), то есть программно-аппаратная реализация того, что аналогично патрулированию, "шаманство" с "межсетевыми экранами". Список можно продолжать в меру подкованности в системном администрировании и с приобретением новых навыков в борьбе с "проникновением извне".
  2. Разграничение доступа с авторизацией. Замок и ключ, пароль и отзыв. В компьютерах широко применяется криптография (шифрование), здесь аналогом замка служит собственно криптоалгоритм или его программная реализация, ключа - собственно пароль, вводимый пользователем. Причем изобретение пароля (генерация в профессиональной терминологии) зачастую проблема самих пользователей компьютерных систем (то есть "утопающих"). Систему устройства "замка" или криптоалгоритма уже не принято скрывать. Стойкость профессионально реализованной криптосистемы определяется только стойкостью ключа (пароля). Хороший шифр взламывается прямым перебором всех возможных вариантов ключей (brute force attack - "атака грубой силой").
  3. Создание параллельных или скрытых контейнеров. Проще говоря, обустройство тайников. Другая ипостась данного метода - это стеганография (тайнопись). Грамотно охраняемое имущество либо прячется за тридевять земель, в тридесятом царстве, либо на "самом видном месте". Не стоит думать, что стеганография - это удел спецслужб или криминального мира. Человечество издавна пользуется подобными методами. Молодежный или преступный сленг - типичный пример лингвистической стеганографии, где либо обычные слова имеют другой, "скрытый", смысл, либо фраза несет скрытое послание, непонятное или неопределяемое непосвященными.

Количество возможных вариантов пароля определяется формулой:, где P - число возможных комбинаций, N - размер множества символов, которые могут использоваться при генерации в каждой позиции ключа, K - число символов в пароле. Если уйти от математической строгости, то можно резюмировать следующие два момента: чем больше символов задействовано при генерации ключа, тем лучше (лучше задействовать все возможные символы) и чем больше символов в пароле, тем большая стойкость к взлому.

Простейшие правила создания правил генерации ключей:

  1. Искажение семантически значимой буквы. Если взять слово "мышь", используемое как "затравка" при создании пароля, и заменить букву "ы" на букву "а", то получится слово ("машь"), которого нет в русском языке, однако такое правило легко запоминаемое, и производное слово тоже легко ложится в память. Стоит заметить, что приведенный пример неудачен, слово "мышь", во-первых, очень распространенное, во-вторых, короткое. Это слово будет использоваться лишь для демонстрации. Правильнее будет выбрать редко встречаемое слово длиной минимум семь-восемь букв.
  2. Приведение нескольких символов к верхнему регистру. В паролях должны использоваться буквы как большие, так и малые. Но приведение первой или последней буквы к верхнему регистру было бы очевидным и, соответственно, легко угадываемым действием. Более корректным будет нажимать на клавишу "Shift" при введении второго или третьего символа, но не первого и не последнего. В результате получаем "маШь". Замечу, что использование этого правила в "чистом виде" тоже справедливо раскритиковано, тем более, много компьютерных систем приводят пароль к верхнему регистру перед верификацией.
  3. Склейка нескольких слов. То есть, берется несколько слов, которые складываются вместе. Для демонстрации достаточно будет двух составляющих. Буквальное следование подобной методике раскритиковано и не рекомендовано даже теоретически. В атаках по словарю есть правило подбора паролей путем проверки сложения нескольких слов. Распространенная ошибка пользователей в том, что они просто склеивают слова одно с другим, делая легкой "атаку по словарю". Например, два слова "мышь" и "белая" образуют единую группу - "мышьбелая". Более продвинутой техникой будет склейка слов с использованием служебных символов. Тех символов, которые находятся над цифрами на основной части клавиатуры. Хотя замечу, что склейка слов с помощью служебного символа тоже учитывается взломщиками. Но использование правил 1, 5 и 6 существенно добавит головной боли для злоумышленника. Для примера возьмем символ, расположенный над цифрой пять, - "%" и склеим два слова. В итоге получилось - "мышь%белая".
  4. Периодическая смена паролей. Пароли должны постоянно меняться. Порой, этот призыв так и остается "гласом вопиющего в пустыне". Для второй затравки возьмем название текущего месяца и создадим из названия легко воспроизводимую аббревиатуру из трех букв - "окт". Далее преобразуем полученную затравку по второму правилу - "оКт". Склеим два слова, согласно правилу, изложенному в 3 пункте. Теперь пароль приобретает вид - "маШь%оКт". Осталось приучить себя менять пароли хотя бы раз в месяц.
  5. Добавление цифр в случайном разряде. Общепринято в пароле использовать цифры. Но чтобы это не было сильно обременительно для памяти, в качестве случайной позиции возьмем день недели выхода газеты. Цифрой будет день недели в числовом представлении, считая понедельник первым, а воскресение - седьмым днем. Из пароля получилось что-то вроде: "маШь%5оКт". Для критических приложений это правило следует использовать, как минимум, дважды.
  6. Постановка скобок. Для усложнения пароля парольное слово обрамляют скобками. Скобок, доступных с клавиатурного ввода, четыре пары: "()", "[]", "{}" и "<>" (угловые скобки). В принципе, сгодилась бы любая пара, но использование первой пары широко распространено и поэтому использование ее не рекомендовано. Для примера возьмем вторую пару квадратных скобок. Но не стоило бы делать простое обрамление, так делают в большинстве случаев при оформлении текстов. Поэтому грамотнее было бы обрамить пароль следующими способами: "]]" или "][". Пароль приобрел следующее очертание: "]маШь%5оКт]".
  7. Смена языковой раскладки клавиатуры. Написание русских слов на латинском регистре. Это правило в чистом виде незначительно добавляет стойкость ключу - это правило широко известно и есть во многих программах подбора пароля по словарю. В чистом виде подобное видоизменение слов для генерации ключа не рекомендовано. Но сейчас, после шести преобразований пароля, это правило будет очень кстати. После преобразования пароль приобретает вид: "]vfIm%5jRn]".

Достаточно. Тот криптоаналитик, который скажет, что этот пароль, во-первых, трудно воспроизвести по памяти, во-вторых, легко взломать прямым перебором, "пусть первым бросит в меня камень". Процитирую Герберта Спенсера: "Великая цель образования - не знания, а руководство к действию". Приведенные выше правила - это лишь примеры того, как можно создавать простейшие протоколы генерации стойких ключей.

Для обоснования изложенных правил генерации ключей приведу несколько правил построения криптосистем:

  1. Число операций, необходимых для перебора всех допустимых вариантов ключей, должно иметь нижнюю оценку и быть выше пределов вычислительных систем с учетом использования сетевых вычислений.
  2. Шифртекст должен восстанавливаться только при наличии ключа.
  3. Знание или доступность криптоалгоритма не должно отражаться на стойкости криптосистемы (другими словами, стойкость определяется только самим ключом).
  4. Нельзя использовать простые или легко отслеживаемые зависимости между ключами, применяемыми для зашифровывания. Здесь же необходимо напомнить о недопустимости применения в критических приложениях социально зависимых паролей. Об этом была заметка "Слабые пароли" в 8 номере "Компьютерных Вестей" за 4-10 марта 1999 года.
  5. Любой созданный ключ должен обеспечить равную стойкость к взлому.
  6. Нельзя использовать один и тот же ключ в разных шифросистемах. Повторное использование одинакового ключа приводит к созданию универсальных отмычек, если узнать или подобрать пароль к одному входу, далее злоумышленнику остается только продублировать нажатие клавиш.

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

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

Black Prince,
www.geocities.com/SiliconValley/Way/5801

Версия для печатиВерсия для печати

Номер: 

39 за 1999 год

Рубрика: 

Защита информации
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!