КриптографияРефераты >> Коммуникации и связь >> Криптография
Листинг 2. класс SubstitutionCipher
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 раза, а Ъ вообще не встретится. Но в среднем это действительно так.
Таблица 1. относительные частоты букв.
А |
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-буквенных комбинаций).
Это распределение частоты дает дешифровальщикам громадную информацию. Кроме распределения частот может быть использован словарь русской лексики, для автоматической проверки подстановочного отображения конкретной буквы. Например, однобуквенными словами в русском языке являются а, в, и, к и с. Дополнительно в распоряжении специалистов по криптоанализу имеется дополнительная информация, такая как частота слов и основные правила русской грамматики. Этого обычно оказывается достаточно для того, чтобы раскрыть простой подстановочный шифр.
Не всегда криптография и криптоанализ так просты, как в примерах из этой главы. Криптоанализ более сложных шифров требует более основательных знаний в области математики и теории передачи данных.
2. Шифрование с секретным ключом
В некоторых алгоритмах шифрования для шифрования и расшифровки используется один и тот же ключ, или дешифровальный ключ может быть вычислен по шифровальному ключу за небольшое время. Такие алгоритмы называются алгоритмами с секретным ключом, алгоритмами с закрытым ключом или симметричными алгоритмами. Ключ используемый в таких алгоритмах должен храниться в тайне. Примером алгоритма с секретным ключом является алгоритм Data Encryption Stantart (DES).
2.1. Стандарт Data Encryption Stantart (DES).
В 1997 г. в США Национальным Институтом Стандартов и Технологий (NIST) в качестве стандартного алгоритма шифрования для защиты несекретной информации был принят алгоритм DES. Этот алгоритм вполне уверенно противостоял открытым попыткам взлома вплоть до середины 90-х годов, когда были отмечены попытки взлома с использованием методов дифференциального и линейного криптоанализа. К январю 1999 г. фонду Electronic Frontier Foundation уже удавалось взламывать сообщения, зашифрованные с помощью алгоритма DES, не более чем за сутки.