Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
namefix.doc
Скачиваний:
18
Добавлен:
07.12.2018
Размер:
280.06 Кб
Скачать
  1. Поточные шифры

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

Сами поточные шифры разделяют на синхронные и самосинхронизирующиеся. Такое деление обусловлено непосредственно их поведением.

В синхронных поточных шифрах (Рисунок 2.4) каждый элемент шифруется независимо от других элементов, т.е. входная последовательность не участвует в формировании гаммы.

Свойства синхронных поточных шифров:

  • Отсутствие размножения ошибок (если на входе поменять один бит, то на выходе также будет изменен лишь один бит).

  • Выпадение или внедрение бита информации приводит к нарушению синхронизации, и, как следствию, некорректному расшифрованию всех последующих элементов.

Рисунок 2.4 Синхронный поточный шифр

В отличие от синхронных, самосинхронизирующиеся поточные шифры (Рисунок 2.5) формируют ключевую последовательность для шифрования каждого элемента с учетом N предыдущих элементов.

Свойства самосинхронизирующихся поточных шифров:

  • Наличие эффекта размножение ошибок.

  • Самосинхронизация происходит через N элементов автоматически (повреждение при передаче информации приведет к некорректному расшифрованию N элементов).

Рисунок 2.5 Самосинхронизирующийся поточный шифр

Абсолютно стойкий шифр

Абсолютно стойкий шифр или, как его называют по-другому, одноразовый шифр-блокнот интересен, по большей части, лишь с теоретической точки зрения.

Необходимые и достаточные условия абсолютной стойкости, сформулированные К. Шенноном:

  • Ключ является фрагментом истинно случайной двоичной последовательности с равномерным законом распределения.

  • Длины ключа и открытого текста совпадают.

  • Ключ используется лишь один раз, после чего сразу подлежит уничтожению.

Шеннон доказал абсолютную стойкость шифра, удовлетворяющего вышеприведенным условиям, показав, что криптоаналитик, располагая бесконечными вычислительными и временными ресурсами, не в состоянии получить какую-либо информацию об исходном тексте или используемом ключе. На практике такие схемы практически не используются, т.к. реализация их очень дорога и непрактична, что обусловлено, прежде всего, равенством ключа и передаваемой информации.

В 1917г. Гилберт Вернам запатентовал шифр, основанной на операции xor, который впоследствии стал называться шифром Вернама или одноразовым шифром-блокнотом. Ключ его и пересылаемое сообщение были одинаковой длины. Соответствующие биты ключа и исходного текста просто складывались по модулю 2, образуя зашифрованный текст (Рисунок 2.5).

Рисунок 2.5 Самосинхронизирующийся поточный шифр

  1. RC4

Рисунок 2.5 Самосинхронизирующийся поточный шифр

typedef struct {

uint8 state[256];

uint8 a_reg;

uint8 b_reg;

} RC4_KEY;

void setup_rc4(RC4_KEY *key, uint8 *pass, uint16 passlen)

{

uint8 *state = &key->state[0];

uint8 a = 0, b = 0, tmp;

int i;

for (i = 0; i < 256; i++) key->state[i] = i;

key->a_reg = 0;

key->b_reg = 0;

for (i = 0; i < 256; i++)

{

b = pass[a] + state[i] + b;

xchg_pair(state+i, state+b);

a = (a + 1) % passlen;

}

}

void encode_rc4(RC4_KEY *key, uint8 *buf, uint32 buflen)

{

uint8 a_reg = key->a_reg, b_reg = key->b_reg;

uint8 xor, tmp, *state = &key->state[0];

while (buflen--) {

a_reg++;

b_reg = (state[a_reg] + b_reg);

xchg_pair(&state[a_reg], &state[b_reg]);

xor = state[a_reg] + state[b_reg];

*buf++ ^= state[xor];

}

key->a_reg = a_reg;

key->b_reg = b_reg;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]