Графическая аутентификация в Linux

Схемы графической аутентификации, их реализация и внедрение в операционных системах Linux. Оценка вероятности взлома графического пароля. Буквенно-цифровые пароли. Схемы треугольника и подвижной рамки. Исследование удобства и простоты использования.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 25.01.2013
Размер файла 5,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Федеральное агентство по образованию

Государственное общеобразовательное учреждение

высшего профессионального образования

"Челябинский государственный университет"

Кафедра компьютерной безопасности и прикладной алгебры

ДИПЛОМНАЯ РАБОТА

Графическая аутентификация в Linux

Направление 075200 Компьютерная безопасность

Выполнила студентка гр. МК-601

Будко Е.Г.

Научный руководитель,

инженер ОЭУС компании

"Интерсвязь” Артемова Э.Л.

Челябинск 2011 г.

Содержание

  • Введение
  • I. Схемы графической аутентификации
  • Буквенно-цифровые пароли
  • Простая схема графического пароля
  • Схема треугольника
  • Схема подвижной рамки
  • Другие специальные геометрические конфигурации
  • II. Описание PAM-модуля pam_triangle
  • III. Описание PAM-модуля pam_diagonal
  • IV. Исследование удобства и простоты использования
  • V. Исследование безопасности
  • Атака методом нажатия наудачу на схему треугольника
  • Атака методом нажатия наудачу на схему диагоналей
  • Атака методом полного перебора на схему треугольника
  • Атака методом полного перебора на схему диагоналей
  • Заключение
  • Список литературы
  • Приложения

Введение

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

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

I. Схемы графической аутентификации

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

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

Буквенно-цифровые пароли

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

Ш Пароль должен быть не менее 8 символов.

Ш Пароль не должен иметь отношение к пользователю (например, фамилия, дата рождения).

Ш Пароль не должен быть словом, которое можно найти в словаре.

Ш В идеале, пользователь должен использовать верхний и нижний регистры букв и цифры.

графическая аутентификация linux пароль

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

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

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

Простая схема графического пароля

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

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

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

Схема треугольника

Система случайным образом рассеивает N изображений на экране. На практике, число N может быть несколько сотен или несколько тысяч, и объекты должны быть разными настолько, что пользователь может различать их. Кроме того, есть подмножество K парольных изображений (например, K=10), которые предварительно выбрал и запомнил пользователь. При входе система будет случайным образом выбирать размещение N изображений. Однако, система сначала случайным образом выбирает участок, который покрывает половину экрана, и случайно размещает К выбранных изображений на этом участке.

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

Схема подвижной рамки

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

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

Другие специальные геометрические конфигурации

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

Сравнение различных схем аутентификации

Схема

Использование

Безопасность

Процесс аутентификации

Запоминаемость

Множество паролей

Возможные методы атаки

Буквенно-цифровые пароли

Печатание символов, может быть очень быстрым.

Зависит от пароля. Длинные и случайные запомнить сложно.

96n (всего 96 печатных символов, n - длина пароля)

Атака со словарем, атака методом полного перебора, подглядывание через плечо.

Простая схема графического пароля

Пользователь должен кликнуть мышкой внутри 4 выделенных областей на изображении.

Зависит от изображения. Может быть как очень простым для запоминания, так и довольно тяжелым.

nk (n - количество пикселей или других минимальных участков изображения, k - количество областей в пароле пользователя)

Атака методом полного перебора, атака методом нажатия наудачу, подглядывание через плечо.

Схема подвижной рамки

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

Для большинства людей достаточно просто.

(n - общее число изображений, k - число парольных изображений)

Атака методом полного перебора, атака методом нажатия наудачу.

Схема треугольника

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

Для большинства людей достаточно просто.

(n - общее число изображений, k - число парольных изображений)

Атака методами полного перебора, атака методом нажатия наудачу.

Пересечение диагоналей четырехугольника

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

Для большинства людей достаточно просто.

(n - общее число изображений, k - число парольных изображений)

Атака методом полного перебора, атака методом нажатия наудачу.

II. Описание PAM-модуля pam_triangle

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

Алгоритм работы

Программа passwd-triangle предназначена для создания графического пароля. При запуске получает от пользователя его имя и выводит на экран изображения в случайном порядке. Номера изображений, которые выбрал пользователь для своего пароля, сохраняются в файле /etc/triangle/passwords.

Файл passwords состо5ит из строк вида:

имя_пользователя номер_изображения_1. номер_изображения_5

Изображения с именами 1. png,

