Криптография ← ЛабораторныеЛабораторная работа №4

Криптографические алгоритмы

Задание

Необходимо написать программу на языке C++, C# или Python, реализующую криптографический алгоритм в соответствии с вариантом. Разрешается использование сторонних реализаций длинной арифметики и генераторов случайных чисел (boost::random, System.Random и т.д.).

Алгоритмы

Для студентов 08-306 - вариант (N mod 8) + 1, для студентов 08-308 - (N + 20) mod 8 + 1, где N - номер по списку.

В вариантах 1-4 требуется реализовать программу шифрования и расшифровки данных фиксированного размера (размер определяется алгоритмом шифрования).

  1. Алгоритм симметричного шифрования DES.
  2. Алгоритм симметричного шифрования Blowfish.
  3. Алгоритм симметричного шифрования IDEA.
  4. Алгоритм симметричного шифрования AES128.

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

  1. Алгоритм асимметричного шифрования RSA.
  2. Алгоритм асимметричного шифрования ElGamal.

В вариантах 7-8 требуется реализовать программу хеширования данных произвольной длины.

  1. Хеш-функция MD5.
  2. Хеш-функция SHA1.
  3. Другой вариант по согласованию с преподавателем

Требования к программе

Формат вызова программы для генерации ключей:

<программа> -k <длина ключа> <открытый ключ> <закрытый ключ>

Битовая длина сгенерированного ключа должна быть не меньше заданной.

Формат вызова программы шифрования:

<программа> -e <исходный файл> <файл с ключом> <зашифрованный файл>

Формат вызова программы расшифровки:

<программа> -d <исходный файл> <файл с ключом> <расшифрованный файл>

Формат вызова программы хеширования:

<программа> <исходный файл> <файл с хеш-суммой>

Формат ключа: в вариантах 1-4 - бинарные данные фиксированной длины. В вариантах 5-6 - числа, разделенные пробелами. Вариант 5 - открытый ключ (e, n), закрытый ключ (d, n). Вариант 6 - открытый ключ (p, g, h), закрытый ключ (p, g, x).

Формат входных данных: в вариантах 1-4 - бинарные данные фиксированной длины. В вариантах 5-6 - число, битовая которого не превосходит длины ключа. В вариантах 7-8 - бинарные данные произвольной длины.

Формат выходных данных: в вариантах 1-4 и 7-8 - бинарные данные фиксированной длины. В варианте 5 - число, битовая длина которого не превосходит длины ключа. В варианте 6 - 2 числа, битовые длины которых не превосходят длины ключа.