Простейшие методы шифрования с закрытым ключом

Привет!
Давайте рассмотрим что же такое симметричная и асимметричная криптография - почему их так называют, для чего они используются и чем они отличаются.

Если быть точным, то правильнее говорить симметричные и асимметричные алгоритмы шифрования.

Криптография (крипто - скрывать, прятать), как наука о сокрытии написанного, наука о сокрытии информации.

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

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

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

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

Теперь о том для чего и почему используются симметричные и асимметричные алгоритмы:
Из таблицы видно, что для шифрования большого объёма информации, для потокового шифрования (например, VPN с шифрованием) используются быстрые и нетребовательные симметричные алгоритмы.

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

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

Например, VPN с шифрованием:

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

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

Это отличное введение в принципы криптографии.

Если вас серьезно интересует криптография, я настоятельно рекомендую Handbook of Applied Cryptography как удивительную справочную работу. Сначало будет слишком много, но это бесплатно, так что теперь возьмите копию:) и когда вы закончите с AC, прочитайте HAC. (На самом деле, издание в твердом переплете очень хорошо сделано и гораздо легче читать, чем несколько сотен страниц бумаги с лазерной печатью, подумайте о покупке, если вам нравится внешний вид PDF файлов.)

Симметричное шифрование работает, смешивая секретный ввод с секретным ключом таким образом, что он (а) быстро (b) не может выводить вход или ключ из вывода. Детали микширования значительно различаются, но есть блок-шифры и потоковые шифры ; блочные шифры работают, просматривая входные данные в 8 или 16 или 32 байтовых блоках за раз, и рассеивая вход и ключ в этих блоках. Различные режимы необходимы для шифрования большего количества данных, чем пригонки в блоках, а различные режимы работы могут или не могут распространять данные между блоками.

Симметричные шифры являются фантастическими для шифрования массовых данных, от 8 до 8 терабайт, это лучший выбор для шифрования данных.

Асимметричное шифрование работает, используя очень сложные математические проблемы с задними дверями, которые позволяют быстро решить проблему, если у вас есть небольшой кусок очень важных данных. Обычными математическими проблемами являются факторинг больших чисел и дискретные логарифмы . Асимметричные алгоритмы работают с фиксированным размером данных, обычно 1024-2048 бит для RSA и El Gamal и 384 бит для Эллиптическая кривая версий RSA или El Gamal. (Версии Elliptic Curve используют разные field , чем целые числа для их вычислений. RSA и El Gamal и подобные системы работают с любым полем, которое определяет оба операция умножения и добавления, а ECC имеет другое представление этого поля, которое волшебным образом добавляет "больше" данных. Это очень умный способ сделать известные механизмы вписываться в меньшую память, и мое введение в одно предложение может не начинайте делать это справедливо. Простота - удивительная часть.)

Асимметричное шифрование помогает решить проблему распределения ключей, но только: вместо того, чтобы требовать пары ключей O (N ^ 2) между каждой парой люди, которые хотят использовать криптографию, чтобы говорить между собой, для этого требуются ключи O (N), одна общедоступная/частная пара на человека, и все просто должны знать все остальные публичные части. Это все еще непростая задача, поскольку демонстрируется сложность x509 , но такие механизмы, как openPGP и OpenSSH имеют более простые модели и механизмы, которые хорошо работают для многих целей.

Асимметричные шифры обычно используются для передачи ключей сеанса для симметричных шифров. Даже когда передается только небольшой объем данных, криптографы обычно предпочитают отправлять фактические данные, зашифрованные с помощью симметричного шифра, и отправлять ключ, зашифрованный с помощью асимметричного шифрования. Одно огромное преимущество заключается в том, что вы можете отправить сообщение нескольким получателям, а размер сообщения будет равен O (размер сообщения + 100 * 2048 бит) - вы можете зашифровать ключ сеанса каждому из получателей индивидуально, и только передайте сообщение один раз. Большой успех.

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

ТЕРЕНИН Алексей Алексеевич, кандидат технических наук

Криптографические алгоритмы, применяемые для обеспечения информационной безопасности при взаимодействии в ИНТЕРНЕТ

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

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

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

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

Краткий исторический обзор развития шифрования

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

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

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

В средневековой интриганской Европе и Средней Азии, происходит бурное развитие криптографии, и криптоанализа – методов вскрытия шифрованных текстов. Первой систематической работой по криптографии считают книгу архитектора Леона Баттисти Альберти (1404 - 1472). Одним из первых криптоаналитиков был Франсуа Виет (1540 - 1603), при дворе короля Франции Генриха IV. В то же время при дворе папы римского служили советники из семейства Аддженти, которых также можно назвать криптоаналитиками. Весь период до середины XVII в. насыщен работами по криптографии и криптоанализу.

В XIX и в первой половине XX в. для тайной дипломатической переписки многими странами, в том числе и Россией, применяются методы шифрования, ключи для которых составлялись из отрывков определенных текстов обычных книг (шифровальные книги).

С начала ХХ в. - с Первой мировой войны - начинают применяться специальные шифровальные машины.

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

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

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

С 70-х гг. появляются открытые публикации: Хэффи-Дилман в 1976 г. В 1970 г. существовало засекреченное изобретение Джеймса Эллиса (Великобритания) в области криптографии. Наиболее известный алгоритм асимметричной криптографии – RSA, разработанный Рональдом Ривестом, Эдди Шамиром и Леном Эдлеманом в 1977 г. Алгоритм RSA имеет большое значение, т.к. может использоваться как для шифрования с открытым ключом, так и для создания электронной цифровой подписи.

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

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

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

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

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

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

Выход в свет программы PGP (Pretty Good Privacy) Фила Циммерманна (версия 1.0 вышла в 1991 г.) и предоставление ее в открытое и бесплатное использование дали большие возможности рядовым компьютерным пользователям. Фила Циммерманна даже объявили врагом государства, он был приговорен к лишению свободы.

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

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

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

Длина ключа 48 бит означает, что необходимо сделать 2 48 переборов. Увеличение длины ключа, например, всего на 16 бит, означает, что перебрать необходимо в 2 16 раз больше.

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

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

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

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

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

Симметричные алгоритмы шифрования

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

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

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

К симметричным криптосистемам относятся DES , AES, ГОСТ 28147-89 и т.д. Новым направлением в криптографии стало изобретение асимметричных криптосистем с открытым ключом, таких, как RSA, DSA или Эль-Гамаль .

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

Детально криптосистемы с открытым ключом будут рассмотрены далее, а сейчас вернемся к симметричным криптосистемам (КС).

Важнейшей составной частью КС являются шифры или процедуры взаимообратного преобразования открытого текста M в шифртекст M":

M’ = E(M),
M = D(M’),

где E - функция зашифрования и D - функция расшифрования.

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

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

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


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

Среди симметричных шифров наиболее известны и часто используемы следующие (размер блока в битах обозначен как b, число циклов- r, а длина ключа - l):