2. png, … хранятся в директории /etc/triangle/pictures.

Модуль pam_triangle начинает работать при запуске сервиса (login, su или др.). Модуль считывает из файла /etc/triangle/passwords номера парольных изображений, выводит на экран в случайном порядке 154 изображения, три из которых являются изображениями, которые пользователь выбрал для своего пароля. После нажатия кнопки пользователем, модуль получает ее координаты. Выбранная пользователем точка будет принадлежать треугольнику, если синусы углов образованные векторами, направленными из нажатой точки к вершинам треугольника, будут одного знака. Для нахождения знака синусов углов воспользуемся псевдовекторным произведением.

Псевдоскалярным произведением векторов a и b на плоскости называется число . Если , , то их псевдоскалярное произведение равно определителю матрицы, составленной из координат векторов, выписанных в строки матрицы.

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

(x1-x0) * (y2-y1) - (x2-x1) * (y1-y0)

(x2-x0) * (y3-y2) - (x3-x2) * (y2-y0)

(x3-x0) * (y1-y3) - (x1-x3) * (y3-y0)

Здесь (x1, y1), (x2, y2), (x3, y3) - вершины треугольника, (x0, y0) - координаты выбранного изображения.

Знаки синусов углов и выписанных выражений будут совпадать.

Если все синусы одного знака, то выбранное изображение попадает в область треугольника, если разного - нет. Если хотя бы один синус равен нулю, то выбранная точка попала на сторону треугольника.

Для реализации pam-модуля был использован инструментарий разработки ПО qt4. Языке программирования С++. Для тестирования был использован дистрибутив Ubuntu 10.10 с версией ядра Linux 2.6.35.

Установка модуля

Для установки модуля требуется:

· добавить в начало файла с названием сервиса (login, su или др.), расположенного в каталоге /etc/pam. d/ строку вида:

auth <флаг_контроля> pam-triangle. so

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

@include common-auth

В Linux-PAM существует всего четыре флага контроля:

Ш required. Если модуль выдал ошибку, то цепочка продолжит выполняться, но запрос будет отклонен.

Ш requisite. Если произошла ошибка модуля, то цепочка немедленно заканчивается, и запрос отклоняется.

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

Ш optional. Модуль с этим флагом не критичен для аутентификации и используется как дополнительный, то есть модуль будет выполнен, но его результат игнорируется.

· выполнить скрипт triangle. sh

· запустить программу passwd-triangle, чтобы создать пароли для пользователей.

Руководство пользователя

Для создания пароля запускаем программу passwd-triangle. В появившемся окне вводим имя пользователя.

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

Если пользователь забудет пароль, администратор системы сможет ему помочь, запустив программу passwd-triangle.

При запуске сервиса (login, su или др.), вместо ввода пароля появляется окно для ввода графического пароля, состоящее из 154 различных изображений.

Для аутентификации пользователь должен выполнить следующее:

1. Найти три изображения, которые составляют его пароль.

2. Представить треугольник, образованный этими изображениями.

3. Кликнуть в область треугольника.

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

III. Описание PAM-модуля pam_diagonal

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

Алгоритм работы

Программа passwd-diagonal предназначена для создания графического пароля. При запуске получает от пользователя его имя и выводит на экран изображения в случайном порядке. Номера изображений, которые выбрал пользователь для своего пароля, сохраняются в файле /etc/diagonal/passwords.

Файл passwords состоит из строк вида:

имя_пользователя номер_изображения_1 номер_ изображения_2 номер_ изображения_3 номер_изображения_4 номер_изображения_5

Изображения с именами 1. png,

2. png, … хранятся в директории /etc/diagonal/pictures.

Модуль pam_diagonal начинает работать при запуске сервиса (login, su или др.). Модуль выводит на экран 154 изображения в случайном порядке. Из них четыре являются парольными изображениями пользователя, которые модуль считывает из файла /etc/diagonal/passwords. Парольные изображения заведомо будут образовывать невырожденный выпуклый четырехугольник. После клика мышью пользователем, модуль получает его координаты и проверяет, лежит ли выбранное изображение на пересечении диагоналей четырехугольника или нет.

Для реализации pam-модулей был использован инструментарий разработки ПО qt4. Языке программирования С++. Для разработки и тестирования был использован дистрибутив Ubuntu 10.10 с версией ядра Linux 2.6.35.

Установка модуля

Для установки модуля требуется:

· добавить в начало файла с названием сервиса (login, su или др.), расположенного в каталоге /etc/pam. d/ строку вида:

