Реферат по предмету "Информатика, программирование"


Защита персональных данных с помощью алгоритмов шифрования

Оглавление
Введение
Глава I. Криптология
1.1 Шифрование – метод защитыинформации
1.2 История развития криптологии       
1.3 Криптология в наши дни        
1.4 Классификация алгоритмовшифрования
Глава II. Рассмотрение алгоритмов       
2.1 Симметричные алгоритмы шифрования
2.1.1 Потоковые шифры
2.1.2 Блочные шифры
2.2 Ассиметричные алгоритмышифрования
2.2.1 Алгоритм Диффи-Хелмана
2.2.2 Агоритм RSA
2.2.3 ElGamal
2.3 Сравнение симметричных иассиметричных алгоритмов шифрования
2.4 Использование инструментов криптографиив Delphi-приложениях
2.4.1 CryptoAPI
2.4.2 Подключение к криптопровайдеру.Контейнеры ключей
2.4.3 Шифрование на основепользовательских данных или пароля
2.5 Постановка задачи         
2.6 Реализация задачи
2.6.1 Краткая характеристика среды Delphi7
2.6.2 Алгоритм решения задачи
2.6.3 Таблица сообщений
Заключение
Литература        

Введение
Многим из нас приходилосьвидеть личную информацию в различных свободно продаваемых базах данных.Большинство людей это справедливо возмущало, и они требовали прекратить свободноераспространение личных данных. Но проблема заключалась в том, что личные данныене были четко классифицированы, и не ясно было, что можно распространять, а чтонельзя.
Точки над i наконецрасставили в законе Российской Федерации №152-ФЗ от 27 июля 2006 года. И теперьмы знаем, что персональные данные это любая информация, относящаяся копределенному или определяемому на основании такой информации физическому лицу(субъекту персональных данных), в том числе его фамилия, имя, отчество, год,месяц, дата и место рождения, адрес, семейное, социальное, имущественноеположение, образование, профессия, доходы, другая информация.
Но закон накладываетопределенные обязательства на операторов персональных данных – те компании иорганизации, которые оперируют такими данными. Согласно закону, с 1 января 2010года все операторы персональных данных должны обеспечить защиту персональныхданных в соответствии с требованиями закона 152-ФЗ. А «лица, виновные внарушении требований настоящего Федерального закона, несут гражданскую,уголовную, административную, дисциплинарную и иную предусмотреннуюзаконодательством Российской Федерации ответственность».
В своей работе я хочурассмотреть алгоритмы, при помощи которых мы можем защитить свои персональныеданные.

Глава I. Криптология
 
1.1 Шифрование- метод защиты информации
 
Испокон веков не былоценности большей, чем информация. ХХ век — век информатики и информатизации.Технология дает возможность передавать и хранить все большие объемы информации.Это благо имеет и оборотную сторону. Информация становится все более уязвимойпо разным причинам:
·         возрастающиеобъемы хранимых и передаваемых данных;
·         расширение кругапользователей, имеющих доступ к ресурсам ЭВМ, программам и данным;
·         усложнениережимов эксплуатации вычислительных систем.
Поэтому все большуюважность приобретает проблема защиты информации от несанкционированного доступа(НСД) при передаче и хранении. Сущность этой проблемы — постоянная борьбаспециалистов по защите информации со своими «оппонентами».
Защита информации — совокупность мероприятий, методов и средств, обеспечивающих:
·         исключение НСД кресурсам ЭВМ, программам и данным;
·         проверкуцелостности информации;
·         исключениенесанкционированного использования программ (защита программ от копирования).
Очевидная тенденция кпереходу на цифровые методы передачи и хранения информации позволяет применятьунифицированные методы и алгоритмы для защиты дискретной (текст, факс, телекс)и непрерывной (речь) информации.
Испытанный метод защитыинформации от НСД — шифрование (криптография). Шифрованием (encryption)называют процесс преобразования открытых данных (plaintext) в зашифрованные(шифртекст, ciphertext) или зашифрованных данных в открытые по определеннымправилам с применением ключей. В англоязычной литературезашифрование/расшифрование — enciphering/deciphering.
С помощьюкриптографических методов возможно:
·         шифрованиеинформации;
·         реализацияэлектронной подписи;
·         распределениеключей шифрования;
·         защита отслучайного или умышленного изменения информации.
К алгоритмам шифрованияпредъявляются определенные требования:
·         высокий уровеньзащиты данных против дешифрования и возможной модификации;
·         защищенностьинформации должна основываться только на знании ключа и не зависеть от того,известен алгоритм или нет (правило Киркхоффа);
·         малое изменениеисходного текста или ключа должно приводить к значительному изменениюшифрованного текста (эффект «обвала»);
·         область значенийключа должна исключать возможность дешифрования данных путем перебора значенийключа;
·         экономичностьреализации алгоритма при достаточном быстродействии;
·         стоимостьдешифрования данных без знания ключа должна превышать стоимость данных.
1.2 Историяразвития криптологии
 
