Использование криптографического интерфейса приложений Cryptoapi

Автор работы: Пользователь скрыл имя, 13 Марта 2013 в 20:04, курсовая работа

Краткое описание

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

Содержание

РЕФЕРАТ 3
ВВЕДЕНИЕ 5
1 ПОСТАНОВКА ЗАДАЧИ 6
2 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 7
3 ОПИСАНИЕ ЛОГИКИ РАБОТЫ ОСНОВНЫХ БЛОКОВ ПРОГРАММЫ 13
4 РЕАЛИЗАЦИЯ ЗАДАЧИ 16
5 ИСХОДНЫЕ ТЕКСТЫ МОДУЛЕЙ 22
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 30

Прикрепленные файлы: 1 файл

курсовой.doc

— 1.29 Мб (Скачать документ)

Предметная аутентификация также  имеет ряд недостатков:

• предмет может быть похищен  или отобран у его владельца;

• для всех предметов, кроме USB-токенов, требуется специальное оборудование для их подключения к компьютеру (на рис. 1 показаны, в частности, ридер  смарт-карт и коннектор iButton);

• для всех предметов, кроме микропроцессорных  смарт-карт и их функциональных аналогов, возможно изготовление копии или эмулятора предмета.

 

Биометрическая аутентификация

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

• отпечатки пальцев;

• узор радужной оболочки и структура  сетчатки глаза;

• черты лица;

• схема кровеносных сосудов  лица;

• геометрия кисти руки;

• рукописная подпись;

• клавиатурный почерк (интервалы  времени между нажатиями клавиш, составляющих кодовое слово, и длительность нажатий);

• голос.

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

• ложного доступа – вероятность  ошибочного допуска нелегального пользователя.

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

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

 

Удаленная аутентификация

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

Простейший из них – протокол PAP (Password Access Protocol – протокол доступа по паролю). Информация, требуемая для аутентификации пользователя (т.е. его имя и пароль), просто передается по сети в открытом виде. Удаленный компьютер при необходимости выполняет описанные выше преобразования пароля и проверяет равенство полученного результата тому эталону, который соответствует данному пользователю.

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

 

Протоколы строгой аутентификации

Существует целое семейство  протоколов, в которых аутентификационная информация пользователя совсем не передается по сети, а лишь участвует в вычислениях, как на клиентской, так и на серверной  стороне. По такому принципу lenge-Handshake Authentication Protocol – протокол аутентификации «запрос-ответ») и его версия от Microsoft – MS-CHAP. Протоколы «запрос – ответ» выполняются в несколько этапов.

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

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

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

Этап 2. Сервер генерирует случайное  число N1 и посылает его пользователю.

Этап 3. Пользователь зашифровывает  случайное число N1: C1 = = E(N1), а также  генерирует собственное случайное число N2. C1 и N2 пользователь посылает серверу.

Этап 4. Сервер расшифровывает C1 и сравнивает результат расшифрования  с N1. Если числа равны, сервер считает  пользователя подлинным. В этом случае сервер зашифровывает число N2: C2 = E(N2) и отправляет результат пользователю.

Этап 5. Пользователь расшифровывает C2 и сравнивает с N2. Если отправленное и полученное числа совпадают, то пользователь считает, что сервер успешно  прошел проверку подлинности.

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

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

 

3 ОПИСАНИЕ  ЛОГИКИ РАБОТЫ ОСНОВНЫХ БЛОКОВ ПРОГРАММЫ

Рисунок 1. Регистрация пользователя

 

Рисунок 2. Создание нового пользователя

 

Рисунок 3. Изменение пароля пользователя

 

4 РЕАЛИЗАЦИЯ ЗАДАЧИ

 

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

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

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

Для защиты от перехвата пароля с  клавиатуры программами-шпионами (keylogger) выполнена реализация ввода логина  и пароля  через экранную клавиатуру.

Рисунок 4. Авторизация с помощью экранной клавиатуры

 

При введении пароля символы  не отображаются (рис. 5).

Рисунок 5. Символы пароля отображаются в виде звездочек

 

 

При вводе неверного логина или  пароля появляется сообщение об ошибке (рис. 6).