auth <флаг_контроля> pam-triangle. so

· выполнить скрипт diagonal. sh

· запустить программу passwd-diagonal, чтобы создать пароли для пользователей.

Руководство пользователя

Для создания пароля запускаем программу passwd-diagonal. В появившемся окне вводим имя пользователя.

Появляется окно ввода пароля. Пользователю нужно выбрать пять различных парольных изображения из 399 предложенных.

Если пользователь забудет пароль, администратор системы сможет ему помочь, запустив программу passwd-diagonal.

Теперь при запуске сервиса (login, su или др.), вместо ввода пароля будет появляться окно ввода графического пароля, содержащее 154 изображений.

Для аутентификации пользователь должен выполнить следующее:

1. Найти 4 свои парольные картинки.

2. Мысленно образовать из них четырехугольник.

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

Точно так, как показано на рисунке:

IV. Исследование удобства и простоты использования

В исследовании приняли участие 15 человек. Десять человек - женщины и пять мужчин. Средний возраст участников 22,4 года. Участники являются компьютерными пользователями, которые используют компьютер, по крайней мере, 5 часов в день для работы и личных нужд.

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

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

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

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

3. На последующей сессии одну неделю спустя участникам было предложено ввести свой пароль. Сессия продлилась около 5 минут.

Результаты.

Все участники достигли критерия десяти правильных вводов пароля. Десять участников достигли критерия сразу же. Другие пять участников сделали от 2 до 5 ошибок, в общей сложности 15 неправильных вводов пароля у всех участников. Эти люди продолжали вводить их пароль, пока они не достигли десяти правильных ответов подряд. Средний процент от правильных входов в систему для схемы треугольника 90,2%, для схемы диагоналей - 80,7%.

Среднее время для ввода пароля для схемы треугольника составило 28 секунд, а для схемы пересечения диагоналей - 36 секунд.

Время ввода пароля одного из участников.

№ попытки

1

2

3

4

5

6

7

8

9

10

Время ввода пароля для схемы треугольника, с

34

32

27

30

24

27

36

28

25

24

Время ввода пароля для схемы пересечения диагоналей, с

40

9

38

42

41

37

35

37

32

33

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

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

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

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

V. Исследование безопасности

Атака методом нажатия наудачу на схему треугольника

Злоумышленник всегда может попытаться войти в систему, нажимая на изображения наугад. Чтобы оценить вероятность этой атаки, нужно посчитать число всевозможных треугольников n, посчитать площадь каждого треугольника Si (i=1…n). Вероятность входа будет рассчитываться по формуле:

(где S - площадь окна для ввода пароля).

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

Чтобы сделать вероятность случайного входа в систему минимальной, нужно:

· "перемешивать” изображения от раунда к раунду;

· при генерации окна ввода пароля должна отслеживать площадь треугольника; когда площадь треугольника превышает треть всей площади окна ввода пароля, расположение изображений генерировать заново;

· увеличивать числа раундов парольной схемы.

Атака методом нажатия наудачу на схему диагоналей

При входе в систему пользователю предлагается поле из 154 изображений (14х11). Из них 108 изображений (12х9) могут содержать точку пересечения диагоналей (крайние изображения не могут содержать его, поскольку в программе заведомо не может быть вырожденного четырехугольника). Таким образом, вероятность атаки методом нажатия наудачу на схему диагоналей четырехугольника для трех раундов составляет

.

Чтобы сделать вероятность случайного входа в систему для нескольких раундов минимальной, нужно:

· "перемешивать” изображения от раунда к раунду;

· увеличивать числа раундов парольной схемы.

Атака методом полного перебора на схему треугольника

Количество возможных паролей есть "биномиальный коэффициент" (выбор любых К объектов среди N). При N = 399, К = 5 (числа N и K выбраны, исходя из соображений удобства пользователей), число возможных паролей равно . Это немного больше, чем число буквенно-цифровых паролей длины 5 . Кроме того, можно ожидать, что пользователь выберет К изображений довольно случайным образом, или, по крайней мере, злоумышленник не сможет предсказать, много о том, какие К изображений выберет пользователь. С другой стороны, большое число возможных буквенно-цифровых паролей является иллюзией: пользователи выбирают совсем не случайные буквенно-цифровые пароли.

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