Криптология — древняянаука и обычно это подчеркивают рассказом о Юлии Цезаре (100 — 44 гг. до н.э.), переписка которого с Цицероном (106 — 43 гг. до н. э.) и другими«абонентами» в Древнем Риме шифровалась. Шифр Цезаря, иначе шифрциклических подстановок, состоит в замене каждой буквы в сообщении буквой алфавита,отстоящей от нее на фиксированное число букв. Алфавит считается циклическим, тоесть после Z следует A. Цезарь заменял букву буквой, отстоящей от исходной натри.
Сегодня в криптологиипринято оперировать символами не в виде букв, а в виде чисел, им соответствующих.Так, в латинском алфавите можем использовать числа от 0 (соответствующего A) до25 (Z). Обозначая число, соответствующее исходному символу, x, азакодированному — y, можем записать правило применения подстановочного шифра:
y = x + z (mod N), (1)
где z — секретный ключ, N- количество символов в алфавите, а сложение по модулю N — операция,аналогичная обычному сложению, с тем лишь отличием, что если обычноесуммирование дает результат, больший или равный N, то значением суммы считаетсяостаток от деления его на N.
Шифр Цезаря в принятыхобозначениях соответствует значению секретного ключа z = 3 (а у Цезаря Августаz = 4). Такие шифры раскрываются чрезвычайно просто даже без знания значенияключа: достаточно знать лишь алгоритм шифрования, а ключ можно подобратьпростым перебором (так называемой силовой атакой). Криптология и состоит издвух частей — криптографии, изучающей способы шифрования и/или проверкиподлинности сообщений, и криптоанализа, рассматривающего пути расшифровки иподмены криптограмм. Неустойчивость первых шифров на многие столетия породилаатмосферу секретности вокруг работы криптографа, затормозила развитиекриптологии как науки.
Так называемая«донаучная» криптография более чем за две тысячи лет полуинтуитивно«нащупала» довольно много интересных решений. Простейшее действие — выполнить подстановку не в алфавитном порядке. Неплохо также переставитьсимволы в сообщении местами (шифры перестановок).
Первым систематическимтрудом по криптографии принято считать работу великого архитектора ЛеонаБаттиста Альберти (1404 — 1472 гг.). Период до середины XVII века уже насыщенработами по криптографии и криптоанализу. Интриги вокруг шифрограмм в Европетого времени удивительно интересны. Франсуа Виет (1540 — 1603 гг.), который придворе короля Франции Генриха IV так успешно занимался криптоанализом (тогда ещене носившим этого гордого названия), что испанский король Филипп II жаловалсяПапе Римскому на применение французами черной магии. Но все обошлось безкровопролития — при дворе Папы в это время уже служили советники из семействаАрдженти, которых мы сегодня назвали бы криптоаналитиками.
Можно утверждать, что напротяжении веков дешифрованию криптограмм помогает частотный анализ появленияотдельных символов и их сочетаний. Вероятности появления отдельных букв втексте сильно разнятся (для русского языка, например, буква «о»появляется в 45 раз чаще буквы «ф»). Это, с одной стороны, служитосновой как для раскрытия ключей, так и для анализа алгоритмов шифрования, а сдругой — является причиной значительной избыточности (в информационном смысле)текста на естественном языке. Любая простая подстановка не позволяет спрятатьчастоту появления символа — как шило из мешка торчат в русском тексте символы,соответствующие буквам «о», «е», «а»,«и», «т», «н». Но теория информации и мераизбыточности еще не созданы, и для борьбы с врагом криптографа — частотныманализом — предлагается РАНДОМИЗАЦИЯ. Ее автор Карл Фридрих Гаусс (1777 — 1855гг.) ошибочно полагал, что создал нераскрываемый шифр.
Следующая заметнаяличность в истории криптологии, которую мы не должны пропустить, — голландецОгюст Керкхофф (1835 — 1903 гг.). Ему принадлежит замечательное «правилоКеркхоффа»: стойкость шифра должна определяться ТОЛЬКО секретностью ключа.Учитывая время, когда это правило было сформулировано, его можно признатьвеличайшим открытием (до создания систематической теории еще более полувека!).Это правило полагает, что АЛГОРИТМ шифрования НЕ ЯВЛЯЕТСЯ СЕКРЕТНЫМ, а значит,можно вести открытое обсуждение достоинств и недостатков алгоритма. Такимобразом, это правило переводит работы по криптологии в разряд ОТКРЫТЫХ научныхработ, допускающих дискуссии, публикации и т. п.
 
1.3 Криптологияв наши дни
Последнее имя, которое мыназовем в донаучной криптологии, — инженер Жильбер Вернам (G.S. Vernam). В 1926году он предложил действительно нераскрываемый шифр. Идея шифра состоит в том,чтобы в уравнении (1) для каждого следующего символа выбирать новое значение z.Другими словами, секретный ключ должен использоваться только один раз. Еслитакой ключ выбирается случайным образом, то, как было строго доказано Шеннономчерез 23 года, шифр является нераскрываемым. Этот шифр является теоретическимобоснованием для использования так называемых «шифроблокнотов»,широкое применение которых началось в годы второй мировой войны. Шифроблокнотсодержит множество ключей однократного использования, последовательновыбираемых при шифровании сообщений. Предложение Вернама, однако, не решаетзадачи секретной связи: вместо способа передачи секретного сообщения теперьнеобходимо найти способ передачи секретного ключа, РАВНОГО ему ПО ДЛИНЕ, т. е.содержащего столько же символов, сколько имеется в открытом тексте.
В 1949 году статья КлодаШеннона «Теория связи в секретных системах» положила начало научнойкриптологии. Шеннон показал, что для некоторого «случайного шифра»количество знаков шифротекста, получив которые криптоаналитик принеограниченных ресурсах может восстановить ключ (и раскрыть шифр),

H (Z)/(rlog N), (2)
где H (Z) — энтропияключа, r — избыточность открытого текста, а N — объем алфавита. Поэффективности, с которой архиваторы сжимают текстовые файлы, нам хорошоизвестно, как велика избыточность обычного текста — ведь их работа и состоит вснижении избыточности (причем только на наиболее легко устраняемой ее части).При избыточности обычного текста порядка 0,75 и использовании 56-битового ключа(такого, как предполагает DES), достаточно 11 символов шифротекста длявосстановления ключа при неограниченных ресурсах криптоаналитика.
Строго говоря,соотношение (2) не доказано для произвольного шифра, но верно для известныхчастных случаев. Из (2) следует замечательный вывод: работу криптоаналитикаможно затруднить не только совершенствованием криптосистемы, но и снижениемизбыточности открытого текста. Более того, если избыточность открытого текстаснизить до нуля, то даже короткий ключ даст шифр, который криптоаналитик несможет раскрыть.
Перед шифрованиеминформацию следует подвергнуть статистическому кодированию (сжатию, архивации).При этом уменьшится объем информации и ее избыточность, повысится энтропия(среднее количество информации, приходящееся на один символ). Так как в сжатомтексте будут отсутствовать повторяющиеся буквы и слова, дешифрование(криптоанализ) затруднится.
1.4 Классификацияалгоритмов шифрования
1. Симметричные (ссекретным, единым ключом, одноключевые, single-key).
1.1. Потоковые(шифрование потока данных):
·          с одноразовым илибесконечным ключом (infinite-key cipher);
·          с конечным ключом(система Вернама — Vernam);
·          на основегенератора псевдослучайных чисел (ПСЧ).
1.2. Блочные (шифрованиеданных поблочно):
1.2.1. Шифры перестановки(permutation, P-блоки);
1.2.2. Шифры замены(подстановки, substitution, S-блоки):
·          моноалфавитные(код Цезаря);
·          полиалфавитные(шифр Видженера, цилиндр Джефферсона, диск Уэтстоуна, Enigma);
2. Асимметричные (соткрытым ключом, public-key):
·          Диффи-Хеллман DH (Diffie, Hellman);
·          Райвест-Шамир-Адлeман RSA (Rivest, Shamir,Adleman);
·          Эль-Гамаль (ElGamal).
Кроме того, естьразделение алгоритмов шифрования на собственно шифры (ciphers) и коды (codes).Шифры работают с отдельными битами, буквами, символами. Коды оперируютлингвистическими элементами (слоги, слова, фразы).

Глава II. Рассмотрение алгоритмов
 
