суббота, 21 августа 2010 г.

ISSP \ Домен 06. Криптография. Часть 1

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

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

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

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

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

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


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

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

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

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ZYXWVUTSRQPONMLKJIHGFEDCBA

Например, слово «security» при шифровани преобразуется в «hvxfirgb».

Это пример шифра подстановки (substitution cipher), т.к. в нем каждая буква заменяется на другую букву. Этот тип шифра подстановки называется моноалфавитным шифром подстановки (monoalphabetic substitution cipher), поскольку он использует только один алфавит. Существует полиалфавитный шифр подстановки (polyalphabetic substitution cipher), использующий несколько алфавитов.

Этот простейший метод шифрования работал в те древние времена, но, в конце концов, потребовались более сложные алгоритмы.
ПРИМЕЧАНИЕ. Термин «шифр» - это то же самое, что «алгоритм шифрования».
Около 400 года до нашей эры Спартанцы использовали систему шифрования информации, с помощью которой они писали сообщения на листах папируса, а затем оборачивали его вокруг деревянной палки. Эта палка доставлялась получателю, который оборачивал папирус вокруг другой палки. Получатель мог прочитать сообщение только в том случае, если он обернул папирус вокруг палки правильного размера, как показано на Рисунке 6-1. Это называется шифром скитала (scytale chiper). Пока папирус не был обернут вокруг правильной палки, надписи на нем казались просто кучей случайных символов.

Рисунок 6-1. Скитала использовалась Спартанцами для шифрования и расшифрования сообщений

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

Стандартный алфавит:
ABCDEFGHIJKLMNOPQRSTUVWXYZ

Сдвинутый алфавит:
DEFGHIJKLMNOPQRSTUVWXYZABC

Рассмотрим в качестве примера зашифрование сообщения «Logical Security». Мы берем первую букву этого сообщения «L» и сдвигаем ее на три позиции по алфавиту. Зашифрованная версия первой буквы будет «O», которую мы записываем. Следующей буквой нашего сообщения является «O», которая соответствует букве «R» в сдвинутом на три позиции алфавите. Мы продолжаем этот процесс, пока не зашифруем все сообщение. Зашифрованное сообщение мы передаем получателю, который выполняет тот же процесс в обратном порядке.

Исходный текст:
LOGICAL SECURITY

Шифротекст:
ORJLFDO VHFXULWB

Сегодня такие техники выглядят слишком примитивными, чтобы быть реально эффективными, однако во времена Юлия Цезаря, когда вообще немногие умели читать, это обеспечивало высокий уровень защиты. Шифр Цезаря также является примером моноалфавитного шифра. Когда больше людей научилось читать и смогло проводить обратный инжиниринг процесса такого шифрования, криптографы усложнили методику, создав полиалфавитные шифры.
ROT13. Еще совсем недавно (в 1980-х годах) применялся метод шифрования ROT13, который на самом деле использовал те же идеи, что и шифр Цезаря. Он использовал сдвиг алфавита на 13 букв вместо трех. Он не использовался для реальной защиты данных, потому что в то время люди уже могли легко справиться с такой задачей. Он использовался в различных онлайновых форумах для публикации запрещенной информации, для ее распространения среди пользователей.
В 16-м веке во Франции Виженер разработал полиалфавитный шифр подстановки для Генри III. Он был основан на шифре Цезаря, но увеличивал сложность процессов шифрования и расшифрования.

Как показано на Рисунке 6-2, нам нужно зашифровать сообщение SYSTEM SECURITY AND CONTROL. У нас есть ключ, который имеет значение SECURITY. Также у нас есть таблица Виженера (или алгоритм), который в действительности является просто более продвинутым вариантом шифра Цезаря. Тогда как Цезарь использовал для шифрования только один сдвинутый алфавит, шифр Виженера использовал 27 сдвинутых алфавитов, в каждом из которых алфавит был сдвинут на одну букву дальше, чем в предыдущем.

Рисунок 6-2. Полиалфавитный алгоритм был разработан для повышения сложности шифрования
ПРИМЕЧАНИЕ. Открытый текст (plaintext) – это читаемая версия сообщения. Полученный в результате выполнения процесса шифрования текст называют шифротекстом (ciphertext).