Нападающий может попытаться сделать запись всех возможных комбинаций изображений, которые не принадлежат паролю. После многих последовательных наблюдений он может исключить все больше кортежей. Для того чтобы предположить реальность такого нападения, была написана программа, которая эмулировала последовательный ввод пароля пользователем и каждый раз "вычеркивала" те комбинации, которые содержат эти изображения и, следовательно, точно не могут принадлежать паролю. То есть, если всего 399 изображений, из которых пользователь выбрал 5 для своего пароля, то может быть всего комбинаций парольных изображений из миллиардов всевозможных комбинаций. Программа составляет список всех возможных комбинаций и при каждом вводе пароля вычеркивает те, которые точно ему не принадлежат. Для этого вначале проводим горизонтальную прямую линию, содержащую место клика мышкой. Любые комбинации из 3 изображений, расположенных выше этой прямой явно не принадлежат паролю. Аналогично вычеркиваем все комбинации, содержащие любые комбинации из 3 изображений, расположившихся ниже этой прямой. Далее также точно проводится вертикальная прямая и отбрасывается еще часть комбинаций.

Результат выполнения этой программы показал, что нужно около 800 полноценных записей входа в систему, чтобы определить пароль пользователя. То есть если пользователь будет входить в систему каждый день в среднем по 2 раза, включая выходные и праздники, злоумышленнику придется подсматривать за ним почти 5 месяцев. За это время можно несколько раз сменить пароль. Таким образом, нападение с помощью атаки методом полного перебора практически неосуществимо.

Атака методом полного перебора на схему диагоналей

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

.

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

Вероятность атаки на схему диагоналей четырехугольника рассчитывается аналогично расчету вероятности данной атаки на схему треугольника - "вычеркиванием" всех кортежей явно не принадлежащих паролю. То есть, если всего 399 изображений, из которых пользователь выбрал 5 для своего пароля, то может быть всего комбинаций парольных изображений из миллиарда всевозможных комбинаций. Программа составляет список всех возможных комбинаций и при каждом вводе пароля вычеркивает те, которые точно ему не принадлежат. Для этого вначале проводим горизонтальную прямую линию, содержащую место клика мышкой. Любые комбинации из 4 изображений, расположенных выше этой прямой явно не принадлежат паролю. Аналогично вычеркиваем все комбинации, содержащие любые комбинации из 4 изображений, расположившихся ниже этой прямой. Далее также точно проводится вертикальная прямая и отбрасывается еще часть комбинаций.

Результат выполнения этой программы показал, что нужно около 1000 полноценных записей входа в систему, чтобы определить пароль пользователя. То есть если пользователь будет входить в систему каждый день в среднем по 2 раза, включая выходные и праздники, злоумышленнику придется подсматривать за ним почти 6 месяцев. За это время можно несколько раз сменить пароль. Таким образом, нападение с помощью атаки методом полного перебора практически неосуществимо.

Чтобы сделать вероятность успешной атаки методом полного перебора на схемы треугольника и схемы диагоналей четырехугольника минимальной, нужно:

· увеличить общее количество изображений N, а при запросе пароля отображать только N' изображений (N ? N' ? 2 N);

· увеличить число парольных изображений K, а при запросе пароля отображать только K' изображений (3?K'?K);

· не рисовать невидимый треугольник или четырехугольник мышкой при вводе пароля;

· периодически (раз в 3 месяца) менять пароль пользователя.

Заключение

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

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

Эти методы аутентификации могут использоваться для аутентификации в персональном компьютере, карманном компьютере или для web-аутентификации.

Список литературы

1. "A Password Scheme Strongly Resistant to Spyware”. D. Hong, B. Hawes, M. Mattews.

2. "A Shoulder-Surfing Resistant Password Scheme - WIW”. S. Man, D. Hong, M. Mattews.

3. "Design and Evalution of a Shoulder-Surfing Resistant Graphical Password Scheme”. S. Wiedenbeck, J. Waters, L. Sobrado, J. - C. Birget.

4. "Graphical passwords”. L. Sobrado, J. - C. Birget.

5. Э. Таненбаум. Современные операционные системы. - М.: Питер, 2002.

Приложения

Приложение 1. Код PAM-модуля pam_triangle

pam_triangle. cpp

#include <security/pam_modules. h>

#include <security/pam_appl. h>

#include <stdio. h>

#include <string. h>

#include <time. h>

#include <QApplication>

#include <QString>

#include <QPushButton>

#include <QIcon>

#include <QLabel>

#include <QWidget>

#include <QGridLayout>

#include <QTextStream>

#include <QDataStream>

#include <QMessageBox>

#include <QFile>

#include "Counter. h"

#define PAM_SM_AUTH

