Реферат: Хеш-функции в криптосистемах

3. Методы расшифровки

Этот метод связан с использованием большинством пользователей слишком простых паролей (длиной менее 8 символов, или, пароль, несущий на сбе какую-то смысловую нагрузку (отчество прабабушки по маминой линии)). В этом случае атаки сводятся к перебору возможных паролей, а защита - к их усложнению.

Для расшифровки пароля вторым методом, требуется знать его длину и алгоритм шифования. В случае, когда длина пароля составит менее восьми символов, можно воспользоваться следующим алгоритмом:

1. Перевернуть зашифрованный пароль.

2. Так как размер блока не может быть более 5 байт и менее 1 байта, то разобьём его на 8 блоков и запишем в список (список первых блоков, список вторых, и т. д.). Получим восьмиподсписковый список списков, каждый подсписок которого представляет собой все возможные блоки шифрованных символов.

3. Пробегаем в цикле по подсписку, сверяя каждый элемент со всеми символами из ASCII следующим образом:

If j*generate(x,n,j) = <элемент подсписка> then write(ord(j)), где j десятичный код символа, x - ключ, n - последовательный номер символа в пароле (в диапазоне [1, 8]). Если выполнилось это условие, то выведем на экран найденный символ.

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

Описание

В основе алгортма лежит функция от трёх аргументов generate=trunc(k*(abs(sin(ln(a)*x)+ sin(cos(b)*x)))) :

1. ключа (x );

2. десятичного код символа (a );

3. номера символа во введённой строке (b ).

Она используется для преобразования десятичного кода символа в число, лежащее в интервале от 0 до 2*k , где k - любое число целого типа.Чем больше число k - тем меньше вероятность коллизий в дальнейшем.

После обработки символа он добавляется в список списков процедурой add_in_list(x: integer; s: string; var gr: llist) следующим образом - l^.inf:=ord(s[k])*generate(x,ord(s[k]),k) , где l^.inf -элемент списка списков, x - ключ (для функции generate ), s - строка, разбиваемая на блоки по 8 символов. Каждый подсписок имеет длину не более 8 элементов размером до 5 байт.

Третим шагом является сложение соответствующих элементовпроцедурой summ_all(gr: llist; var a:array_type) из каждого подсписка l в 8 элментный массивa , т.е. первый элемент из первого элемента складывается с первым элементом второго, третьего и т.д. подсписка и записываетсявa[1] .

Так - же поступаем и с другими элементами подсписков.

Следующим щагом записываем в файл ключ и по очереди все элементы массива a , обработанные функцией FromIntToString(), которая переводит численный тип в символьный и переворачивает.

Для сверки пароля его требуется зашифровать заново по известному ключу и сверить с зашифрованным экземпляром.

Вот исходный текст программы:

kriptmod.pas

unit kriptmod;

interface

type Plist=^list;

list=record

inf: word;

num: 1..8;

next: Plist;

end;

К-во Просмотров: 757
Бесплатно скачать Реферат: Хеш-функции в криптосистемах