Шифр на базе М-последовательности

221
25 мая 2022, 04:30

Есть задание:

  1. Реализовать генератор М-последовательности заданной длинны.
  2. Построить шифратор-дешифратор на основе полученного генератора М-последовательности.

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

Не обязательно код, просто объяснение алгоритма будет отлично

Answer 1

Я не буду писать какой-то конкретный алгоритм, ибо потенциальных алгоритмов тьма и маленькая тележка.

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

Гаммирование

Гаммирование или XOR шифр, придуман ажно самим Шенноном. Реализация проста. Сначала по ключу генерируете псевдослучайную последовательность N (noise) длиной L байтов. Байты шифртекста C[i] получаются из байтов открытого теста P[i] сложением по модулю два с соответствующим байтом шума:

C[i] = P[i] XOR N[i mod L]

Для расшифровки получатель шифртекста, зная ключ, генерирует ту же самую последовательность N и расшифровывает, ксоря байты шифртекста и шума:

P[i] = C[i] XOR N[i mod L] 
Генерация раундовых ключей

Все современные блочные шифры организованы в раунды. Внутри одного шифра раунды устроены практически одинаково - перемешивание битов и подмешивание битов ключа. Для стойкости на для каждого раунда из исходного ключа генерируется раундовый ключ. К примеру, в AES раундовые ключи генерируются вот так, а в DES - вот так.

Для вашего задания вы могли бы взять открытую реализацию AES или DES и заменить в ней алгоритм генерации раундового ключа. Если длина раундового ключа R байтов, то ключ K[i] для i-того раунда будет состоять из байтов N[i*R], N[i*R+1], ..., N[i*R+(R-1)]

Вот, как-то так.

READ ALSO
нету метода Label в qt

нету метода Label в qt

привет у меня проблема когда я хочу спользовать метод label в классе то его нету но в файлеui я его добавлял я пытался очищать проект и пересобирать...

288
Реализация быстрой сортировки C++

Реализация быстрой сортировки C++

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

164
В чём измеряется размер файла?

В чём измеряется размер файла?

В доках сказано, что file_size возвращает результат в байтахИмеются в виду октеты (8 бит) или количество char-ов?

198