2.1 Симметричныеалгоритмы шифрования
Симметричные алгоритмышифрования (или криптография с секретными ключами) основаны на том, чтоотправитель и получатель информации используют один и тот же ключ. Этот ключдолжен храниться в тайне и передаваться способом, исключающим его перехват.
Обмен информациейосуществляется в 3 этапа:
·         отправительпередает получателю ключ (в случае сети с несколькими абонентами у каждой парыабонентов должен быть свой ключ, отличный от ключей других пар);
·         отправитель,используя ключ, зашифровывает сообщение, которое пересылается получателю;
·         получательполучает сообщение и расшифровывает его.
Если для каждого дня идля каждого сеанса связи будет использоваться уникальный ключ, это повыситзащищенность системы.
2.1.1 Потоковые шифры
В потоковых шифрах, т. е.при шифровании потока данных, каждый бит исходной информации шифруетсянезависимо от других с помощью гаммирования.
Гаммирование — наложениена открытые данные гаммы шифра (случайной или псевдослучайнойпоследовательности единиц и нулей) по определенному правилу. Обычноиспользуется «исключающее ИЛИ», называемое также сложением по модулю2 и реализуемое в ассемблерных программах командой XOR. Для расшифровывания таже гамма накладывается на зашифрованные данные.
При однократномиспользовании случайной гаммы одинакового размера с зашифровываемыми даннымивзлом кода невозможен (так называемые криптосистемы с одноразовым илибесконечным ключом). В данном случае «бесконечный» означает, чтогамма не повторяется.
В некоторых потоковыхшифрах ключ короче сообщения. Так, в системе Вернама для телеграфа используетсябумажное кольцо, содержащее гамму. Конечно, стойкость такого шифра не идеальна.
Понятно, что обменключами размером с шифруемую информацию не всегда уместен. Поэтому чащеиспользуют гамму, получаемую с помощью генератора псевдослучайных чисел (ПСЧ).В этом случае ключ — порождающее число (начальное значение, векторинициализации, initializing value, IV) для запуска генератора ПСЧ. Каждыйгенератор ПСЧ имеет период, после которого генерируемая последовательностьповторяется. Очевидно, что период псевдослучайной гаммы должен превышать длинушифруемой информации.
Генератор ПСЧ считаетсякорректным, если наблюдение фрагментов его выхода не позволяет восстановитьпропущенные части или всю последовательность при известном алгоритме, нонеизвестном начальном значении.
При использованиигенератора ПСЧ возможны несколько вариантов
1. Побитовое шифрованиепотока данных. Цифровой ключ используется в качестве начального значениягенератора ПСЧ, а выходной поток битов суммируется по модулю 2 с исходнойинформацией. В таких системах отсутствует свойство распространения ошибок.
2. Побитовое шифрованиепотока данных с обратной связью (ОС) по шифртексту. Такая система аналогичнапредыдущей, за исключением того, что шифртекст возвращается в качествепараметра в генератор ПСЧ. Характерно свойство распространения ошибок. Областьраспространения ошибки зависит от структуры генератора ПСЧ.
3. Побитовое шифрованиепотока данных с ОС по исходному тексту. Базой генератора ПСЧ является исходнаяинформация. Характерно свойство неограниченного распространения ошибки.
4. Побитовое шифрованиепотока данных с ОС по шифртексту и по исходному тексту.
2.1.2 Блочные шифры
При блочном шифрованииинформация разбивается на блоки фиксированной длины и шифруется поблочно.Блочные шифры бывают двух основных видов:
·         шифры перестановки (transposition, permutation, P-блоки);
·         шифры замены(подстановки, substitution, S-блоки).
Шифры перестановокпереставляют элементы открытых данных (биты, буквы, символы) в некотором новомпорядке. Различают шифры горизонтальной, вертикальной, двойной перестановки,решетки, лабиринты, лозунговые и др.
Шифры замены заменяютэлементы открытых данных на другие элементы по определенному правилу. Paзличаютшифры простой, сложной, парной замены, буквенно-слоговое шифрование и шифрыколонной замены. Шифры замены делятся на две группы:
·         моноалфавитные(код Цезаря);
·         полиалфавитные(шифр Видженера, цилиндр Джефферсона, диск Уэтстоуна, Enigma).
В моноалфавитных шифрахзамены буква исходного текста заменяется на другую, заранее определенную букву.Например в коде Цезаря буква заменяется на букву, отстоящую от нее в латинскомалфавите на некоторое число позиций. Очевидно, что такой шифр взламываетсясовсем просто. Нужно подсчитать, как часто встречаются буквы в зашифрованномтексте, и сопоставить результат с известной для каждого языка частотойвстречаемости букв.
В полиалфавитныхподстановках для замены некоторого символа исходного сообщения в каждом случаеего появления последовательно используются различные символы из некоторогонабора. Понятно, что этот набор не бесконечен, через какое-то количествосимволов его нужно использовать снова. В этом слабость чисто полиалфавитныхшифров.
В современныхкриптографических системах, как правило, используют оба способа шифрования(замены и перестановки). Такой шифратор называют составным (product cipher). Oнболее стойкий, чем шифратор, использующий только замены или перестановки.
2.2 Асимметричныеалгоритмы шифрования
В асимметричных алгоритмахшифрования (или криптографии с открытым ключом) для зашифровывания информациииспользуют один ключ (открытый), а для расшифровывания — другой (секретный).Эти ключи различны и не могут быть получены один из другого.
Схема обмена информациейтакова:
·         получательвычисляет открытый и секретный ключи, секретный ключ хранит в тайне, открытыйже делает доступным (сообщает отправителю, группе пользователей сети,публикует);
·         отправитель,используя открытый ключ получателя, зашифровывает сообщение, которое пересылаетсяполучателю;
·         получательполучает сообщение и расшифровывает его, используя свой секретный ключ.
2.2.1 Алгоритм Диффи-Хелмана
Алгоритм Диффи-Хелмана(Whitfield Diffie и Martin Hellman, 1976 год) использует функцию дискретноговозведения в степень и похож на метод Эль-Гамаля.
Сначала генерируются двабольших простых числа n и q. Эти два числа не обязательно хранитьв секрете. Далее один из партнеров P1 генерирует случайное число xи посылает другому участнику будущих обменов P2 значениеA = qxmod n
По получении Апартнер P2 генерирует случайное числоу и посылает P2 вычисленноезначениеB = qy mod n
Партнер P1,получив В, вычисляет Kx = Bx mod n, апартнер P2 вычисляет Ky = Ay mod n.Алгоритм гарантирует, что числа Ky и Kxравны и могут быть использованы в качестве секретного ключа дляшифрования. Ведь даже перехватив числа А и В, трудно вычислить Kxили Ky.
Алгоритм Диффи-Хелмана,обеспечивая конфиденциальность передачи ключа, не может гарантировать того, чтоон прислан именно тем партнером, который предполагается. Для решения этойпроблемы был предложен протокол STS (station-to-station). Этот протоколдля идентификации отправителя использует технику электронной подписи. Подписьшифруется общим секретным ключом, после того как он сформирован. Подписьвключает в себя идентификаторы как P1, так и P2.
2.2.2 RSA
Защищен патентом США N4405829. Разработан в 1977 году в Массачусетском технологическом институте(США). Получил название по первым буквам фамилий авторов (Rivest, Shamir,Adleman). Криптостойкость основана на вычислительной сложности задачиразложения большого числа на простые множители.
Алгоритм RSAпредполагает, что посланное закодированное сообщение может быть прочитаноадресатом и только им. В этом алгоритме используется два ключа — открытый исекретный. Данный алгоритм привлекателен также в случае, когда большоечисло субъектов (N) должно общаться по схеме все-со-всеми. В случаесимметричной схемы шифрования каждый из субъектов каким-то образом должендоставить свои ключи всем остальным участникам обмена, при этом суммарное числоиспользуемых ключей будет достаточно велико при большом значении N. Применениеасимметричного алгоритма требует лишь рассылки открытых ключей всемиучастниками, суммарное число ключей равно N.
Сообщение представляетсяв виде числа M. Шифрование осуществляется с помощью общедоступнойфункции f(M), и только адресату известно, как выполнить операцию f-1.Адресат выбирает два больших простых (prime) числа p иq, которыеделает секретными. Он объявляет n=pq и число d, c (d,p-1)=(d,q-1)=1(один из возможных способов выполнить это условие, выбрать d больше чем p/2и q/2). Шифрование производится по формуле:
f(M) ≡ Mdmod n,
где M и f(M)оба ≤ n-1. Как было показано, может быть вычислено за разумноевремя, даже если M, d и n содержит весьма большое числознаков. Адресат вычисляет M на основе Md, используясвое знание p и q. В соответствие со следствием, если
 
dc ≡ (p-1)1,тогда (Md)e ≡ p1.
Исходный текст Mполучается адресатом из зашифрованного F(M) путем преобразования: M = (F(M))e(mod pq). Здесь как исходный текст, так и зашифрованный рассматриваются какдлинные двоичные числа.
Аналогично (Md)e≡ qM, если dc ≡ (q-1)1. eудовлетворяет этим двум условиям, если cd ≡ (p-1) (q-1)1.Теорема 1 гласит, что мы можем позволить e=x, когда x является решениемуравнения dx + (p-1)(q-1)y = 1.
Так как (Md)e — M делимо на p и q, оно делимо и на pq, следовательно, мыможем определить M, зная Md, вычислив его значение встепени e и определив остаток от деления на pq. Для соблюдения секретностиважно, чтобы, зная n, было нельзя вычислить p и q. Если nсодержит 100 цифр, подбор шифра связан с перебором ~1050 комбинаций.Данная проблема изучается уже около 100 лет. RSA-алгоритм запатентован (20сентября 1983, действует до 2000 года).
Теоретически можнопредположить, что возможно выполнение операции f-1, невычисляя p и q. Но в любом случае задача эта не проста иразработчики считают ее трудно факторизуемой.
Предположим, что мы имеемзашифрованный текст f(M) и исходный текст M, и мы хотим найтизначения p и q. Нетрудно показать, что таких исходных данных длярешения задачи недостаточно — надо знать все возможные значения Mi.
Проясним использованиеалгоритма RSA на конкретном примере. Выбираем два простые числа p=7; q=17(на практике эти числа во много раз длиннее). В этом случае n = p*qбудет равно 119. Теперь необходимо выбрать e, выбираем e=5.Следующий шаг связан с формированием числа d так, чтобы d*e=1 mod[(p-1)(q-1)]. d=77 (использован расширенный алгоритм Эвклида). d — секретный ключ, а e и n характеризуют открытый ключ. Пусть текст,который нам нужно зашифровать представляется M=19. С = Memod n.Получаем зашифрованный текст C=66. Этот “текст” может быть послансоответствующему адресату. Получатель дешифрует полученное сообщение, используяМ= Cdmod n и C=66. В результате получается M=19.
На практике общедоступныеключи могут помещаться в специальную базу данных. При необходимости послатьпартнеру зашифрованное сообщение можно сделать сначала запрос его открытогоключа. Получив его, можно запустить программу шифрации, а результат ее работыпослать адресату. На использовании общедоступных ключей базируется и такназываемая электронная подпись, которая позволяет однозначно идентифицироватьотправителя. Сходные средства могут применяться для предотвращения внесениякаких-либо корректив в сообщение на пути от отправителя к получателю.Быстродействующие аппаратные 512-битовые модули могут обеспечить скоростьшифрования на уровне 64 кбит в сек. Готовятся ИС, способные выполнять такиеоперации со скоростью 1 Мбайт/сек. Разумный выбор параметра e позволяет заметноускорить реализацию алгоритма.
2.2.3 ElGamal
Разработан в 1985 году.Назван по фамилии автора — Эль-Гамаль. Алгоритм Эль-Гамаля может использоватьсядля формирования электронной подписи или для шифрования данных. Он базируетсяна трудности вычисления дискретного логарифма. Для генерации пары ключейсначала берется простое число p и два случайных числа g и x,каждое из которых меньше p. Затем вычисляется:
 
y = gx modp
Общедоступными ключамиявляются y, g и p, а секретным ключом является х.Для подписи сообщенияM выбирается случайное число k, котороеявляется простым по отношению к p-1. После этого вычисляется a = gkmod p. Далее из уравнения M = (xa + kb) mod (p-1) находим b.Электронной подписью для сообщения M будет служить пара a и b.Случайное число k следует хранить в секрете. Для верификации подписинеобходимо проверить равенство:
 
yaabmod p = gM mod p.
Пара a и bпредставляют собой зашифрованный текст. Следует заметить, что зашифрованныйтекст имеет размер в два раза больше исходного. Для дешифрования производитсявычисление:
 
M = b/axmod p
2.3 Сравнениеcимметричных и аcимметричных алгоритмов шифрования
 
В асимметричных системахнеобходимо применять длинные ключи (512 битов и больше). Длинный ключ резкоувеличивает время шифрования. Кроме того, генерация ключей весьма длительна.Зато распределять ключи можно по незащищенным каналам.
В симметричных алгоритмахиспользуют более короткие ключи, т. е. шифрование происходит быстрее. Но в такихсистемах сложно распределение ключей.
Поэтому припроектировании защищенной системы часто применяют и cимметричные, иаcимметричные алгоритмы. Так как система с открытыми ключами позволяетраспределять ключи и в симметричных системах, можно объединить в системепередачи защищенной информации асимметричный и симметричный алгоритмышифрования. С помощью первого рассылать ключи, вторым же — собственно шифроватьпередаваемую информацию
Обмен информацией можноосуществлять следующим образом:
·         получатель вычисляетоткрытый и секретный ключи, секретный ключ хранит в тайне, открытый же делаетдоступным;
·         отправитель,используя открытый ключ получателя, зашифровывает сеансовый ключ, которыйпересылается получателю по незащищенному каналу;
·         получательполучает сеансовый ключ и расшифровывает его, используя свой секретный ключ;
·         отправительзашифровывает сообщение сеансовым ключом и пересылает получателю;
·         получательполучает сообщение и расшифровывает его.
Надо заметить, что вправительственных и военных системах связи используют лишь симметричныеалгоритмы, так как нет строго математического обоснования стойкости систем соткрытыми ключами, как, впрочем, не доказано и обратное.
 
2.4Использование инструментов криптографии в Delphi-приложениях
 
2.4.1 CryptoAPI
Криптографические функцииявляются частью операционной системы Windows, и обратится к ним можнопосредством интерфейса CryptoAPI. Основные возможности доступны еще с Windows95, но со временем они расширялись. Описание функций CryptoAPI можно найти вMSDN,  или в справочном файле к Delphi. Функции содержаться в библиотекахadvapi32.dll и crypt32.dll.
 
2.4.2 Подключениек криптопровайдеру. Контейнеры ключей
Первая функция, которуюмы рассмотрим, будет/>
function CryptAcquireContext(phProv       :PHCRYPTPROV;
                             pszContainer :LPAWSTR;
                             pszProvider  :LPAWSTR;
                             dwProvType   :DWORD;
                             dwFlags      :DWORD) :BOOL; stdcall;  

В большинстве случаев,работа с криптографическими возможностями Windows начинается с вызова именноэтой функции, которая выполняет подключение к криптопровайдеру и возвращает егодескриптор в параметре phProv. Криптопровайдер представляет собой dll,независимый программный модуль, который фактически исполняет криптографическиеалгоритмы. Криптопровайдеры бывают различные и отличаются составом функций(например, некоторые криптопровайдеры ограничиваются лишь цифровыми подписями),используемыми алгоритмами (некоторые шифруют алгоритмом RC2, другие — DES) идругими возможностями. В каждой операционной системе свой составкриптопровайдеров, однако в каждой присутствует Microsoft Base CryptographicProvider v1.0. При вызове функции CryptAcquireContext, необходимо указать имяпровайдера и его тип (соответственно в параметрах pszProvider и dwProvType).Тип провайдера определяет состав функций и поддерживаемые криптоалгоритмы,например:
Тип PROV_RSA_FULL
·         Обмен ключами — алгоритм RSA
·         Цифровая подпись- алгоритм RSA
·         Шифрование — алгоритмRC2 и RC4
·         Хэширование — алгоритмы MD5 и SHA
Тип PROV_RSA_SIG
·         Обмен ключами — не поддерживается
·         Цифровая подпись- алгоритм RSA
·         Шифрование — неподдерживается
·         Хэширование — алгоритмы MD5 и SHA
Microsoft BaseCryptographic Provider v1.0 относится к типу PROV_RSA_FULL и для этого типаиспользуется по умолчанию (если в параметре pszProvider указать nil). Впараметре pszContainer необходимо указать имя контейнера ключей, который мысобираемся использовать. Дело в том, что каждый криптопровайдер содержит базуданных, в которой хранятся ключи пользователей. Эти ключи группируются вконтейнерах. Сохраняются только ключевые пары для асимметричных алгоритмов,сеансовые ключи не сохраняются, так как их не рекомендуют использоватьповторно. Таким образом, каждый контейнер имеет имя и содержит по одному ключу(точнее паре открытый-закрытый ключ) для цифровой подписи и обмена ключами. Взависимости от криптопровайдера, база данных может храниться в файлах, реестреили в каких-либо аппаратных средствах, но это не влияет на работу программистас контейнерами ключей. Если в качестве параметра pszContainer указать nil, тобудет использоваться контейнер ключей, название которого совпадает именемпользователя, под которым был осуществлен вход в систему. Но так делать нерекомендуется: дело в том, что если два приложения использует один и тот жеконтейнер, одно из них может изменить или уничтожить ключи, необходимые длякорректной работы другого приложения. Поэтому рекомендуют использоватьконтейнеры, имена которых совпадает с именем приложения.
Параметр dwFlags можетбыть нулевым или принимать одно из следующих значений:
CRYPT_VERIFYCONTEXT — этот флаг предназначен для приложений, которые не должны иметь доступ кзакрытым ключам контейнера. Такие приложения могут обращаться только к функциямхеширования, проверки цифровой подписи или симметричного шифрования. В этомслучае параметр pszContainer должен быть равен nil.
CRYPT_NEWKEYSET — создаетновый контейнер ключей, но сами ключи не создаются.
CRYPT_DELETEKEYSET — удаляет контейнер вместе с хранящимися там ключами. Если задан этот флаг, топодключение к криптопровайдеру не происходит и параметр phProv неопределен.
CRYPT_MACHINE_KEYSET — поумолчанию контейнеры ключей сохраняются как пользовательские. Для основных криптопровайдеровэто означает, что контейнеры ключей сохраняются в пользовательских профилях.Этот флаг можно устанавливать в комбинации с другими, чтобы указать, чтоконтейнер является машинным, то есть хранится в профиле All Users.
В случае успеха, функциявозвращает true, в противном случае — false. GetLastError вернет код ошибки./>
function CryptReleaseContext(hProv   :HCRYPTPROV;
dwFlags :DWORD) :BOOL; stdcall;  

Освобождает контексткриптопровайдера и контейнера ключей. hProv — дескриптор криптопровайдера,полученный при вызове CryptAcquireContext. dwFlags — зарезервирован и долженравняться нулю.
В случае успеха, функциявозвращает true, в противном случае — false. GetLastError вернет код ошибки.
Приведем пример работы сэтими функциями:/>
uses Wcrypt2;
...
procedure CryptProc;
var
  Prov: HCRYPTPROV;
begin
  CryptAcquireContext(@Prov,nil,nil,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);
  // Работаем с функциями CryptoAPI
...
  CryptReleaseContext(Prov,0);
end;  

2.4.3 Шифрование наоснове пользовательских данных или пароля
Для шифрования вCryptoAPI используются симметричные алгоритмы, ключ для которых может бытьполучен двумя путями: случайным образом или на основе каких-либопользовательских данных, например пароля. Причем к последнему варианту генерацииключа есть одно важное требование: при использовании одних и тех же паролейдолжны получаться идентичные ключи. Такая возможность предусмотрена вCryptoAPI./>
function CryptDeriveKey(hProv  :HCRYPTPROV;
                        Algid     :ALG_ID;
                        hBaseData :HCRYPTHASH;
                        dwFlags   :DWORD;
                        phKey     :PHCRYPTKEY) :BOOL; stdcall;  

В параметре hProv нужноуказать дескриптор провайдера, полученный с помощью CryptAcquireContext. Algid- идентификатор алгоритма, для которого генерируется ключ. Для Microsoft BaseCryptographic Provider может принимать следующие значения: CALG_RC2 и CALG_RC4.Пользовательские данные (пароль) предварительно хэшируются и дескрипторхэш-объекта передается в функцию в качестве параметра hBaseData. Старшие 16 битпараметра dwFlags могут содержать размер ключа в битах или быть нулевыми (вэтом случае будет создан ключ с размером по умолчанию). Младшие 16 бит могутбыть нулевыми или принимать следующие значения или их комбинации:CRYPT_EXPORTABLE, CRYPT_CREATE_SALT, CRYPT_USER_PROTECTED, CRYPT_UPDATE_KEY. Кпервым двум мы еще вернемся, а со смыслом остальных вы можете ознакомитьсясамостоятельно. В параметре phKey возвращается дескриптор созданного ключа.
В случае успеха, функциявозвращает true, в противном случае — false. GetLastError вернет код ошибки.
Когда ключ есть, можноприступать непосредственно к шифрованию. Для этого нам понадобятся функцииCryptEncrypt и CryptDecrypt./>
function CryptEncrypt(hKey       :HCRYPTKEY;
                      hHash      :HCRYPTHASH;
                      Final      :BOOL;
                      dwFlags    :DWORD;
                      pbData     :PBYTE;
                      pdwDataLen :PDWORD;
                      dwBufLen   :DWORD) :BOOL; stdcall;  