DES - государственный стандарт США (b = 64, r = 16, l = 56). В настоящее время доказана недостаточная стойкость DES против атаки методом простого перебора .
Triple DES и DESX (b = 64, r = 16, l = 168;112) - последовательное применение алгоритма DES с разными ключами, что обеспечивает значительную устойчивость к взлому .
IDEA - (b = 64, r = 8, l = 128) . Активные исследования его стойкости выявили в нем ряд слабых ключей, однако вероятность их использования пренебрежимо мала.
RC5 - параметризованный шифр с переменными размером блока (b I ), количеством циклов (r Ј 255) и числом битов ключа (l Ј 2040) . Исследования его стойкости показали, что при b = 64 он недоступен для дифференциального криптоанализа при r і 12 и для линейного криптоанализа при r і 7.
ГОСТ 28147-89 - российский стандарт шифрования данных (b = 64, r = 32, l = 256). Для ГОСТа было найдено множество слабых ключей, значительно снижающих его эффективную стойкость в простых режимах шифрования . Оценка криптостойкости ГОСТа затруднена также тем фактом, что важнейшая часть алгоритма - узлы замены или S-боксы в терминологии шифра DES - не описана в стандарте и законы ее генерации остаются неизвестными. В то же время доказано, что высока вероятность получения слабых узлов замены, упрощающих криптоанализ данного шифра.
Blowfish - это 64-битовый блочный шифр, разработанный Шнайером (Schneier) в 1993 г., реализуется посредством перестановок и замен, зависимых от ключа. Все операции основаны на операциях XOR и прибавлениях к 32-битовым словам (XORs and additions on 32-bit words). Ключ имеет переменную длину (максимально 448 бит) и используется для генерации нескольких подключевых массивов (subkey arrays). Шифр был создан специально для 32-битовых машин и существенно быстрее DES .

Сейчас в США принят новый стандарт шифрования AES. Был проведен конкурс среди алгоритмов шифрования, в котором победил и лег в основу AES – Rijndael. Rijndael представляет собой итеративный блочный шифр, имеющий переменную длину блоков и различные длины ключей. Более подробное описание этого алгоритма и итогов проведения конкурса дано в .

В мире разработано, опубликовано и исследовано достаточно большое число симметричных алгоритмов (табл. 1), из которых лишь DES и его модификация Triple DES были достаточно проверены временем. В таблицу не включены малоизвестные и слабоизученные алгоритмы, такие, как Safer, и т.д.

Таблица 1. Обзор симметричных методов шифрования

Длина ключа, бит

Размер блока, бит

Затраты на подбор ключа, MIPS x лет

Примечание

DES Разработан в 1977 г. фирмой IBM по заказу правительства США. За 20 лет не найдено способа взломать шифр, кроме полного перебора в среднем 25% всех ключей, но при современных возможностях он позволяет достичь успеха
Triple DES Трехкратное повторение алгоритма DES с разными ключами. Эффективная длина ключа 112 бит.
IDEA Разработан в 1992 г. Lai и Massey. Не взломан до настоящего времени
ГОСТ 28147-89

нет данных

Является Государственным стандартом в России
RC5

10 3 и выше

40-битовый ключ был взломан перебором в 1997 г. за 3,5 ч, 48-битовый ключ - за 313 ч
Blowfish

нет данных

Разработан Шнайером (Schneier) в 1993 г.
Это шифр Файстела (Feistel) был создан специально для 32-битовых машин и существенно быстрее DES
AES (Rijndael) Длина ключа и длина блока могут быть 128, 192 или 256 бит, независимо друг от друга Предложен криптоаналитиками Joan Daemen и Vincent Rijmen.
Алгоритм не имеет известных слабостей в защите (по данным NIST).

В настоящее время симметричные алгоритмы с длиной ключа более 100 бит (Triple DES и IDEA и т.д.) не являются невскрываемыми. Отечественный алгоритм ГОСТ по сравнению с ними отличается повышенной сложностью как при генерации узлов замены, так и при генерации ключей. Также для алгоритма ГОСТ существует большая вероятность генерации нестойкого ключа, что в некоторых режимах шифрования снижает его эффективную длину ключа с 2 256 до 2 62 .

Triple DES является более проверенным, чем IDEA алгоритмом и обеспечивает приемлемую скорость работы. Алгоритм Triple DES представляет собой трехкратное применение алгоритма DES к одним данным, но с разными ключами.

В Россию DES проник и достаточно широко практически используется как неотъемлемая деталь различных программных и аппаратных средств, из которых наиболее широко известны система S.W.I.F.T., секретные модули VISA и EUROPAY, секретные модули банкоматов и торговых терминалов и, наконец, смарт-карты. Особенно напряженные дискуссии вокруг алгоритмов шифрования данных вызваны именно смарт-картами. При этом есть серьезные основания считать, что надежность отечественных криптосистем конверсионного происхождения будет превосходить зарубежные аналоги .

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

Алгоритм ГОСТ 28147-89 построен по тому же принципу, что и DES, это классический блочный шифр с секретным ключом, однако отличается от DES большей длиной ключа, большим количеством раундов и более простой схемой построения самих раундов. В табл. 2 приведены его основные параметры, для удобства - в сравнении с параметрами DES .

Таблица 2. Сравнение параметров шифров DES и ГОСТ

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

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

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

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

Вскрытие шифра

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

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

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

Бороться с методом полного перебора позволяет увеличение длины используемого ключа шифрования. Причем, увеличение его длины всего на 8 бит увеличивает число вариантов перебора в 2 8 раз, соответственно на 64 бита – в 2 64 раз.

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

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

Проблему распределения секретных ключей по общедоступному каналу связи позволяет разрешить алгоритм Диффи-Хелмана. Но данный алгоритм относится к асимметричным криптографическим алгоритмам. В них используются два ключа: открытый и закрытый.

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

Асимметричные алгоритмы шифрования

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

  • RSA . Используется задача факторизации (вычисления простых сомножителей) большого целого числа. Построен на основе перемножения двух простых чисел большой разрядности . Широко применяется в криптографических протоколах закрытия информации и аутентификации.
  • Эль-Гамаль (El-Gamal) . Основан на задаче дискретного логарифмирования в конечном поле . Используется в стандартах электронной цифровой подписи (ЭЦП) DSS , ГОСТ Р34.10-94 и т.д.
  • Эллиптические кривые (elliptic curve) . Основан на задаче дискретного логарифмирования на эллиптических кривых в конечном поле.

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

  • закрытие информации;
  • аутентификация с использованием ЭЦП;
  • защищенное от перехвата распределение открытых ключей (криптосистема Диффи – Хеллмана (Diffie – Hellman)) .

Более подробно преимущества и недостатки асимметричных криптосистем рассмотрены в .

Хэш-функции

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

  • MD5 (128);
  • SHA-1 (160);
  • ГОСТ (256).

Таблица 1. Перечень и параметры хэш-функций

Хэш-функция

Длина значения, бит

Размер блока, бит

Производительность, Мб/с

Примечание

нет данных

Разработана Роном Ривестом в 1989 г.
Обнаружены коллизии в упрощенной функции компрессии

Разработана Роном Ривестом в 1990 г.
Обнаружены коллизии

Разработана Роном Ривестом в 1991 г.
Обнаружены коллизии в функции компрессии

Разработана в 1995 г. в Европейском проекте RIPE

Разработана в 1995 г. в NIST

ГОСТ России

