Протоколы удостоверения подлинности

Удостоверение подлинности средствами криптосистем, предназначенных для шифрования и вычисления ОНФ.

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

Удостоверение подлинности с помощью ОНФ, аутентификация по простому парольному механизму.

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

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

1) А передает пароль Pa корреспонденту В.

2) В получает пароль Pa и вычисляет h’a=h(Pa)

3) В сравнивает полученное значение h’a с ha, из библиотеки паролей. Если h’a=ha, то пользователь А получает доступ к данным.

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

Вскрытие с помощью словаря.

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

Это «вскрытие с помощью словаря» может быть успешным с точки зрения улучшения временных характеристик атаки, и снижения временной сложности атаки. Но имеется способ повышения временной сложности данной атаки называемый в литературе «подсаливание». "Соль" представляет собой некоторый объем данных, имеющий случайную структуру, добавляемую к паролям перед вычислением их однонаправленной хэш-функции. Затем в базе паролей фиксируются и значение "соли", и результат вычисления ОНФ. Добавление достаточно большого числа возможных значений "соли" практически устраняет возможность вскрытия с помощью словаря, так как М придется вычислять значение однонаправленной хэш-функции для каждого возможного значения "соли", что потребует значительных временных и вычислительных затрат и эквивалентно атаке на хэш-функцию. Этот прием - простейший пример использования вектора инициализации.

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

Для этого нужно небольшое количество бит "соли". Большинство UNIX-систем аутентификации используют для "соли" 12 бит, а для большинства Windows-систем этот прием вообще не используется. Согласно обзору Брюса Шнайера в книге «Practical Cryptology», Дэниел Кляйн написал программу разгадывания паролей, которая в некоторых системах за неделю часто вскрывала 40 процентов паролей [D.V. Klein, “Large Period Nearly de Bruijn FCSR Sequences”, D. V. Klein, personal communication ].

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

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

SKEY

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

Регистрируясь в системе, А задает случайное число, R. Сервер вычисляет следующие значения ОНФ {f(R), f(f(R)), f(f(f(R)))…} и так далее, N (рекомендуется брать N>100) раз, сохранив эти значения в список xk как {x1, x2, x3, …, xn}. Сервер передает список этих значений А, и А хранит его в безопасном месте. Сервер также публикует открытым текстом в базе данных соединений в соответствие с корреспондентом А число xi.Что означает ожидания запроса аргумента xi -1 ОНФ для вычисления значения хэш-функции.

Выполняя первое подключение, А передает свое имя и xi -1. Сервер рассчитывает f(xi -1) и сравнивает его с xi , если значения совпадают, права А на доступ подтверждаются. Затем сервер заменяет в базе данных xi на xi -1. А удаляет xi из своего списка.

А, при каждом подключении к серверу, передает последнее число из своего списка: xk. Сервер рассчитывает f(xi ) и сравнивает его с f(xi +1), хранившемся в базе данных. Так как на каждой итерации соединения выполняется аутентификация (возможно и неоднократно), то для данного протокола возможно проводить до N-1 проверок легитимности доступа корреспондента (терминала) к ресурсу сервера. По исчерпании списков значений хэш-функций требуется замена общего секрета. Также, при приближении числа проверок терминала к N-1, существенно возрастает вероятность угадывания пароля для противника, знающего переданные ранее {f(R), f(f(R)), f(f(f(R)))…}, и проводившего мониторинг обмена данными между корреспондентом и сервером.

Аутентификация с помощью криптографии с открытыми ключами

Даже с применением “подсаливания” у механизма аутентификации на основании пароля, несмотря на возможность применения надежных хэш-функций с высокой стойкостью, имеются серьезные проблемы со стойкостью самого протокола. В момент, передачи терминалом А своего пароля серверу, любой, у кого есть доступ к каналу передачи данных, может прочесть пароль. Терминал может получить доступ к своему серверу посредством запутанного пути передачи информации, проложив его через недоброжелательное окружение и дав возможность всем желающим получить свой пароль. Пассивный противник может находиться на любом объекте ТСПИ, подслушивая передаваемую А последовательность. Если у противника есть доступ к ОЗУ сервера, то он сможет подсмотреть пароль до того, как сервер сможет вычислить его ОНФ и подменить исходящий адрес пакета на свой.

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

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

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

1) А передает В сообщение о необходимости аутентификации корреспондента B.

2) В вырабатывает случайную последовательность ri и передает ее, как запрос А.

3) А шифрует ri на ЗК корреспондента B eb , ci = E(eb, ri) и передает криптограмму, как ответ В.

4) В принимает ответ c’i , дешифрует его с использованием своего секретного ключа db, r’i = D(db, c’i), после чего сравнивает с переданным ранее ri.

5) Если , равенство r’i= ri верно, то аутентификация прошла успешно.

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

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

Важно!!!

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

Стойкие к подобным атакам протоколы “запрос-ответ” имеют следующую, более сложную форму:

1) Корреспондент A выполняет вычисление, основанное на некоторых случайных числах и своем закрытом ключе, и посылает результат серверу.

2) В посылает другое случайное число.

3) А выполняет некоторое вычисление, основанное на случайных числах (как созданном им, так и полученном от B) и своем закрытом ключе, и посылает результат B.

4) B выполняет некоторое вычисление для чисел, полученных от A, и его открытого ключа, проверяя, что A известен закрытый ключ.

5) Если проверка завершается успешно, подлинность A подтверждается.

Если А доверяет В не в большей степени, чем тот доверяет А, то он должен потребовать подтверждения подлинность B аналогичным образом.

Этап (1) может показаться ненужным и запутанным, но он необходим для защиты ЗК корреспондентов.

Двусторонняя аутентификация с использованием протокола «рукопожатия»

Пусть два корреспондента, А и В, хотят проверить подлинность друг друга. У каждого из них есть секретная информация, известная другому пользователю: ka у А и kb у B. Следующим образом реализован протокол, который не стоек к атаке “внедрение в середину”:

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

Предварительные вычисления:

1) А шифрует ka на ключе B eb , ca = E(ka, eb) .

2) В шифрует на ключе kb на ключе B ea , cb = E(kb, ea) .

3) Корреспондент A выполняет вычисление, основанное на некоторых случайных числах и своем закрытом ключе, и посылает результат серверу.

Активная часть протокола:

1) А передает ca .

2) В передает cb

3) В дешифрует ca на секретном ключе db криптограмму ca, ka = D(ka, db).

4) A дешифрует cb на секретном ключе da криптограмму cb, kb = D(kb, da).

5) Корреспонденты имеют обе компоненты ka и kb

Атака “внедрение в середину” выполняется по следующей схеме:

Злоумышленник М “врезается” в канал связи.

1) А и В обмениваются открытыми ключами. М перехватывает оба сообщения, и посылает обоим корреспондентам свои собственные открытые ключи, подменив им их ключи.

2) А шифрует ka, открытым ключом корреспондента В, подменным атакующим, и посылает В. М перехватывает сообщение, дешифрует ka с помощью своего закрытого ключа, снова шифрует ka открытым ключом, ассоциируемым с В и посылает его В.

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

4) А дешифрует kb и подтверждает его верность.

5) В дешифрует ka и подтверждает его верность.

Со стороны обмена между корреспондентами А и В ничего не изменилось, атака М для них является прозрачной. Входе работы данного протокола М получает kb, ka.Также возможна атака, “внедрением в середину”, с разрывом соединения после получения секрета A, дальнейшей его блокировкой и аутентификацией М, как A на секрете ka. После чего выполняется соединение с A при успешной проверке секретной последовательности kb.

Наши рекомендации