Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Муниципальное общеобразовательное учреждение
средняя общеобразовательная школа № 000
г. Тайга Кемеровской области
Современные средства защиты информации.
Исследовательская работа
по информатике
Выполнил:
обучающийся 11 класса
физико-математического профиля
Руководитель:
учитель информатики
Тайга 2010
Содержание
Введение | 3 |
Обзор алгоритмов шифрования Реализация алгоритмов шифрования | 5 14 |
Практическая часть | 16 |
Как выбрать хороший криптографический алгоритм. | 23 |
Вывод | 24 |
Список использованной литературы Приложения | 26 27 |
Введение
Испокон веков не было ценности большей, чем информация. ХХ век - век информатики и информатизации. Технология дает возможность передавать и хранить все большие объемы информации. Это благо имеет и оборотную сторону: информация становится все более уязвимой по причинам возрастания объемов хранимых и передаваемых данных; расширения круга пользователей, имеющих доступ к ресурсам ЭВМ, программам и данным; усложнения режимов эксплуатации вычислительных систем.
Проблема сокрытия содержания послания при его транспортировке волновала людей с древних пор. Достаточно давно были использованы методы стеганографии, когда на выбритой голове писался текст послания, затем ждали, когда отрастут волосы, и посланец отправлялся в путь. По прибытии голову снова брили, и сообщение читалось. Известно, что еще Цезарь при переписке использовал шифр, получивший его имя. В 1518 году аббат Джоанес Тритемиус написал первую книгу по криптографии, где впервые были описаны многоалфавитные подстановочные шифры. В 19-ом веке голландец Киркхоф сформулировал фундаментальное требование, предъявляемое к криптосистемам и сегодня: секретность шифра должна базироваться не на секретности алгоритма, а на секретном ключе.
Со временем всё большую важность приобретает проблема защиты информации от несанкционированного доступа (НСД) при передаче и хранении. Сущность этой проблемы - постоянная борьба специалистов по защите информации со своими "оппонентами". Защита информации - совокупность мероприятий, методов и средств, обеспечивающих исключение НСД к ресурсам ЭВМ, программам и данным; проверку целостности информации; исключение несанкционированного использования программ, т. е. защиты программ от копирования.
Очевидная тенденция к переходу на цифровые методы передачи и хранения информации позволяет применять унифицированные методы и алгоритмы для защиты дискретной (текст, факс, телекс) и непрерывной (речь) информации. Испытанный метод защиты информации от НСД – шифрование, или криптография. Шифрованием называют процесс преобразования открытых данных в зашифрованные или зашифрованных данных в открытые по определенным правилам с применением ключей.
Объектом моего исследования будут являться классические криптографические алгоритмы шифрования текста.
Цель исследования – изучить принцип программной реализации классических криптографических алгоритмов шифрования текста.
Гипотеза моей исследовательской работы такова: я считаю, что каждый пользователь может сам защитить свою информацию от несанкционированного доступа.
План исследовательской работы:
Изучить теоретический материал. Провести исследование. Проанализировать результаты.Обзор алгоритмов шифрования.
Сейчас в основе всех технологий по защите данных от несанкционированного доступа или электронной коммерции лежит наука криптография, которая является частью науки криптологии. Основы современной криптографии были заложены в работе Клода Шеннона "Теория связи в секретных системах" (1949). В свою очередь, эта наука использует различные методы и алгоритмы, с которыми мы сейчас ознакомимся.
Для того, чтобы ваша информация, пройдя шифрование, превратилась в "информационный мусор", бессмысленный набор символов для постороннего, используются специально разработанные методы - алгоритмы шифрования. Такие алгоритмы разрабатываются учеными математиками или целыми коллективами сотрудников компаний или научных центров. Обычно, новые алгоритмы шифрования публикуются для всеобщего ознакомления и изучаются в специализированных научных центрах. Результаты таких изучений тоже публикуются для всеобщего ознакомления.
Шифрование предполагает преобразование исходного текста Т с использованием ключа К в зашифрованный текст t. Оно базируются на использовании ключей. Математически это можно выразить следующим образом:
EK(M) = C; DK(С) = M;
Где K — ключ, M — исходный текст; C — зашифрованный текст.
Ключ шифрования - уникальное состояние некоторого параметра системы, которое позволяет из множества возможных отображений выбрать нужное. Простыми словами, ключ - это случайная, или специальным образом созданная по паролю последовательность бит, являющаяся переменным параметром алгоритма шифрования. Ключ шифрования бывает разной длины, которая, как правило, измеряется в битах. С увеличением длины ключа повышается теоретическая стойкость шифра. На практике это не всегда верно.
Шифр - математическая функция, которая преобразовывает открытый блок данных на основе секретного параметра (ключа), т. е. шифр – это алгоритм, с помощью которого выполняется и шифрование и расшифрование данных. Как шифрование, так и дешифрование может реализоваться программно или аппаратно. При этом должны выполняться определенные требования:
- Знание использованного алгоритма не должно снижать надежность шифрования. Длина зашифрованного текста должна быть равна длине исходного открытого текста. Зашифрованный текст не может быть прочтен без знания ключа. Каждый ключ из многообразия ключей должен обеспечивать достаточную надежность. Изменение длины ключа не должно приводить к изменению алгоритма шифрования. Если известен зашифрованный и открытый текст сообщения, то число операций, необходимых для определения ключа, не должно быть меньше полного числа возможных ключей. Дешифрование путем перебора всех возможных ключей должно выходить далеко за пределы возможностей современных ЭВМ. Если при шифровании в текст вводятся дополнительные биты, то алгоритм их внесения должен быть надежно скрыт. Не должно быть легко устанавливаемой зависимости между последовательно используемыми ключами. Алгоритм может быть реализован аппаратно.
Алгоритмы шифрования делятся на два больших класса: симметричные (ГОСТ, DES) и асимметричные (RSA, El-Gamal), которые далее делятся на другие подгруппы.
Полная классификация алгоритмов шифрования:
1. Симметричные (с секретным, единым ключом, одноключевые, single-key).
1.1. Потоковые (шифрование потока данных):
• с одноразовым или бесконечным ключом (infinite-key cipher);
• с конечным ключом (система Вернама - Vernam);
• на основе генератора псевдослучайных чисел (ПСЧ).
1.2. Блочные (шифрование данных поблочно):
1.2.1. Шифры перестановки (permutation, P-блоки);
1.2.2. Шифры замены (подстановки, substitution, S-блоки):
• моноалфавитные (код Цезаря);
• полиалфавитные (шифр Виженера, Enigma);
1.2.3. составные:
• Lucipher (фирма IBM, США);
• DES (Data Encryption Standard, США);
• B-Crypt (фирма British Telecom, Великобритания);
• ГОСТ 28147-89 (СССР).
2. Асимметричные (с открытым ключом, public-key):
• Диффи-Хеллман DH (Diffie, Hellman);
• Райвест-Шамир-Адлeман RSA (Rivest, Shamir, Adleman);
• Эль-Гамаль ElGamal.
Кроме того, есть разделение алгоритмов шифрования на собственно шифры (ciphers) и коды (codes). Шифры работают с отдельными битами, буквами, символами. Коды оперируют лингвистическими элементами (слоги, слова, фразы).
Симметричные алгоритмы шифрования (или криптография с секретными ключами) основаны на том, что отправитель и получатель информации используют один и тот же ключ. Этот ключ должен храниться в тайне и передаваться способом, исключающим его перехват.
В потоковых шифрах, т. е. при шифровании потока данных, каждый бит исходной информации шифруется независимо от других с помощью гаммирования. Гаммирование - наложение на открытые данные гаммы шифра (случайной или псевдослучайной последовательности единиц и нулей) по определенному правилу. Обычно используется "исключающее ИЛИ", называемое также сложением по модулю 2 и реализуемое в ассемблерных программах командой XOR. Для расшифровывания та же гамма накладывается на зашифрованные данные.
При блочном шифровании информация разбивается на блоки фиксированной длины и шифруется поблочно. Блочные шифры бывают двух основных видов:
•шшифры перестановки (транспозиции, P-блоки);
• шифры замены (подстановки, S-блоки).
Шифры перестановок переставляют элементы открытых данных (биты, буквы, символы) в некотором новом порядке. Различают шифры горизонтальной, вертикальной, двойной перестановки, решетки, лабиринты, лозунговые и др. Шифры замены заменяют элементы открытых данных на другие элементы по определенному правилу. Paзличают шифры простой, сложной, парной замены, буквенно-слоговое шифрование и шифры колонной замены. Шифры замены делятся на две группы:
•_моноалфавитные (шифр Цезаря);
• полиалфавитные (шифр Виженера, Enigma).
В моноалфавитных шифрах замены буква исходного текста заменяется на другую, заранее определенную букву. В полиалфавитных подстановках для замены некоторого символа исходного сообщения в каждом случае его появления последовательно используются различные символы из некоторого набора. Понятно, что этот набор не бесконечен, через какое-то количество символов его нужно использовать снова. В этом слабость чисто полиалфавитных шифров. 1111111111111111111111111111111111111111
В современных криптографических системах, как правило, используют оба способа шифрования (замены и перестановки). Такой шифратор называют составным. Он более стойкий, чем шифратор, использующий только замены или перестановки.
Симметричные алгоритмы шифрования используют один и тот же ключ для зашифровывания информации и для ее расшифровывания, а асимметричные алгоритмы используют два ключа - один для зашифровывания, другой для расшифровывания. Если зашифрованную информацию необходимо передавать в другое место, то в этом надо передавать и ключ для расшифрования. Слабое место здесь - это канал передачи данных - если он не защищенный или его прослушивают, то ключ для расшифрования может попасть к злоумышленнику. Системы на ассиметричных алгоритмах лишены этого недостатка. Поскольку каждый участник такой системы обладает парой ключей: открытым и секретным ключом. В асимметричных системах необходимо применять длинные ключи (512 бит и больше). Длинный ключ резко увеличивает время шифрования. Кроме того, генерация ключей весьма длительна. В симметричных алгоритмах используют более короткие ключи, т. е. шифрование происходит быстрее. 1111111111111111111111111111
Поэтому при проектировании защищенной системы часто применяют и симметричные, и асимметричные алгоритмы. Надо заметить, что в правительственных и военных системах связи используют лишь симметричные алгоритмы, так как нет строго математического обоснования стойкости систем с открытыми ключами, как, впрочем, не доказано и обратное.
Теоретически рассмотрим реализацию алгоритмов наиболее известных алгоритмов.
Рассмотрим блочные шифры.
Шифр Цезаря — один из древнейших шифров. При шифровании каждый символ заменяется другим, отстоящим от него в алфавите на фиксированное число позиций. Шифр Цезаря можно классифицировать как шифр подстановки, при более узкой классификации — шифр простой замены.
Шифрование с использованием ключа k = 3. Буква «А» «сдвигается» на три буквы вперед и становится буквой «Г», буква «Д» - буквой «Ж», и так далее. Шифрованный текст получается путём замены каждой буквы оригинального текста соответствующей буквой шифрованного алфавита:
Исходный алфавит: АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
Шифрованный: ГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВ
Оригинальный текст:
Съешь же ещё этих мягких французских булок, да выпей чаю.
Шифрованный текст:
Фэзыя йз зьи ахлш пвёнлш чугрщцкфнлш дцосн, жг еютзм ъгб.
Очевидно, что такой шифр взламывается совсем просто. Нужно подсчитать, как часто встречаются буквы в зашифрованном тексте, и сопоставить результат с известной для каждого языка частотой встречаемости букв. Если, известно, что определенный текст был шифрован с помощью шифра Цезаря, то с помощью простого перебора всех вариантов раскрыть шифр очень просто – для этого достаточно проверить m возможных вариантов ключей.
Стоит отметить ещё 1 алгоритм блочного шифрования подстановки – это полиалфавитный шифр Виженера.
Шифр Виженера представляет собой усовершенствованную многоалфавитную систему шифрования. Идея шифра состоит в использовании в качестве ключа текста самого сообщения или же шифрованного текста. Кроме того, для усиления стойкости шифра, в качестве первого символа ключа берется случайным образом буква из алфавита. Авторами этой идеи являются Джероламо Кардано и собственно сам Блез де Виженер. Шифр имеет другое название - «шифр самоключ».
Замечу, в общем случае таблица Виженера состоит из алфавита, циклически сдвинутого на один символ влево, однако, возможны и другие перестановки – это на Ваше усмотрение. Кроме того, первая строка может представлять собой алфавит, случайным образом перемешанный. Процесс шифрования выглядит следующим образом: открытый текст записывается в строчку без пробелов. Далее необходимо определить ключ. Виженер предлагал в качестве ключа использовать сам открытый текст, с добавлением к началу ключа символ, выбранный случайным образом. Но замечу, что не обязательно следовать установленному правилу создателя шифра. В качестве ключа вполне возможно использовать и любую другую последовательность символов длиною равной длине открытого текста.
После всего проделанного, для получения шифротекста берем первый символ открытого текста в качестве указателя строки в Таблице Виженера, а стоящую под ним букву – в качестве столбца. На пересечении этой пары из таблицы выписываем символ шифротекста. Далее повторяем эти действия для всех оставшихся символов. Для примера рассмотрим шифрование открытого текста – «яблочный джем». В качестве ключа будем использовать сам открытый текст с добавлением в начала случайного символа – допустим «щ». Так, теперь записываем открытый текст в строку без пробелов, а под ней также записываем ключ.
Получаем:
открытый текст: я б л о ч н ы й д ж е м
ключ: щ я б л о ч н ы й д ж е
шифротекст: ш а м щ е д й д н к л с
Шифр Виженера был незаслуженно забыт на долгое время. И многие по сей день под этим шифром понимают самый простой вариант с коротким ключевым словом и с таблицей, состоящей из обычных алфавитов. Следует признать, что и многоалфавитные подстановки в принципе доступны криптоаналитическому исследованию. Криптостойкость многоалфавитных систем резко убывает с уменьшением длины ключа. Тем не менее, такая система как шифр Виженера допускает несложную аппаратную или программную реализацию и при достаточно большой длине ключа может быть использован в современных ИС. И хотя шифр Виженера «размывает» характеристики частот появления символов в тексте, что препятствует взлому шифра, но некоторые особенности появления символов в тексте остаются. Главный недостаток шифра Виженера состоит в том, что его ключ повторяется, что не делает шифр Виженера универсальным.
Примером потокового алгоритма шифрования является XOR-шифрование.
Как ни странно, но самым простым и одним из самых эффективных алгоритмов шифрования является так называемое XOR-шифрование. Попробуем рассмотреть идею этого наипростейшего метода.
X | Y | X ∧ Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Как известно из булевой алгебры, операция логического сложения по модулю 2 (логического исключающего ИЛИ — XOR, eXclusive OR) имеет следующую семантику:
X = 10011101
Y = 01001100
______________
Z = 11010001
То есть, операция Z = X ^ Y по сути поразрядная (побитовая — результат не зависит от соседних битов). Если только один из соответствующих битов равен 1, то результат 1. А если оба 0 или оба 1, то результат 0. Если внимательно посмотреть на результат применения XOR к двум двоичным числам, то можно заметить, что мы можем восстановить одно из слагаемых при помощи второго: X = Z ^ Y или Y = Z ^ X.
Отсюда можно сделать следующие выводы: зная число Y и применяя XOR к X, мы получим Z. Затем, мы, опять же используя Y, получим из Z обратно число X. Таким образом, мы можем преобразовать последовательность чисел (X)i в последовательность (Z)i. Теперь мы можем назвать число Y кодирующим (или шифрующим) ключом. Если человек не знает ключа, то он не сможет восстановить исходную последовательность чисел (X)i. Но если (X)i являются байтовым представлением букв текста, то опытный пользователь сможет вскрыть зашифрованный текст. Поскольку каждая буква будет представлена в шифротексте одним и тем же кодом Z, то воспользуясь частотным словарем, взломщик сможет вычислить шифрующий ключ Y, если у него будет в распоряжении достаточно длинный шифротекст.
В свете последних рассуждений приходим к мысли, что напрямую кодировать простой текст нельзя. Во-первых, число, представляющее пробел, будет по-прежнему разделять слова и в шифротексте. Выделив это часто встречающееся одно и то же число, пользователь догадается, что это закодированный пробел. Во-вторых, короткие часто встречающиеся предлоги и союзы также помогут взломщику в определении ключа. Поэтому самым эффективным способом является использование длинного ключа, покрывающего несколько букв, а лучше равного по длине самому сообщению. Так, если мы кодируем достаточно длинное сообщение (не менее 5-10 предложений) с помощью случайного ключа такой же длины, то такое сообщение очень сложно расшифровать. Еще более высоких результатов по надежности можно достичь, если перед шифрованием произвести, например, сжатие текста каким-либо архиватором. Плюс к тому же, если сообщение имеет малую длину, можно добавить в начало и конец сообщения случайные последовательности символов.
Реализация алгоритмов шифрования
Алгоритмы шифрования реализуются программными или аппаратными средствами. Есть великое множество чисто программных реализаций различных алгоритмов. Из-за своей дешевизны (некоторые и вовсе бесплатны), а также все большего быстродействия процессоров ПЭВМ, простоты работы и безотказности они весьма конкурентоспособны. Широко известна программа Diskreet из пакета Norton Utilities, реализующая DES.
Нельзя не упомянуть пакет PGP (Pretty Good Privacy, автор Philip Zimmermann), в котором комплексно решены практически все проблемы защиты передаваемой информации. Применены сжатие данных перед шифрованием, мощное управление ключами, симметричный (IDEA) и асимметричный (RSA) алгоритмы шифрования, вычисление контрольной функции для цифровой подписи, надежная генерация ключей. Также во многих журналах, посвященных компьютерной тематике, публикуют статьи с подробным описанием различных алгоритмов и соответствующим листингом, давая возможность каждому желающему написать свою программу, или воспользоваться готовым кодом.
Аппаратная реализация алгоритмов возможна с помощью специализированных микросхем (производятся кристаллы для алгоритмов DH, RSA, DES, Skipjack, ГОСТ 28147-89) или с использованием компонентов широкого назначения (ввиду дешевизны и высокого быстродействия перспективны цифровые сигнальные процессоры - ЦСП, Digital Signal Processor - DSP). Среди российских разработок следует отметить платы "Криптон" и "Грим".
"Криптон" - одноплатные устройства, использующие криптопро-цессоры (специализированные 32-разрядные микроЭВМ, которые также называются "блюминг"). Блюминги аппаратно реализуют алгоритмы ГОСТ 28147-89, они состоят из вычислителя и ОЗУ для хранения ключей. Причем в криптопроцессоре есть три области для хранения ключей, что позволяет строить многоуровневые ключевые системы. Для большей надежности шифрования одновременно работают два криптопроцессора, и блок данных в 64 битов считается правильно зашифрованным, только если совпадает информация на выходе обоих блюмингов. Скорость шифрования - 250 КБ/c.
Практическая часть.
Конечно, существует множество способов реализации программы для шифрования данных. Можно создать приложение, которое будет, не открывая файл, напрямую шифровать его. Можно реализовать шифратор введённого текста, результат чего будет выводиться на экран с дальнейшей возможностью копирования. Я же хочу создать приложение, которое будет удобно и практично в использовании.
Для реализации проекта я выбрал объектно-ориентированный язык программирования высокого уровня С++. Мой выбор пал на компилятор С++ Builder версии 6.0 производства компании Borland. Передо мной была чётко поставлена задача: написать работоспособный текстовый редактор, наподобие Блокнота, с функцией шифрования/дешифрования текста.
Ниже предоставлен листинг программы:
//---------------------------------------------------------------------------
#include <vcl. h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include <Clipbrd. hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
AnsiString MyFName="";
AnsiString editor="CryptEditor 0.9";
bool ext=false;
AnsiString inp;
AnsiString pass;
AnsiString out;
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenExecute(TObject *Sender)
{
if ((Memo1->Modified)&(Memo1->Visible))
{
if (Application->MessageBox(
"Хотите сохранить изменения?",
"Подтвердите запрос сохранения",
MB_YESNOCANCEL + MB_ICONQUESTION)== IDYES)
{
SaveDialog1->Execute();
}
}
if (OpenDialog1->Execute())
{
Clos->Enabled=true;
MyFName=OpenDialog1->FileName;
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
Memo1->Visible=true;
}
Clos->Enabled=true;
Memo1->Modified=true;
Form1->Caption = MyFName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnexitClick(TObject *Sender)
{
if (Memo1->Visible==true)
{
AnsiString s="Хотите сохранить изменения в файле " + MyFName + " ?";
char* s2 = new char [s. Length() + 1];
strcpy (s2,s. c_str() );
if ((Memo1->Modified) & (!ext))
{
if (MyFName=="")
{
switch(Application->MessageBox(
"Хотите сохранить изменения?",
"Подтвердите запрос сохранения",
MB_YESNOCANCEL + MB_ICONQUESTION) )
{
case IDYES:
{
btnsave->Click();
Close();
}
case IDNO: Close();
}
}
else
{
switch(Application->MessageBox(
s2,
"Подтвердите запрос сохранения",
MB_YESNOCANCEL + MB_ICONQUESTION) )
{
case IDYES: {
btnsaveas->Click();
Close();
}
case IDNO: Close();
}
}
}
else
{
Close();
}
}
else
{Close();}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Save_asExecute(TObject *Sender)
{
SaveDialog1->FileName = MyFName;
if (SaveDialog1->Execute())
{
MyFName = SaveDialog1->FileName;
Memo1->Lines->SaveToFile(SaveDialog1->FileName);
}
ext=true;
Clos->Enabled=true;
Save->Enabled = false;
Save_as->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveExecute(TObject *Sender)
{
if(MyFName!= "")
{
Memo1->Lines->SaveToFile(MyFName) ;
}
else
{
if (SaveDialog1->Execute())
{
MyFName = SaveDialog1->FileName;
Memo1->Lines->SaveToFile(SaveDialog1->FileName) ;
}
}
Save->Enabled = false;
Save_as->Enabled = false;
ext=true;
Clos->Enabled=true;
}
//--------------------------------------------------------------------------
void __fastcall TForm1::SelectFontExecute(TObject *Sender)
{
if (FontDialog1->Execute())
{
Memo1->Font->Assign(FontDialog1->Font);
Memo1->SetFocus();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1Change(TObject *Sender)
{
Save->Enabled = true;
Save_as->Enabled = true;
ext = false;
shi1->Enabled = true;
N2->Enabled = true;
Clos->Enabled=true;
if (Memo1->Text=="" )
{
shi1->Enabled=false;
N2->Enabled=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ToolButton1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
{
MyFName=OpenDialog1->FileName;
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClosExecute(TObject *Sender)
{
if ((Memo1->Modified))
{
int rt = Application->MessageBox(
"Хотите сохранить изменения?",
"Подтвердите запрос сохранения",
MB_YESNOCANCEL + MB_ICONQUESTION);
switch (rt)
{
case IDYES:
btnsave->Click();
Memo1->Visible=false;
Clos->Enabled=false;
ext=true;
Save->Enabled=false;
Save_as->Enabled=false;
shi1->Enabled=false;
N2->Enabled=false;
Form1->Caption=editor;
ToolButton11->Enabled=true;
N3->Enabled=true;
case IDNO:
Memo1->Visible=false;
Clos->Enabled=false;
ext=true;
Save->Enabled=false;
Save_as->Enabled=false;
shi1->Enabled=false;
N2->Enabled=false;
Form1->Caption =editor;
ToolButton11->Enabled=true;
N3->Enabled=true;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnaboutClick(TObject *Sender)
{
Form3->ShowModal();
}
//--------------------------------------------------------------------------
void __fastcall TForm1::shi1Click(TObject *Sender)
{
inp = AnsiString(Memo1->Text);
EmptyClipboard();
Form2->ShowModal();
pass = Clipboard()->AsText;
EmptyClipboard();
out="";
int sinp = inp. Length();
int spass = pass. Length();
int u;
int q;
for(u=1,q=1; u <sinp+1; u++, q++)
{
inp[u] = inp[u] ^ pass[q];
if (q==spass)
{
q=1;
}
}
Memo1->Lines->Clear();
Memo1->Lines->Append(inp);
SendMessage(Memo1->Handle, WM_CHAR, VK_BACK,0);
Clipboard()->Clear();
ext=false;
Memo1->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ToolButton11Click(TObject *Sender)
{
ToolButton11->Enabled=false;
N3->Enabled=false;
Memo1->Clear();
Memo1->Visible=true;
Memo1->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
N3->Enabled=false;
ToolButton11->Enabled=false;
Memo1->Clear();
Memo1->Visible=true;
Memo1->SetFocus();
}
//---------------------------------------------------------------------------
#include <vcl. h>
#pragma hdrstop
#include "Unit2.h"
#include <Clipbrd. hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
EmptyClipboard();
Clipboard()->AsText = password->Text;
password->Text = "";
password->SetFocus();
Button1->Enabled=false;
Form2->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::passwordChange(TObject *Sender)
{
Button1->Enabled= true;
}
//---------------------------------------------------------------------------
#include <vcl. h>
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{ }
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
Как мы видим, приложение отлаженное, без ошибок и багов, полностью работоспособное. В нём присутствуют все функции текстового редактора: открытие. txt файлов или создание нового файла, редактирование текста, включая его шифрование, дальнейшее сохранение в данный файл, или создание нового файла, куда будут сохранены все изменения. Присутствует функция изменения шрифта, размера и курсива текста.
Скриншоты программы можно посмотреть в разделе Приложения.
Как выбрать хороший криптографический алгоритм.
Когда заходит речь о выборе хорошего криптографического алгоритма, у выбирающего, как правило, имеется несколько возможностей:
- Можно воспользоваться известным алгоритмом, сравнительно давно опубликованным в специальном издании по проблемам криптографии. Если никто пока не сообщил о том, что сумел вскрыть этот алгоритм, значит, он стоит того, чтобы обратить на него внимание.
- Можно довериться известной фирме, специализирующейся на продаже средств шифрования. Вряд ли эта фирма будет рисковать своим добрым именем, торгуя нестойкими криптографическими алгоритмами.
- Можно обратится к независимому эксперту. Скорее всего, он сможет объективно оценить достоинства и недостатки различных криптографических алгоритмов.
- Можно обратится за поддержкой в соответствующее правительственное ведомство. Не думаю, что правительство будет вводить своих граждан в заблуждение, давая им ложные советы относительно стойкости того или иного криптографического алгоритма.
- Можно попытаться создать собственный криптографический алгоритм. Мало кто заинтересован сам себя обманывать. Чем чёрт не шутит: а вдруг вы обладаете выдающимися способностями в области криптографии?
В любом случае гораздо надёжнее пользоваться известным криптографическим алгоритмом, который придуман уже довольно давно и который сумел выстоять против многочисленных попыток вскрыть его, предпринятых авторитетными криптологами.
В заключение стоит заметить, что шифрование информации не является панацеей. Его следует рассматривать только как один из методов защиты информации и применять обязательно в сочетании с законодательными, организационными и другими мерами.
Вывод.
Каждый из нас в той или иной степени имеет дело с шифрованием данных, об этом и не подозревая. В настоящее время у пользователей персональных компьютеров имеется возможность применять шифровальные алгоритмы, встроенные в различные программные продукты. Достаточно приобрести, например, текстовый редактор Word, или операционные системы Windows NT, или редактор электронных таблиц Excel. У всех этих программных продуктов есть ещё одно общее свойство - наличие в них встроенных алгоритмов шифрования, помимо того, что всё это продукты компании Microsoft.
Алгоритмы шифрования, которые используются в правительственных и в военных учреждениях очень сложны по своей структуре, и неуязвимы к атакам. Так, алгоритм AES, который является федеральным стандартом шифрования США с 2001 года, до сих пор никто не смог взломать. У нас же, в России, государственным стандартом шифрования является ГОСТ 28147-8, который с 1990 года является официальным стандартом Российской Федерации.
В ходе исследовательской работы я изучил большое количество криптографических алгоритмов и их программную реализацию. Созданное мной приложение отвечает многим криптографическим стандартам, среди них стоит отметить очищение системной памяти после работы, что очень немаловажно. Рядовой пользователь ПК не сможет взломать шифр, созданный данным приложением. Тем самым, можно смело заявить: каждый пользователь может сам защитить свою информацию от несанкционированного доступа. Гипотеза доказана.
Напоследок мне хочется отдать дань уважения современным авторам книг компьютерной тематики. Большинство хороших, с моей точки зрения, экземпляров литературы такого рода, прочитанных мною за последние несколько лет, в обязательном порядке содержали посвящение кому-либо или чему-либо. Традиция что ли теперь такая, не знаю, но ради следования веяниям моды, и поскольку это моя последняя исследовательская работа, хочется закончить своего рода посвящением:
Всем любящим Beatles, Бродского, Лори и независимость посвящается.
Список использованной литературы.
1. Библиотека справочных материалов Wikipedia [Электронный ресурс]/Центр информационных технологий Wikipedia; ред. Ф. Коэн; Web-мастер Л. Альдерман - Электронные данные-М.: Библиотека справочных материалов Wikipedia 2005г.-Режим доступа: http://ru. wikipedia. org, свободный. - Яз. рус.
2. Интернет-Университет Информационных Технологий - дистанционное образование [Электронный ресурс]/ Лекиции на тему «Язык программирования Turbo Pascal»; ред. ;Web-мастер -Электронные данные-М.: Интернет-Университет Информационных Технологий - дистанционное образование, 2003г. – Режим доступа: http://www. intuit. ru/, свободный. – Яз. Рус.
3. Шнайдер, Брюс. Прикладная криптография. Протоколы, алгоритмы и исходные тексты на языке С++. [Текст]/ М.: Перро, 2005., 298 с.
4. Криптографический портал [Электронный ресурс]/ Статьи по криптографии; ред. ; Web-мастер -Электронные данные-М.: Криптографический портал, 2008г. – Режим доступа: http://www. /, свободный. – Яз. Рус.
5. Programming & Web Development Community [Электронный ресурс]/ The item: Recursive XOR Encryption for C++; Web-разработчик MediaGroup1 LLC - Электронные данные-М.: Programming & Web Development Community, 2010г.-Режим доступа: http://www. /, свободный. – Англ. Яз.
Приложения.
Рис.1. Главное окно программы с диалоговым окном шифрования.

Рис. 2. Результат работы программы.

Рис. 3. Диалоговое окно выбора шрифта текста.