В табл. 1 не приведены редко используемые и экзотические хэш-функции, а также хэш-функции, построенные на симметричных блочных шифрах по схемам Мейера – Матиаса (Meyer – Matyas) и Девиса – Прайса (Davies – Price) .
Подробнее упомянутые хэш-функции описаны в .
Хотя средства криптографической защиты с «открытым ключом» или асимметричные криптосистемы особенно широко используются начиная с конца 70-х гг. , они обладают очень серьезным недостатком – крайне низким быстродействием. В связи с этим на практике обычно используется комбинированная схема криптографической защиты . При установлении соединения и аутентификации сторон используется криптография с «открытым ключом», затем генерируется сеансовый ключ для симметричного шифрования, на котором закрывается весь трафик между абонентами. Сеансовый ключ также распространяется с использованием открытого ключа.



Рис. 2. Схема алгоритма асимметричной криптосистемы

Таблица 2. Асимметричные криптосистемы

Название метода

Метод взлома
(мат. проблема)

Криптостойкость, MIPS

Примечание

2,7 1028 для ключа 1300 бит

Разработан в 1977 г. Роном Ривестом, Ади Шамиром и Леонардом Эйдельманом.
Включен во многие стандарты

факторизация больших простых чисел

El-Gamal
(Эль-Гамаль)

нахождение дискретного логарифма в конечном поле

при одинаковой длине ключа криптостойкость равная RSA

Разработан Эль-Гамалем. Используется в алгоритме цифровой подписи DSA-стандарта DSS

Эллиптические уравнения

решение эллиптических уравнений

криптостойкость и скорость работы выше, чем у RSA

Современное направление. Разрабатывается многими ведущими математиками

Метод RSA в настоящее время является стандартом де-факто в системах информационной безопасности и рекомендован CCITT (Consultative Committee in International Telegraphy and Telephony – Международным консультативным комитетом в области телеграфии и телефонии, МККТТ) в стандарте X.509 . RSA используется во многих международных стандартах (S-HTTP, PEM, S-MIME, S/WAN, STT, SSL, PCT, SWIFT, ANSI X.9.31 и т.д.) , в системах обслуживания кредитных карточек, в операционных системах для защиты сетевых протоколов.
Для методов RSA и Эль-Гамаля проведено огромное количество научных исследований, изучено большое количество методов их криптоанализа, защиты от атак, детально рассчитана криптостойкость в зависимости от длины ключа и других параметров. Оба метода обладают одинаковой криптостойкостью (при одинаковой длине ключа) и примерно одинаковой скоростью работы. Учитывая, что метод эллиптических уравнений (elliptic curve) проходит стадию апробации и не был подвергнут до настоящего времени такому большому количеству попыток взлома, как методы RSA и Эль-Гамаля, использование в системах шифрования двух последних выглядит предпочтительнее.
Подробное описание данных алгоритмов приведено в .

Электронная цифровая подпись

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

  • отказ (ренегатство) – абонент А заявляет, что не посылал сообщения Б, хотя на самом деле посылал;
  • модификация (переделка) – абонент Б изменяет документ и утверждает, что данный документ (измененный) получил от абонента А;
  • подмена – абонент Б формирует документ (новый) и заявляет, что получил его от абонента А;
  • активный перехват – нарушитель (подключившийся к сети) перехватывает документы (файлы) и изменяет их;
  • «маскарад» – абонент В посылает документ от имени абонента А;
  • повтор – абонент В повторяет ранее переданный документ, который абонент А послал абоненту Б.

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

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

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

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

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



Рис. 3. Алгоритм электронной цифровой подписи

На вход алгоритма поступает файл, необязательно текстовый, основное требование, предъявляемое к входным параметрам ЭЦП, – фиксированная длина, для этого используется хэш-функция.
Теоретически применение различных средств шифрования сулит радужные перспективы всем компаниям, использующим в своей деятельности Интернет, но тут возникает новая проблема – найти компромисс с государством и его законами, данная проблема подробно освещена в .
В соответствии с Федеральным законом «Об электронной цифровой подписи» № 1-Ф3 от 10 января 2002 г. электронная цифровая подпись в электронном документе признается равнозначной собственноручной подписи в документе на бумажном носителе. Также обеспечивается правовое регулирование для организации электронного документооборота, распределения открытых и закрытых ключей, построения центров сертификации, определяются ответственности сторон.
Принятие данного закона, хотя в нем есть некоторые неопределенности, позволил регламентировать использование асимметричных средств шифрования, в данном случае ЭЦП, для защиты данных в Интернете.

Литература

  1. Shannon C.E. Communication Theory of Secrecy Systems. Bell Systems Technical Journal 28, 1949, p. 656 - 715.
  2. Federal Information Processing Standards Publication 46-2. Data Encryption Standard (DES). NIST, US Department of Commerce, Washington D.C, 1993.
  3. ГОСТ 28147-89. Системы обработки информации. Защита криптографическая. Алгоритм криптографического преобразования.
  4. Bruce Schneier, Applied Cryptography: Protocols, Algorithms and Source Code in C. John Willey & Sons, 1994.
  5. Nechvatal James. Public-Key Cryptography. NIST, Gaithersburg, 1990.
  6. Weiner M. Efficient DES key search: Technical Report TR-244, School of Computer Science, Carleton University, 1994.
  7. Odlyzko A.M. The Future of Integer Factorization. Cryptobytes, RSA Laboratories.- vol. 1, N 2, 1995, p. 5 - 12.
  8. Rogaway P. The security of DESX. Cryptobytes, RSA Laboratories, vol. 2, N 2, 1996, p. 8 - 11.
  9. Kaliski B., Robshaw M. Multiple encryption: weighing security and perfomance. // Dr. Dobb’s Journal, January 1996, p. 123 - 127.
  10. Rivest R.L. The RC5 Encryption Algorithm. Cryptobytes, RSA Laboratories, vol. 1, N 1, 1995, p. 9 - 11.
  11. Kaliski B., Yiqun Lisa Yin. On the Security of the RC5 Algorithm. Cryptobytes, RSA Laboratories, vol. 1, N 2, 1995, p. 12.
  12. Олейник В. Циклы в алгоритме криптографического преобразования данных ГОСТ 28147-89. http://www.dekart.ru
  13. Андрей Винокуров. Алгоритм шифрования ГОСТ 28147-89, его использование и реализация для компьютеров платформы Intel x86.
  14. Что такое Blowfish? http://www.halyava.ru/aaalexey/CryptFAQ.html.
  15. Linn J. Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures. RFC 1421, 1993.
  16. Евтушенко Владимир. Тройной DES. Новый стандарт? http://www.bgs.ru/russian/security05.html.
  17. Что такое ГОСТ28147-89? http://www.halyava.ru/aaalexey/GOST.html.
  18. Andrew Jelly. /Криптографический стандарт в новом тысячелетии/, http://www.baltics.ru/~andrew/AES_Crypto.html.
  19. Алгоритм шифрования Rijndael. http://www.stophack.ru/spec/rijndael.shtml.

Симметричное шифрование

Шифрование, в котором как для шифровки, так и для расшифровки, используется один и тот же пароль. В противоположность асимметричному шифрованию, в котором для шифровки и расшифровки используются два разных ключа: «открытый» и «закрытый».

Основное преимущество симметричного шифрования перед асимметричным: оно гораздо быстрее (в 1000 раз). Часто используются «гибридные схемы шифрования», когда управляющее соединение создаётся асимметричным шифрованием, а уже по этому каналу стороны договариваются друг с другом, какой симметричный алгоритм шифрования выбрать и каким будет ключ шифрования (сеансовый ключ). Симметричный канал в такой схеме обычно пересоздаётся заново через некоторое время во избежание подбора симметричного пароля (если бы симметричный канал существовал, скажем, несколько лет, то при недостаточно надёжном алгоритме шифрования взломщик вполне мог бы подобрать пароль за это время на каком-нибудь кластере суперкомпьютеров).


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

