пятница, 16 июля 2010 г.

Персоналии

Преподавание криптографии в ВУЗах имеет один существенный недостаток. Нам не преподают историю и биографии людей, делавших эту науку до нас. А это, бесспорно, является упущением!
Итак, первая порция ссылок на хотя бы краткие биографии.

Тьюринг

Шеннон

Шнайер

Диффи

Хеллман

Поллард

воскресенье, 9 мая 2010 г.

Пожалуй, имеет смысл немного поговорить про КП

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

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

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


Управление ключами и классификация ключей

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

Система установки ключей определяет алгоритмы и процедуры генерации, распределения, передачи и проверки ключей.

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


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

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

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

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

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

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

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

Устойчивость - учёт возможности раскры­тия части ключей при компрометации, обмане или сговоре абонентов

Гибкость — допуск возможности быстрого вос­становления путем исключения скомпрометированных и под­ключения новых абонентов.


Пересылка ключей

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

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

центры распределения ключей – самостоятельно генерируют ключи,

центры перешифрования клю­чей – генерация ключей осуществляется самими абонентами.


  1. Типы систем распределения ключей

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

Двусторонние протоколы - передача ключей осуществляется при непосредственном взаимодействии,

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

Двусторонние протоколы

Раз­личают протоколы, в которых стороны заранее располагают какой-либо известной им обоим секретной информацией, и протоколы, не требующие этого условия.

Пусть стороны А и В заранее обладают общей секретной информацией. Допустим, что это — секретный ключ kАВ..

Тогда для передачи ключа k стороны могут использовать одностороннюю передачу:

А→В: EkAB(k,t,id(B)),

где Е — алгоритм шифрования, t — метка времени, В идентификатор абонента id(В) (для краткости вместо id(B) будем использовать лишь один символ В).

Метки времени – защита от повторной передачи сообщения.

Идентификатор адре­сата позволяет абоненту А установить, что сообщение получено именно от абонента В.

Вместо шифрова­ния можно использовать ключевую хэш-функцию, зави­сящую от общего ключа:

А→В: khkAB(t,B).

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

(1) В → А: rB,

(2) А→В:ЕkАВ(k rB,,В),

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

  1. B→A: rB,

  2. АВ: khkAB(rB,,B).

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

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

Пусть абонентами А и В помимо случайных чисел rА и rB генерируются также случайные числа kA и kB соответст­венно. Тогда в результате выполнения протокола

  1. В→А: rB ,,

  2. A→B:EkAB(kA ,rA , rB ,B),

(3) ВА: EkAB(kB ,rB , rA ,A),

каждая из сторон может вычислить общий ключ с помощью некоторой функции f по правилу k= f(kA,kB).

В этом протоколе ни одна из сторон не может знать зара­нее значения ключа.

"Бесключевой" протокол А.Шамира позволяет передать ключ без использования какой-либо общей секретной информации.

  1. А→В:ЕkА(k),

  2. В→А:ЕkBkА(k)),

  3. AB:DkА(EkB(EkA(k))),

Где E - коммутирующее шифрующее преобразование. Это означает, что при всех сообщениях х и ключах k1 и k2 выполняется равенство

Ek1(Ek2(x)) = Ek2(Ek1(x)).

В протоколе Шамира рекомендуется использовать преобразование вида

ЕkА(k) = ka mod р

, в котором константа а определяется ключом kA.

Трехсторонние протоколы

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

Один из первых протоколов такого типа - протокол Нидхема и Шрёдера:

  1. А→Т:А,В, rA,

  2. T→A: ЕkAT(rA,B,k,ЕkBT(k,A)) ,

  3. A→B: ЕkBT(k,A) ,

(4) B→А: Еk(rB) ,

(5) А→В:Еk(rB – 1) .

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

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

Недостаток этого протокола устранен в протоколе Kerberos:

(1) А→Т: А,В, rA,

  1. Т→А: ЕkAT (k, rA,L,B), билет,

  2. А→В: билет, аутентификатор,

  3. ВА: Ek(t,kB).