#define n 399

#define n_pass 5

#define m 154

#define row 14

#define rounds 3

float square (int x1, int y1, int x2, int y2, int x3, int y3)

{

float s= (x2-x1) * (y3-y2) - (x3-x1) * (y2-y1);

if (s<0)

s=s* (-1);

return s;

}

PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh, int flags, int argc,const char **argv)

{

srand (time (NULL));

const char *user;

int retval;

int ind_i [n];

int pictures [m];

for (int i=0; i<n; i++)

ind_i [i] =i;

retval = pam_get_user (pamh, &user, 0);

int d=0, f;

for (int i=0; i<n; i++)

{

d=rand () %n;

f=ind_i [i];

ind_i [i] =ind_i [d];

ind_i [d] =f;

}

Counter b;

QFile file ("/etc/triangle/passwords");

file. open (QIODevice:: ReadOnly);

QTextStream in (&file);

QString username;

int k [n_pass] ={0,0,0,0,0};

int p [n_pass] ={0,0,0,0,0};

QString uname (user);

while (! in. atEnd ())

{

in >> username >> k [0] >> k [1] >> k [2] >> k [3] >> k [4];

if (username==uname)

{

for (int i=0; i<n_pass; i++)

{

p [i] =k [i];

}

}

}

int locate [3];

int passwd_pictures [3];

int x1=0,y1=0,x2=0,y2=0,x3=0,y3=0,x0,y0;

float s;

QApplication app (argc, (char **) argv);

for (int round=0; round<rounds; round++)

{

do

{

do

{

for (int i=0; i<3; i++)

{

locate [i] =rand () %m;

}

x1=locate [0] %row; y1=locate [0] /row;

x2=locate [1] %row; y2=locate [1] /row;

x3=locate [2] %row; y3=locate [2] /row;

}

while (locate [0] ==locate [1] || locate [1] ==locate [2] || locate [2] ==locate [0]);

s=square (x1,y1,x2,y2,x3,y3);

}

while (s<10 && s<50);

do

{

for (int i=0; i<3; i++)

{

passwd_pictures [i] =rand () %n_pass;

}

}

while (passwd_pictures [0] ==passwd_pictures [1] || passwd_pictures [1] ==passwd_pictures [2] || passwd_pictures [2] ==passwd_pictures [0]);

bool closed [n];

for (int i=0; i<n; i++)

closed [i] =0;

for (int i=0; i<m; i++)

{

int j;

if (i! =locate [0] && i! =locate [1] && i! =locate [2])

{

do

{

j=rand () %n+1;

}

while (j==p [0] || j==p [1] || j==p [2] || j==p [3] || j==p [4] || closed [j-1] ==1);

pictures [i] =j;

closed [j-1] =1;

}

}

pictures [locate [0]] =p [passwd_pictures [0]];

pictures [locate [1]] =p [passwd_pictures [1]];

pictures [locate [2]] =p [passwd_pictures [2]];

double sin1,sin2,sin3;

x1=locate [0] %row; y1=locate [0] /row;

x2=locate [1] %row; y2=locate [1] /row;

x3=locate [2] %row; y3=locate [2] /row;

QWidget *widget=new QWidget ();

widget->move (0,0);

QGridLayout *layout=new QGridLayout ();

QPushButton *button;

for (int i=0; i<m; i++)

{

button = new QPushButton ("");

x0=i%row;

y0=i/row;

sin1= (x1-x0) * (y2-y1) - (x2-x1) * (y1-y0);

sin2= (x2-x0) * (y3-y2) - (x3-x2) * (y2-y0);

sin3= (x3-x0) * (y1-y3) - (x1-x3) * (y3-y0);

if ( (sin1>=0 && sin2>=0 && sin3>=0) || (sin1<=0 && sin2<=0 && sin3<=0))

{

QObject:: connect (button, SIGNAL (clicked ()),&b,SLOT (auth_ok ()));

}

else

{

QObject:: connect (button, SIGNAL (clicked ()), &b, SLOT (auth_err ()));

}

if (round==0)

QObject:: connect (button, SIGNAL (clicked ()),&app,SLOT (quit ()));

else

QObject:: connect (button, SIGNAL (clicked ()),widget,SLOT (hide ()));

QString result;

QTextStream (&result) << "/etc/triangle/pictures/" << pictures [i] <<". png";

button->setIcon (QIcon (result));

button->setIconSize (QSize (32,32));

layout->addWidget (button, i/row, i%row);

}

QLabel *label = new QLabel ("1. Find your 3 password's pictures. \n2. Imagine a triangle formed from them. \n3. Click on the picture that belong to the triangle's area.", widget);

layout->addWidget (label, m/row,m%row,1,-1);

widget->setLayout (layout);

widget->show ();

}

app. exec ();

int a=b. auth ();

if (a>=rounds)

{

return PAM_SUCCESS;

}

else

{

return PAM_AUTH_ERR;

}

}