Зачастую стойкость алгоритма, особенно к дифференциальному криптоанализу, зависит от выбора значений в таблицах подстановки (S-блоках). Как минимум считается нежелательным наличие неподвижных элементов S(x) = x, а также отсутствие влияния какого-то бита входного байта на какой-то бит результата — то есть случаи, когда бит результата одинаков для всех пар входных слов, отличающихся только в данном бите.

«Блочные» шифры обрабатывают информацию блоками определённой длины (обычно 64, 128 бит), применяя к блоку ключ в установленном порядке, как правило, несколькими циклами перемешивания и подстановки, называемыми «раундами». Результатом повторения «раундов» является «лавинный эффект» — нарастающая потеря соответствия битов между блоками открытых и зашифрованных данных.

Примеры симметричных алгоритмов шифрования: AES, Twofish.

Алгоритм Диффи-Хеллмана

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

Но встречаться лично с каждым, в современном быстронесущемся мире — это физически невозможно.

Эта задача первоначального обмена секретным ключом оставалась нерешённой, пока Диффи и Хеллман не опубликовали свою статью в 1976 году.

Понять идею алгоритма Диффи-Хеллмана можно, посмотрев этот ролик:


Математическое обоснование

Математическое обоснование алгоритма Диффи-Хеллмана использует два вспомогательных тождества.

X mod y — это по определению «остаток от деления x на y». Первое тождество: (x mod y)^z mod y = x^z mod y. Это тождество можно доказать, просто разложив x = a * y + b:

((a * y + b) mod y)^z mod y = b^z mod y

X^z mod y = (a * y + b)^z mod y = b^z mod y, так как скобка разложится по биному Ньютона и все остальные слагаемые с y дадут 0 в остатке от деления на y.

Второе вспомогательное тождество — (x^y)^z = x^(yz) — основано на свойстве перемножения степеней, и легко доказывается простым разложением степени на множители: (x^y)^z = (x, перемноженное y раз), перемноженное z раз = x, перемноженное у*z раз = x^(yz).

Теперь непосредственно описание алгоритма Диффи-Хеллмана. Предположим, есть два абонента: Алиса и Боб. Они соединяются друг с другом по нешифрованному каналу и пересылают друг друга случайно взятые два числа g и p, которые не являются секретными и могут быть подсмотрены кем угодно. Для того, чтобы теперь создать неизвестный более никому секретный ключ, оба абонента генерируют большие случайные числа: Алиса — число a, Боб — число b. Затем Алиса вычисляет значение A = g^a mod p и пересылает его Бобу, а Боб вычисляет B = g^b mod p и передаёт его Алисе. Эти числа так же передаются по нешифрованному каналу, и могут быть подсмотрены кем угодно.

Далее Алиса вычисляет значение B^a mod p = (g^b mod p)^a mod p = g^(ab) mod p, а Боб — вычисляет значение A^b mod p = (g^a mod p)^b mod p = g^(ab) mod p, и это и будет их общий секретный ключ K, который можно использовать для создания симметричного шифрованного канала. Даже если злоумышленник перехватит все передаваемые числа (A, B, g, p), то при достаточно больших выбранных числах p, a и b, он не сможет за разумное время вычислить секретный ключ K по A = g^a mod p и B = g^b mod p.

Требования, предъявляемые к генерируемым числам, таковы (пояснения ниже):

P — достаточно большое простое число
(p - 1) / 2 — тоже простое число
g — первообразный корень по модулю p

(простое число — это чисто, которое не раскладывается на целые множители)

"g — первообразный корень по модулю p" означает, что при всевозможных n выражение g^n mod p образует полный набор чисел от 1 до p - 1, и поэтому (секретный) сеансовый ключ, который вычислят Алиса и Боб, может быть каким угодно: от 1 до p - 1, и подслушивающему придётся перебирать все числа от 1 до p - 1, а это по условию задачи нереально сделать за разумный срок.

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

Требование величины числа p выдвинуто затем, чтобы полный набор чисел от 1 до p - 1 был настолько огромным, чтобы подслушивающий не мог физически их все перебрать в разумный срок.

Требование "(p - 1) / 2 — тоже простое число" введено для повышения безопасности шифрования, так как существует алгоритм дискретного логарифмирования , позволяющий подслушивающему вычислить (секретный) сеансовый ключ за "полиномиальное" время (то есть, "за разумное время") при условии, что число p - 1 раскладывается на небольшие простые множители. Поэтому введено дополнительное требование, чтобы существовало такое простое число q, что p - 1 = 2q, и тогда q будет очень большим простым числом (того же порядка, что и p), и алгоритм вычисления (секретного) сеансового ключа будет выполняться так же "неразумно долго".

Обычно секретные ключи a и b имеют порядок 10^100, а число p — порядок 10^300. Число g не обязано быть большим и обычно имеет значение в пределах десяти.

Стойкость ко взлому алгоритма Диффи-Хеллмана основывается целиком и полностью на не найденности на текущее время разумно быстрого алгоритма .

Алгоритм Диффи-Хеллмана используется для установки соединения в HTTPS (SSL/TLS), VPN и во многих протоколах. В интернете есть слухи о том, что Агентство Национальной Безопасности США нашло эффективный способ взлома этого алгоритма.

Уязвимость

Открытие Диффи и Хеллмана произвело настоящую революцию в криптографии, так как единственная неразрешимая задача была, казалось бы, полностью решена. Однако выяснилось, что такой алгоритм обмена секретным ключом подвержен уязвимости «посредника» (man in the middle): злоумышленник может просто вклиниться в канал передачи данных между Алисой и Бобом и притвориться для Алисы — Бобом, а для Боба — Алисой. При такой схеме злоумышленник создаст два шифрованных канала (с каждым из абонентов), а абоненты будут думать, что есть только один шифрованный канал — между ними двумя. И злоумышленник будет видеть все данные, передаваемые между абонентами, в расшифрованном виде.

Поэтому в дополнение к алгоритму Диффи-Хеллмана требуется некий способ надёжного подтверждения личности обоих абонентов (Алиса должна удостовериться в том, что она установила соединение именно с Бобом, а Боб, в свою очередь, должен удостовериться в том, что на другом конце провода — именно Алиса). Решается эта уязвимость "алгоритмом подписи RSA" и "центрами сертификации".

Асимметричное шифрование

Асимметричным шифрованием называется схема, при которой есть два ключа: один из них «открытый» (он общедоступен), а другой — «закрытый» (он хранится в тайне его обладателем). Например, каждому человеку на Земле, можно выдать личную пару ключей: открытый и закрытый. Открытые ключи всех людей в таком случае будут общедоступны, а свой закрытый ключ каждый человек будет хранить в тайне.

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

На первый взгляд, какая-то магия. Однако, никакой магии — это просто замечательное математическое открытие.

Диффи-Хеллман для асимметричного шифрования

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