Здесь "билетом" названа величина ЕkBT(k,A,L), “аутентификатором” — величина Ek(A,t,kA), t — метка времени; L — период времени действия билета, rA— случайное число, сгенерированное абонентом А и вставленное в переда­ваемое сообщение для взаимной аутентификации, а kA и kBслучайные числа, сгенерированные абонентами А и В соот­ветственно, и используемые либо в качестве ключа шифрова­ния информации другой стороне, либо для выработки общего ключа kAB = f(kA , kB) с помощью некоторой функции f.

В полном протоколе Kerberos описанный выше базовый протокол используется два раза. Дело в том что в нем преду­смотрено два сервера (см. рис. 51). Первый — "сервер аутен­тификации", обозначаемый AS, выдает так называемые "биле­ты для получения билетов" (TGT), содержащие ключи, предна­значенные для длительного использования. Второй сервер, "сервер выдачи билетов" (TGS), выдает обычные билеты для доступа к сетевым ресурсам и обращения к другим поль­зователям.


Рис. 1

Сообщения, передаваемые согласно этому протоколу, вы­глядят следующим образом:

(1) A→AS: A, TGS ,rА,

(2) AS→A: ЕkA,AS (kA,TGS, rA,L1,TGS),

  1. А → TGS: tgt, аутентификатор1, B , rA`,

  2. TGSA: ЕkA,TGS (k, rA`,L2,B), билет,

  3. А→В: билет, аутентификатор2,

  4. В→А: Ek(t2,kB),

где

tgt = ЕkA,TGS (kA,TGS,A,L1),

аутентификатор1 = ЕkA,TGS (A,t1),

билет = ЕkB,TGS (k,A,L2),

аутентификатор2 =Еk(A,t2,kA).

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

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

(1) А→В:r,А,В, ЕkAT(rA,r,A,B),

(2) ВТ. r,A,B,EkAT(rA,r,A,B),EkBT(rB,r,A,B),

(3) T→B: EkAT(rA,k), EkBT(rB,k),

(4) В→А: EkAT(rA,k).

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

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

