Криптография 2е издание Протоколы, алгоритмы и исходные тексты на языке С
Скачать 3.25 Mb.
|
E K (M), E B (K) Для дополнительной защиты от вскрытия "человек-в-середине" Алиса подписывает передачу. (5) Боб расшифровывает сеансовый ключ Алисы, K, используя свой закрытый ключ. (6) Боб, используя сеансовый ключ, расшифровывает сообщение Алисы. Подобная смешанная система и употребляется чаще всего в системах связи . Ее можно соединить с цифро- выми подписями, метками времени и другими протоколами обеспечения безопасн ости. Широковещательная рассылка ключей и сообщений Не существует причин, запрещающих Алисе посылать шифрованное сообщение нескольким людям . В сле- дующем примере Алиса посылает шифрованное сообщение Бобу, Кэрол и Дэйву : (1) Алиса генерирует случайный сеансовый ключ, K, и зашифровывает M этим ключом. E K (M) (2) Алиса получает из базы данных открытые ключи Боба, Кэрол и Дэйва. (3) Алиса шифрует K открытыми ключами Боба, Кэрол и Дэйва. E B (K), E C (K), E D (K) (4) Алиса широковещательно посылает шифрованное сообщение и все шифрованные ключи своим корре с- пондентам. E K (M), E B (K), E C (K), E D (K) (5) Только Боб, Кэрол и Дэйв могут, каждый при помощи своего закрытого ключа, расшифровать ключ K. (6) Только Боб, Кэрол и Дэйв могут расшифровать сообщ ение Алисы, используя K. Этот протокол может быть реализован для сетей электронной почты . Центральный сервер может отправить сообщение Алисы Бобу, Кэрол и Дэйву вместе с конкретным шифрованным ключом. Сервер не должен быть надежным и безопасным, так как он не может расшифровать ни одно из сообщений. 3.2 Удостоверение подлинности Когда Алиса подключается к главному компьютеру (или к автоматическому, или к телефонной банковской системе, или к какому-нибудь другому терминалу ), как главный компьютер узнает, кто она? Откуда главный компьютер узнает, что это не Ева, пытающаяся выдать себя за Алису ? Обычно эта проблема решается с помо- щью паролей. Алиса вводит свой пароль, и главный компьютер проверяет его правильность . Таким образом, и Алисе, и главному компьютеру известна некоторая секретная информация, которую главный компьютер з а- прашивает всякий раз, когда Алиса пыт ается подключится. Удостоверение подлинности с помощью однонаправленных функций Роджер Неедхэм (Roger Needham) и Майк Гай (Mike Guy) показали, что главному компьютеру не нужно знать сами пароли, вполне достаточно, чтобы главный компьютер мог отличать правильные пароли от непр а- вильных. Этого легко достичь с помощью однонаправленных функций [1599, 526,1274, 1121]. При этом на главном компьютере хранятся значения однонаправленных функций паролей, а не сами пароли . (1) Алиса посылает главному компьютеру свой пароль. (2) Главный компьютер вычисляет однонаправленную функцию пароля. (3) Главный компьютер сравнивает полученное значение с хранящимся. Раз главный компьютер больше не хранит таблицу правильных паролей всех пользователей, снижается у г- роза того, что кто-то проникнет в главный компьютер и выкрадет таблицу паролей . Список паролей, обработан- ный однонаправленной функцией, бесполезен, так как однонаправленную функцию не удастся инвертировать для получения паролей. Вскрытия с помощью словаря и "соль" Файл паролей, зашифрованных однонаправленной функцией, тем не менее, уязвим. Имея запас времени, Мэллори может составить список из миллиона наиболее часто встречающихся паролей . Он обработает весь миллион однонаправленной функцией и сохранит результат . Если каждый пароль состоит из восьми байт, ра з- мер получившегося файла не превысит 8 Мбайт, и этот файл может быть размещен всего на нескольких на ди с- кетах. Теперь Мэллори добывает шифрованный файл паролей . Он сравнивает этот файл со своим файлом ши ф- рованных возможных паролей и ищет совпадения . Это вскрытие с помощью словаря может быть удивительно успешным (см. раздел 8.1). "Соль" - это спо- соб затруднить его. "Соль" представляет собой случайную строку, добавляемую к паролям перед обработкой их однонаправленной функцией. Затем в базе данных главного компьютера сохраняются и значение "соли", и р е- зультат однонаправленной функции. Использование достаточно большого числа возможных значений "соли" практически устраняет возможность вскрытия с помощью словаря, так как Мэллори придется вычислять знач е- ние однонаправленной хэш-функции для каждого возможного значения "сол и". Это простейший пример ис- пользование вектора инициализации (см. раздел 9.3). Идея состоит в том, чтобы заставить Мэллори выполнить пробное шифрование каждого пароля из его сл о- варя при каждой попытке узнать чей-то чужой пароль вместо одноразовой обработки всех возможных паролей . Для этого нужно много "соли". Большинство UNIX-систем используют для "соли" 12 бит. Несмотря на это Дэниел Кляйн (Daniel Klein) написал программу разгадывания паролей, которая в некоторых системах за нед е- лю часто вскрывала 40 процентов паролей [847,848] (см. раздел 8.1). Дэвид Фельдмайер (David Feldmeier) и Филип Кан (Philip Karn) составили список из 732000 наиболее часто используемых паролей, присоединив к к а- ждому из них 4096 возможных значений "соли". По их оценкам 30 процентов паролей на любом главном ко м- пьютере могут быть взломаны с помощью этого списка [561]. "Соль" не является панацеей, увеличение числа бит "соли" не решит всех проблем . "Соль" предохраняет только от самых обычных вскрытий файла паролей с использованием словаря, а не от согласованной атаке о д- ного пароля. Она защищает людей, использующих один и тот же пароль на различных машинах, но не делает лучше плохо выбранный пароль. SKEY SKEY - это программа удостоверения подлинности, обеспечивающая безопасность с помощью однонапра в- ленной функции. Это легко объяснить. Регистрируясь в системе, Алиса задает случайное число , R. Компьютер вычисляет f(R), f(f(R)), f(f(f(R))), и так далее, около сотни раз. Обозначим эти значения как x 1 , x 2 , x 3 , ..., x 100 . Компьютер печатает список этих чисел, и Алиса прячет его в безопасное место. Компьютер также открытым текстом ставит в базе данных подключения к системе в соответствие Алисе число x 101 Подключаясь впервые, Алиса вводит свое имя и x 100 . Компьютер рассчитывает f(x 100 ) и сравнивает его с x 101 , если значения совпадают, права Алисы подтверждаются . Затем компьютер заменяет в базе данных x 101 на x 100 Алиса вычеркивает x 100 из своего списка. Алиса, при каждом подключении к системе, вводит последнее невычеркнутое число из своего списка: x i Компьютер рассчитывает f(x i ) и сравнивает его с x i+1 , хранившемся в базе данных. Так как каждый номер ис- пользуется только один раз, Ева не сможет добыть никакой полезной информации . Аналогично, база данных бесполезна и для взломщика. Конечно же, как только список Алисы исчерпается ей придется перерегистрир о- ваться в системе. Удостоверение подлинности с помощью криптографии с открытыми ключами Даже с использованием "соли" у первого протокола есть серьезные проблемы с безопасностью . Когда Алиса посылает свой пароль главному компьютеру, любой, у кого есть доступ пути передачи ее данных, может пр о- честь пароль. Она может получить доступ к своему главному компьютеру посредством запутанного пути пер е- дачи информации, проложив его через четырех промышленных конкурентов, три других страны и два перед о- вых университета. Ева может находиться в любой из этих точек, подслушивая передаваемую Алисой послед о- вательность. Если у Евы есть доступ к оперативной памяти главного компьютера, она сможет подсмотреть п а- роль до того, как главный компьютер сможет его хэшировать . Криптография с открытыми ключами может решить эту проблему . Главный компьютер хранит файл откры- тых ключей всех пользователей, а все пользователи хранят свои закрытые ключи . Вот как выглядит упрощенная попытка организовать протокол подключения: (1) Главный компьютер посылает Алисе случайную строку. (2) Алиса шифрует эту строку своим закрытым ключом и посылает ее обратно главному компьютеру вместе со своим именем. (3) Главный компьютер находит в базе данных открытый ключ Алисы и дешифрирует сообщение, используя этот открытый ключ. (4) Если отправленная сначала и расшифрованная строки совпадают, главный компьютер предоставляет Алисе доступ к системе Никто другой не может воспользоваться закрытым ключом Алисы, следовательно никто не сможет выдать себя за нее. Что более важно, Алиса никогда не посылает на компьютер свой закрытый ключ . Ева, подслушивая взаимодействие, не получит никаких сведений , которые позволили бы ей вычислить закрытый ключ Алисы и выдать себя за нее. Закрытый ключ должен быть достаточно длинным и не должен быть мнемоническим. Он будет автоматич е- ски обрабатываться аппаратурой пользователя или программным обеспечением связи . Это требует использова- ния "умного" терминала, которому Алиса доверяет, но не главный компьютер, ни линии связи не обязаны быть безопасными. Глупо шифровать произвольные строки - не только посланные подозрительным авторов, но и вообще любые . Иначе может быть использовано схема вскрытия, обсуждаемая в разделе 19.3. Безопасные идентификационные протоколы имеют следующую, более сложную форму : (1) Алиса выполняет вычисление, основанное на некоторых случайных числах и своем закрытом ключе, и п о- сылает результат на главный компьютер. (2) Главный компьютер посылает другое случайное число. (3) Алиса выполняет некоторое вычисление, основанное на случайных числах (как созданном ею, так и пол у- ченном от главного компьютера) и своем закрытом ключе, и посылает результат на главный компьютер. (4) Главный компьютер выполняет некоторое вычисление для различных чисел, полученных от Алисы, и ее открытого ключа, проверяя, что ей известен ее закрытый ключ. (5) Если проверка завершается успешно, личность Алисы подтверждается. Если Алисы доверяет главному компьютеру не в большей степени, чем тот доверяет Алисе, то она должна потребовать подтверждения подлинности главного компьютера аналогичным образом . Этап (1) может показаться ненужным и запутанным, но он необходим для защиты протокола от вскрытия . Различные протоколы и алгоритмы подтверждения подлинности математически подробно описываются в ра з- делах 21.1 и 21.2. См. также [935]. Обоюдное удостоверение подлинности с использованием протокола "держась за руки" Пусть два пользователя, Алиса и Боб, хотят проверить подлинность друг друга . У каждого из них есть па- роль, известный другому пользователю: P A у Алисы и P B у Боба. Вот как выглядит протокол, который не будет работать: (1) Алиса и Боб обмениваются открытыми ключами. (2) Алиса шифрует P A открытым ключом Боба и посылает его ему. (3) Боб шифрует P B открытым ключом Алисы и посылает его ей. (4) Алиса расшифровывает полученное на этапе (3) и подтверждает правильность пароля. (5) Боб расшифровывает полученное на этапе (2) и подтверждает правильность пароля. Мэллори может предпринять успешное вскрытие "человек-в-середине" (см. раздел 3.1): (1) Алиса и Боб обмениваются открытыми ключами. Мэллори перехватывает оба сообщения, и посылает обоим корреспондентам свой собственный открытый ключ, подменив им их ключи. (2) Алиса шифрует P A открытым ключом "Боба" и посылает его ему. Мэллори перехватывает сообщение, расшифровывает P A с помощью своего закрытого ключа, снова шифрует P A открытым ключом Боба и по- сылает его ему. (3) Боб шифрует P B открытым ключом "Алисы" и посылает его ей. Мэллори перехватывает сообщение, ра с- шифровывает P B с помощью своего закрытого ключа, снова шифрует P B открытым ключом Алисы и по- сылает его ей. (4) Алиса расшифровывает P B и подтверждает его правильность. (5) Боб расшифровывает P A и подтверждает его правильность. Для Алисы и Боба ничего не изменилось. Однако, Мэллори знает и P A , и P B . Дональд Дэвис (Donald Davies) и Вильям Прайс (William Price) описывают, как протокол "держась-за-руки" (см. раздел 3.1) противодействует такому вскрытию [435]. Стив Белловин (Steve Bellovin) и Майкл Мерритт (Michael Merritt) рассматривают спо- собы вскрытия этого протокола в [110]. Если Алиса - это пользователь, а Боб - хост-компьютер , Мэллори может предпочесть быть Бобом, выполнить первые этапа протокола с Алисой и разорвать соединение . Симулирование шума на линии или сетевого отказа потребует от Мэллори настоящего артистизма, но в результате Мэллори получит пароль Алисы. Затем он сможет соединиться с Бобом и завершить протокол, получая и пароль Боба . Протокол можно изменить так, чтобы Боб передавал свой пароль перед Алисой в предположении, что п а- роль пользователя более важен чем пароль главного компьютера . Это приведет к усложнению способа вскр ы- тия, также описанного в [110]. SKID SKID2 и SKID3 - это симметричные криптографические протоколы идентификации, разработанные для пр о- екта RACE RIPE [1305] (см. раздел 25.7). Они используют MAC (см. раздел 2.4) для обеспечения безопасности и предполагают, что Алиса и Боб используют общий секретный ключ , K. SKID2 позволяет Бобу доказать свою подлинность Алисе. Вот этот протокол: (1) Алиса выбирает случайное число, R A . (Документами RIPE определяется 64-битовое число). Она посылает это число Бобу. (2) Боб выбирает случайное число, R B . (Документами RIPE определяется 64-битовое число). Он посылает Алисе. R B , H K (R A , R B , B) H K - это MAC. (В документах RIPE предлагается функция RIPE-MAC, см. раздел 18.4.) B - это имя Боба. (3) Алиса рассчитывает H K (R A , R B , B) и сравнивает результат со значением, полученным от Боба. Если р е- зультаты совпадают, Алиса убеждается в том, что она соединилась именно с Бобом. SKID3 обеспечивает совместную проверку подлинности Алисой и Бобом . Этапы (1) - (3) совпадают с прото- колом SKID2, а затем выполняются следующие действия : (4) Алиса посылает Бобу: H K (R B , A) A - это имя Алисы. (5) Боб рассчитывает H K (R B , A) и сравнивает результат со значением, полученным от Алисы. Если результаты совпадают, Боб убеждается в том, что она соединилась именно с Алисой. Этот протокол неустойчив к вскрытию "человек-в-середине" . В общем случае, вскрытие "человек-в- середине" может угрожать любому протоколу, в который не входит какой-нибудь секрет . Удостоверение подлинности сообщений Когда Боб получает сообщение от Алисы, как ему узнать, что это сообщение подлинно ? Если Алиса подпи- сала свое сообщение, то все просто. Цифровая подпись Алисы достаточна, чтобы подтвердить кому угодно по д- линность ее сообщения. Некоторую проверку подлинности предоставляют и симметричные алгоритмы . Когда Боб получает сообще- ние от Алисы, шифрованное их общим ключом, он знает, что это сообщение от Алисы . Никто больше не знает их ключа. Однако, у Боба нет возможности убедить в этом кого-то еще . Боб не может показать сообщение Трен- ту и убедить его, что оно отправлено Алисой . Трент может сделать вывод, что сообщение отправлено или Ал и- сой, или Бобом (так как их секретный ключ никому больше не принадлежит ), но у него нет способа определить, кто же конкретно автор сообщения. Если сообщение не шифровано, Алиса может также использовать MAC. Это также убедит Боба в подлинно- сти сообщения, но возникнут те же проблемы, что и для решений симметричной криптографии . 3.3 Удостоверение подлинности и обмен ключами Эти протоколы объединяют удостоверение подлинности и обмен ключами для решения основной компь ю- терной проблемы: Алиса и Боб хотят безопасно обмениваться сообщениями, находясь на различных концах сети. Как могут Алиса и Боб обменяться секретным ключом, при этом сохраняя уверенность, что они обмен и- ваются сообщениями друг с другом, а не с Мэллори ? В большинстве протоколов предполагается, что каждому пользователю Трент выделяет отдельный секретный ключ, и перед началом работы протокола все ключи уже находятся у пользователей. Символы, используемые в этих протоколах, сведены в 2-й. Табл. 3-1. Символы, используемые в протоколах удостоверения подлинности и обмена ключами A Имя Алисы B Имя Боба E A Шифрование ключом, выделенном Трентом Алисе E B Шифрование ключом, выделенном Трентом Бобу I Порядковый номер K Случайное сеансовое число L Время жизни T A , T B Метки времени R A , R B Случайные числа, выбранные Алисой и Бобом, соответственно Лягушка с широким ртом Протокол "Лягушка с широким ртом" (Wide-Mouth Frog) [283,284], возможно, является простейшим сим- метричным протоколом управления ключами, в котором используется заслуживающий доверия сервер . Алиса и Боб делят свой секретный ключ с Трентом . Эти ключи используются только для распределения ключей, а не для шифрования пользовательских сообщений. Вот как, используя два сообщения, Алиса передает Бобу сеансовый ключ: (1) Алиса объединяет метку времени, имя Боба и случайный сеансовый ключ, затем шифрует созданное с о- общение общим с Трентом ключом и посылает его Тренту вместе со своим именем. A, E A (T A , B, K) (2) Трент расшифровывает сообщение от Алисы. Затем он добавляет новую метку времени, имя Алисы и сл у- чайный сеансовый ключ, шифрует полученное сообщение общим с Бобом ключом. Трент посылает Бобу: E B (T B , B, K) Наибольшим допущением, сделанным в этом протоколе, является то, что Алиса обладает достаточной ко м- петентностью для генерации хороших сеансовых ключей . Вспомните, что случайные числа генерировать совсем не просто, для этого может потребоваться кто-нибудь понадежнее Алисы . Yahalom В этом протоколе Алисы и Боб делят с Трентом секретный ключ [283,284]. (1) Алиса объединяет свое имя и случайное число, и отправляет созданное сообщение Бобу. A, R A (2) Боб объединяет имя Алисы, ее случайное число, свое случайное число, шифрует созданное сообщение о б- щим с Трентом ключом и посылает его Тренту, добавляя свое имя: B, E B (A, R A , R B ) (3) Трент создает два сообщения. Первое включает имя Боба, случайный сеансовый ключ, случайные числа |