Что такое "Шифр Виженера"?
Шифр Виженера – метод полиалфавитного шифрования буквенного текста с использованием кодового слова. Этот шифр прост для понимания и реализации, но на протяжении трех столетий он не поддавался взлому. По этой причине он получил название «неразгаданный шифр». Этот метод является простой формой многоалфавитной замены.
Впервые Шифр Виженера описал Джовани Баттиста Белласо, однако по ошибке был приписан другому имени, Блезу Виженеру, французскому дипломату. В 1518 году в развитии криптографии был сделан новый шаг. Аббат Иоганнес Тритемий, настоятель монастыря в Вюрцбурге, написал книгу «Полиграфия», в которой описывается ряд шифров.
Один из них использует «таблицу Тритемия» (более известна как «таблица Виженера») и развивает идею многоалфавитной замены. Система шифрования следующая: первая буква исходного текста шифруется по первой строке, вторая по второй и т.д. После использования последней строки следующая буква снова шифруется по первой строке. В шифре Тритемия отсутствует ключ, секретом является сам способ шифрования.
Далее за развитие криптографии принялся итальянец Джованни Белазо. В 1553 году он выпустил брошюру «Шифр синьора Белазо». В этом шифре ключом является фраза или слово. Пароль записывался периодически над буквами открытого текста. Буква пароля, стоящая над соответствующей буквой открытого текста, указывала номер строки в таблице Тритемия, по которой следует проводить замену (шифрование) это буквы.
Следующим составляющим звеном в нынешнем шифре Виженера стал соотечественник Белазо Джованни Батиста Порта. Он предложил отказаться от алфавитного порядка следования букв в первой строке таблицы Тритемия и заменить этот порядок на некоторый произвольный, являющийся ключом шифра. Строки таблицы по-прежнему циклически сдвигались. В своей книге «О тайной переписке», (вышедшей в 1563 году) Порта предложил биграммный шифр, а также привел описание механического дискового устройства, реализующего биграммную замену.
Далее в середине XVI века в Италии появляется книга Дж. Кардано «О тонкостях» с дополнением «О разных вещах». Там нашли отражение новые идеи криптографии: использование части самого передаваемого открытого текста в качестве ключа шифра (идея «самоключа») и новый способ шифрования, который вошел в историю как «решетка Кардано».
На рисунке №3 представлен сам шифр Кардано. Записка гласит: «Сэр Джон высоко ценит Вас и снова повторяет, что все, что доступно ему, теперь ваше, навсегда. Может ли он заслужить прощение за свои прежние промедления посредством своего обаяния», шифрованное послание: «В мае Испания направит свои корабли на войну».
Посол Франции в Риме Блез де Виженер, познакомившись с трудами Тритемия, Белазо, Кардано, Порта, Альберти, также увлекся криптографией. В 1585 году он написал «Трактат о шифрах», в котором излагаются основы криптографии.
По смыслу, Шифр Виженера состоит из нескольких шифров Цезаря (в данном шифре каждая буква сдвигается на несколько позиций).
Например:
- Исходный текст: «В кабинете информатики много компьютеров»
- Ключ: «Лимон»
- Полученный шифр: «н умпцщняу цщэыяълыхщц шцысь цчщюййысяьн»
То есть, шифрование происходит по формуле cj =(mj+kj)*mod n
Расшифровка происходит при помощи той же таблицы Виженера и формул. cj =(mj+n-kj)*mod n
В данных формулах n – количество букв в алфавите, mj - буквы открытого текста, kj – буквы ключа.
Cоздание программы для хранения пароля
В работе использовалась бесплатная программа-среда разработки ПО Lazarus. Ver. 2.0.2
Используемые ресурсы:
- Компьютер на базе Intel Pentium
- Оболочка для написания программных обеспечений Lazarus
- Обучающая литература и пособия по программированию на языке Pascal
Подготовительный этап
В начале работы над практической частью мы определили, какие команды нужно «исполнять» программе, и составили блок-схему (приложение 1), которая исполнила роль плана написания программы.
Описание продукта.
function Tfr.deshifr(s: string): string; //функция дешифрования
var
i: integer;
st: string;
begin
for i:=1 to Length(s) do
if (s[i]<> '') and (s[i]<> '.') and (s[i]<> ';') and (s[i]<> ',') then
s[i]:= Char((Ord(s[i]) - Ord(k[(i mod Length(k)) + 1])) mod 256);
st := Copy(s, 1, Length(s) - l);
Result:= st;
end;
На рисунке 4 представлена часть кода программы, функция дешифрования. Полностью код нигде нельзя увидеть, так как это личная разработка.
Продукт проекта – это программа, запоминающая пароли, написанная в среде разработки ПО Lazarus на языке Pascal. Простая в плане интерфейса и понимания содержимого, но сложная в плане защиты данных. Все наименования надежно защищены, так как алгоритм шифрования вычислить невозможно.
Такая программа актуальна в наши дни, так как многие пользуются ресурсами, требующими авторизации (это не только электронная почта, социальные сети и различные игровые ресурсы, но и такие «рабочие» ресурсы, как Ариадна, SAP, Directum (система электронного документооборота).
По правилам техники безопасности, пароли не должны повторяться, содержать латинские буквы, цифры и специальные символы, также раз в определенный срок их нужно менять. Из-за огромного потока информации пользователю довольно сложно запомнить все данные для авторизации.
Данная программа может решить проблему с путаницей паролей. Нужно лишь нажать на нужный ресурс, вернуться к окну авторизации и одновременно нажать клавиши «ctrl» и «C». Подобный продукт создать вовсе не тяжело, но трудоемко. Мне понадобилось время, чтобы изучить теоретический материал, помогающий изучить язык программирования, саму среду разработки ПО.
Заключение
В результате проделанной работы:
- Был подобран литературный материал для реферативной части
- Был освоен язык Pascal и навыки программирования на нет, а также был освоен шифр Виженера.
При помощи IDE Lazarus можно создать безопасную программу, хранящую пароли от разных ресурсов, требующих авторизации.
- «Самоучитель по программированию на Free Pascal и Lazarus» Издательство УНИТЕХ, 2009, г. Донецк, Алексеев Е.Р., Чеснокова О.В., Кучер Т.В.
- Наглядная инструкция шифрования с помощью шифра Виженера.
- Основные сведения о шифре Виженера.
- Цикл лекций Ачкасова Вячеслава Юрьевича по программированию в Lazarus.
- Электронная книга Мансурова К. Т. Основы программирования в среде Lazarus 2010.