Итак, взглянув на пример на Рисунке 6-2, мы берем первую букву ключа «S» и начинаем с первого алфавита в нашем алгоритме, отыскивая в нем столбец «S». Затем мы берем первую букву открытого текста «S» и опускаемся по выбранному столбцу вниз, до строки «S». На пересечении этих строки и столбца мы видим букву «K». Это и есть первая буква шифротекста для нашего исходного сообщения – записываем ее. Затем мы берем следующую букву ключа «E» и следующую букву открытого текста «Y». На пересечении столбца «E» и строки «Y» мы видим букву «C». Это вторая буква шифротекста, которую мы записываем рядом с первой. Мы продолжаем этот процесс для всего сообщения (если длина сообщения превышает длину ключа, буквы ключа циклически повторяются). Полученный в результате шифротекст мы отправляем получателю. Получатель должен использовать тот же самый алгоритм (таблицу Виженера) и иметь тот же ключ (SECURITY) для выполнения обратного процесса преобразования и получения исходного текста сообщения.

В Средние века эволюция криптографии продолжилась. Различные страны улучшали свои методы, используя новые инструменты. В конце 19 века криптография стала неотъемлемой частью взаимодействия между военными подразделениями.

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

Перед началом процесса шифрования, оператор (источник сообщения) должен был произвести начальную настройку Энигмы. Затем оператор печатал первую букву сообщения, а машина заменяла эту букву на другую букву и показывала ее оператору. Шифрование заканчивалось после перемещения роторов заранее определенное число раз. Например, если оператор печатал букву «Т» в качестве первой буквы, машина Энигма могла показать ему букву «М» в качастве первого замененного значения. Оператор записывал эту букву «М» на лист. Затем оператор передвигал ротор вперед и вводил следующую букву. Каждый раз перед вводом новой буквы оператор перемещал ротор. Процесс продолжался пока все сообщение не было зашифровано. Затем зашифрованный текст передавался по радиоволнам обычно на немецкие подводные лодки класса U. Выбор замены для каждой буквы зависел от установки ротора. Таким образом, наиважнейшей секретной частью этого процесса (ключом) была начальная установка и то, как оператор передвигал ротор в процессе шифрования и расшифрования сообщения. Оператор на каждой стороне должен был знать эту последовательность перемещений. Это позволяло немецким военным взаимодействовать между собой.

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

У криптографии богатая история. Мария, Королева Шотландская, поплатилась жизнью из-за того, что отправленное ей зашифрованное сообщение было перехвачено. Во время Войны за Независимость Бенедикт Арнольд использовал кодовую книгу (codebook cipher) для обмена информацией о перемещениях войск и стратегических военных успехах. Военные всегда лидировали в использовании криптографии как для шифрования информации, так и в попытках дешифровать зашифрованную врагами информацию. Уильяма Фридерика Фридмана, который опубликовал в 1920 году «Показатель совпадения и его применение в криптографии», называют отцом современной криптографии. Он взломал множество сообщений, перехваченных в ходе Второй Мировой Войны. Шифрование использовалось многими правительствами и военными. Оно внесло большой вклад в Великую Победу, т.к. позволило выполнять скрытые секретные маневры. Однако немецкой армии оно принесло великое поражение, когда ее криптосистемы были вскрыты и дешифрованы.

Когда были изобретены компьютеры, возможности методов и устройств шифрования возросли экспоненциально, криптография была многократно усилена. Эра компьютеров дала разработчикам криптографии беспрецедентные возможности для разработки новых методов шифрования. Самым известным и успешным проектом был Люцифер, разработанный IBM. Люцифер использовал сложные математические уравнения и функции, которые позднее были адаптированы и модифицированы NSA (National Security Agency – Агентство национальной безопасности США) в выпущенном им в 1976 году стандарте DES (Data Encryption Standard – Стандарт шифрования данных), ставшим правительственным стандартом. DES использовался во всем мире для проведения финансовых и иных транзакций, он был встроен в огромное количество коммерческих приложений. DES имеет богатую историю, он использовался на протяжении 25 лет.

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

