Криптография

Листинг 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, не более чем за сутки.


Страница: