Программа аутентификации
В ланной статье рассматривается визуально событийное программирование как метод создания программного обеспечения с наименьшими затратами по времени и трудоемкости. В качестве примера рассмотрим задачу аутентификации по клавиатурному почерку.
Программное обеспечение информационной системы представляет собой совокупность модулей, выполняющих определенные функции. Модули состоят из кода, который реализует функционирование программы, обработчики событий для форм и их компонентов. Логика приложения, построенного средствами RAD, является событийно-ориентированной.
Для решения таких задач, как аутентификация пользователя часто используется параметры клавиатурного почерка. С этой целью требуется разработать программное обеспечение аутентификации по клавиатурному почерку ввода. Такое программное обеспечение, созданное визуально-событийным методом программирования позволяет повысить уровень защиты клиентов.
Программное обеспечение аутентификации по клавиатурному почерку ввода данных может использоваться для подтверждения личности при входе в свой аккаунт на настольном или мобильном устройстве, или когда он совершает банковскую операцию и т.д. С алгоритмом аутентификации можно познакомиться в статье.
Основными параметрами клавиатурного почерка являются: время удержания клавиши и время паузы между отпусканием одной клавиши и нажатием другой. Для определения этих параметров необходимо специальное программное обеспечение аутентификации, которое можно построить на основе обработки событий, фиксирующих время нажатия и отпускания клавиш клавиатуры, по которым вычисляется время удержания клавиши и время паузы между отпусканием одной клавиши и нажатием другой.
Один из возможных вариантов построения такого программного обеспечения аутентификации, созданное визуально — событийным методом программирования на языке Паскаль рассмотрим далее. Визуально событийное программирование предполагает создание интерфейса визуальным методом путем встраивания в ранее созданную форму элементов, а затем создание обработчиков событий генерируемы встроенным элементами.
Интерфейс программы, построенный визуальным методом, показан на следующем рисунке.
Программа будет работать в двух режимах “Обучение” и “Исполнение”, которые иницируются нажатием кнопки Выполнить.
Визуально событийное программирование, как метод построения программного обеспечения предполагает использование специальных процедур — обработчиков событий, закрепленных за каждым встраиваемым элементом. Такие программы, использующие обработчики событий, создаваемые под операционную систему Windows, на практике применяются во многих случаях для решения различных задач. Под обработчиками событий в ОС Windows понимается особые процедуры, в которых описываются действия, которые нужно выполнить при наступлении события.
Процедура обработки события «Нажатия кнопки Выполнить» имеет следующий код.
procedure TFrmKlvPck.ButtonExeClick(Sender: TObject);
begin
if RadioButtonObuch.Checked then
FrmObuch.ShowModal();
if RadioButtonExec.Checked then
FrmAutent.ShowModal();
end;
Режим обучения включается после выбора переключателя “Обучение” нажатия на кнопку “Выполнить”. В этом режиме формируется массив данных и вычисляются статистические характеристики параметров клавиатурного почерка.
В режиме Обучение интерфейс имеет вид, показанный на следующем рисунке
Режим аутентификации включается после выбора переключателя “Исполнение” нажатия на кнопку “Выполнить”. В данном режиме осуществляется проверка совпадения введенных значений логина и пароля с ранее сформированными эталонными статистическими характеристиками.
В режиме Исполнение интерфейс имеет вид, показанный на следующем рисунке
Таким образом, программа аутентификации, использующая обработчики событий, имеет простой интерфейс и легко может использоваться многими пользователями.
Вычисление параметров клавиатурного почерка
Программа измерения параметров нажатия клавиш клавиатуры представляет собой совокупность обработчиков событий KeyDown и KeyUp, которые возникают каждый раз, когда нажимается и отпускается клавиша соответственно. Вопрос заключается в том каким способом измерять время наступления этих событий? После некоторых экспериментов было принято решение использовать функцию Now(). Она измеряет количество секунд, прошедшее с начала суток. Точность измерения достаточно высока.
Вот тексты кода двух обработчиков событий KeyDown и KeyUp с использованием функцию Now() и фиксации моментов нажатия и отпускания клавиш при вводе символов логина.
procedure TFrmObuch.EditLoginKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
mTdn[m]:= Now();
end;
procedure TFrmObuch.EditLoginKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
mTup[m]:= Now();
m:=m+1
end;
Как видно из текста фрагментов программы измеренные моменты времени сохраняются в массивах. Причем индекс массивов изменять следует только в обработчике события KeyUp, иначе будет не синхронное запоминание измерений.
Аналогичные обработчики событий нажатия клавиши KeyDown и отпускания клавиши KeyUp необходимо создать и для ввода символов пароля. Тексты кода этих обработчиков событий приведены ниже.
procedure TFrmObuch.EditPaswKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
mTdn[m]:= Now();
end;
procedure TFrmObuch.EditPaswKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
mTup[m]:= Now();
m:=m+1
end;
Результаты вполне приемлемы. Все хорошо, но более подробный анализ показал, что могут возникать ситуации, при которых появляются искажения измерений. Известно, что для переключения регистра используется клавиша Shift, для которой также появляются события KeyDown и KeyUp. Обработка события переключения регистра лежит в основе следующей процедуры.
Как учесть переключение регистра при обработке событий от клавиатуры?
Если ничего не менять в описанной ранее программе, то будет нарушена синхронная фиксация нажатия и отпускания других информационных клавиш, что приведет к большим выбросам в измерениях и грубым ошибкам в вычислениях параметров клавиатурного почерка. Что снижает достоверность аутентификации.
Проведем эксперимент для существующей программы, когда будет нажата клавиша Shift затем клавиша с первой буквой будет нажата и отпущена и далее отпущена клавиша Shift.
Просмотрев фиксируемые в обработчиках событий измерения в отладчике, имеем следующую картину, как показано на рисунке.
Из рисунка видно, второе значение времени удержания клавиши и первое значение времени паузы между нажатиями сильно искажены. Это обусловлено тем, что второй элемент массива mTdn – соответствующий нажатию первой буквы — равен нулю. Тогда время удержания, вычисляемое по известной формуле будет равно(с учетом перевода в микросекунды) очень большим:
Tpr= mTup[1] — mTdn[1] =(43715,399844-0)Е6 = 4,372Е11
Аналогично для времени паузы между нажатиями клавиш.
Tps= mTdn[2] — mTup[1] =( 0-43715,399844)Е6 = -4,372Е11
Этот феномен объясняется тем, что фиксируется время не каждой нажатой и отпущенной клавиши, а время двух последовательно следуемых одинаковых события(нажата клавиша Shift и нажата клавиша следующей буквы) и других двух последовательно следуемых одинаковых события(отпущена клавиша буквы и отпущена клавиша Shift), что нарушает синхронность фиксации времени отдельной клавиши.
На следующем рисунке видно, что при нажатии клавиши Shift одноименные обработчики событий вызываются дважды(зеленый фон), вместо одного раза. То есть обработка событий нажатия и отпускания клавиш осуществляется не корректно.
Для исключения искажений в измерениях можно перехватывать нажатие клавиши Shift и выходить из обработчика события. Это можно сделать дополнив код обработчика события следующим оператором if (Key=VK_SHIFT) then exit;
Проверим на практике. Снова выполним тот же эксперимент и зафиксируем результаты обработки событий нажатия и отпускания клавиш.
Как видно результаты получены вполне корректные. Пропал второй столбец, который относится к клавише Shift. Программа работает правильно. Обработка событий нажатия и отпускания клавиш происходит корректно. Таким образом, обработка события переключения регистра, устраняет проблему первоначальной программы и тем самым повышает достоверность аутентификации по клавиатурному почерку.
Отладка программы
Чтобы проверить программное обеспечение для аутентификации на правильность работы нами была создана специальная отладочная версия программы.
Тексты фрагментов программы показан ниже. В них предусмотрено формирование динамических массивов, размерностью числа накопленных данных SetLength(mTpr,m). Вычисления времени удержания и паузы между нажатиями клавиш.
mTpr[i]:=mTup[i]-mTdn[i]; mTpz[i]:=mTdn[i+1]-mTup[i];
Результаты выводятся в компонент StringGrid для визуализации и анализа.
StringGridKlvPoc.Cells[i,1]:=FloatToStr((mTdn[i]-Tbg)*1000);
StringGridKlvPoc.Cells[i,2]:=FloatToStr((mTup[i]-Tbg)*1000);
Полный текст отладочной процедуры имеет вид.
procedure TFrmObuch.ButtonEndClick(Sender: TObject);
var
i: integer;
begin
m:=m-1;
SetLength(mTpr,m);
SetLength(mTpz,m);
for i := 0 to m-1 do
begin
mTpr[i]:=mTup[i]-mTdn[i];
mTpz[i]:=mTdn[i+1]-mTup[i];
end;
StringGridKlvPoc.ColCount:=m;
StringGridKlvPoc.ColWidths[0]:=150;
for i := 1 to m do
begin
StringGridKlvPoc.Cells[i,1]:=FloatToStr((mTdn[i]-Tbg)*1000);
StringGridKlvPoc.Cells[i,2]:=FloatToStr((mTup[i]-Tbg)*1000);
end;
end;
Результат работы программы в режиме обучения показан ниже на рисунке.
Результаты вполне приемлемы. Быстродействие вполне приличное. Все хорошо.
Результат работы программы в режиме исполнение(аутентификации) показан ниже на рисунке.
Таким образом, программное обеспечение аутентификации по клавиатурному почерку ввода, созданное визуально-событийным методом программирования работает успешно.
Заключение
Таким образом, визуально событийное программирование как метод создания программного обеспечения позволяет строить программы с наименьшими затратами по времени и трудоемкости.
Программное обеспечение аутентификации по клавиатурному почерку, созданное визуально-событийным методом программирования, позволяет повысить уровень защиты клиентов.
Разработанное программное обеспечение для аутентификации по клавиатурному почерку можно использовать на практике в различных сферах.
Читайте также..
- Программирование
- Как изучать алгоритмы по математическим преобразованиям?
- Методика изучения алгоритмов решения задач
- Что такое виды и парадигмы программирования?
- Как стать программистом?
Кто согласен с подходом одобряйте, кто нет, отзывайтесь. Будем рады услышать отзывы!