PAM_EXTERN int pam_sm_setcred (pam_handle_t * pamh, int flags, int argc, const char **argv)

{

return PAM_SUCCESS;

}

#ifdef PAM_STATIC

struct pam_module _pam_test_modstruct = {

"pam_triangle",

pam_sm_authenticate,

pam_sm_setcred,

NULL,

NULL,

NULL,

NULL,

};

#endif

Counter. cpp

#include <QFile>

#include <QTextStream>

#include <QString>

#include "Counter. h"

void Counter:: auth_ok ()

{

auth_num++;

}

void Counter:: auth_err ()

{

auth_num=0;

}

Counter. h

#ifndef COUNTER_H

#define COUNTER_H

#include <QObject>

#include <QString>

class Counter: public QObject

{

Q_OBJECT

public:

Counter () { auth_num=0; }

int auth () const {return auth_num; }

public slots:

void auth_ok ();

void auth_err ();

private:

int auth_num;

};

#endif

Приложение 2. Код PAM-модуля pam_diagonal

pam_diagonal. cpp

#include <security/pam_modules. h>

#include <security/pam_appl. h>

#include <stdio. h>

#include <string. h>

#include <time. h>

#include <QApplication>

#include <QString>

#include <QPushButton>

#include <QIcon>

#include <QLabel>

#include <QWidget>

#include <QGridLayout>

#include <QTextStream>

#include <QDataStream>

#include <QMessageBox>

#include <QFile>

#include "Counter. h"

#define PAM_SM_AUTH

#define n 399

#define n_pass 5

#define m 154

#define row 14

#define rounds 3

int triangle (int x1, int y1, int x2, int y2, int x3, int y3, int x0, int y0)

{

int check=0;

int sin1= (x1-x0) * (y2-y1) - (x2-x1) * (y1-y0);

int sin2= (x2-x0) * (y3-y2) - (x3-x2) * (y2-y0);

int sin3= (x3-x0) * (y1-y3) - (x1-x3) * (y3-y0);

if ( (sin1>=0 && sin2>=0 && sin3>=0) || (sin1<=0 && sin2<=0 && sin3<=0))

check=1;

return check;

}

float square (int x1, int y1, int x2, int y2, int x3, int y3)

{

float s= (x2-x1) * (y3-y2) - (x3-x1) * (y2-y1);

if (s<0)

s=s* (-1);

return s;

}

PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh, int flags, int argc,const char **argv)