В этом случае Алиса и Боб не устанавливают канал связи. Вместо этого Алиса выбирает себе значения p и g, вычисляет на их основе своё A, и публикует эти три числа в открытом доступе, называя это своим "открытым ключом". Боб, на основе этих трёх чисел, в точности как в алгоритме Диффи-Хеллмана, вычисляет секретный ключ K, после чего шифрует сообщение любым симметричным алгоритмом, используя K в качестве ключа, и передает шифротекст Алисе вместе со своим значением B. Алиса же, имея B, g и p, также вычисляет секретный ключ K, и может расшифровать и прочесть сообщение, которое ей отправил Боб.

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

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

Алгоритм асимметричного шифрования RSA был изобретён в 1977-ом году тремя учёными из MIT"а. После работы над более чем 40 возможными вариантами, им удалось найти алгоритм, основанный на различии в том, насколько легко находить большие простые числа и насколько сложно раскладывать на множители произведение двух больших простых чисел.

Выбираются два больших простых числа p и q (например, по 2048 битов каждое)
Вычисляется их произведение n = p * q
Вычисляется функция Эйлера φ(n) = (p - 1)(q - 1)
Выбирается целое e (1 < e < φ(n)), взаимно простое с φ(n). Обычно в качестве e берут простые числа, содержащие небольшое количество единичных бит в двоичной записи, например, простые числа Ферма 17, 257 или 65537. Такой трюк позволяет возводить любое число в степень e очень быстро в двоичной системе исчисления (n^(2^k) = ((((n^2)^2)^2)^...)
Вычисляется число d, "мультипликативно обратное" к числу e по модулю φ(n): ed mod φ(n) = 1
Пара (e, n) — это открытый ключ, а d — это закрытый ключ

Теперь Алиса может зашифровать сообщение (число) m, предназначенное Бобу, используя открытый ключ Боба (e, n): c = m^e mod n. И только Боб теперь сможет расшифровать это сообщение m, адресованное ему Алисой: c^d mod n = (m^e mod n)^d mod n = m^(ed) mod n = m (математики говорят, что всё сходится).

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

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

RSA или Диффи-Хеллман

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

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

По вычислительной сложности оба алгоритма сравнимы друг с другом.

Цифровая подпись (ЭЦП)

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

Изменим немного рассмотренную выше схему. Пусть Боб, вместо того, чтобы зашифровать сообщение m, предназначенное Алисе, открытым ключом Алисы, зашифрует это сообщение своим закрытым ключом: s(m) = m^d mod n, и отправит это зашифрованное сообщение Алисе. В этом случае Алиса, воспользовавшись открытым ключом Боба, сможет проверить подлинность полученного от него сообщения: m" = s(m)^e mod n (m" и m должны совпадать). Таким образом Алиса может удостовериться, что сообщение отправлено именно Бобом, и не подделано.

Алгоритм цифровой подписи RSA используется в протоколе TLS (он же HTTPS, он же SSL) в связке с алгоритмом обмена ключами Диффи-Хеллмана и алгоритмом симметричного шифрования (например, AES). В этой схеме Диффи-Хеллман служит для безопасного обмена секретным ключом симметричного шифрования передаваемых данных (например, AES), а алгоритм подписи RSA служит для удостоверения личности обоих абонентов во время установки соединения.

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

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

Далее, получатель сообщения берёт от него точно таким же способом "слепок" ("хеш"), и сравнивает свой полученный "слепок" ("хеш") с расшифрованным "слепком" ("хешем"), шифротекст которого он получил вместе с текстом сообщения. Если оба "слепка" ("хеша") совпадают — значит, с вероятностью, стремящейся ко 100%, полученное сообщение подлинное: получено именно от того отправителя, и содержит именно тот текст, который написал отправитель.

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

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

Хеш — это некоторый массив данных определённой длины, полученной при пропускании исходных данных через алгоритм хеширования. Можно сравнить хеш со слепком или отпечатком информации, с той разницей, что у хеша задача противоположная: чтобы по хешу было невозможно сделать какие-либо выводы о том, какой была исходная информация. Для этого хорошие функции хеширования должны удовлетворять требованию о полной утрате всех статистических закономерностей исходного сообщения. Для этого алгоритм хеширования должен иметь «эффект лавины» — должно происходить сильное изменение хеша при 1-битном изменении входных данных (в идеале должны меняться значения половины всех бит хеша).

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

Примеры алгоритмов хеширования: SHA, Twofish, Whirlpool.

Сертификаты

Когда Алиса соединяется с кем-то по асимметрично шифрованному каналу, ей нужно каким-то образом быть полностью уверенной в том, что вторая сторона — именно та, за какую себя выдаёт. То есть, если Алиса соединяется с Бобом, то ей нужно каким-то образом по открытому ключу, полученному в ответ (от якобы Боба), быть полностью уверенной в том, что этот открытый ключ принадлежит именно Бобу (что он подлинный).

Такую возможность предоставляет электронная подпись. Есть некое авторитетное лицо, которому все доверяют, и чей открытый ключ у всех где-то изначально записан, и этот записанный ключ точно 100% подлинный и не подвергается сомнению. И далее уже это авторитетное лицо выдаёт «сертификаты» всем желающим, подписывая эти «сертификаты» своим закрытым ключом. Авторитетному лицу все доверяют в том смысле, что оно идеально честное (не обманет), и хранит свой закрытый ключ в идеальной защищённости (и поэтому он не может быть выкран злоумышленниками для подписывания своих "левых" сертификатов).

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

Авторитетные лица в этой системе называются «доверенными центрами сертификации» («удостоверяющими центрами»). Таких доверенных центров на данное время около 60-ти, и их открытые ключи вшиты во все современные операционные системы и обозреватели интернета (для проверки подлинности электронной подписи сертификатов, получаемых при соединении с сайтами).

Например, когда пользователь соединяется с сайтом https://google.com ("по SSL", он же "TLS"), в ответ ему приходит сертификат ("SSL сертификат"), подписанный каким-либо «доверенным центром сертификации», и полученный сертификат сразу можно проверить на подлинность, проверив его цифровую подпись (обозреватель делает это автоматически). В случае, если сертификат подлинный, и "домен" (google.com), указанный в сертификате, совпадает с тем "доменом" (адресом), на который пользователь пытается зайти, то всё верно, и обозреватель показывает пользователю эту интернет страницу (и в адресной строке появляется значок "защищённого подключения"; обычно это зелёный замок). Если же сертификат не проходит проверку подписи, или если "домен", указанный в сертификате, не совпадает с тем "доменом" (адресом), на который пользователь пытается зайти, то обозреватель не покажет эту интернет страницу, и вместо неё выведет предупреждение о том, что подключение может быть небезопасным, и что возможно злоумышленники пытаются обмануть пользователя.

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

Стать доверенным центром может любая компания, однако для этого ей придётся ежегодно проходить строгие проверки на безопасность (WebTrust). Основные участники рынка сертификации на ноябрь 2012-ого:

Symantec (владеющая VeriSign"ом, Thawte и Geotrust"ом) с долей в 42.9% рынка
Comodo с долей в 26%
GoDaddy с долей в 14%
GlobalSign с долей в 7.7%

Самым первым центром сертификации была «RSA Data Security», основанная изобретателями алгоритма RSA (хорошо заработали, наверное).

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