В параметре hKeyпередается дескриптор ключа, необходимый для шифрования. Этот ключ такжеопределяет алгоритм шифрования. Параметр hHash используется, если данныеодновременно шифруются и хэшируются (шифроваться и хэшироваться будут исходныеданные). В этом случае в параметре hHash передается дескриптор заранеесозданного хэш-объекта. Эту возможность удобно использовать, если необходимоодновременно зашифровать и подписать сообщение. Иначе этот параметр следуетустановить в ноль. Параметр Final следует установить в true, если переданный вфункцию блок данных является единственным или последним. В этом случае он будетдополнен до необходимого размера. Параметр dwFlags не используется в MicrosoftBase Cryptographic Provider и на его месте следует указать ноль. pbData — указатель на буфер, в котором содержаться данные для зашифрования.Зашифрованыые данные помещаются в тот же буфер. pdwDataLen — размер данных,которые будут зашифрованы. dwBufLen — размер выходного буфера, для блочныхшифров может быть больше, чем pdwDataLen. Узнать необходимый размер, можнопередав в параметре pbData nil, в параметре pdwDataLen — размер данных, которыенеобходимо зашифровать, а в параметре dwBufLen — что угодно, например ноль.После такого вызова, необходимый размер буфера будет содержаться в параметреpdwDataLen (именно pdwDataLen, а не dwBufLen, немного нелогично, ну да ладно).Чтобы не было путаницы, приведем пример:/>
var
  Message: String;
  BufLen, DataLen: DWORD;
...
begin
...
  Message:='Hello World!';
  BufLen:=Length(Message);
  DataLen:=Length(Message);
  // Вычисляем необходимый размер выходного буфера
  CryptEncrypt(Key,0,true,0,nil,@BufLen,0);
  // Выделяем память для буфера и шифруем
  SetLength(Message,BufLen);
  CryptEncrypt(Key,0,true,0,PByte(Message),@DataLen,BufLen);  


Теперь, рассмотримфункцию, которая позволяет расшифровать сообщение.

function CryptDecrypt(hKey       :HCRYPTKEY;
                      hHash      :HCRYPTHASH;
                      Final      :BOOL;
                      dwFlags    :DWORD;
                      pbData     :PBYTE;
                      pdwDataLen :PDWORD) :BOOL; stdcall;  
 

В параметр pdwDataLen нужнопередать число байт шифротекста, а после вызова в него будет помещена длинаоткрытого сообщения. Если используется параметр hHash, то данные послерасшифровки хэшируются. Это удобно использовать, если нужно одновременнорасшифровать сообщение и проверить подпись.
После того, как работа сключом закончена, необходимо освободить дескриптор:/>
function CryptDestroyKey(hKey  :HCRYPTKEY) :BOOL; stdcall;  
 

Если hKey относится ксеансовому ключу или импортированному открытому ключу (об этом ниже), то дескрипторосвобождается, а ключ уничтожается. Если hKey относится к пареоткрытый/закрытый ключ, то дескриптор освобождается, а ключевая парасохраняется в контейнере ключей.
Только что мы рассмотрелислучай, когда для зашифровки и расшифровки сообщения отправитель и получательиспользовали пароль, известный только им. Сейчас рассмотрим другой: отправительгенерирует ключ случайно и передает его получателю в зашифрованном виде вместес сообщением. При этом для шифрования сеансового ключа используется открытый ключполучателя. А где отправитель его возьмет?
Как уже было сказано, присоздании ключевого контейнера с помощью функции CryptAcquireContext, ключи вконтейнере не создаются, их нужно сгенерировать отдельно. Рассмотрим функцию:/>
function CryptGenKey(hProv   :HCRYPTPROV;
                     Algid   :ALG_ID;
                     dwFlags :DWORD;
                     phKey   :PHCRYPTKEY) :BOOL; stdcall;  
 

Функция предназначена длягенерации случайных сеансовых ключей и ключевых пар. Параметры этой функциианалогичны одноименным параметрам функции CryptDeriveKey, за исключением того,что Algid может также принимать значения AT_KEYEXCHANGE и AT_SIGNATURE. В этомслучае будут сгенерированы ключевые пары соответственно для обмена ключами ицифровой подписи. Создание нового ключевого контейнера должно выглядетьпримерно так:
uses Wcrypt2;
...
var
  Prov: HCRYPTPROV;
  ExchangeKey, SignKey: HCRYPTKEY;
begin
  CryptAcquireContext(@Prov,'My_Container',nil,PROV_RSA_FULL,CRYPT_NEWKEYSET);
  // Создаем ключевые пары
  CryptGenKey(Prov,AT_KEYEXCHANGE,0,@ExchangeKey);
  CryptGenKey(Prov,AT_SIGNATURE,0,@SignKey);
  // Работаем с функциями CryptoAPI
...
  // Освобождаем дескрипторы ключевых пар. Сами ключи сохраняются в контейнере
  CryptDestroyKey(SignKey);
  CryptDestroyKey(ExchangeKey);
  CryptReleaseContext(Prov,0);
end;  


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

 
function CryptGetUserKey(hProv     :HCRYPTPROV;
                         dwKeySpec :DWORD;
                         phUserKey :PHCRYPTKEY) :BOOL; stdcall;    
 

Параметр dwKeySpec можетпринимать два значения: AT_KEYEXCHANGE и AT_SIGNATURE, значения которыхочевидны. Дескриптор ключа возвращается в параметре phUserKey.
Теперь ответим на вопрос,как отправитель сможет передать получателю свою открытую часть ключа.
function CryptExportKey(hKey       :HCRYPTKEY;
                        hExpKey    :HCRYPTKEY;
                        dwBlobType :DWORD;
                        dwFlags    :DWORD;
                        pbData     :PBYTE;
                        pdwDataLen :PDWORD) :BOOL; stdcall;  


