Пример парольной защиты

Основные положения

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

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

Рис.1. Схема установления подлинности пользователя.

clip_image002

Существует множество алгоритмов и способов авторизации. Некоторые из них:

· простой пароль;

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

· использование паролей однократного использования;

· реализация метода запрос-ответ;

· шифрование пароля методом RSA;

· полиномиальное представление пароля;

· режим «рукопожатия»;

· запрос пары пароль-ключ;

· первоначальная установка пароля.

Шифрование паролей

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

Пример этого метода – полиномиальное необратимое представление:

f(x)=(xn+a1xn-1+…+an-1x+an)modP,

где P- большое, ai и n – целые числа; x -пароль в явной форме; f(x) – зашифрованный пароль.

Выполнение работы

Проверим правильность работы программы на следующих примерах:

clip_image004 clip_image006

clip_image008 clip_image010

Текст– программы

unit Unit1;

interface

uses

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

Buttons, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit3: TEdit;

Timer1: TTimer;

Button1: TButton;

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

maxtry:byte;

implementation

{$R *.DFM}

function MyRol(b:cardinal; i:byte):cardinal;

begin

asm

mov cl,i

mov eax,b

rol eax,cl

mov result,eax

end;

end;

function MyRor(b:cardinal; i:byte):cardinal;

begin

asm

mov cl, i

mov eax, b

ror eax, cl

mov result, eax

end;

end;

function KeyMaster(key:cardinal;rul:byte):cardinal;

begin

case rul of

1: result:=MyRor(key,5) xor MyRol(key,3);

2: result:=MyRor((MyRor(key,3) xor key),2);

3: result:=key xor (key xor MyRol(key,4));

else result:=0;

end;

result:=result+0;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

maxtry:=3;

Timer1.Interval:=10000

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

timer1.Enabled:=false;

maxtry:=3;

Button1.Enabled:=true;

end;

procedure TForm1.Button1Click(Sender: TObject);

const

usrlogin:array[1..5] of AnsiString = (‘Anime’,’Vasya’,’Sasha’,’Sveta’,’Petya’);

usrkey:array[1..5] of cardinal = (1984,1985,1986,1984,1986);

usrrul:array[1..5] of byte = (2,1,3,2,2);

var

i:integer;

index:integer;

usrpass:cardinal;

begin

Button1.Enabled:=false;

index:=0;

for i:=1 to 5 do

if Edit1.Text=usrlogin[i] then index:=i;

if index=0 then

begin

ShowMessage(‘Логин не правильный! Доступ завершен!’);

Dec(maxtry);

if maxtry<1 then

begin

Timer1.Enabled:=true;

Button1.Enabled:=false;

end

else

begin

Button1.Enabled:=true;

end

end

else

begin

if Edit2.Text<>IntToStr(usrkey[index]) then

begin

ShowMessage(‘Ключ не правильный! Доступ завершен! ‘);

Dec(maxtry);

if maxtry<1 then

begin

Timer1.Enabled:=true;

Button1.Enabled:=false;

end

else

begin

Button1.Enabled:=true;

end;

end

else

begin

usrpass:=StrToInt(Edit3.Text);

if usrpass<>KeyMaster(usrkey[index],usrrul[index]) then

begin

ShowMessage(‘Пароль не правильный! Доступ завершен!’);

Dec(maxtry);

if maxtry<1 then

begin

Timer1.Enabled:=true;

Button1.Enabled:=false;

end

else

begin

Button1.Enabled:=true;

end;

end

else

begin

ShowMessage(‘ Доступ разрешен!’);

Button1.Enabled:=true;

end;

end;

end;

Edit3.Clear;

end;

end.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100