Если злоумышленникам удастся завладеть вашим закрытым ключом, то ваш сертификат более не сможет обеспечивать вашу подлинность при установке соединения, и об этом следует уведомить организацию, выдавшую вам сертификат. После уведомления, сертификат будет помещён в список недействительных сертификатов (Certificate Revocation Lists, Authority Revocation Lists). Далее обозреватели каждый раз при соединении с сайтом по протоколу HTTPS делают запрос по протоколу Online Certificate Status Protocol для проверки того, не находится ли этот сертификат в списке недействительных сертификатов. Если обнаружится, что этот сертификат более недействителен, то соединение не будет установлено.

Hash-based Message Authentication Code — способ цифровой подписи сообщения "для бедных": не требует наличия сертификатов и интенсивных вычислений. Может использоваться в каких-то простейших случаях, когда использование ЭЦП не целесообразно.

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

Текст сообщения m смешивается с паролем s по схеме, которую концептуально можно выразить как hash(s + hash(s + m)). При таком подходе достигается наилучшая (на текущее время) криптостойкость подписи.

Шифрование на эллиптических кривых

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

Эллиптической кривой (не имеет никакого отношения к "эллипсу") называется множество всех (точек кривой) решений уравнения:

y^2 + a xy + c y = x^3 + b x^2 + d x + f


Например, для пространства всех действительных (вещественных) x и y можно ввести операцию сложения точек на эллиптической кривой, согласно которой для любых двух точек эллиптической кривой P и Q существует единственная точка R", которую можно найти, проведя через точки P и Q прямую, и отметив точку R" пересечения этой прямой с эллиптической кривой. Также вводится "точка в бесконечности 0", такая, что P + Q + R" = 0. Точка R, симметричная точке R" относительно оси Ox, и будет искомой суммой P + Q.

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

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

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

Tor — это способ анонимного доступа к сетевым ресурсам. Можно ходить анонимно в интернет, можно также ходить по ".onion" сайтам, которые анонимно хостятся и доступны только внутри сети Tor"а.

Распространяется Tor в связке с обозревателем Mozilla Firefox, который можно скачать с официального сайта и установить в операционной системе, после чего вся работа через этот "Tor браузер" будет анонимной (по этой причине не следует пользоваться Tor браузером для раскрытия своей настоящей личности: не следует входить через него в свои настоящие учётные записи в социальных сетях, проверять свою настоящую почту и т.п. — оставляйте своё настоящее Я за пределами Tor браузера).


Способ достижения анонимности Tor"а таков. Пользователь устанавливает соединение с Tor сетью, и после этого набирает себе цепочку из трёх случайных промежуточных узлов (называемых "нодами"). Цепочка набирается таким образом, что второй узел выбирается уже после установки соединения с первым выбранным узлом, поэтому дальше первого (входного) узла цепочки настоящий IP-адрес пользователя не просачивается. При этом первый (входной) узел цепочки не имеет никакой возможности определить, что он является именно первым (входным): для него пользователь выглядит точно так же, как и любой другой узел сети Tor"а. Поэтому только последний (выходной) узел цепочки знает, что он выходной, а все остальные узлы цепочки — ничего не знают о своём положении в этой цепочке (за исключением того, что они не являются выходными).

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

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

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

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

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

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

Далее, второй (средний) узел цепочки отправляет данные, с которых снят второй слой шифрования, на последний третий (выходной) узел цепочки. Третий (выходной) узел цепочки полностью расшифровывает трафик, снимая с него последний слой шифрования, и направляет этот трафик на нужный сетевой адрес (в интернете или внутри.onion сети). Получается, что третий (выходной) узел, который ещё называется "exit node", может полностью прослушивать трафик, и видит все данные, которые передаются, но при этом он ничего не знает о настоящем IP-адресе пользователя, поэтому не имеет возможности отследить поток трафика обратно к пользователю.

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

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

Стать узлом ("node") может любой желающий энтузиаст, увеличивая таким образом скорость работы и качество всей сети Tor. Узел может выполнять работу как просто "relay node" (промежуточного узла), так и "exit node" (выходного узла, который непосредственно взаимодействует с интернетом, и за это теоретически могут посадить , как за соучастие в преступлении). На текущее время в сети Tor имеется около 7 000 узлов , 1 000 из которых являются выходными ("exit node").

Для тех, кто хочет закопаться глубоко, есть .

Изначально, концепция "луковой маршрутизации" была придумана в 90-ых годах в лаборатории ВМФ США для обеспечения безопасности сотрудников разведки США, передающих разведданные по интернету. DARPA, явившая миру интернет, тоже впоследствии приложила руку. В начале 2000-ных появилась первая рабочая версия Tor"а, и через пару лет ВМФ США отдали Tor в Open Source, и с тех пор Tor спонсируется всеми желающими как некоммерческая организация (основная часть пожертвований, тем не менее, продолжает идти со стороны правительственных структур США).

Tor через VPN

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

Tor hidden services (.onion сайты)

Любой желающий может запустить свой web-сайт в сети Tor. Такие web-сайты называются "скрытыми сервисами" (hidden service) , по той причине, что владелец web-сайта остаётся анонимным (другими словами, теоретически нет возможности узнать настоящий IP-адрес машины, на которой запущен данный web-сайт; гипотетически можно попробовать как-нибудь угадать, анализируя потоки трафика, но это уже вопрос к специалистам по этой теме).

Работает это так: машина, на которой запущен web-сайт, периодически соединяется со случайно выбранными узлами (introduction points) через случайные цепочки промежуточных узлов, и передаёт этим узлам (introduction points) открытый ключ данного web-сайта. Таким образом web-сайт заявляет о своём существовании в сети Tor, и далее всё взаимодействие пользователей с этим web-сайтом можно просто пустить через эти временные узлы (introduction points) по построенным временным цепочкам, и никто не сможет узнать ничьего настоящего IP-адреса.

Как пользователи узнают о существовании web-сайта, и о том, через какие временные узлы (introduction points) можно попасть на этот сайт? В сети Tor запущена распределённая база данных (Distributed Hash Table) , то есть такая общая база данных, которая равномерно размазана по всем узлам сети Tor. В этой базе данных Tor браузер и будет искать, существует ли в сети Tor запрошенный пользователем web-сайт, и если существует, то через какие временные узлы на этот сайт можно попасть.

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

В описанную выше схему добавляют ещё немного безопасности, вводя отдельный тип узлов (rendezvous points) для пересылки трафика на web-сайт и получения трафика с web-сайта. Эти узлы трафика (rendezvous points), в отличие от временных узлов (introduction points), ничего не знают о том, к какому именно web-сайту относится перегоняемый трафик, тем самым внося ещё немного анонимности и защищённости (как пользователей, так и владельцев web-сайтов).

Узел трафика выбирается пользователем случайно, и информация об этом выбранном узле трафика (зашифрованная открытым ключом web-сайта, с добавлением случайно сгенерированного "пароля") пересылается через временные узлы (introduction points) web-сайту. Далее пользователь и web-сайт устанавливают соединение (стандартную цепочку Tor) с этим узлом трафика, и уже потом через него пересылают друг-другу трафик (после проверки пользователем того самого случайно сгенерированного "пароля", отправляемого web-сайтом обратно пользователю — в подтверждение того, что это именно тот web-сайт, а не подделка, потому что расшифровать ранее отправленный пользователем "пароль" может только сам этот web-сайт). В итоге получается объединённая цепочка из 3 + 3 = 6 узлов.