Функция позволяетэкспортировать ключ в двоичный буфер, который впоследствии можно будетсохранить в файл и передать кому-либо. В параметре hKey должен содержатьсядескриптор экспортируемого ключа. Экспортировать можно не только открытыеключи, а также ключевые пары целиком и сеансовые ключи. В последних двухслучаях, ключи и ключевые пары должны быть созданы функциями CryptGenKey илиCryptDeriveKey с параметрами dwFlags равными CRYPT_EXPORTABLE. Открытые жеключи всегда экспортируемы. Сеансовые ключи и ключевые пары экспортируютсятолько в зашифрованном виде. Параметр hExpKey определяет ключ, которым они будутзашифрованы. Если экспортируется открытая часть ключа, то этот параметр следуетустановить в ноль, если экспортируется ключевая пара целиком, то здесь обычнопередают дескриптор сеансового ключа (обычно полученный с помощьюCryptDeriveKey), которым пара будет зашифрована, если экспортируется сеансовыйключ, то обычно он шифруется открытым ключом получателя (обычно используетсяключ обмена, но никто не запрещает использовать ключ подписи). ПараметрdwBlobType определяет тип экспортируемого ключа и может принимать следующиезначения: SIMPLEBLOB — сеансовый ключ, PUBLICKEYBLOB — открытый ключ,PRIVATEKEYBLOB — ключевая пара целиком. Существуют и другие значения, но они неподдерживаются стандартным криптопровайдером. Параметр dwFlags для MicrosoftBase Cryptographic Provider должен быть равен нулю. pbData — буфер, куда будутскопированы данные, pdwDataLen — размер этого буфера. Если он заранее неизвестен, то можно указать в качестве параметра pbData nil, и в pdwDataLenбудет получен необходимый размер.
Вот пример экспортаоткрытого ключа:/>
procedure ExportPublicKey(FileName: TFileName);
var
  Prov: HCRYPTPROV;
  SignKey: HCRYPTKEY;
  Stream: TMemoryStream;
  BufSize: DWORD;
begin
  CryptAcquireContext(@Prov,'My_Container',nil,PROV_RSA_FULL,0);
  CryptGetUserKey(Prov,AT_SIGNATURE,@SignKey);
  Stream:=TMemoryStream.Create;
  CryptExportKey(SignKey,0,PUBLICKEYBLOB,0,nil,@BufSize);
  Stream.SetSize(BufSize);
  CryptExportKey(SignKey,0,PUBLICKEYBLOB,0,PByte(Stream.Memory),@BufSize);
  Stream.SaveToFile(FileName);
  Stream.Free;
  CryptDestroyKey(SignKey);
  CryptReleaseContext(Prov,0);
end;  


Импорт ключаосуществляется с помощью функции/>
function CryptImportKey(hProv     :HCRYPTPROV;
                        pbData    :PBYTE;
                        dwDataLen :DWORD;
                        hPubKey   :HCRYPTKEY;
                        dwFlags   :DWORD;
                        phKey     :PHCRYPTKEY) :BOOL; stdcall;    
 

В параметре hPubKeyнеобходимо передать дескриптор ключа, которым будет расшифрован импортированныйключ. Если импортируется ключевая пара целиком, то параметр dwFlags можноустановить в CRYPT_EXPORTABLE, тогда импортированная пара может бытьвпоследствии также экспортирована. В параметре phKey вернется дескрипторполученного ключа. Если это ключевая пара, то она будет сохранена в контейнере.
Вот пример импортаоткрытого ключа:/>
function ImportPublicKey(FileName: TFileName): HCRYPTKEY;
var
  Prov: HCRYPTPROV;
  Stream: TMemoryStream;
begin
  Stream:=TMemoryStream.Create;
  Stream.LoadFromFile(FileName);
  CryptImportKey(Prov,PByte(Stream.Memory),Stream.Size,0,0,@Result);
  Stream.Free;
end;  


Теперь, воспользовавшисьэтой информацией, мы без труда сможем восстановить пропущенные фрагменты вфункции проверки цифровой подписи, описанной ранее.
Итак, как же передатьсобеседнику зашифрованное сообщение:
·         Получательэкспортирует свой открытый ключ обмена в файл и передает его отправителюсообщения.
·         Отправительгенерирует случайный сеансовый ключ и шифрует им сообщение.
·         Отправительимпортирует открытый ключ обмена получателя, экспортирует сеансовый ключ,шифруя его полученным ключом обмена (ключ обмена в параметре hExpKey).
·         Зашифрованноесообщение передается вместе с зашифрованным сеансовым ключом — так называемыйцифровой конверт.
·         Получательимпортирует сеансовый ключ, расшифровывая его своим закрытым ключом обмена (егоможно получить, вызвав CryptGetUserKey) и с помощью сеансового ключарасшифровывает сообщение.
Говоря о сеансовыхключах, используемых в Microsoft Base Cryptographic Provider нужно упомянуть ободной неприятности: до начала 2000 года действовал запрет на экспортпрограммного обеспечения, использующего средства «сильнойкриптографии» за пределами США и Канады. По этой причине в базовом криптопровайдерене поддерживаются ключи для симметричных алгоритмов длиной более 40 бит. Ключидлиной 56 бит разрешалось использовать только заграничным отделениямамериканских компаний. Для алгоритмов RC2 и RC4 рекомендуемая длина ключадолжна составлять 128 бит, поэтому недостающее количество бит заполняетсянулями либо случайными значениями, которые должны передаваться открыто.Надежность защиты из-за этого, разумеется, сильно страдает. В состав Windows XPвходит Microsoft Enhanced Cryptographic Provider, в котором этой проблемы нет,но при использовании базового криптопровайдера, необходимо дополнять ключ донужной длины, используя т.н. солт-значения (salt-values). Сгенерироватьsalt-value и внести его в ключ можно несколькими способами, но самый простой иочевидный — при вызове CryptGenKey или CryptDeriveKey передать в параметреdwFlags значение CRYPT_CREATE_SALT, примерно так:/>
CryptGenKey(Prov,CALG_RC2,CRYPT_EXPORTABLE or CRYPT_CREATE_SALT,@Key);  

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

 
var
  SaltLen: DWORD;
  Stream: TMemoryStream;
...
begin
...
  // Определяем размер буфера для солт-значения
  CryptGetKeyParam(Key,KP_SALT,nil,@SaltLen,0);
  // Сохраняем его в файл
  Stream:=TMemoryStream.Create;
  Stream.SetSize(SaltLen);
  CryptGetKeyParam(Key,KP_SALT,PByte(Stream.Memory),@SaltLen,0);
  Stream.SaveToFile('Salt.dat');
  Stream.Free;
...    


Сохраненное таким образомсолт-значение необходимо передать вместе с сеансовым ключом, а на приемнойстороне «вживить» его туда снова./>
var
  Stream: TMemoryStream;
...
begin
...
  Stream:=TMemoryStream.Create;
  Stream.LoadFromFile('Salt.dat');
  CryptSetKeyParam(Key,KP_SALT,PByte(Stream.Memory),Stream.Size);
  Stream.Free;
...  


2.5 Постановка задачи
Разработать программушифрующую и дешифрующую введенный пользователем текст. Обеспечить ввод и выводинформации с помощью файлов. Обеспечить достаточную криптоустойчивость  шифра.

