Реферат: Обнаружение вредоносных закладок
Название: Обнаружение вредоносных закладок Раздел: Рефераты по информатике, программированию Тип: реферат | |||||||||||||||||||||||||||||||||||||||||||||
СОДЕРЖАНИЕ Введение………………………………………………………………………………..2 1 Подтверждение подлинности пользователей и разграничение их доступа к компьютерным ресурсам………………...……………………………………………………...3 2 Типовые решения в организации ключевых систем………………………………..10 3. Описание программы………………………………………………………………….13 Заключение……………………………………………………………………………...17 Приложение А (интерфейс программы)………………….………………………...…18 Приложение В (листинг программы)…………………………………………………19 Литература………………………………………………………………………………29 ВВЕДЕНИЕУвеличение числа пользователей ЭВМ привело к необходимости создания систем разграничения доступа пользователей к ресурсам как отдельно стоящего компьютера, так и к сетевым ресурсам в целом. Процедуры идентификации и аутентификации осуществляются на начальном этапе работы пользователя и позволяют предоставить возможность доступа к ресурсам тем, кому это разрешено и, по возможности, предотвратить несанкционированный доступ. Аутентификация может выполняться как процедура ввода какой-либо информации (пароля), известной только пользователю, которому принадлежит идентификатор. Другой способ проверки подлинности это аутентификация по биометрическим параметрам человека (отпечаток пальца, линии ладони, рисунок сетчатки глаза и т.п.). В ходе выполнения курсовой работы была создана программа, позволяющая разрешать работу с приложением только ограниченному кругу пользователей. Разграничение доступа проводится путем предложения лицу, запустившему программу ввести свой личный идентификатор и подтвердить подлинность вводом пароля. 1. ПОДТВЕРЖДЕНИЕ ПОДЛИННОСТИ ПОЛЬЗОВАТЕЛЕЙ И РАЗГРАНИЧЕНИЕ ИХ ДОСТУПА К КОМПЬЮТЕРНЫМ РЕСУРСАМ 1.1. Основные этапы допуска в компьютерную систему Системой защиты по отношению к любому пользователю с целью обеспечения безопасности обработки и хранения информации должны быть предусмотрены следующие этапы допуска в вычислительную систему[2]: 1) идентификация; 2) установление подлинности (аутентификация); 3) определение полномочий для последующего контроля и разграничения доступа к компьютерным ресурсам. Данные этапы должны выполняться и при подключении к вычислительной системе (ВС) таких устройств, как удаленные рабочие станции и терминалы[2]. Идентификация необходима для указания компьютерной системе уникального идентификатора обращающегося к ней пользователя с целью выполнения следующих защитных функций[2]: - установление подлинности и определение полномочий пользователя при его допуске в компьютерную систему; - контроль установленных полномочий и регистрация заданных действий пользователя в процессе его сеанса работы после допуска данного пользователя в ВС;
Сам идентификатор может представлять собой последовательность любых символов и должен быть заранее зарегистрирован в системе администратором службы безопасности. В процессе регистрации администратором в базу эталонных данных системы защиты для каждого пользователя заносятся следующие элементы данных[2]: - фамилия, имя, отчество и, при необходимости, другие характеристики пользователя; - уникальный идентификатор пользователя; - имя процедуры установления подлинности; - используемая для подтверждения подлинности эталонная информация, например, пароль; -ограничения на используемую эталонную информацию, например, минимальное и максимальное время, в течение которого указанный пароль будет считаться действительным; -полномочия пользователя по доступу к компьютерным ресурсам. Процесс установления подлинности, называемый еще аутентификацией, заключается в проверке, является ли пользователь, пытающийся осуществить доступ в ВС, тем, за кого себя выдает[2]. Общая схема идентификации и установления подлинности пользователя при его доступе в компьютерную систему представлена на Рис. 1.1. Если в процессе аутентификации подлинность пользователя установлена, то система защиты должна определить его полномочия по использованию ресурсов ВС для последующего контроля установленных полномочий. Основными и наиболее часто применяемыми методами установления подлинности пользователей являются методы, основанные на использовании паролей. Под паролем при этом понимается некоторая последовательность символов, сохраняемая в секрете и предъявляемая при обращении к компьютерной системе. Ввод пароля, как правило, выполняют с клавиатуры после соответствующего запроса системы.
Рис. 1.1. Схема идентификации и аутентификации пользователя при его доступе в ВС Эффективность парольных методов может быть значительно повышена путем записи в зашифрованном виде длинных и нетривиальных паролей на информационные носители, например, дискеты, магнитные карты, носители данных в микросхемах и т.д. В этом случае компьютерная система должна включать специальные устройства и обслуживающие их драйверы для считывания паролей с этих информационных носителей, а служба безопасности должна располагать средствами для формирования носителей с парольными данными. Для особо надежного опознавания могут применяться и методы, основанные на использовании технических средств определения сугубо индивидуальных характеристик человека (голоса, отпечатков пальцев, структуры зрачка и т.д.). Однако такие средства требуют значительных затрат и поэтому используются редко. Существующие парольные методы проверки подлинности пользователей при входе в ВС можно разделить на две группы[2] : - методы проверки подлинности на основе простого пароля; - методы проверки подлинности на основе динамически изменяющегося пароля. Пароль подтверждения подлинности пользователя при использовании простого пароля не изменяется от сеанса к сеансу в течении установленного администратором службы безопасности времени его существования (действительности). При использовании динамически изменяющегося пароля пароль пользователя для каждого нового сеанса работы или нового переда действия одного пароля изменяется по правилам, зависящим от используемого метода. 1.2. Использование простого пароля Процедура опознавания с использованием простого пароля может быть представлена в виде следующей последовательности действий[2]: 1) пользователь посылает запрос на доступ к компьютерной системе и вводит свой идентификатор; 2) система запрашивает пароль; 3) пользователь вводит пароль; 4) система сравнивает полученный пароль с паролем пользователя, хранящимся в базе эталонных данных системы защиты, и разрешает доступ, если пароли совпадают; в противном случае пользователь к ресурсам компьютерной системы не допускается. Поскольку пользователь может допустить ошибку при вводе пароля то системой должно быть предусмотрено допустимое количество повторений для ввода пароля. В базе эталонных данных системы защиты пароли, как и другую информацию, никогда не следует хранить в явной форме, а только зашифрованными. При этом можно использовать метод как обратимого, так и необратимого шифрования. Согласно методу обратимого шифрования эталонный пароль при занесении в базу эталонных данных зашифровывается по ключу, совпадающему с этим эталонным паролем. А введенный после идентификации пароль пользователя для сравнения с эталонным также зашифровывается, но по ключу, совпадающему с этим введенным паролем. Таким образом, при сравнении эталонный и введенный пароли находятся в зашифрованном виде и будут совпадать только в том случае, если исходный введенный пароль совпадет с исходным эталонным. При несовпадении исходного введенного пароля с исходным эталонным исходный введенный пароль будет зашифрован по другому, так как ключ шифрования отличается от ключа, которым зашифрован эталонный пароль, и после зашифровывания не совпадет с зашифрованным эталонным паролем Для обеспечения возможности контроля правильности ввода пароля при использовании необратимого шифрования на винчестер записывается таблица преобразованных паролей. Для их преобразования используется односторонняя криптографическая функция y=F(x), обладающая следующим свойством: для данного аргумента x значение F(x) вычисляется легко, а по данному y вычислительно сложно найти значение аргумента х, соответствующего данному у. В таблице паролей хранятся значения односторонних функций, для которых пароли берутся в качестве аргументов. При вводе пароля система защиты легко вычисляет значение функции от пароля текущего пользователя и сравнивает со значением, приведенным в таблице для пользователя с выбранным идентификатором. Нарушитель, захвативший компьютер, может прочитать таблицу значений функций паролей, однако вычисление пароля практически не реализуемо. При работе с паролями должна предусматриваться и такая мера, как недопустимость их распечатки или вывода на экраны мониторов. Поэтому система защиты должна обеспечивать ввод пользователями запрошенных у них паролей без отображения этих паролей на мониторах. Можно выделить следующие основные способы повышения стойкости системы защиты на этапе аутентификации: - повышение степени не тривиальности пароля; - увеличение длины последовательности символов пароля; -увеличение времени задержки между разрешенными попытками повторного ввода неправильно введенного пароля; - повышение ограничений на минимальное и максимальное время действительности пароля. Чем не тривиальнее пароль, тем сложнее его запомнить. Плохо запоминаемый пароль может быть записан на листе бумаги, что повышает риск его раскрытия. Выходом здесь является использование определенного числа не записываемых на бумаге пробелов или других символов в начале, внутри, а также в конце последовательности основных символов пароля. Кроме того, отдельные символы пароля могут набираться на другом регистре (например, вместо строчных быть прописными или наоборот) что также не должно отражаться на листе бумаги. В этом случае незаконно полученный лист бумаги с основными символами пароля не будет достаточным условием раскрытия пароля целиком. Вероятность подбора пароля уменьшается также при увеличении его длины и времени задержки между разрешенными попытками повторного ввода неправильно введенного пароля. Ожидаемое время раскрытия пароля Т, можно вычислить на основе следующей полученной экспериментально приближенной формулы[2]: Т> (As*Ty)/2. Здесь: А - число символов в алфавите, используемом для набора символов пароля; S - длина пароля в символах, включая пробелы и другие служебные символы; Ту - время ввода пароля с учетом времени задержки между разрешенными попытками повторного ввода неправильно введенного пароля. Например, если А = 26 символов (учтены только буквы английского алфавита), Ty = 2 секунды, a S = б символов, то ожидаемое время раскрытия Тy приблизительно равно одному году. Если в данном примере после каждой неудачной попытки ввода пароля предусмотреть временную задержку в 10 секунд, то ожидаемое время раскрытия увеличится в 5 раз. Из приведенной выше формулы становится понятно, что повышения стойкости системы защиты на этапе аутентификации можно достигнуть и увеличением числа символов алфавита, используемого для набора символов пароля. Такое увеличение можно обеспечить путем использования нескольких регистров (режимов ввода) клавиатуры для набора символов пароля, например, путем использования строчных и прописных латинских символов, а также строчных и прописных символов кириллицы. Для исключения необходимости запоминания пользователями длинных и нетривиальных паролей в системе защиты может быть предусмотрена возможность записи паролей в зашифрованном виде на информационные носители, например, дискеты, магнитные карты, носители данных в микросхемах и т.д., а также считывания паролей с этих информационных носителей. Такая возможность позволяет повысить безопасность за счет значительного увеличения длины паролей, записываемых на носители информации. Однако при этом администрации службы безопасности следует приложить максимум усилий для разъяснения пользователям ВС о необходимости тщательной сохранности носителей информации с их паролями. На степень информационной безопасности при использовании простого парольного метода проверки подлинности пользователей большое влияние оказывают ограничения на минимальное и максимальное время действительности каждого пароля. Чем чаще меняется пароль, тем обеспечивается большая безопасность.
Минимальное
время действительности
пароля задает
время, в течении
которого пароль
менять нельзя,
а максимальное
- время, по истечении
которого пароль
будет недействительным.
Соответственно,
пароль должен
быть заменен
в промежутке
между минимальным
и максимальным
временем его
существования.
Поэтому понятно,
что более
частая Минимальное и максимальное время действительности пароля задаются для каждого пользователя администратором службы безопасности, который должен постоянно контролировать своевременность смены паролей пользователей. 1.3. Использование динамически изменяющегося пароля Методы проверки подлинности на основе динамически изменяющегося пароля обеспечивают большую безопасность, так как частота смены паролей в них максимальна - пароль для каждого пользователя меняется ежедневно или через несколько дней. При этом каждый следующий па роль по отношению к предыдущему изменяется по правилам, зависящим от используемого метода проверки подлинности. Существуют следующие методы парольной защиты, основанные на использовании динамически изменяющегося пароля[2]: - методы модификации схемы простых паролей; - метод «запрос-ответ»; - функциональные методы. Наиболее эффективными из данных методов, как станет понятно далее, являются функциональные методы. 1.3.1. Методы модификации схемы простых паролей. К методам модификации схемы простых паролей относят случайную выборку символов пароля и одноразовое использование паролей. При использовании первого метода каждому пользователю выделяется достаточно длинный пароль, причем каждый раз для опознавания используется не весь пароль, а только его некоторая часть. В процессе проверки подлинности система запрашивает у пользователя группу символов по заданным порядковым номерам. Количество символов и их порядковые номера для запроса определяются с помощью датчика псевдослучайных чисел. При одноразовом использовании паролей каждому пользователю выделяется список паролей. В процессе запроса номер пароля, который необходимо ввести, выбирается последовательно по списку или по схеме случайной выборки. Недостатком методов модификации схемы простых паролей является необходимость запоминания пользователями длинных паролей или их списков. Запись же паролей на бумагу или в записные книжки приводит к появлению риска потери или хищения носителей информации с записанными на них паролями. 1.3.2. Метод «запрос-ответ» При использовании метода «запрос-ответ» в ВС заблаговременно создается и особо защищается массив вопросов, включающий в себя как вопросы общего характера, так и персональные вопросы, относящиеся к конкретному пользователю, например, вопросы, касающиеся известных только пользователю случаев из его жизни. Для подтверждения подлинности пользователя система последовательно задает ему ряд случайно выбранных вопросов, на которые он должен дать ответ. Опознание считается положительным, если пользователь правильно ответил на все вопросы. Основным требованием к вопросам в данном методе аутентификации является уникальность, подразумевающая, что правильные ответы на вопросы знают только пользователи, для которых эти вопросы предназначены. 1.3.3. Функциональные методы Среди функциональных методов наиболее распространенными являются метод функционального преобразования пароля, а также метод «рукопожатия». Метод функционального преобразования основан на использовании некоторой функции F, которая должна удовлетворять следующим требованиям[2]: - для заданного числа или слова X легко вычислить Y=F(X); - зная X и Y сложно или невозможно определить функцию Y=F(X). Необходимым условием выполнения данных требований является наличие в функции F(X) динамически изменяющихся параметров, например, текущих даты, времени, номера дня недели, или возраста пользователя. Пользователю сообщается: -исходный пароль - слово или число X, например число 31: -функция F(X), например, Y=(X mod 100) * D + WJ, где (X mod 100) -операция взятия остатка от целочисленного деления X на 100, D -текущий номер дня недели, a W - текущий номер недели в текущем месяце; - периодичность смены пароля, например, каждый день, каждые три дня или каждую неделю. Паролями пользователя для последовательности установленных периодов действия одного пароля будут соответственно X, F(X), F(F(X)), F(F(F(X))) и т.д., т.е. для 1-го периода действия одного пароля паролем пользователя будет F'"1(X). Поэтому для того, чтобы вычислить очередной пароль по истечении периода действия используемого пароля пользователю не нужно помнить начальный (исходный) пароль, важно лишь не забыть функцию парольного преобразования и пароль, используемый до настоящего момента времени. С целью достижения высокого уровня безопасности функция преобразования пароля, задаваемая для каждого пользователя, должна периодически меняться, например, каждый месяц. При замене функции целесообразно устанавливать и новый исходный пароль. Согласно методу «рукопожатия» существует функция F, известная только пользователю и ВС. Данная функция должна удовлетворять тем же требованиям, которые определены для функции, используемой в методе функционального преобразования. При входе пользователя в ВС системой защиты генерируется случайное число или случайная последовательность символов X и вычисляется функция F(X), заданная для данного пользователя (см. Рис. 1.2). Далее X выводится пользователю, который должен вычислить F(X) и ввести полученное значение в систему. Значения F(X) и F(X) сравниваются системой и если они совпадают, то пользователь получает доступ в ВС.
Рис. 1.2. Схема аутентификации по методу «рукопожатия» Например, в ВС генерируется и выдается пользователю случайное число, состоящее из семи цифр. Для заблуждения злоумышленника в любое место числа может вставляться десятичная точка. В качестве функции F принимается Y = (<сумма 1-й, 2-й и 5-й цифр числа>)2 - <сумма 3-й, 4-й, 6-й и 7-й цифр числа> + <сумма цифр текущего времени в часах>. Для высокой безопасности функцию «рукопожатия» целесообразно циклически менять через определенные интервалы времени, например, устанавливать разные функции для четных и нечетных чисел месяца. Достоинством метода «рукопожатия» является то, что никакой конфиденциальной информации между пользователем и ВС не передается. По этой причине эффективность данного метода особенно велика при его применении а вычислительных сетях для подтверждения подлинности пользователей, пытающихся осуществить доступ к серверам или центральным ЭВМ. В некоторых случаях может оказаться необходимым пользователю проверить подлинность той ВС, к которой он хочет осуществить доступ. Необходимость во взаимной проверке может понадобиться и когда два пользователя ВС хотят связаться друг с другом по линии связи. Методы простых паролей, а также методы модификации схем простых паролей в этом случае не подходят. Наиболее подходящим здесь является метод «рукопожатия». При его использовании ни один из участников сеанса связи не будет получать никакой секретной информации. 2 ТИПОВЫЕ РЕШЕНИЯ В ОРГАНИЗАЦИИ КЛЮЧЕВЫХ СИСТЕМ Рассмотрим структуры данных и алгоритмы идентификации и аутентификации на основе ключевой информации, а также иерархию хранения ключей. Поскольку предполагается выполнение процедур как идентификации, так и аутентификации, допустим, что i-й аутентифицирующий объект (i-й ключевой носитель) содержит два информационных поля: IDi - неизменяемый идентификатор i-го пользователя который является аналогом имени и используется для идентификации пользователя, и К, - аутентифицирующая информация пользователя, которая может изменяться и служит для аутентификации[1]. На самом деле IDi может соответствовать разным пользователям, например носитель сенсорной памяти Touch Memory содержит 8 байт неизменяемого идентификатора носителя, но при этом ТМ может быть передан разным пользователям. Совокупную информацию в ключевом носителе будем называть первичной аутентифицирующей информацией i-ro пользователя. Описанная структура соответствует практически любому ключевому носителю, служащему для опознания пользователя. Например, ТМ имеет 8 байт, не перезаписываемого неповторяющегося серийного номера, который однозначно характеризует конкретное ТМ, и некоторый объем перезаписываемой памяти, соответствующий аутентифицирующей информации Kj. Аналогично для носителей типа пластиковых карт выделяется неизменяемая информация IDi первичной персонализации пользователя и объект в файловой структуре карты, содержащий Ki.
Очевидно, что
внутренний
аутентифицирующий
объект не
должен Схема 1. В компьютерной системе выделяется объект-эталон для идентификации и аутентификации (положим, что в системе зарегистрировано n пользователей). Структура объекта-эталона для схемы Т показана в таблице 2.1: Таблица 2.1
В табл. 2.1. Ei = F(IDi, Кi), где F - функция, для которой можно качественно описать свойство "невосстановимости" Ki по Еi и IDi. "Невосстановимость" Ki описывается некоторой пороговой трудоемкостью Тo решения задачи восстановления аутентифицирующей информации по Ei и IDi, ниже которой не должна опускаться ни одна оценка трудоемкости нахождения Ki для всех известных алгоритмов решения данной задачи. Кроме того, для пары Ki и Kj возможно совпадение соответствующих значений Е. В связи с этим вводится вероятность ложной аутентификации пользователя Рла, которая вычисляется как условная вероятность события "совпадение Еi и Ej при условии нетождественности К: и Kj". Эта вероятность не должна быть больше некоторого предельного значения Р0. На практике задают То = 1020...1030, Р0 = 10-7…10-9 Алгоритм идентификации и аутентификации (схема 1) 1. Пользователь предъявляет свой идентификатор (имя) ID. 2. Если ID не совпадает ни с одним IDi, зарегистрированным в компьютерной системе, то идентификация отвергается - пользователь не допущен к работе, иначе (существует IDi=ID) устанавливается факт "пользователь, назвавшийся пользователем i, прошел идентификацию". 3. Субъект аутентификации запрашивает у пользователя аутентификатор К. 4. Субъект аутентификации вычисляет Y=F(IDi, К). 5. Субъект аутентификации производит сравнение Ei и Y. При совпадении фиксируется событие "пользователь успешно аутентифицирован в системе", информация о пользователе передается в программные модули, использующие ключи пользователей (система шифрования, разграничения доступа и т.д.), в противном случае аутентификация отвергается - пользователь не допущен к работе. Данная схема может быть модифицирована. Схема 2. В компьютерной системе выделяется объект-эталон, структура которого показана в табл. 2.2 (положим, как и в схеме 1, что в системе зарегистрировано n пользователей). В таблице Е, = F(Si, Ki), где Si -случайный вектор, заданный при создании пользователя (т.е. при создании строки, необходимой для идентификации и аутентификации пользователя); F - функция, для которой можно качественно описать свойство "невосстановимость" К по Ei и Si. "Невосстановимость" Кi, понимается в том же смысле, как и для схемы 1. Таблица 2.2
Алгоритм идентификации и аутентификации (схема 2) 1. Пользователь предъявляет свой идентификатор (имя) ID. 2. Если ID не совпадает ни с одним IDi, зарегистрированным в компьютерной системе, то идентификация отвергается - пользователь не допущен к работе, иначе (существует IDi = ID) устанавливается факт "пользователь, назвавшийся пользователем i, прошел идентификацию". 3. По IDi выделяется Si. 4. Субъект аутентификации запрашивает у пользователя аутентификатор К. 5. Субъект аутентификации вычисляет Y = F(Si, К). 6. Субъект аутентификации производит сравнение Ei и Y. При совпадении фиксируется событие "пользователь успешно аутентифицирован в КС", в противном случае аутентификация отвергается - пользователь не допущен к работе. Вторая схема аутентификации применяется в ОС Unix. В качестве идентификатора ID используется имя пользователя (запрошенное по Login), в качестве Ki- пароль пользователя (запрошен по Password), функция F представляет собой алгоритм шифрования DES. Эталоны для идентификации и аутентификации содержатся в файле Etc/passwd. Утверждение (о подмене эталона). Если пользователь имеет возможность записи объекта хранения эталона, то пользователь может быть идентифицирован и аутентифицирован (в рамках рассмотренных схем), как любой пользователь[1]. Доказательство. Пусть имеется пользователь i. Покажем, что он может выдать себя за любого пользователя j. Возможность записи в объект, содержащий эталоны, означает возможность замены любой записи на произвольную. Пользователь i меняет j-ю запись на свои параметры IDi и Ei (или дополнительно и Si). При следующей процедуре идентификации он будет опознан как пользователь j (по построению и описанию схем). Утверждение доказано. Смысл данного утверждения состоит в том, что возможность записи объекта хранения эталонов должны иметь только субъекты специально выделенного пользователя компьютерной системы, отвечающего за управление безопасностью. Заметим, что необходимым требованием устойчивости схем аутентификации к восстановлению информации Ki является требование случайного равновероятного выбора Кi из множества возможных значений. Это требование, как уже было указано, автоматически снижает ценность систем парольной аутентификации, поскольку в них выбор аутентифицирующей информации происходит из небольшого множества осмысленных слов, мощность которого определяется энтропией соответствующего языка. Рассмотрим теперь иерархию хранения и использования ключей при условии наличия в компьютерной системе криптографической подсистемы, включающей алгоритм шифрования Е, алгоритм расшифрования D и исходные объекты O1, ..., Оn, зашифрованные на ключах ki, ..., kn. Результатом зашифрования исходных объектов являются объекты доступа в системе: Y1, .... Yn. При этом Yj = E(0j, kj), Oj = D(Yj, kj). Пусть владельцу ключа Kj необходимо обеспечить доступ к объекту Yj (доступ подразумевает возможность расшифрования Yj). Для этого он должен знать ключ kj. Очевидно, что требуются дополнительные объекты хранения зашифрованных ключей (табл. 2.3). С учетом того, что к объекту Yj могут иметь доступ несколько пользователей, объект уj может содержать несколько подобъектов вида E(kj, Km), где Km - ключ m-ro пользователя. Таблица 2.3
Алгоритм доступа 1. Пользователь i идентифицируется и аутентифицируется в компьютерной системе. При положительном исходе ключ пользователя Кj доступен субъектам (программам) системы, регулирующим доступ к объектам. 2. Пользователь производит доступ к зашифрованному объекту Yj. Выполняется поиск дополнительного объекта уj. В объекте уj проверяется наличие E(kj, Ki), т.е. ключа доступа к объекту, зашифрованного на ключе пользователя. Если E(kj, Кi) не найден, то доступ пользователя отвергается. Иначе выполняются следующие действия. 3. Производится расшифрование ключа kj = D(yj, Ki), а затем - расшифрование объекта Oj= D(Yj, ki). Под объектами доступа могут пониматься абоненты распределенной системы (сети связи). В этом случае ключ kj является ключом взаимодействия между пользователем i и абонентом j (это может быть также пользователь, терминал, принтер и т.д.). При рассмотрении сети связи обычно оперируют матрицей ключей, которая в явном виде отображает топологию связей в системе. 3. ПРОГРАММА 3.1.ОПИСАНИЕ ПРОГРАММЫ. 3.1.1 Используемая процедура опознавания. В программе заложена процедура опознавания с использованием простого пароля. Системой предусмотрено ограниченное количество повторений для ввода пароля. При третьем подряд неправильном вводе идентификационных или аутентификационных данных программа прекращает работу. В базе эталонных данных системы защиты пароли хранятся в зашифрованной форме. При этом используется шифрование методом гаммирования. В качестве ключа шифрования используется псевдослучайная последовательность битов, полученная с помощью линейного конгуэртного генератора[3]. Этот генератор вырабатывает последовательность псевдослучайных чисел Y1, Y2, …Yi-1, Yi,…, используя соотношение: Yi=(a*Yi-1+b)mod m, где Yi-iе (текущее) число последовательности; a-множитель (коэффициент); b-приращение; m-модуль; Y 0-порождающее число (исходное значение). Данное уравнение генерирует псевдослучайные числа с периодом повторения, который зависит от выбираемых значений параметров a,b,m и может достигать значения m. 3.1.2 Распределение ключей. Программа позволяет устанавливать до десяти различных идентификаторов пользователей и паролей к ним. Длины идентификатора и пароля совпадают и составляют по десять символов каждый. Что позволяет обеспечить достаточную степень защиты, так как при попытке проникнуть в программу, не зная пароля даже при известном идентификаторе используя метод простого перебора ключей, потребует около 18010 повторений ввода пароля. Это достигается тем, что при выборе ключей допускается использование любых символов обоих регистров клавиатуры за исключением клавиши ‘пробел’. Пароль администратора является постоянным и не может быть изменен никакими способами кроме внесения изменений в код программы с последующей перекомпиляцией исходных модулей. 3.1.3 Возможности администратора. Администратор может просматривать и изменять список пользователей программы, а также изменять их идентификаторы и пароли. Он также имеет возможность просматривать и периодически очищать автоматически ведущийся журнал аудита, в который заносится информация какие идентификаторы и пароли используются при попытках входа в программу и результат работы процедуры установления подлинности (разрешен / не разрешен вход). 3.2 АЛГОРИТМ ПРОГРАММЫ. Укрупненный алгоритм основного модуля программы (‘UNITKURS1.PAS’) приведен на рисунке 3.1 3.2.1 Проверка паролей. Проверка паролей осуществляется следующим способом: из файла ‘password.txt’ производится чтение таблицы идентификаторов и паролей, затем происходит сверка введенного идентификатора с идентификаторами определенными для различных пользователей. В случае положительного результата претенденту разрешается допуск к приложению. Файл ‘password.txt’ имеет постоянный размер 350 байт, по 35 байт на каждого пользователя. Его отсутствие в одной директории с исполняемым модулем программы или другой размер приведет к ошибке во время работы программы. 3.2.2 Запись в журнал аудита. При каждой попытке входа в автоматически ведущийся журнал аудита делается запись, состоящая из 30 байт: -первые десять байт это идентификатор, который ввел пользователь; -следующие десять байт это пароль; -в последние десять байт заносится информация о результате проверки подлинности. 3.2.3 Администрирование доступа (рис 3.2). При вводе идентификатора и пароля администратора появляется окно (см. приложение А) в котором отображаются: -информация о пользователе (например, фамилия); -идентификатор пользователя; -пароль пользователя. Администратор может вносить изменения в таблицу меняя информацию в отдельных ячейках таблицы или стереть всю таблицу целиком. Рис 3.1
да
нет
да
нет
Рис 3.2
Чтение информации из Файла ‘password.txt’
Рассшифрование и отображение в таблице
Сохранение изменений
ЗАКЛЮЧЕНИЕ В курсовой работе были рассмотрены существующие процедуры опознавания и приведены типовые решения в организации ключевых систем. На основании рассмотренного материала можно сделать вывод о том, что: -пароли в системе должны храниться обязательно в зашифрованном виде; -рядовые пользователи не должны иметь доступ к эталонной информации; -должна быть найдена ‘золотая середина’ между легкостью запоминания пароля и его не тривиальностью. На основании рассмотренных процедур была создана программа, позволяющая разграничивать доступ к какому-либо отдельно взятому приложению, работающему в операционной среде Windows. В приложении В представлен листинг исходного модуля программы. Так как программа носит ознакомительный характер, то запуск приложения имитируется вызовом сообщения, говорящего о том, что процедура установления подлинности пройдена успешно. ПРИЛОЖЕНИЕ A (ИНТЕРФЕЙС ПРОГРАММЫ)
5. ПРИЛОЖЕНИЕ B (ЛИСТИНГ ПРОГРАММЫ). unit Unitkurs1;{главный} interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask; type TForm1 = class(TForm) Label1: TLabel; EditID: TEdit; Label2: TLabel; EditPSW: TMaskEdit; Button1: TButton; Button2: TButton; Label3: TLabel; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure Generator; end; var Form1: TForm1; F_Mag, F_PSW:file of char;{переменная, связанная с файлом 'password.txt'} i,j,l,flag,i1,f{Yo}:integer; y:integer;{псевдослучайное число} UserMatrix:array[1..10,1..3] of string;{массив фамилий, идентификаторов и паролей пользователей} Surname:array[1..150] of char;{массив фамилий пользователей} IDs:array[1..100] of char;{массив идентификаторов пользователей} PSWs:array[1..100] of char;{массив паролей пользователей} stroca,Ident,Psword:string; xxx:char; const Yo:integer=14; implementation uses Unitkurs, Unitkurs3; {$R *.DFM} {процедура реализующая ЛИНЕЙНЫЙ КОНГУЭНТНЫЙ ГЕНЕРАТОР} procedure Tform1.Generator; begin y:=(31*y+17)mod(257); end; procedure TForm1.Button2Click(Sender: TObject); begin close end; {нажатие кнопки 'принять'} procedure TForm1.Button1Click(Sender: TObject); begin if (EditID.Text='admin')and(EditPSW.Text='password') then Form2.Visible:=true else {если не администратор} begin Ident:=EditId.Text; Psword:=EditPSW.Text; i:=1; repeat if i>length(Ident) then Ident:=Ident+' '; if i>length(Psword) then Psword:=Psword+' '; i:=i+1; until i>=11; {запись в журнал аудита} {$I-} AssignFile(F_Mag,'audit'); Reset(F_Mag); {$I+} if IOResult<>0 then begin Rewrite(F_Mag); y:=Yo end else begin if FileSize(F_Mag)=0 then y:=Yo else begin y:=yo; f:=20*round(FileSize(F_Mag)/30); i:=1; repeat generator; i:=i+1 until i>=f+1; end; end; Seek(F_Mag,FileSize(F_Mag)); i:=1; repeat generator; xxx:=Chr((ord(Ident[i]))xor(y)); Write(F_Mag,xxx); i:=i+1; until i>=11; i:=1; repeat generator; xxx:=Chr((ord(PSWord[i]))xor(y)); Write(F_Mag,xxx); i:=i+1; until i>=11; {чтение информации из файла} Y:=14; AssignFile(F_PSW,'password.txt'); Reset(F_PSW); {фамилии} j:=1; repeat Read(F_PSW,Surname[j]); j:=j+1 until j>=151; {идентификаторы} j:=1; repeat Read(F_PSW,IDs[j]); generator; ids[j]:=chr((ord(ids[j]))xor(y)); j:=j+1 until j>=101; {пароли} j:=1; repeat Read(F_PSW,PSWs[j]); generator; PSWs[j]:=chr((ord(PSWs[j]))xor(y)); j:=j+1 until j>=101; CloseFile(F_PSW); {сбор в массив UserMatrix} i:=1; repeat stroca:=''; j:=1; repeat if Surname[(i-1)*15+j]<>' ' then stroca:=stroca+Surname[(i-1)*15+j]; j:=j+1 until j>=16; UserMatrix[i,1]:=stroca; i:=i+1 until i>=11; i:=1; repeat stroca:=''; j:=1; repeat if IDs[(i-1)*10+j]<>' ' then stroca:=stroca+IDs[(i-1)*10+j]; j:=j+1 until j>=11; UserMatrix[i,2]:=stroca; i:=i+1 until i>=11; i:=1; repeat stroca:=''; j:=1; repeat if PSWs[(i-1)*10+j]<>' ' then stroca:=stroca+PSWs[(i-1)*10+j]; j:=j+1 until j>=11; UserMatrix[i,3]:=stroca; i:=i+1 until i>=11; {идентификация и аутентификация} flag:=0; i:=1; repeat if (EditID.Text=UserMatrix[i,2])and(EditPSW.Text=UserMatrix[i,3])and (EditID.Text<>'') then begin Flag:=1; i1:=i end; i:=i+1 until i>=11; if flag=1 then begin xxx:='y'; i:=1; repeat Write(F_Mag,xxx); i:=i+1 until i>=11; CloseFile(F_Mag); Form3.Visible:=true; end else begin xxx:='n'; i:=1; repeat Write(F_Mag,xxx); i:=i+1 until i>=11; CloseFile(F_Mag) end; end; end; end. unit Unitkurs;{администрирование} interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, ComCtrls; type TForm2 = class(TForm) ButtonAdd: TButton; ButtonDel: TButton; Button3: TButton; Button1: TButton; StringGrid1: TStringGrid; procedure FormActivate(Sender: TObject); procedure ButtonAddClick(Sender: TObject); procedure ButtonDelClick(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure Generator; end; var Form2: TForm2; F_PSW:file of char;{переменная, связанная с файлом 'password.txt'} i,j,l:integer; y:integer;{псевдослучайное число} UserMatrix:array[1..10,1..3] of string;{массив фамилий, идентификаторов и паролей пользователей} Surname:array[1..150] of char;{массив фамилий пользователей} IDs:array[1..100] of char;{массив идентификаторов пользователей} PSWs:array[1..100] of char;{массив паролей пользователей} stroca:string; implementation uses Unitkurs4; {$R *.DFM} {процедура реализующая ЛИНЕЙНЫЙ КОНГУЭНТНЫЙ ГЕНЕРАТОР} procedure Tform2.Generator; begin y:=(31*y+17)mod(257); end; procedure TForm2.FormActivate(Sender: TObject); begin y:=14; {оглавление таблицы пользователей} i:=1; repeat StringGrid1.Cells[0,i]:=IntToStr(i); i:=i+1; until i>=11; StringGrid1.Cells[1,0]:='фамилия'; StringGrid1.Cells[2,0]:='идентификатор'; StringGrid1.Cells[3,0]:='пароль'; {чтение информации из файла 'password.txt'} AssignFile(F_PSW,'password.txt'); Reset(F_PSW); {фамилии} j:=1; repeat Read(F_PSW,Surname[j]); j:=j+1 until j>=151; {идентификаторы} j:=1; repeat Read(F_PSW,IDs[j]); generator; ids[j]:=chr((ord(ids[j]))xor(y)); j:=j+1 until j>=101; {пароли} j:=1; repeat Read(F_PSW,PSWs[j]); generator; PSWs[j]:=chr((ord(PSWs[j]))xor(y)); j:=j+1 until j>=101; CloseFile(F_PSW); {сбор в массив UserMatrix} i:=1; repeat stroca:=''; j:=1; repeat if Surname[(i-1)*15+j]<>' ' then stroca:=stroca+Surname[(i-1)*15+j]; j:=j+1 until j>=16; UserMatrix[i,1]:=stroca; i:=i+1 until i>=11; i:=1; repeat stroca:=''; j:=1; repeat if IDs[(i-1)*10+j]<>' ' then stroca:=stroca+IDs[(i-1)*10+j]; j:=j+1 until j>=11; UserMatrix[i,2]:=stroca; i:=i+1 until i>=11; i:=1; repeat stroca:=''; j:=1; repeat if PSWs[(i-1)*10+j]<>' ' then stroca:=stroca+PSWs[(i-1)*10+j]; j:=j+1 until j>=11; UserMatrix[i,3]:=stroca; i:=i+1 until i>=11; {отображение в таблице} i:=1; repeat j:=1; repeat StringGrid1.Cells[j,i]:=UserMatrix[i,j]; j:=j+1 until j>=4; i:=i+1 until i>=11; end; {===============нажатие кнопки 'сохранить изменения'=======================} procedure TForm2.ButtonAddClick(Sender: TObject); begin y:=14; {заполнение массива UserMatrix} i:=1; repeat j:=1; repeat UserMatrix[i,j]:=StringGrid1.Cells[j,i]; j:=j+1 until j>=4; i:=i+1 until i>=11; {заполнение массива surname} i:=1; repeat stroca:=UserMatrix[i,1]; l:=length(stroca); j:=1; repeat if j<=l then Surname[(i-1)*15+j]:=stroca[j] else Surname[(i-1)*15+j]:=' '; j:=j+1 until j>=16; i:=i+1 until i>=11; {заполнение массива IDs} i:=1; repeat stroca:=UserMatrix[i,2]; l:=length(stroca); j:=1; repeat if j<=l then IDs[(i-1)*10+j]:=stroca[j] else IDs[(i-1)*10+j]:=' '; j:=j+1 until j>=11; i:=i+1 until i>=11; {заполнение массива PSWs} i:=1; repeat stroca:=UserMatrix[i,3]; l:=length(stroca); j:=1; repeat if j<=l then PSWs[(i-1)*10+j]:=stroca[j] else PSWs[(i-1)*10+j]:=' '; j:=j+1 until j>=11; i:=i+1 until i>=11; {запись в файл 'password.txt'} AssignFile(F_PSW,'password.txt'); Rewrite(F_PSW); {фамилии без преобразования} j:=1; repeat write(F_PSW,Surname[j]); j:=j+1 until j>=151; {идентификаторы} j:=1; repeat generator; ids[j]:=chr((ord(ids[j]))xor(y)); write(F_PSW,IDs[j]); j:=j+1 until j>=101; {пароли} j:=1; repeat generator; PSWs[j]:=chr((ord(PSWs[j]))xor(y)); write(F_PSW,PSWs[j]); j:=j+1 until j>=101; CloseFile(F_PSW); end; {нажатие кнопки 'очистить'} procedure TForm2.ButtonDelClick(Sender: TObject); begin {очистка таблицы} i:=1; repeat j:=1; repeat StringGrid1.Cells[j,i]:=''; j:=j+1 until j>=4; i:=i+1 until i>=11; end; procedure TForm2.Button3Click(Sender: TObject); begin close end; procedure TForm2.Button1Click(Sender: TObject); begin Form4.Visible:=True end; end. unit Unitkurs4;{журнал аудита} interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm4 = class(TForm) StringGrid1: TStringGrid; ButtonDel: TButton; Button2: TButton; ButtonShow: TButton; procedure Button2Click(Sender: TObject); procedure ButtonShowClick(Sender: TObject); procedure ButtonDelClick(Sender: TObject); private { Private declarations } public { Public declarations } procedure Generator; end; var Form4: TForm4; F_Mag:file of char;{переменная, связанная с файлом 'audit.txt'} i,j,l,i1:integer; y:integer;{псевдослучайное число} ident,psword:string; xxx:char; implementation {$R *.DFM} {процедура реализующая ЛИНЕЙНЫЙ КОНГУЭНТНЫЙ ГЕНЕРАТОР} procedure Tform4.Generator; begin y:=(31*y+17)mod(257); end; procedure TForm4.Button2Click(Sender: TObject); begin close end; {нажатие кнопки 'показать'} procedure TForm4.ButtonShowClick(Sender: TObject); begin i:=1; repeat StringGrid1.Cells[0,i]:=IntToStr(i); i:=i+1; until i>=11; StringGrid1.Cells[1,0]:='идентификатор'; StringGrid1.Cells[2,0]:='пароль'; StringGrid1.Cells[3,0]:='результат'; {чтение информации из файла 'audit.txt'} {$I-} AssignFile(F_Mag,'audit'); Reset(F_Mag); {$I+} if IOResult=0 then begin i1:=1; y:=14; while not(EoF(F_Mag)) do begin j:=1; repeat Read(F_Mag,xxx); generator; xxx:=chr((ord(xxx))xor(y)); ident:=ident+xxx; j:=j+1 until j>=11; i:=1; repeat Read(F_Mag,xxx); generator; xxx:=Chr((ord(xxx))xor(y)); psword:=psword+xxx; i:=i+1; until i>=11;
if StringGrid1.RowCount
then StringGrid1.RowCount:=StringGrid1.RowCount+1;
StringGrid1.Cells[0,i1]:=IntToStr(i1);
StringGrid1.Cells[1,i1]:=ident;
StringGrid1.Cells[2,i1]:=psword;
i:=1;
repeat
Read(F_Mag,xxx);
i:=i+1
until i>=11;
if xxx='y' then
StringGrid1.Cells[3,i1]:='допуск'
else
StringGrid1.Cells[3,i1]:='отказ';
ident:='';
psword:='';
i1:=i1+1;
end;
CloseFile(F_Mag) end;
end;
{нажатие
кнопки 'очистить'}
procedure TForm4.ButtonDelClick(Sender: TObject);
begin
StringGrid1.RowCount:=11;
i:=1;
repeat
StringGrid1.Cells[1,i]:='';
StringGrid1.Cells[2,i]:='';
StringGrid1.Cells[3,i]:='';
i:=i+1
until i>=11;
AssignFile(F_Mag,'audit');
Rewrite(F_Mag);
CloseFile(F_Mag);
end;
end.
Литература:
Белкин П.Ю. ,
Михальский
О.О. , Першаков
А.С. и другие
“Программно-аппаратные
средства обеспечения
информационной
безопасности:
защита программ
и данных”.
Зима В.М. и другие
“Защита компьютерных
ресурсов от
несанкционированных
действий
пользователя”.
Романец Ю.В. ,
Тимофеев П.А.
, Шаньгин В.Ф.
“Защита информации
в компьютерных
системах”.
Министерство
образования
рф
ТАГАНРОГСКИЙ
ГОСУДАРСТВЕННЫЙ
РАДИОТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ
Курсовой
проект
По курсу
«ПАСОИБ»
на тему
«Обнаружение
вредоносных
закладок»
__________
Проверили:
_________________________________
_________________________________ Таганрог
2002г. |