Можно обратить внимание на то, что у web-сайтов.onion "некрасивые" и странные адреса. Сделано это, как и всё другое в сети Tor, для безопасности пользователя. Для того, чтобы получить DNS имя для сайта, нужно сгенерировать себе пару из открытого и закрытого ключа, и дальше с помощью открытого ключа подписать название сайта. Например, можно взять слово "facebook", подписать его своим открытым ключом, и получится доменное имя "facebookcorewwwi.onion", где "corewwwi" — это подпись слова "facebook" открытым ключом данного сайта.

Таким образом, любой посетитель сайта, устанавливающий соединение с сайтом "facebookcorewwwi.onion", при получении открытого ключа сайта в ходе установки соединения сможет самостоятельно убедиться в том, что этот сайт — действительно тот самый, "настоящий", не поддельный, и соответствует именно этому.onion адресу. Поэтому для.onion сайтов в сети Tor нет необходимости в каком-то Едином Центре Сертификации (как делается в обычном интернете для сертификатов SSL), что входило бы в противоречие с изначальным замыслом сети Tor — децентрализация и безопасность.

I2p ("айтупи") — это анонимная сеть, чем-то похожая на Tor. Если основной задачей Tor"а является предоставление анонимного доступа в интернет, то основной задачей i2p является построение полностью независимой от интернета распределённой анонимной сети со своими "скрытыми" сайтами.

Считается, что уровень анонимности в сети i2p выше уровня анонимности в сети Tor.

В этой части рассмотрены следующие вопросы:

  • Типы шифров
  • Шифры подстановки
  • Шифры перестановки
  • Методы шифрования
  • Симметричные и асимметричные алгоритмы
  • Симметричная криптография
  • Асимметричная криптография
  • Блочные и поточные шифры
  • Векторы инициализации
  • Гибридные методы шифрования
Симметричные шифры делятся на два основных типа: подстановки (substitution) и перестановки (transposition, permutation). Шифры подстановки заменяют биты, символы или блоки на другие биты, символы или блоки. Шифры перестановки не меняют исходный текст, вместо этого они перемещают исходные значения внутри исходного текста – они переставляют биты, символы или блоки символов для скрытия первоначального смысла.

Шифры подстановки используют ключ, который указывает, как следует выполнять подстановку. В шифре Цезаря каждый символ заменялся символом, расположенным на три позиции дальше него в алфавите. Алгоритмом был алфавит, а ключом – инструкция «сдвигать на три символа».

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

В шифре перестановки значение перемешивается (scrambled) или ставится в другом порядке. Ключ определяет позицию, на которую следует переместить значение, как показано на Рисунке 6-6.

Рисунок 6-6. Шифр перестановки


Это простейший пример шифра перестановки, он показывает только способ выполнения перестановки. Если применяются сложные математические функции, перестановка может стать достаточно сложной для взлома. Современные симметричные алгоритмы используют одновременно и длинные последовательности сложных подстановок и перестановок символов шифруемого сообщения. Алгоритм содержит возможные способы для процессов подстановки и перестановки (представленные в математических формулах). Ключ является инструкциями для алгоритма, точно указывая, как должна происходить обработка и в какой последовательности. Чтобы понять связь между алгоритмом и ключом, взгляните на Рисунок 6-7. Образно говоря, алгоритм создает различные ящики, каждый из которых имеет свой (отличный от других) набор математических формул, указывающих шаги подстановки и перестановки, которые должны быть совершены над попадающими в этот ящик битами. Для шифрования сообщения, значение каждого бита должно пройти через различные ящики. Однако если каждое наше сообщение будет проходить через один и тот же набор ящиков в одинаковой последовательности, злоумышленник легко сможет провести обратный инжиниринг этого процесса, взломать шифр и получить открытый текст нашего сообщения.

Рисунок 6-7. Связь ключа и алгоритма


Чтобы помешать злоумышленнику, используется ключ, представляющий из себя набор значений, которые указывают, какие ящики должны использоваться, в какой последовательности и с какими значениями. Так, если сообщение А шифруется ключом 1, ключ требует, чтобы сообщение прошло через ящики 1, 6, 4 и 5. Когда нам нужно зашифровать сообщение В, мы используем ключ 2, который требует, чтобы сообщение прошло через ящики 8, 3, 2 и 9. Ключ добавляет случайность и секретность в процесс шифрования.

Простые шифры подстановки и перестановки уязвимы к атакам, выполняющим частотный анализ (frequency analysis). В каждом языке некоторые слова и шаблоны используются чаще, чем другие. Например, в тексте на английском языке обычно чаще используется буква «е». При выполнении частотного анализа сообщения, взломщик ищет самые часто повторяющиеся шабоны из 8 бит (составляющих символ). Если в коротком сообщении он нашел, например, 12 восьмибитных шаблонов, он может сделать вывод, что это вероятнее всего буква «е» - самая часто используемая буква в языке. Теперь взломщик может заменить эти биты на букву «е». Это даст ему опору в процессе, который позволит ему провести обратный инжиниринг и восстановить исходное сообщение.

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

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

Функции генерации ключей (KDF – key derivation function) используется для генерации ключей, состоящих из случайных значений. Различные значения могут использоваться независимо или совместно в качестве случайного ключевого материала. Созданы алгоритмы, использующие определенные хэши, пароли и/или «соль», которые много раз проходят через математические функции, указанные алгоритмом. Чем больше раз этот ключевой материал пройдет через указанные функции, тем больший уровень уверенности и безопасности сможет обеспечить криптосистема в целом.


ПРИМЕЧАНИЕ . Помните, что алгоритм остается статичным. Случайность процессов криптографии обеспечивается в основном за счет ключевого материала.


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

Криптографические алгоритмы делятся на симметричные алгоритмы , которые используют симметричные ключи (также называемые секретными ключами (secret key)), и асимметричные алгоритмы , которые используют асимметричные ключи (называемые также открытыми (public key) и закрытыми ключами (private key)).

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

Рисунок 6-8. При использовании симметричного алгоритма, отправитель и получатель используют один и тот же ключ для зашифрования и расшифрования данных


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

Число ключей = N(N – 1)/2, где N – число абонентов


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

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

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

Следующий список описывает сильные и слабые стороны криптосистем с симметричными ключами:

Сильные стороны:

  • Гораздо быстрее асимметричных систем
  • При использовании длинного ключа сложно взломать
Слабые стороны:
  • Требует безопасного механизма передачи ключей
  • Каждой паре пользователей нужен уникальный ключ; по мере увеличении количества пользователей, возрастающее число ключей может сделать управление ими просто нереальной задачей
  • Обеспечивает конфиденциальность, но не обеспечивает аутентификацию или неотказуемость
Ниже приведены некоторые примеры симметричных алгоритмов, которые будут подробно рассмотрены позднее в разделе «Блочные и поточные шифры».
  • RC4 , RC5 и RC6
Ссылки по теме:
  • Security in Open Systems, Node 208, “Symmetric Key Cryptography,” by Paul Markovitz, NIST Special Publication 800-7 (July 1994)
В криптографии с симметричными ключами для зашифрования и расшифрования используется один и тот же секретный ключ, тогда как в системах с открытыми ключами для этих целей используются различные (асимметричные ) ключи. При этом два отличающихся асимметричных ключа связаны между собой математически. Если сообщение зашифровано одним ключом, для его расшифрования требуется другой ключ.