{

srand (time (NULL));

const char *user;

int retval;

int ind_i [n];

int pictures [m];

for (int i=0; i<n; i++)

ind_i [i] =i;

retval = pam_get_user (pamh, &user, 0);

int d=0, f;

for (int i=0; i<n; i++)

{

d=rand () %n;

f=ind_i [i];

ind_i [i] =ind_i [d];

ind_i [d] =f;

}

Counter b;

QFile file ("/etc/diagonal/passwords");

file. open (QIODevice:: ReadOnly);

QTextStream in (&file);

QString username;

int k [n_pass] ={0,0,0,0,0};

int p [n_pass] ={0,0,0,0,0};

QString uname (user);

while (! in. atEnd ())

{

in >> username >> k [0] >> k [1] >> k [2] >> k [3] >> k [4];

if (username==uname)

{

for (int i=0; i<n_pass; i++)

{

p [i] =k [i];

}

}

}

int locate [4];

int passwd_pictures [4];

int x1=0,y1=0,x2=0,y2=0,x3=0,y3=0,x4=0,y4=0;

int check;

QApplication app (argc, (char **) argv);

for (int round=0; round<rounds; round++)

{

do

{

do

{

check=0;

do

{

for (int i=0; i<4; i++)

{

locate [i] =rand () %m;

}

}

while (locate [0] ==locate [1] || locate [1] ==locate [2] || locate [2] ==locate [0] || locate [0] ==locate [3] || locate [1] ==locate [3] || locate [2] ==locate [3]);

x1=locate [0] %row; y1=locate [0] /row;

x2=locate [1] %row; y2=locate [1] /row;

x3=locate [2] %row; y3=locate [2] /row;

x4=locate [3] %row; y4=locate [3] /row;

check+=triangle (x1,y1,x2,y2,x3,y3,x4,y4);

check+=triangle (x1,y1,x2,y2,x4,y4,x3,y3);

check+=triangle (x1,y1,x3,y3,x4,y4,x2,y2);

check+=triangle (x2,y2,x3,y3,x4,y4,x1,y1);

}

while (check>0);

}

while (square (x1,y1,x2,y2,x3,y3) <7 || square (x1,y1,x2,y2,x4,y4) <7 || square (x1,y1,x3,y3,x4,y4) <7 || square (x2,y2,x3,y3,x4,y4) <7);

do

{

for (int i=0; i<4; i++)

{

passwd_pictures [i] =rand () %n_pass;

}

}

while (passwd_pictures [0] ==passwd_pictures [1] || passwd_pictures [1] ==passwd_pictures [2] || passwd_pictures [2] ==passwd_pictures [0] || passwd_pictures [0] ==passwd_pictures [3] || passwd_pictures [1] ==passwd_pictures [3] || passwd_pictures [2] ==passwd_pictures [3]);

bool closed [n];

for (int i=0; i<n; i++)

closed [i] =0;

for (int i=0; i<m; i++)

{

int j;

if (i! =locate [0] && i! =locate [1] && i! =locate [2] && i! =locate [3])

{

do

{

j=rand () %n+1;

}

while (j==p [0] || j==p [1] || j==p [2] || j==p [3] || j==p [4] || closed [j-1] ==1);

pictures [i] =j;

closed [j-1] =1;

}

}

pictures [locate [0]] =p [passwd_pictures [0]];

pictures [locate [1]] =p [passwd_pictures [1]];

pictures [locate [2]] =p [passwd_pictures [2]];

pictures [locate [3]] =p [passwd_pictures [3]];

float buff;

float X [] ={0, 0, 0, 0}; float Y [] ={0,0,0,0};

X [0] =x1; X [1] =x2; X [2] =x3; X [3] =x4;

Y [0] =y1; Y [1] =y2; Y [2] =y3; Y [3] =y4;

for (int k=0; k<4; k++)

{

for (int i=0; i<3; i++)

{

if (X [i] > X [i+1])

{

buff=X [i];

X [i] =X [i+1];

X [i+1] =buff;

buff=Y [i];

Y [i] =Y [i+1];

Y [i+1] =buff;

};

};

};

for (int i=0; i<3; i++)

{

if ( (X [i] ==X [i+1]) && (Y [i] >Y [i+1]))

{

buff=X [i+1];

X [i+1] =X [i];

X [i] =buff;

buff=Y [i+1];

Y [i+1] =Y [i];

Y [i] =buff;

};

};

if (Y [0] >Y [1])

{

buff=X [0];

X [0] =X [1];

X [1] =buff;

buff=Y [0];

Y [0] =Y [1];

Y [1] =buff;

};

if (Y [3] >Y [2])

{

buff=X [3];

X [3] =X [2];

X [2] =buff;

buff=Y [3];

Y [3] =Y [2];

Y [2] =buff;

};

float xp,yp,k1,k2,b1,b2;

k1= (Y [0] - Y [2]) / (X [0] - X [2]);

k2= (Y [1] - Y [3]) / (X [1] - X [3]);

b1= (X [0] *Y [2] - Y [0] *X [2]) / (X [0] - X [2]);

b2= (X [1] *Y [3] - Y [1] *X [3]) / (X [1] - X [3]);

xp= (b1-b2) / (k2-k1);

yp= (k2*b1-k1*b2) / (k2-k1);

int x0,y0;

QWidget *widget=new QWidget ();

widget->move (0,0);

QGridLayout *layout=new QGridLayout ();

QPushButton *button;

for (int i=0; i<m; i++)

{

button = new QPushButton ("");

x0=i%row;

y0=i/row;

if (xp-x0<2 && xp-x0>-2 && yp-y0<2 && yp-y0>-2)

{

QObject:: connect (button, SIGNAL (clicked ()),&b,SLOT (auth_ok ()));

}

else

{

QObject:: connect (button, SIGNAL (clicked ()), &b, SLOT (auth_err ()));

}

if (round==0)

QObject:: connect (button, SIGNAL (clicked ()),&app,SLOT (quit ()));

else

QObject:: connect (button, SIGNAL (clicked ()),widget,SLOT (hide ()));

QString result;

QTextStream (&result) << "/etc/diagonal/pictures/" << pictures [i] <<". png";

button->setIcon (QIcon (result));

button->setIconSize (QSize (32,32));

layout->addWidget (button, i/row, i%row);

}

QLabel *label = new QLabel ("1. Find your 4 password's pictures. \n2. Imagine a quadrangle formed from them. \n3. Click on the picture that contain the point of intersection quadrangle's diagonals.", widget);

layout->addWidget (label, m/row,m%row,1,-1);

widget->setLayout (layout);

widget->show ();

}

app. exec ();

int a=b. auth ();

if (a>=rounds)

{

return PAM_SUCCESS;

}

else

{

return PAM_AUTH_ERR;

}

}

