AES 128 на C++

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

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

Какой алгоритм шифрования следует выбрать? Существует множество алгоритмов шифрования. Сразу скажу, что придумать свой собственный — не лучшая идея. Любое творчество в этом вопросе непременно скажется на эффективности, особенно при отсутствии должной математической подготовки.

Наиболее интересным для меня оказался AES128, так как я слышал о его применении в архиваторе WinRAR. Это некий усовершенствованный стандарт шифрования (Advanced Encryption Standart). Видимо, по сравнению с предшественниками, о чем можно прочитать здесь. Число 128 означает длину ключа шифрования в битах. Существуют варианты для 192х и 256и бит.

Как мы можем увидеть из статьи на википедии, алгоритм блочный. Это значит, что шифруемая информация разбивается на блоки по 128 бит (16 байт) и каждый блок шифруется отдельно. Процесс расшифровки происходит с помощью того же самого ключа.

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

В моем исходнике все названия процедур и функций полностью соответствуют тем, что указаны в FIPS 197.

О приложении

Что в итоге получилось? Перед вами самая простая реализация AES128. Здесь нет проверки дешифрованного файла с помощью контрольной суммы. Поэтому при введении неверного пароля вы получите файл с хаотичными данными без всякого предупреждения об этом. Скорость шифрования/дешифровки оставляет желать лучшего. А вот для защиты небольших файлов инструмент вполне подходит.

Для компиляции приложения достаточно воспользоваться командой make.

Пример вывода при шифровании файла text.txt :

./AES128 c text.txt
Key: 12345
File «text.txt» 14 bytes
Loading … done
Cipher … 0.000000
Writing … done

В результате будет создан файл «text.txt.сph«. Чтобы расшифровать его, введите команду «./AES128 u text.txt.cph» и, затем, ключ.

Исходник можно скачать здесь.

Добавить комментарий

Ваш e-mail не будет опубликован.