close

Вход

Забыли?

вход по аккаунту

?

лабы

код для вставкиСкачать
ЛАБА 1
1.Написать программу в которой будет реализован шифр Цезаря(с ключем =3) и Виженера
2.Экранная форма должна иметь вид:
-изначально выбор шифра,перерход по кнопке на один из них
-и для каждого окно с полями :ввод текста,загрузка текста из файла,вывод зашифрованного текста(и сохранение его в файл) и вывод расшифрованного текста(и сохранение его в файл)
3. Шифр Цезаря, также известный, как шифр сдвига, код Цезаря или сдвиг Цезаря - один из самых простых и наиболее широко известных методов шифрования.
Шифр Цезаря - это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом 3 А была бы заменена на Г, Б станет Д, и так далее.
Шифрованиеможно выразить общей формулой :
, де С - шифрованый символ, О - открытый текст,
key - ключ сдвига.Расшифрование:
, де С - шифрований символ, О - открытый текст,
key - ключ сдвига.
Или:
Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то шифрование и дешифрование можно выразить формулами модульной арифметики:
Y=(x+k)*mod n
X=(y-k+n)*mod n
где x - символ открытого текста, y- символ шифрованного текста, n- мощность алфавита, а k - ключ.
4. Шифр Виженера (фр. Chiffre de Vigenère) - метод полиалфавитного шифрования буквенного текста с использованием ключевого слова.
Этот метод является простой формой многоалфавитной замены.
В шифре Цезаря каждая буква алфавита сдвигается на несколько строк; например в шифре Цезаря при сдвиге +3, A стало бы D, B стало бы E и так далее. Шифр Виженера состоит из последовательности нескольких шифров Цезаря с различными значениями сдвига. Для зашифровывания может использоваться таблица алфавитов, называемая tabula recta или квадрат (таблица) Виженера. Применительно к латинскому алфавиту таблица Виженера составляется из строк по 26 символов, причём каждая следующая строка сдвигается на несколько позиций. Таким образом, в таблице получается 26 различных шифров Цезаря. На каждом этапе шифрования используются различные алфавиты, выбираемые в зависимости от символа ключевого слова. Например, предположим, что исходный текст имеет вид:
ATTACKATDAWN
Человек, посылающий сообщение, записывает ключевое слово ("LEMON") циклически до тех пор, пока его длина не будет соответствовать длине исходного текста:
LEMONLEMONLE
Первый символ исходного текста A зашифрован последовательностью L, которая является первым символом ключа. Первый символ L шифрованного текста находится на пересечении строки L и столбца A в таблице Виженера. Точно так же для второго символа исходного текста используется второй символ ключа; то есть второй символ шифрованного текста X получается на пересечении строки E и столбца T. Остальная часть исходного текста шифруется подобным способом.
Исходный текст: ATTACKATDAWN
Ключ: LEMONLEMONLE
Зашифрованный текст: LXFOPVEFRNHR
Расшифровывание производится следующим образом: находим в таблице Виженера строку, соответствующую первому символу ключевого слова; в данной строке находим первый символ зашифрованного текста. Столбец, в котором находится данный символ, соответствует первому символу исходного текста. Следующие символы зашифрованного текста расшифровываются подобным образом.
Если буквы A-Z соответствуют числам 0-25, то шифрование Виженера можно записать в виде формулы:
С_i=(P_i+K_i )*mod 26
Расшифровка:
P_i=(C_i-K_i+26)*mod 26
Рис.- Квадрат Виженера, или таблица Виженера, также известная как tabula recta, может быть использована для шифрования и расшифрования.
ЛАБА 2
Использование ассимметричного алгоритма "Сеть Фейстеля" для шифрования с большим кол-вом потоков(4 потока),ключ использовать на свое усмотрение;экранная форма:загрузка текста из файла,выведение его в отведенное поле,далее зашифровать и расшифровать только вывод на экран
Вид:
Рисунок 1.12 - Классическая сеть Фейстеля
Классическая (или простая) сеть Фейстеля (рисунок 1.12) разбивает исходный текст на блок длиной 2n бит, каждый блок разбивается на два потока L (левый) и R(правый). Далее выполняется преобразование по формуле:
где Ki - ключ, Fi - функция преобразования.
Каждое такое действие называется раундом. Обычно используется 8-16 раундов. При этом, ключ в каждом раунде может быть как частью общего ключа, так и ее модификацией по некоторому правилу: следует отметить, что это в значительной мере влияет на криптостойкость. Также важным является правило, по которому текст разбивается на потоки.
Основное достоинство алгоритма заключается в том, что функция f не обязана быть обратимой, более того, для повышения криптостойкости обычно используют нелинейные именно необратимые функции.
Ключ, с которым суммируется текст не повторяется из блока в блок, а изменяется в зависимости от самого текста, это значительно увеличивает его энтропию, и, следовательно, увеличивает криптостойкость метода.
Процедура расшифровки очевидна, следует применить те же формулы, но в обратном порядке. Некоторые исследователи нашли способ применять один и тот же алгоритм и для шифровки, и для расшифровки, для этого необходимо удвоить число раундов, и во второй половине расположить функции и ключи в обратном порядке. Но как показали эксперименты, криптотойкость при таком подходе значительно ниже.
В последствии были построены сети Фейстеля с большим числом потоков. Это позволило также усложнить подход к функциям преобразования. На рисунке 1.13 представлены примеры таких сетей.
Рисунок 1.13 - Примеры сетей Фейстеля с большим числов потоков
Также существует несколько способов перемешивания: без него, симметричный, асимметричный, - представленные на рисунке 1.14.
Рисунок 1.14 - Способы перемешивания потоков
ЛАБА3
1.Написать программу реализующую модель Сцепление блоков шифротекста (CBC) с 4мя блоками,на основе лабы 2,загружать текст из файла,зашифровывать расшифровывать на экране.
Криптографическая система (Криптосистема), (Cryptographic system) - набор криптографических преобразований или алгоритмов, предназначенных для работы в единой технологической цепочке с целью решения определенной задачи защиты информационного процесса. Само по себе описание алгоритма шифрования не является криптосистемой. Только дополненное схемами распределения и управления ключами оно становится системой. Примерами таких алгоритмов могут служить описания DES, ГОСТ28147-89 ит.д. Дополненные алгоритмами выработки ключей, они превращаются в криптосистемы. Современные криптосистемы классифицируют следующим образом (рис. 2.1):
Рисунок 2.1 - Классификация криптосистем
Современные криптосистемы могут обеспечивать не только секретность передаваемых сообщений, но и подтверждать их аутентичность (подлинность), а также подпись пользователя.
Симметричные криптосистемы (с секретным ключом - secret key systems) построены на основе сохранения в тайне ключа шифрования. Процессы зашифрования и расшифрования используют один и тот же ключ. Секретность ключа является постулатом. Основная проблема при применении симметричных криптосистем для связи заключается в сложности передачи обоим сторонам секретного ключа. Симметричные криптосистемы, в зависимости от принципов получения шифра, принято подразделять на блочные и поточные.
Блочные криптосистемы используют принцип разбиения текста сообщения (файла, документа и т.д.) на отдельные блоки с последующим преобразованием этих блоков с использованием ключевой информации.
Поточные криптосистемы на основе ключа системы вырабатывают некую последовательность (выходную гамму), которая затем накладывается на текст сообщения (обычно с помощью операции побитового XOR). Таким образом, преобразование текста осуществляется как бы потоком по мере выработки гаммы. Устройство блочних шифров.
Все современные симметричные алгоритмы шифрования для скрытия статистической структуры исходного текста используют следующие принципы:
рассеивание (diffusion) - то есть последовательность преобразований, обеспечивающую влияние любого знака открытого текста или ключа на большое число знаков шифротекста; перемешивание (confusion) - использование преобразований, затрудняющих получение статистических зависимостей между шифротектстом и открытым текстом.
Практически все современные блочные шифры являются композиционными - т.е. состоят из композиции простых преобразований или F=F1oF2oF3oF4o..oFn, где F - преобразование шифра, Fi - простое преобразование, называемое также i-ым циклом шифрования. Само по себе преобразование может и не обеспечивать нужных свойств, но их цепочка позволяет получить необходимый результат. Если же используется одно и то же преобразование, т.е. Fi постоянно для (i, то такой композиционный шифр называют итерационным шифром.
Наибольшее распространение имеют шифры, устроенные по принципу шифра Фейстеля (Файстеля - Feistel), использующего два основных приема:
- входной блок для каждого преобразования разбивается на две половины: p=(l,r), где l - левая, a r - правая;
- далее используется преобразование вида Fi (l,r)=(r,lfi(r)), где fi- зависящая от ключа Ki функция, а  - операция XOR или некая другая (чаще обратимая).
Функция fi называется цикловой функцией, а ключ Ki, используемый для получения функции fi называется цикловым ключом. С цикловой функцией складывается только левая половина, а правая остается неизменной. Затем обе половины меняются местами (перемешивание). Это преобразование прокручивается несколько раз (несколько циклов) и выходом шифра является получившаяся в конце пара (l,r). Графически все выглядит следующим образом (рис. 2.2):
Рисунок 2.2 - Пример одного цикла преобразований
В качестве функции fi выступает некая комбинация перестановок, подстановок, сдвигов, добавлений ключа и прочих преобразований. Так, при использовании подстановок информация проходит через специальные блоки, называемые S-блоками (S-боксами, S-boxes), в которых значение группы битов заменяется на другое значение (например, алгоритм DES). В других алгоритмах используются SP-сети, которые осуществляют преобразование, пропуская блок через последовательность подстановок (Substitutions) и перестановок (Permutations). Примером такого алгоритма является Rijndael. Размеры блоков в каждом алгоритме свои (DES использует блоки по 64 бита (две половинки по 32 бита), LOKI97 - 128 бит).
Получение цикловых ключей.
Ключ имеет фиксированную длину. Однако при прокрутке хотя бы 8 циклов шифрования с размером блока, скажем, 128 бит даже при простом прибавлении посредством XOR потребуется 8*128=1024 бита ключа, поскольку нельзя добавлять в каждом цикле одно и то же значение ,так как это ослабляет шифр. Поэтому для получения последовательности ключевых бит придумывают специальный алгоритм выработки цикловых ключей (ключевое расписание - key schedule). В результате работы этого алгоритма из исходных бит ключа шифрования получается массив бит определенной длины, из которого по определенным правилам составляются цикловые ключи. Каждый шифр имеет свой алгоритм выработки цикловых ключей.
Сцепление блоков шифротекста (CBC)
Это одина из наиболее часто применимых моделей шифрования для обработки больших количеств информации. Исходный текст разбивается на блоки, а затем обрабатывается по следующей схеме (рис.2.4):
Первый блок складывается побитно по модулю 2 (XOR) с неким значением IV - вектором инициализации (Init Vector), который выбирается независимо перед началом шифрования.
Полученное значение шифруется.
Полученный в результате блок шифротекста отправляется получателю и одновременно служит начальным вектором IV для следующего блока открытого текста.
Рисунок 2.4 - Схема сцепления блоков шифротекста
Расшифрование осуществляется в обратном порядке. В виде формулы, преобразование в режиме CBC можно представить как Ci=Ek(MiCi-1), где i - номер соответствующего блока.
Лаба 4
Написать программу реализующую алгоритм MD4,загрузка из файла(желательна,но не обязательно,можно и вводом на экране),зашифровка на экране
MD4
MD4 - это однонаправленная хэш-функция, изобретенная Роном Ривестом, алгоритм для входного сообщения выдает 128-битовое хэш-значение, которое называется дайджестом сообщения .
Цели, преследуемые при разработке алгоритма:
Безопасность. Вычислительно невозможно найти два сообщения с одинаковым хэш-значением. Вскрытие грубой силой является самым эффективным.
Прямая безопасность. Безопасность MD4 не основывается на каких-либо допущениях, например, предположении о трудности разложения на множители.
Скорость. MD4 подходит для высокоскоростных программных реализаций. Она основана на простом наборе битовых манипуляций с 32-битовыми операндами.
Простота и компактность. MD4 проста, насколько это возможно, и не содержит больших структур данных или сложных программных модулей.
Удачная архитектура. MD4 оптимизирована для микропроцессорной архитектуры (особенно для микропроцессоров Intel), для более крупных и быстрых компьютеров можно выполнить любые необходимые изменения .
Описание алгоритма MD4
Пусть есть сообщение длиной b бит, для которого мы ищем MD. b может быть равно 0, оно не обязано быть кратно 8.
Представим его в виде:
Расчет MD происходит за 5 шагов:
Шаг 1: Добавление байтов заполнителей
Сообщение расширяется, так чтобы его длина (в битах) была 448 по модулю 512 - т.е. сообщению не хватает ровно 64 бит для кратности 512 битам. Добавление битов происходит в любом случае, даже если длина исходного сообщения изначально обладает этим свойством.
Добавление происходит следующим образом:
- первый добавленный бит - "1", остальные "0". Минимум 1 бит, максимум 512.
Шаг 2: Добавление длины:
64 битное значение b (длины исходного сообщения) добавляется к сообщению. Если же длина более 2^64 (это маловероятно), то лишь младшие 64 бита длины используются.
Теперь сообщение имеет длину, кратную 512 битам (16 32 битных слова), его можно представить как слова:
где N- кратно 16
Шаг 3: Инициализация буфера MD
Буфер из четырех слов (A,B,C,D) , используется для расчета MD. Инициализируется:
word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
word D: 76 54 32 10
Шаг 4: Обработка сообщения блоками по 16 слов
Сначала определим три вспомогательный функции, на вход получают 3 слова, результат - слово.
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XY v XZ v YZ
H(X,Y,Z) = X xor Y xor Z
Каждый бит F - Если X то Y, иначе Z
Каждый бит G - Преобладающее значение X,Y,Z
Каждый бит H - xor, или контроль четности
Делаем следующее:
/* Обрабатываем каждый блок в 16 слов. */
For i = 0 to N/16-1 do
/* Копируем блок i в X. */
For j = 0 to 15 do
X[j] = M[i*16+j].
end /* цикла j */
/* Сохраняем значения A как AA, B как BB, C как CC, и D как DD. */
AA = A
BB = B
CC = C
DD = D
/* Раунд 1. */
/* Пусть [abcd k s] определяют операцию
a = (a + F(b,c,d) + X[k]) <<< s. */
/* Сделать следующие 16 операций. */
[ABCD 0 3] [DABC 1 7] [CDAB 2 11] [BCDA 3 19]
[ABCD 4 3] [DABC 5 7] [CDAB 6 11] [BCDA 7 19]
[ABCD 8 3] [DABC 9 7] [CDAB 10 11] [BCDA 11 19]
[ABCD 12 3] [DABC 13 7] [CDAB 14 11] [BCDA 15 19]
/*Несложно заметить, что ABCD циклически сдвигаются влево, k идет по строкам от 0 до 15, а s циклически замкнуто на {3,7,11,19}.*/
/* Раунд 2. */
/* Пусть [abcd k s] определяют операцию
a = (a + G(b,c,d) + X[k] + 5A827999) <<< s. */
/* Сделать следующие 16 операций. */
[ABCD 0 3] [DABC 4 5] [CDAB 8 9] [BCDA 12 13]
[ABCD 1 3] [DABC 5 5] [CDAB 9 9] [BCDA 13 13]
[ABCD 2 3] [DABC 6 5] [CDAB 10 9] [BCDA 14 13]
[ABCD 3 3] [DABC 7 5] [CDAB 11 9] [BCDA 15 13]
/*Несложно заметить, что ABCD циклически сдвигаются влево, k идет по столбцам от 0 до 15, а s циклически замкнуто на {3,5,9,13}.*/
/* Раунд 3. */
/* Пусть [abcd k s] определяют операцию
a = (a + H(b,c,d) + X[k] + 6ED9EBA1) <<< s. */
/* Сделать следующие 16 операций. */
[ABCD 0 3] [DABC 8 9] [CDAB 4 11] [BCDA 12 15]
[ABCD 2 3] [DABC 10 9] [CDAB 6 11] [BCDA 14 15]
[ABCD 1 3] [DABC 9 9] [CDAB 5 11] [BCDA 13 15]
[ABCD 3 3] [DABC 11 9] [CDAB 7 11] [BCDA 15 15]
/*Несложно заметить, что ABCD циклически сдвигаются влево, а s циклически замкнуто на {3,9,11,15}, k также подвержено закономерности*/
/* Изменяем ABCD - регистры для следующего блока */
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /* цикла по i */
Примечание: 5A..99 - 32 битная константа - корень из 2 со старшей цифрой в начале.
6E..A1 - 32 битная константа - корень из 3 со старшей цифрой в начале.
Шаг 5: Вывод
MD - это A,B,C,D - начиная с младшего байта A и заканчивая старшим байтом D.
(128 бит)
Документ
Категория
Рефераты
Просмотров
161
Размер файла
94 Кб
Теги
лабы
1/--страниц
Пожаловаться на содержимое документа