Рисунок 6. Ошибка при вводе неверных данных

 

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

 

 

Рисунок 7. Окно, возникающее при введении более 3х раз неверных данных при авторизации

 

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

Рисунок 8. Главное окно программы при входе с правами администратора

Рисунок 9. Главное окно программы при входе с правами пользователя

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

Рисунок 10. Редактирование пользователей

Рисунок 11. Создание нового пользователя

Рисунок 12. Изменение пользователя

 

 

Рисунок 13. Окно, появляющееся при попытке удалить пользователя

 

Рисунок 14. Протокол попыток регистраций пользователей

 

5 ИСХОДНЫЕ ТЕКСТЫ МОДУЛЕЙ

5.1 Исходный текст модуля  HashUnit.pas для работы с Crypto API

Модуль обеспечивает доступ процедур программы к функциям хэширования.

 

unit HashUnit;

 

interface

 

uses Wcrypt2, Classes, Windows, SysUtils;

 

  const  HASH_LEN = 16;   // длина хэша в алгоритме MD5 равна 16 байт

 

  function GetHash(s: string; Provider: HCRYPTPROV): string;

 

implementation

 

function GetHash(s: string; Provider: HCRYPTPROV): string; // ф-ия получает строку s и возвращает её хэш-функцию

 

 

var

  hHash: HCRYPTHASH;               // дескриптор хэш-объекта

  dwLen: DWORD;                  // длину пароля сюда пишем

  Stream: TMemoryStream;           // для получения значения хэша от хэш объекта

  i: byte;                      // для цикла

  bH: array[1..HASH_LEN] of byte;  // для получения букв пароля  в 16-ичном виде

 

begin

  result:= '';

 

  // создание хэш-объекта

  CryptCreateHash(Provider,  // созданный  криптопровайдер

                  CALG_MD5,  // алгоритм получения значения  хеша - MD5я

                  0,         // должен  быть = 0

                  0,         // должен быть = 0

                  @hHash);   // ч/з этот параметр  ф-ия возвращает дескриптор созданного  ей хеш-объекта

 

  //передаем строку  для вычсиления хэш кода

  CryptHashData(hHash,       // дескриптор ранее созданного  хеш-объекта

               PByte(s),    // пароль

                length(s),   // длина пароля

                0);          // должен  быть = 0

 

  Stream:= TMemoryStream.Create;

 

  dwLen:= HASH_LEN;                 // длина хэша в МД5 - 16 байт

  Stream.SetSize(dwLen);

 

  // формируем хэш-код

  if CryptGetHashParam(hHash,                 // ранее созданный дескриптор хеш-объекта

                       HP_HASHVAL,            // тип запрашиваемого значения - хэш-значение

                       PByte(Stream.memory),  // буфер с данными, в который запишется значение хэша

                       @dwLen,                // размер буфера данных в байтах

                       0)                     // должен быть = 0

  then begin

    Stream.Read(bH, HASH_LEN);

    for i:= 1 to HASH_LEN do

      result:= result + Format('%.2x', [bH[i]]);

  end;

 

  Stream.Free;

 

  CryptDestroyHash(hHash);  // уничтожение хэш-объекта, созданного с помощью ф-ии CryptCreateHash

end;

 

 

end.

5.2 Исходный текст модуля NewUserUnit.pas создания нового пользователя

 

unit NewUserUnit;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls, DB, ADODB;

 

const MIN_PASSWORD_LENGTH = 8;    // минимальная длина  пароля

 

type

  TCreateUserForm = class(TForm)

   LoginEdt: TLabeledEdit;

    PwdPromtEdt: TLabeledEdit;

    PwdEdt: TLabeledEdit;

    OkBtn: TButton;

    CancelBtn: TButton;

    QAddUser: TADOQuery;

    procedure OkBtnClick(Sender: TObject);

    procedure LoginEdtChange(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  CreateUserForm: TCreateUserForm;

 

implementation

 

uses mainUnit, HashUnit, UsersUnit, wcrypt2;

 

{$R *.dfm}

 

procedure TCreateUserForm.OkBtnClick(Sender: TObject);

Информация о работе Использование криптографического интерфейса приложений Cryptoapi