(4') ВА: EkAT(rA,k),Ek(r,rB),

(5)А→В: Ek(r).

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

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

Протоколы без использования цифровой подписи

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

А→В: EkB(k,t,A),

где Е — алгоритм шифрования с открытым ключом, t — метка времени.

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

  1. А→В: EB(k1,A),

  2. В→А: ЕА(k1, k2),

  3. А→В:ЕB(k2).

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

Протоколы с использованием цифровой подписи

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

А→В: EB(k,t,SA(B,k,t)) (шифрование подписанного ключа);

А→В: EB(k,t),SA(B,k,t) (зашифрование и подпись ключа);

А→В: t,EB(A,k),SA(B,t,EB(A,k)) (подпись зашифрованного ключа).

Сертификаты открытых ключей

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

СА = (A,kA,t,SKTA(A,kA,t)),

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

Международный стандарт CCITT Х.509 определяет сле­дующий протокол аутентификации с одновременным распре­делением ключей:

  1. А→В: С А, DA, SA (DA ),

  2. ВА: Cb,Db,Sb(Db),

  3. A→B: rB ,B,SA(rB,B),

где CA и CB — сертификаты сторон, SA и SB — цифровые подписи сторон,

Da=(tA,rA,B, data1 ,EB(k1)), Db=(tB ,rB,A,rA, data2,EA(k2)) — наборы передаваемых и подписываемых данных. В поля data заносится дополнительная информация для аутентифи­кации источника. Третий шаг протокола требуется стороне В для подтверждения того, что она действительно взаимодейст­вует со стороной А.

Открытое распределение ключей

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

Алгоритм открытого распределения ключей Диффи - Хеллмана. Для его вы­полнения стороны должны договориться о значениях боль­шого простого числа р и образующего элемента α мультипликативной группы Z*p= {1,2,..., p 1}. Для выработки об­щего ключа k они должны сгенерировать случайные числа х, 1≤х≤р-2,и y, 1≤yр-2, соответственно. Затем они должны обменяться сообщениями в соответствии с протоколом:

  1. А→В: αx mod p

  2. В→А: αy mod p.

Искомый общий ключ вычисляется по формуле:

k = (αу)х = (αх)у mod р

Недостатком этого протокола является возможность ата­ки типа "злоумышленник в середине". Выбрав числа х* и у* и подменив сообщения αx* mod р и αy*mod р на αх* mod р и αу* mod р соответст­венно, он может сформировать ключи

k1=(ах)y*modр

и

k1=(аy)x*modр

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

Рассмотрим два протокола, устраняющие этот недоста­ток. Первый протокол, называемый STS (station-to-station), предполагает, что пользователи применяют цифровую под­пись, которой подписываются передаваемые по протоколу Диффи—Хеллмана сообщения:

  1. А→В: αx mod р,

  2. В→А: αymodp, Ek(SB(αy,αx)),

  3. A→B:Ek(SA(αx, αy)).

Здесь SA и SB — цифровые подписи пользователей А и В соответственно, k — искомый общий ключ. Шифрование значений подписей пользователей введено для того, чтобы обеспечить взаимное подтверждение правильно­сти вычисления значения ключа.

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

Пользователи А и В имеют секретные ключи a и b

1aр-2,1≤ bp - 2 ,

соответственно, и публикуют свои открытые ключи zA= αa mod р и zBbmodp. Для выработки общего секретного ключа k они должны сгенерировать случайные числа х, 1х≤р-2, и у, 1≤у≤р-2, соответственно, а затем обменяться сле­дующими сообщениями:

  1. А→ В: αx mod p,

  2. В→А: αymod p.

Искомый общий ключ вычисляется по формуле:

k =(αy)azxB = (ax)bzyA = αxb+ya mod p.

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

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

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

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

Выбирается поле F, имеющее конечное, но достаточно большое число элементов, и фиксируется п различных эле­ментов r1,...rnЄ F, отличных от нуля. Каждый элемент ri ставится в соответствие i-му абоненту сети, i =. Эти элементы не явля­ются секретными и могут храниться на общедоступном сер­вере сети. Далее, выбирается многочлен над полем F степени 2m, 1 ≤ т < п, вида




где aij = aji, i≠j, i,j=. Его коэффициенты являются сек­ретными и должны храниться только в центре распределения ключей. Каждый абонент А получает в качестве ключевых материалов набор коэффи­циентов многочлена:



Для связи между абонентами А и В теперь можно исполь­зовать общий ключ кАВ:



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

При использовании данной схемы каждый абонент дол­жен хранить m+1 секретных значений вместо п-1, общее же число секретных коэффициентов многочлена f равно т(т+1)/2.

Схема Блома предварительного распределе­ния ключей между п абонентами, использукпцая многочлен степени m, 1m<n, является стойкой к компрометации ключей т абонентов. Это означает, что при раскрытии ключевых материалов, принадлежащих любым m абонентам, злоумышленник, зная их значения, не сможет определить ни один из ключей для связи между остальными (n-m) абонен­тами.

Схемы разделения секрета

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

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

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

Возможные атаки на протоколы распределения ключей

При анализе протоколов обычно рассматривают несколь­ко видов атак.

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

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

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

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

В целом при анализе протоколов распределения ключей применяют различные методы:

1. Эвристические подходы, основанные на имеющемся наборе практических приемов и известных атаках, зарекомендовавших себя при анализе дру­гих протоколов.

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

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

4. Барроузом, Абади и Нидхемом (Burrows, Abadi, Needham) предложен формальный метод анализа протоколов, получивший название BAN-логики. В нем все шаги протокола и передаваемые сообщения записываются в некотором стан­дартном формализованном виде, а затем осуществляется их формальный анализ при некоторых типовых предположениях о возможном поведении сторон. Данные формальные доказа­тельства относятся в основном к корректности протоколов и не всегда могут рассматриваться как доказательство их безо­пасности.