PAM_EXTERN int pam_sm_setcred (pam_handle_t * pamh, int flags, int argc, const char **argv)

{

return PAM_SUCCESS;

}

#ifdef PAM_STATIC

struct pam_module _pam_test_modstruct = {

"pam_diagonal",

pam_sm_authenticate,

pam_sm_setcred,

NULL,

NULL,

NULL,

NULL,

};

#endif

counter. cpp

#include <QFile>

#include <QTextStream>

#include <QString>

#include "Counter. h"

void Counter:: auth_ok ()

{

auth_num++;

}

void Counter:: auth_err ()

{

auth_num=0;

}

counter. h

#ifndef COUNTER_H

#define COUNTER_H

#include <QObject>

#include <QString>

class Counter: public QObject

{

Q_OBJECT

public:

Counter () { auth_num=0; }

int auth () const {return auth_num; }

public slots:

void auth_ok ();

void auth_err ();

private:

int auth_num;

};

#endif

Размещено на Allbest.ru


Подобные документы

  • Разработка подключаемых модулей аутентификации как средства аутентификации пользователей. Модуль Linux-PAM в составе дистрибутивов Linux. Принцип работы, администрирование, ограничение по времени и ресурсам. Обзор подключаемых модулей аутентификации.

    курсовая работа [192,0 K], добавлен 29.01.2011

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

    курсовая работа [255,6 K], добавлен 07.02.2012

  • Пример окна входа в систему Linux (графический режим). Простейшие команды Linux. Основные задачи при управлении пользователями. Сведения, которые нужно указать для вновь создаваемого пользователя. Содержимое файла/etc/shadow (в котором содержатся пароли).

    лекция [603,7 K], добавлен 20.12.2013

  • Знакомство с возможностями перехвата пароля при аутентификации в почтовых системах. Характеристика почтовой программы "The Bat!", анализ способов настройки и проверки работоспособности. Рассмотрение распространенных методов защиты от перехвата пароля.

    контрольная работа [1,1 M], добавлен 19.05.2014

  • Основные понятия операционных систем. Современное оборудование компьютера. Преимущества и недостатки операционной системы Linux. Функциональные возможности операционной системы Knoppix. Сравнительная характеристика операционных систем Linux и Knoppix.

    реферат [1,5 M], добавлен 17.12.2014

  • Архитектура строения операционной системы. Назначение API в операционных системах и разных платформах. Особенности строения API в ядре Linux. Реализация проекта для работы с CDROM на CentOS. Сравнение Linux и Windows. Реализация проекта на Win32 API.

    дипломная работа [1,6 M], добавлен 08.06.2017

  • Основные сходства и отличия операционных систем Microsoft Windows и GNU/Linux: конфигурации, цена и широта технической поддержки; оценка стоимости владения и статистика использования на настольных компьютерах; простота инсталляции и наличие драйверов.

    курсовая работа [294,9 K], добавлен 12.05.2011

  • История создания и общая характеристика операционных систем Windows Server 2003 и Red Hat Linux Enterprise 4. Особенности установки, файловых систем и сетевых инфраструктур данных операционных систем. Использование протокола Kerberos в Windows и Linux.

    дипломная работа [142,7 K], добавлен 23.06.2012

  • Linux – одна из наиболее популярных распространяемых бесплатно операционных систем. Работа с базовым ограниченным набором программ по умолчанию. Характеристика основных программ, которые расширяют возможности операционной системы Linux для пользователя.

    презентация [486,5 K], добавлен 09.10.2013

  • Понятие и сущность операционных систем, особенности их возникновения. История создания операционной системы Linux, ее основные характеристики, сетевые возможности. Анализ бизнес-модели производства и распространения "свободного" программного обеспечения.

    реферат [35,8 K], добавлен 05.04.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.