Усилия взломщиков кодов и криптоаналитиков, а также возможности обработки огромных объемов чисел заполнившими рынок микропроцессорами, с каждым годом ускоряли эволюцию криптографии. Поскольку плохие парни становились все умнее и получали в свое распоряжение больше ресурсов, хорошие парни должны были увеличивать свои усилия и улучшать стратегии. Криптоанализ (cryptanalysis) – это наука, изучающая и взламывающая секреты шифровальных процессов, компрометирующая схемы аутентификации и выполняющая обратный инжиниринг алгоритмов и ключей. Криптоанализ является важной частью криптографии и криптологии. Криптоанализ, выполняемый хорошими парнями, предназначен для выявления недостатков и слабостей, заставляя разработчиков вернуться к чертежной доске и усовершенствовать компоненты. Также криптоанализ выполняется любопытными и мотивированными хакерами, для выявления тех же недостатков, но только с целью получения ключа шифрования для несанкционированного доступа с его помощью к конфиденциальной информации.

ПРИМЕЧАНИЕ. Криптоанализ – это очень сложная наука, которая охватывает широкий спектр тестов и атак. Мы рассмотрим эти атаки в конце этого Домена. Криптология, с другой стороны, изучает криптоанализ и криптографию.

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

Ссылки по теме:

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


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

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

В шифровании, ключ (криптопеременная) – это значение, которое состоит из длинной последовательности случайных битов. Но действительно ли это просто случайный набор битов, собранных вместе? На самом деле – нет. Алгоритм использует ключевое пространство (keyspace), являющееся диапазоном значений, которые могут использоваться для создания ключа. Когда алгоритму нужно сгенерировать новый ключ, он использует случайные значения из этого ключевого пространства. Чем шире ключевое пространство, тем больше доступных значений можно использовать для создания ключа, а чем больше случайных вариантов ключей, тем сложнее взломщику подобрать их. Например, если алгоритм позволяет использовать ключи длиной 2 бита, ключевое пространство для этого алгоритма составляет всего 4 возможных значения, это максимальное количество возможных вариантов различных ключей для этого алгоритма. Это очень узкое ключевое пространство, поэтому атакующему не потребуется много времени, чтобы найти правильный ключ и воспользоваться им.

Широкое ключевое пространство включает в себя гораздо больше возможных вариантов ключей. Сегодня используются ключи, которые чаще всего имеют длину 128, 256, 512 или 1024 бита. Если размер ключа равен 512 бит, он обеспечивает 2^512 возможных вариантов ключей (ключевое пространство). Алгоритмы шифрования должны использовать все ключевое пространство и выбирать значение для нового ключа максимально случайным образом. Если используется небольшое ключевое пространство, оно может обеспечить слишком мало вариантов для генерации ключа, как это показано на Рисунке 6-3. Это повышает шансы атакующего взломать ключ и дешифровать защищенную информацию.

Рисунок 6-3. Более широкое ключевое пространство позволяет получить гораздо большее количество возможных вариантов значений ключей

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

Рисунок 6-4. Без знания правильного ключа, перехваченное сообщение будет бесполезно для злоумышленника

Криптосистемы. Криптосистема содержит все необходимые компоненты для выполнения зашифрования и расшифрования. Примером криптосистемы является PGP (Pretty Good Privacy). Криптосистема содержит как минимум следующее:
  • Программное обеспечение
  • Протоколы
  • Алгоритмы
  • Ключи

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

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

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

Это очень похоже на происходящие в настоящее время дебаты о программном обеспечении с открытым кодом по сравнению с предварительно скомпилированным.