В системах с открытыми ключами, создается пара ключей, один из которых является закрытым, другой – открытым. Открытый ключ (public key) может быть известен всем, а закрытый ключ (private key) должен знать только его владелец. Часто открытые ключи хранятся в каталогах и базах данных адресов электронной почты, общедоступных всем желающим использовать эти ключи для зашифрования и расшифрования данных при взаимодействии с отдельными людьми. Рисунок 6-9 иллюстрирует использование отличающихся асимметричных ключей.
Открытый и закрытый ключи асимметричной криптосистемы математически связаны, однако наличие у кого-то открытого ключа другого человека не позволяет узнать соответствующий ему закрытый ключ. Таким образом, если злоумышленник получит копию открытого ключа Боба, это вовсе не значит, что он с помощью какого-то математического волшебства сможет получить соответствующий ему закрытый ключ Боба. Однако, если кто-то получит закрытый ключ Боба, возникнет большая проблема. Поэтому никто кроме владельца не должен иметь доступа к закрытому ключу.

Рисунок 6-9. Асимметричная криптосистема


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

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

Если отправителю в большей степени важна конфиденциальность передаваемой информации, ему следует зашифровать свое сообщение на открытом ключе получателя. Это называют безопасным форматом сообщения (secure message format), поскольку только человек, имеющий соответствующий закрытый ключ, сможет расшифровать это сообщение.

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

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

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

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

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

ПРИМЕЧАНИЕ. Криптография с открытым ключом – это асимметричная криптография. Эти термины взаимозаменяемы.

Ниже указаны сильные и слабые стороны алгоритмов с асимметричными ключами:

Сильные стороны

  • Лучше процесс распространения ключей, чем в симметричных системах
  • Лучше масштабируемость, чем в симметричных системах
  • Могут обеспечить аутентификацию и неотказуемость
Слабые стороны
  • Работают гораздо медленнее симметричных систем
  • Выполняют сложные математические преобразования
Ниже приведены примеры алгоритмов с асимметричными ключами.
  • Криптосистема на основе эллиптических кривых (ECC – Elliptic curve cryptosystem)
  • Алгоритм Диффи-Хеллмана Diffie-Hellman
  • Эль Гамаль (El Gamal)
  • Алгоритм цифровой подписи (DSA – Digital Signature Algorithm)
  • Knapsack
Эти алгоритмы мы рассмотрим далее в этом Домене, в разделе «Типы асимметричных систем».

В Таблице 6-1 приведено краткое резюме основных отличий между симметричными и асимметричными системами.

Таблица 6-1. Различия между симметричными и асимметричными системами


ПРИМЕЧАНИЕ . Цифровые подписи будут рассмотрены позднее в разделе «Цифровые подписи».
Ссылки по теме:
  • Security in Open Systems, Node 210, “Asymmetric Key Cryptography,” by Paul Markovitz, NIST Special Publication 800-7 (July 1994)
  • Frequently Asked Questions About Today’s Cryptography, Version 4.1, Section 2.1.4.5, “What Is Output Feedback Mode?” by RSA Laboratories
Существует два основных типа симметричных алгоритмов: блочные шифры, которые работают с блоками битов, и потоковые шифры, которые обрабатывают по одному биту за раз.

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


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

В алгоритмах рассеивание может происходить как на уровне отдельных битов в блоках, так и на уровне самих блоков. Перемешивание выполняется с помощью сложных функций подстановки, чтобы злоумышленник не мог понять, каким образом заменялись исходные значения и получить оригинальный открытый текст. Представьте, что у меня есть 500 деревянных блоков, на каждый их которых нанесена буква. Я выстраиваю их в линию, чтобы составить из них сообщение (открытый текст). Затем я заменяю 300 из этих блоков блоками из другого набора (перемешивание путем подстановки). Затем я переставляю все эти блоки (рассеивание посредством перемешивания) и оставляю эту кучу. Чтобы вы смогли восстановить мое исходное предложение, вам нужно заменить блоки правильными и расставить их в правильной последовательности. Удачи!

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

Рассеивание, с другой стороны, означает, что один бит открытого текста оказывает влияние на несколько бит шифротекста. Замена значения в открытом тексте должна приводить к замене нескольких значений в шифротексте, а не одного. Фактически, в действительно стойком блочном шифре, при замене одного бита в открытом тексте, должны изменяться около 50% битов в шифротексте. Т.е. при изменении всего одного бита в открытом тексте, изменится около половины шифротекста.

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

Рисунок 6-10. Сообщение разделяется на блоки битов, над которыми выполняются функции замещения и рассеивание


Ключ указывает (см. Рисунок 6-10), какие должны использоваться S-боксы в процесе перемешивания исходного сообщения из читаемого открытого текста в нечитаемый шифротекст. Каждый S-бокс содержит различные методы подстановки и перестановки, которые могут быть выполнены над каждым блоком. Это очень простой пример. В реальности большинство блочных шифров работает с блоками размером по 32, 64 или 128 бит и может использовать гораздо больше S-боксов.

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

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

Рисунок 6-11. В поточном шифре биты, сгенерированные генератором ключевого потока, объединяются посредством XOR с битами открытого текста сообщения

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

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

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

Рисунок 6-12. Отправитель и получатель должны иметь один и тот же ключ для генерации одинакового ключевого потока



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

Стойкие и эффективные поточные шифры имеют следующие характеристики:

  • Длинные периоды неповторяющихся шаблонов в значениях ключевого потока . Биты, генерируемые ключевым потоком должны быть случайны.
  • Статистически непредсказуемый ключевой поток . Биты, получаемые на выходе генератора ключевого потока, не должны быть предсказуемы.
  • Ключевой поток не имеет линейной связи с ключом . Если кто-то получил значения ключевого потока, это не должно привести к получению им значения ключа.
  • Статистически равномерный ключевой поток (примерно равное количество нулей и единиц) . В ключевом потоке не должны преобладать нули или единицы.
Поточные шифры требуют обеспечения случайности и шифруют по одному биту за раз. Это требует больше ресурсов процессора, чем при использовании блочного шифра, поэтому поточные шифры больше подходят для реализации на аппаратном уровне. А блочные шифры, поскольку они не требуют столько ресурсов процессора, проще реализовывать на программном уровне.
ПРИМЕЧАНИЕ . Конечно, существуют и блочные шифры, реализованные на аппаратном уровне, и поточные шифры, работающие на программном уровне. Указанное выше утверждение просто является «лучшей практикой», рекомендациями по разработке и внедрению.


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


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

Совместное использование асимметричных и симметричных алгоритмов


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

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

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

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


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

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

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

Здесь все достаточно просто, вам нужно запомнить следующие аспекты:

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

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

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

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


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




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

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


ПРИМЕЧАНИЕ. Закрытые и симметричные ключи не должны храниться и/или передаваться в виде открытого текста. Хотя это кажется очевидным, уже множество программных продуктов было скомпрометировано именно по этой причине.

Проблемы беспроводной безопасности. Мы рассматривали различные стандарты 802.11 и протокол WEP в Домене 05 . Среди обширного списка проблем WEP, есть проблема, связанная с шифрованием данных. Если для шифрования беспроводного трафика используется только WEP, в таком случае в большинстве реализаций используется только один статистический симметричный ключ для шифрования пакетов. Одним из изменений и преимуществ стандарта 802.11i является то, что он обеспечивает шифрование каждого пакета уникальным сеансовым ключом.