2.6 Реализация задачи/>/> 2.6.1 Краткая характеристика среды Delphi 7
Среда программирования Delphi7 позволяетреализовать поставленную задачу совсеми необходимыми требованиями. В среде используется язык ObjectPascal. Delphi7 является объектно-ориентированной средой, что упрощаетсоздание  единообразного интерфейса и ввод-вывод информации из файла./>/> 2.6.2 Алгоритм решения задачи
Программа представляетсобой шифровщик и дешифровщик одновременно.
Используется методсимметрического кодирования, то есть кодирование и декодирование осуществляетсяс помощью одного ключа. Для обеспечения криптоустойчивости необходим длинныйключ. Пользователь вводит 30-символьный код. Блоками по 10 цифр. Из нихгенерируется код следующим образом:
Берутся первые цифры из1-го, 2-го,3-го блоков, и в зависимости от 3-го блока над ними производятсяоперации сложения или умножения. Затем берется следующая цифра 3-го блока,после полного завершения цикла по 3-му блоку берется следующая цифра из второгоблока и т.д. Гаммирование завершается после прохождения по циклу последнейцифры 1-го блока. Результатом является код состоящий из 1000 независимых,неповторяющихся и незакономерных цифр. Шифр возможно вскрыть только полнымперебором, что обеспечивает достаточную криптоустойчивость./>/>Модули программы
Программа имеет несколькостандартных основных модулей: вызов справки, сохранение в файл, открытие файла,генерация произвольного ключа, проверка пароля, которые не будут упоминаться вдальнейшем.
Опишем лишь модулиотвечающие непосредственно за шифрование.Модульшифровки/дешифровки
/>


 
s1:=memo1.Text;
  k:=length(s);
  k1:=length(s1);
  k3:=length(s3);
  k5:=length(s5);
  m:=1;
  m3:=1; m5:=1;
  for i:=1 to k1 do
  begin
   q:=false;
   i5:=strtoint(s[m]);
   i2:=strtoint(s3[m3]);
   i3:=strtoint(s5[m5]);
   i1:=kod(i5,i2,i3);
   if i1=0 then i1:=10;
   case s1[i] of
   'a'..'z':begin c1:=perevod(s1[i],i1,96,122); q:=true; end;
   'A'..'Z':begin c1:=perevod(s1[i],i1,64,90); q:=true; end;
   'А'..'Я':begin c1:=perevod(s1[i],i1,191,223); q:=true; end;
   'а'..'я':begin c1:=perevod(s1[i],i1,223,255); q:=true; end;
   end;
   if q=true then
    begin
     {if ord(s1[i])+i1>255 then   }
     s2:=s2+c1;
    { else
     s2:=s2+chr(ord(s1[i])+i1);}
    end
   else s2:=s2+s1[i];
   q1:=false;
   if m5=k5 then begin m5:=1; q1:=true; end
   else inc(m5);
   q2:=false;
   if (q1=true)  then
   begin
   inc(m3);
   end;
   if m3>=k3 then begin m3:=1; q2:=true end;
   if (q2=true) then m:=m+1;
   if m>=k then m:=1;
  end;
  {delete(s2,k1-1,2)}
  memo2.Text:=s2;    


Процедуракодирования символа/>
begin
  if abs(i1)>y-x+1 then
  repeat
  i1:=i1 mod (y-x+1);
  until i1
  if  ord(c)+i1>y then
     perevod:=chr(x+(ord(c)+i1-y))
     else
     perevod:=chr(ord(c)+i1)
  end;  

2.6.3 Таблицасообщений
В ходе работы пользовательможет получить сообщение:
«Пароль не подтвержден» — следует убедиться в правильности пароля в дублирующих и основных полях.

Заключение
 
Обоснованный выбор тойили иной системы защиты должен опираться на какие-то критерии эффективности. Ксожалению, до сих пор не разработаны подходящие методики оценки эффективностикриптографических систем.
Наиболее простойкритерий такой эффективности — вероятность раскрытия ключа или мощностьмножества ключей (М). По сути это то же самое, что и кpиптостойкость. Для еечисленной оценки можно использовать также и сложность раскрытия шифра путемперебора всех ключей. Однако, этот критерий не учитывает других важныхтребований к криптосистемам:
·        невозможность раскрытия илиосмысленной модификации информации на основе анализа ее структуры,
·        совершенство используемыхпротоколов защиты,
·        минимальный объем используемойключевой информации,
·        минимальная сложность реализации(в количестве машинных операций), ее стоимость,
·        высокая оперативность.
В любом случае выбранныйкомплекс кpиптогpафических методов должен сочетать как удобство, гибкость иоперативность использования, так и надежную защиту от злоумышленниковциркулирующей в ИС информации. Поэтому на настоящий момент наиболее оптимальнысмешанные криптосиситемы, в которых текст кодируется симметрически, а ключкодируется ассиметрически и помещается вместе с кодированным текстом.
Шифрование информации неявляется панацеей. Его следует рассматривать только как один из методов защитыинформации и применять обязательно в сочетании с законодательными,организационными и другими мерами.

Литература
 
1. Водолазский В. Коммерческиесистемы шифрования: основные алгоритмы и их реализация. Часть 1. // Монитор. — 1992. — N 6-7. — c. 14 — 19.
2. Игнатенко Ю.И. Как сделать так, чтобы?..// Мир ПК. — 1994. — N 83. Ковалевский В., Максимов В. Криптографическиеметоды. // КомпьютерПресс. — 1993. — N 5. — c. 31 — 34.
4. Мафтик С. Механизмы защиты в сетяхЭВМ. — М.: Мир, 1993.
5. Спесивцев А.В., Вегнер В.А.,Крутяков А.Ю. и др. Защита информации в персональных ЭВМ. — M.: Радио и связь,1992.
6. Сяо Д., Керр Д., Мэдник С. ЗащитаЭВМ. — М.: Мир, 1982.
7. Шмелева А. Грим — что это? //Hard'н'Soft. — 1994. — N 5.
8. ГОСТ 28147-89. Системы обработкиинформации. Защита криптографическая. Алгоритм криптографическогопреобразования.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Транспортний комплекс України
Реферат Формування естетичних смаків учнів на уроках трудового навчання
Реферат Литература - терапия АГРАНУЛОЦИТОЗ ПАРЦИАЛЬНАЯ АПЛАЗИЯ МИЕЛОМНАЯ БОЛЕЗНЬ
Реферат Технічне обслуговування та ремонт муфти зчеплення
Реферат Динамика социокультурных произведений
Реферат Діловий етикет і діловий протокол
Реферат Понятие и виды рабочего времени, Трудовое право, Контр.
Реферат «Большие города истощают государство. Богатство, которое они создают, иллюзорно. Франция была бы куда могущественней, если бы Париж исчез с лица Земли»
Реферат Судно на подводных крыльях
Реферат Ананина Ольга Ивановна Образовательное учреждение: г. Томск, Томский политехнический техникум Предметная область: биология Название урок
Реферат Административная ответственность за земельные правонарушения
Реферат Ламбер, Жозеф-Франсуа
Реферат Дизайн
Реферат Особенности ведения учета страховых взносов по обязательным видам страхования
Реферат Perfectly Poetic Essay Research Paper Perfectly Poetic