Стойкость методов шифрования основывается на алгоритме, обеспечении секретности ключа, длине ключа, векторах инициализации, а также том, как все это работает вместе в рамках криптосистемы. При обсуждении стойкости шифрования, говорят о сложности вскрытия алгоритма или ключа, даже если алгоритм не является публичным. При попытке взлома криптосистемы, обычно выполняют перебор всех возможных значений (обычно количество возможных значений колоссально), чтобы найти именно то значение (ключ), которое позволяет расшифровать конкретное сообщение. Стойкость метода шифрования находится в прямой связи с величиной мощностей и количеством времени, необходимых для взлома криптосистемы (перебора всех возможных значений) и получения правильного ключа. Взлом криптосистемы может выполняться с помощью брутфорс-атаки, при которой проверяется каждое возможное значение ключа до тех пор, пока полученный в результате расшифрования исходного сообщения с помощью очередного ключа открытый текст не станет понятным. В зависимости от алгоритма и длины ключа, это может быть как легкой задачей, так и практически невозможной. Если ключ можно взломать за три часа на компьютере с процессором Pentium II, шифр считается абсолютно нестойким. Если ключ может быть взломан только при использовании многопроцессорной системы с тысячей процессоров за 1,2 миллионов лет, шифр считается очень стойким.

ПРИМЕЧАНИЕ. Векторы инициализации мы рассмотрим далее в этом Домене.

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

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

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

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


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

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

ПРИМЕЧАНИЕ. Если Дэвид отправил некое сообщение, а затем заявляет, что он не отправлял его, это называется отказом от авторства (act of repudiation). Если криптографический алгоритм обеспечивает неотказуемость, отправитель не сможет отрицать факт отправки им сообщения (конечно он может попытаться, но криптосистема скажет обратное). Это способ подтверждения честности отправителя.

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

Определения в криптографии. В криптографии важно правильно понимать следующие определения:
  • Управление доступом. Ограничение и контроль попыток доступа субъектов к объектам.
  • Алгоритм. Набор математических правил, используемых для зашифрования и расшифрования.
  • Шифр. Другое название алгоритма.
  • Криптография. Наука секретного письма, которая позволяет сохранять и передавать данные в форме, доступной только уполномоченным лицам.
  • Криптосистема. Аппаратная или программная реализация криптографии, которая преобразует исходное сообщение в шифротекст, либо шифротекст обратно в открытый текст.
  • Криптоанализ. Практическая работа по взлому криптосистем.
  • Криптология. Изучение криптографии и криптоанализа.
  • Аутентификация источника данных (data origin authentication). Проверка источника сообщения (аутентификация системы).
  • Зашифрование (encipher). Действие по преобразованию исходных данных в нечитаемый формат.
  • Аутентификациия отправителя (entity authentication). Проверка личности отправителя сообщения.
  • Расшифрование (decipher). Действие по преобразованию шифротекста обратно в читаемую форму.
  • Ключ. Секретная последовательность битов и инструкций, которые управляют выполнением действий при зашифровании и расшифровании.
  • Кластеризация ключей (key clustering). Случай, когда с помощью двух различных ключей генерируется одинаковый шифротекст из одинакового открытого текста.
  • Ключевое пространство (keyspace). Диапазон возможных значений, используемый при создании ключа.
  • Открытый текст (plaintext). Данные в читаемом формате, также называемые простым текстом (cleartext).
  • Квитанция (receipt). Подтверждение получения сообщения.
  • Фактор трудозатрат (work factor). Предполагаемое время, усилия и ресурсы, необходимые для взлома криптосистемы.
Если некоторые из приведенных выше терминов вам пока не совсем понятны, просто запомните их определение. Мы более подробно рассмотрим их далее в этом Домене.


Одноразовый шифровальный блокнот (one-time pad) – это прекрасная схема шифрования, т.к. при правильной реализации она невзламываема. Она была создана Гилбертом Вернамом в 1917 году и иногда называется шифром Вернама.

Этот алгоритм не использует сдвиг алфавитов, как шифры Цезаря и Виженера, описанные ранее, вместо этого он использует блокнот, заполненный случайными значениями, как показано на Рисунке 6-5. Нам нужно зашифровать некое сообщение и преобразовать его в биты, для этого мы используем наш одноразовый шифровальный блокнот, который заполнен случайными битами. В процессе шифрования используется двоичная математическая функция «исключающее ИЛИ» (XOR).

Рисунок 6-5. Одноразовый шифровальный блокнот

XOR – это операция над двумя битами, она часто используется в двоичной математике и методах шифрования. При выполнении XOR над двумя битами, имеющими одинаковое значение, в результате получается 0 (1 XOR 1 = 0), если значение битов разное, в результате получается 1 (1 XOR 0 = 1). Например:

