Содержание
1.2.Простой подстановочный шифр. 5
2.. Шифрование с секретным ключом.. 8
2.1.Стандарт Data Encryption Stantart (DES).8
3.. Шифрование с открытым ключом.. 11
3.1.Алгоритм Ривеста-Шамира-Эдлемана. 11
7. Цифровые подписи и цифровые сертификаты.. 14
Список использованной литературы.. 17
Криптография (что в переводе с греческого означает “тайнопись”) издавна использовалась при обмене самой разнообразной информацией. Самые ранние упоминания об использовании криптографии: Египет – 1900 г. до н.э., Месопотамия – 1500 г. до н.э., при написании Библии – 500 г. до н.э.
Одним из наиболее известных в древней истории деятелей, постоянно пользовавшийся тайнописью, был Юлий Цезарь. Он придумал шифр, носящий название шифр Цезаря (Caesar cipher).
Тайнописью пользовались на протяжении средних веков в Европе, на Ближнем Востоке и в Северной Америке.
Во время гражданской войны в США тайнопись использовалась и северянами и южанами. С тех пор она использовалась в каждой значительной войне.
Во время Второй мировой войны польские и британские дешифровальщики раскрыли секрет немецкой шифровальной машины Энигма. В результате было уничтожено множество немецких подводных лодок, потоплен линкор Бисмарк, и вооруженные силы Германии понесли тяжелые потери в ряде операций.
Теперь, к началу XXI века, вследствие огромной популярности Web и использование ее в электронной коммерции, технология шифрования и сопутствующие ей алгоритмы шифрования стали доступны массовому потребителю. В сетевом бизнесе для защиты безопасности финансовых сделок, сетевых услуг и потребительской информации основной упор делается на цифровые сертификаты и технологии шифрования как с открытым так и с секретным ключами.
Значение криптографии сегодня на самых различных уровнях обмена информации трудно переоценить. В своем реферате я постараюсь описать несколько простых алгоритмов шифрования, дать математическую основу нескольких сложных алгоритмов, а также описать такие понятия, как дайджест сообщения, цифровая подпись и сертификат.
Простые шифры
В этой главе приводился два простых метода шифрования: уже упоминавшийся шифр Цезаря и подстановочный шифр.
Шифрование представляет собой процесс превращения открытого текста в зашифрованный, а расшифровка – процесс обратного преобразования, при котором восстанавливается исходный текст. Управление шифрованием и расшифровкой часто осуществляется с использованием ключей, которые расширяют многообразие путей превращения открытого текста в зашифрованный (и обратно).
Шифр Цезаря основан на фиксированном смещении по кругу букв алфавита. Буквы сдвигаются по кругу, так что после последней буквы алфавита идет его первая буква. В следующем листинге (на языке java) приводится алгоритм шифрования на основе шифра Цезаря.
package ru.festu.u031.asanov.security.ref1;
public class CaesarCipher {
/** Зашифроватьстроку */
public static String encrypt(String s, int key) {
String result = "";
for(int i = 0; i < s.length(); i++) {
// зашифровать каждый символ в строке
result += encrypt(s.charAt(i), key);
}
return result;
}
/** Зашифровать отдельный символ */
public static char encrypt(char c, int key) {
// преобразовать строчные буквы в прописные
if(c >= 'а' && c <= 'я') c = Character.toUpperCase(c);
// "повертуть" букву
if(c >= 'А' && c <= 'Я') c = rotate(c, key);
return c;
}
/** Расшифровать строку */
public static String decrypt(String s, int key) {
// выполнить шифрование с "обратным" ключем
return encrypt(s, -key);
}
/** Расшифровать отдельный символ */
public static char decrypt(char c, int key) {
if(c < 'А' || c > 'Я') return c;
else return rotate(c, key);
}
/** "Поворот" символа */
private static char rotate(char c, int key) {
int l = 'Я' - 'А';
c += key % l;
if(c < 'А') c += l;
if(c > 'Я') c -= l;
return c;
}
}
При шифровании с ключом алгоритмы шифрования и расшифровки могут быть хорошо известны. Но дешифровальный и (иногда) шифровальный ключи строго секретны. Зашифрованный текст, полученный в результате шифрования открытого текста с помощью конкретного шифровального ключа, может быть расшифрован только с помощью дешифровального ключа, связанного с шифровальным ключом.
В шифре Цезаря ключи представляют собой число символов, на которое сдвигаются буквы алфавита. При шифровании вместо каждой буквы открытого текста ставится буква отстоящая от нее вправо на число букв задаваемое значением ключа. Расшифровка заключается в смещении каждой буквы влево на число букв, задаваемое тем же значением ключа, которое использовалось при шифровании. (То есть decryptKey = -encrypKey)
Не нужно быть опытным дешифровальщиком, чтобы понять, что Шифр Цезаря обладает низкой стойкостью. В нем (в случае русского алфавита) возможны всего 32 различных кличей, один из которых отображает открытый текст в тот же открытый текст.
Это дает представление о размере пространства ключей. Пространство ключей шифра – это набор всех возможных ключей, которые работаю с этим шифром. Чтобы шифр был эффективным, пространство ключей должно быть большим. Размер пространства ключей обычно измеряется числом двоичных разрядов ключа. В n-битном пространстве ключей возможны 2n разных ключа. Для 32-х-битного ключа это число составляет 4 294 967 296 разных ключей. Хотя такое число может показаться большим, на самом деле оно достаточно мало. Средней мощности компьютер может за день “перепробовать” 4 миллиарда ключей.
Еще одним видом простого шифра являются подстановочные шифры. Они были одними из наиболее популярных шифров со Средних веков до 19-го столетия. В простых подстановочных шифрах вместо одной буквы алфавита подставляется другая. В более сложных подстановочных шифрах вместо одной группы букв подставляется другая.
Даже простые подстановочные шифры сложнее шифра Цезаря. Если вы сможете расшифровать одну букву в шифре Цезаря, то после этого расшифруете любую букву в нем. Но в случае с простым подстановочным шифром так не происходит. Ключом к простому подстановочному шифру является таблица соответствия буквам открытого текста букв зашифрованного текста. Этот ключ может быть представлен в виде 32-х-буквенной строки. Например: НАФЧЫРИЦЛЙЯДМЗСЪЖЩТПОКЭЬГЮЕУШВБХ
Число ключей для простого подстановочного шифра составляет 32!, а это больше чем 2,6*1035.
Алгоритм шифрования с использованием подстановочного шифра представлен в следующем листинге.
package ru.festu.u031.asanov.security.ref1;
public class SubstitutionCipher {
/** Зашифроватьстроку */
public static String encrypt(String s, String key) {
String r = "";
for(int i = 0; i < s.length(); i++) {
r += encrypt(s.charAt(i), key);
}
return r;
}
/** Зашифровать отдельный символ */
public static char encrypt(char c, String key) {
// преобразовать строчные символы в заглвные
if(c >= 'а' && c <= 'я') c = Character.toUpperCase(c);
if(c >= 'А' && c <= 'Я') return key.charAt(c-'А');
else return c;
}
/** Расшифроватьстроку */
public static String decrypt(String s, String key) {
String r = "";
for(int i = 0; i < s.length(); i++) {
r += decrypt(s.charAt(i), key);
}
return r;
}
/** Расшифровать отдельный символ */
public static char decrypt(char c, String key) {
if(c >= 'А' && c <= 'Я') return (char)(key.indexOf(c)+'А');
else return c;
}
/** Создатьключ */
public static String createKey() {
int length = 'Я'-'А'+1;
char[] alphabet = new char[length];
for(int i = 0; i < alphabet.length; i++) alphabet[i] += i+'А';
for(int i = 0; i < alphabet.length; i++) {
int n1 = i; //(int)(Math.random()*length);
int n2 = (int)(Math.random()*length);
char c = alphabet[n1];
alphabet[n1] = alphabet[n2];
alphabet[n2] = c;
}
return new String(alphabet);
}
}
На первый взгляд может показаться, что простой подстановочный шифр обладает высокой стойкостью, особенно потому, что у него огромное пространство ключей. Однако, он легко раскрывается методом, в котором применяются буквенные шаблоны, присущие конкретному языку.
В русском языке буквы О и Е встречаются значительно чаще других букв, таких, например, как Ъ и Ф. В таблице 1 приведены относительные частоты использования букв от А до Я, т.е. Ожидаемые числа использования этих букв в последовательности из 100 букв осмысленного текста. Это не означает, что среди 100 букв любого текста на русском языке буква В встретится всегда ровно 2 раза, а Ъ вообще не встретится. Но в среднем это действительно так.
А | 5,7 | И | 4,8 | Р | 2,9 | Ш | 0,5 |
Б | 1,3 | Й | 0,7 | С | 3,7 | Щ | 0,3 |
В | 3,0 | К | 2,1 | Т | 4,4 | Ъ | 0,0 |
Г | 1,3 | Л | 3,4 | У | 1,9 | Ы | 1,4 |
Д | 2,2 | М | 2,2 | Ф | 0,1 | Ь | 1,3 |
Е | 5,8 | Н | 4,7 | Х | 0,6 | Э | 0,3 |
Ж | 0,8 | О | 7,8 | Ц | 0,2 | Ю | 0,4 |
З | 1,2 | П | 1,9 | Ч | 0,9 | Я | 1,4 |
Подобное распределение частот может быть найдено для диграфов (двухбуквенных комбинаций), триграфов (трехбуквенных комбинаций) и n-графов (n-буквенных комбинаций).
Это распределение частоты дает дешифровальщикам громадную информацию. Кроме распределения частот может быть использован словарь русской лексики, для автоматической проверки подстановочного отображения конкретной буквы. Например, однобуквенными словами в русском языке являются а, в, и, к и с. Дополнительно в распоряжении специалистов по криптоанализу имеется дополнительная информация, такая как частота слов и основные правила русской грамматики. Этого обычно оказывается достаточно для того, чтобы раскрыть простой подстановочный шифр.