Поток сообщения:   1001010111
Ключевой поток:    0011101010
Поток шифротекста: 1010111101

Так, в нашем примере выполняется операция XOR над первым битом сообщения (1) и первым битом в одноразовом блокноте (0), что дает первое значение шифротекста (1). Затем выполняется XOR над следующим битом сообщения (0) и следующим битом в блокноте (0), что дает второе значение шифротекста (0). Этот процесс продолжается пока все сообщение не будет зашифровано. Полученное в результате зашифрованное сообщение отправляется получателю.
На Рисунке 6-5 мы видим, что получатель должен иметь точно такой же шифровальный блокнот для расшифрования сообщения путем выполнения обратного процесса. Получатель выполняет XOR над первым битом зашифрованного сообщения и первым битом в блокноте. В результате он получает первый бит открытого текста. Получатель продолжает этот процесс, пока не расшифрует все сообщение.

Схема шифрования с использованием одноразового шифровального блокнота считается невзламываемой только в том случае, если в процессе ее реализации выполнены следующие условия:
  • Блокнот должен использоваться только один раз. Если он используется более одного раза, это может привести к появлению шаблонов (pattern) в процессе шифрования, что поможет злоумышленнику взломать шифр.
  • Блокнот должен существовать ровно столько же времени, что и само сообщение. Если он уничтожен раньше, не удастся расшифровать сообщение. А если он используется и в дальнейшем, его многократное применение создает описанную выше проблему с появлением шаблонов.
  • Блокнот должен распространяться безопасным образом и защищаться получателем. Это очень сложный и неудобный процесс, поскольку блокноты обычно представляют из себя просто отдельные листы бумаги, которые нужно доставлять с доверенным курьером и надежно охранять в каждом пункте назначения.
  • Блокнот должен быть заполнен действительно случайными значениями. Это кажется простой задачей, однако даже современные компьютерные системы не обладают генераторами действительно случайных чисел, на них используются генераторы псевдослучайных чисел.
ПРИМЕЧАНИЕ. Генератор чисел (number generator) используется для создания потока случайных значений. Предварительно он должен быть инициализирован начальным значением. Соответствующая часть программного обеспечения берет в качестве начального значения сочетание нескольких значений переменных состояния компьютерной системы (время, циклы процессора и т.п.). Несмотря на то, что компьютерная система сложна, она все же является предсказуемой средой, поэтому получаемые значения в любом случае предсказуемы, они не являются действительно случайными, а только псевдослучайными.

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

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

Требования при использовании одноразовых блокнотов. Чтобы схема шифрования с одноразовыми блокнотами была невзламываемой, каждый блокнот в схеме должен:
  • Состоять из действительно случайных значений
  • Использоваться только один раз
  • Безопасно передаваться получателю
  • Должен быть надежно защищен как на стороне отправителя, так и на стороне получателя
  • Срок его жизни не должен отличаться от срока жизни сообщения

Двумя шифрами из шпионских романов являются шифры с динамическим ключом (running key) и скрытые шифры (concealment cipher). Шифр с динамическим ключом может использовать ключ, которому не нужен электронный алгоритм и замена битов, вместо этого он использует компоненты окружающего его мира. Например, алгоритмом может быть набор книг, принятый отправителем и получателем. Ключом в таком шифре может быть страница в книге, номер строки и буквы. Например, если я получаю сообщение от суперсекретного шпиона, в котором написано «149l6c7.299l3c7.911l5c8», оно может означать, что мне нужно взять первую книгу из заранее определенного набора книг, открыть 49 страницу, найти шестую сверху строку и в ней седьмую от края страницы букву. Я записываю эту букву. Следующий числовой набор в сообщении говорит мне, что нужно взять вторую книгу, открыть 99 страницу, найти третью строку и в ней седьмую букву. Последнюю букву я беру из девятой книги, с 11 страницы, из пятой строки, восьмую в строке. Таким образом, я получаю важное секретное сообщение. Шифры с динамическим ключом могут использоваться многими различными способами, в том числе и более сложными, но основная идея в них одна и та же.

Скрытие шифра – это передача сообщения внутри другого сообщения. Например, я и мой суперсекретный шпион договариваемся, что значением ключа будет являться каждое третье слово в сообщении. Когда я получаю от него сообщение, я выделяю и записываю каждое третье слово. Предположим, я получаю от него сообщение, в котором написано «The saying, ‘The time is right’ is not cow language, so is now a dead subject». Поскольку ключом является выбор каждого третьего слова, я получаю сообщение «The right cow is dead».

ПРИМЕЧАНИЕ. Скрытие шифра также называют нулевым шифром (null cipher), это является разновидностью стеганографии. Стеганография описана далее в этом разделе.

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


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

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

Давайте рассмотрим отдельные составляющие, используемые стеганографией:
  • Носитель (carrier). Сигнал, поток данных или файл, внутри которого скрыта передаваемая информация.
  • Стеганографическая среда (stego-medium). Среда, в которой скрыта информация.
  • Полезная нагрузка (payload). Собственно информация, которая должна быть скрыта и передана.
Таким образом, секретное сообщение, которое вам нужно безопасно передать, является полезной нагрузкой. Изображение, в которое вы «встраиваете» ваше сообщение, является файлом-носителем, а стеганографической средой является формат этого графического файла, например, JPEG.

Метод встраивания сообщения в некую среду использует подход самого младшего бита (LSB – least significant bit). Многие типы файлов содержат некоторое количество битов, которые могут быть изменены без заметного влияния на содержимое файла в целом. Это именно те биты, в которых могут быть скрыты секретные данные. Для скрытия информации с использованием подхода LSB лучше всего использовать графические файлы высокого разрешения, либо звуковые файлы с высоким битрейтом. В таких файлах производимые изменения отдельных битов практически не заметны и они не ведут к увеличению размера этих файлов. Изображение с 24-битным цветом использует по 8 бит для представления каждого из трех цветов (красный, зеленый и синий) каждого из пикселей изображения. Это 256 градаций каждого из цветов. Человеческий глаз не сможет различить рядом стоящие значения цветов (например, градации синего цвета 11111111 и 11111110). Поэтому в данном случае может использовться метод самого младшего бита для хранения информации, не имеющей отношения к цвету.

Цифровое изображение – это просто файл, в котором хранится информация о цветах отдельных пикселей, составляющих это изображение. Чем больше файл, тем больше битов в нем может быть незаметно изменено.

Существует множество различных инструментов для скрытия сообщений внутри файлов-носителей.

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

Но что если вам нужно передать мне секретное сообщение в нецифровом формате? Вы должны использовать физические методы передачи секретного сообщения, вместо компьютерных. Вы можете написать сообщение невидимыми чернилами, а мне нужно будет применить определенные химические вещества, чтобы прочитать это сообщение. Вы можете сделать очень маленькую фотографию сообщения, называемую микрофотоснимком (microdot), и поместить ее на изображении штампа. Другим вариантом физической стеганографии является передача очень сложной картины, на которую может быть нанесено секретное сообщение, увидеть которое можно только при определенном освещении, глядя на картину под определенным углом. Все это является примерами способов передачи сообщений, защищенных стеганографическими методами.
Цифровые водяные знаки. Вам встречались копии документов, на которые нанесен логотип или торговая марка некоторой компании? Встроенные в компьютерные файлы логотипы и торговые марки называются цифровыми водяными знаками (digital watermark). В отличие от секретных сообщений, которые встраиваются таким образом, чтобы оставаться незаметными, цифровые водяные знаки, как правило, делают заметными. Нанесенные цифровые водяные знаки предостерегают людей от несанкционированного использования цифровых материалов, не являющихся их собственностью. Такую разновидность стеганографии называют управлением правами на цифровые материалы (DRM – Digital Rights Management). DRM применяют для ограничения использования материалов, являющихся собственностью конкретной компании или человека.
Ссылки по теме:

1 комментарий:

Анонимный комментирует...

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

В книге:
The pad must be as long as the message. If it is not as long as the message, the pad will need to be reused to cover the whole message. This would be the same thing as using a pad more than one time, which could introduce patterns.

Речь о длине а не о времени