conf-rijndael
Описание
Программа для шифрования файлов. Формат подходит для создания файлов Auto Provision для IP-телефонов Fanvil и SNR.
Языки
- C75,7%
- Perl19,4%
- Shell4,9%
conf-rijndael
Программа для шифрования файлов. Формат подходит для создания файлов Auto Provision для IP-телефонов Fanvil и SNR.
Синтаксис
- выбор действия:end|dec- зашифровать,enc- расшифровать файлdec- исходный файл<infile>- файл для записи результата<outfile>- ключ для шифрования, 32 символа<key>
В настройках IP-телефона необходимо указать ключ в формате HEX. При запуске программа выдает это значение. Если требуется показать HEX-значение ключа, но ничего не нужно шифровать, запустите с такими параметрами:
Компиляция
У программы нет зависимостей от сторонних библиотек. Если в системе установлен gcc, то достаточно запустить команду:
./make.sh
Если в процессе компиляции не возникнет ошибок, то бинарный файл будет в директории проекта bin. Установка не предполагается. Скопируйте файл в директорию, где будете шифровать файлы для provision-сервера.
Предыстория
У IP-телефонов производства Fanvil и SNR заявлена поддержка Auto Provision с шифрованием AES. Однако в открытом доступе удалось найти утилиту только под Windows - dsc.exe. Также в документации упоминается о наличии версии под Linux, но ссылка на облачный диск не работает. Однако инструкция по сборке под Linux подтолкнула к решению задачи. В ней фигурировали файлы с rijndael в названии.
Опытным путем было установлено, что утилита dsc.exe создает шифрованный файл с фиксированным ключём (32 символа), а в конец файла дописывает вектор инициализации (IV). Шифрование идет по алгоритму Rijndael с размером блока 16 байт и стандартным padding для CBC.
Это подтолкнуло написать маленькую программу. Реализация Rijndael была взята из CPAN Crypt::Rijndael.
Альтернативные варианты
OpenSSL
В поисках решения были найдены сообщения на форумах, что openssl не поддерживает встраивание вектора инициализации в зашифрованный файл. Возможно, что такой формат устарел на текущий момент.
Ссылки по теме:
- https://stackoverflow.com/questions/65918428/how-to-provide-string-iv-and-key-to-openssl-decrypt-command
- https://stackoverflow.com/questions/65078514/bash-how-can-i-prefix-my-openssl-encrypted-file-with-the-iv
- https://security.stackexchange.com/questions/29106/openssl-recover-key-and-iv-by-passphrase
- https://superuser.com/questions/1329658/how-can-i-encrypt-decrypt-aes-256-cbc-with-openssl
- https://superuser.com/questions/1706309/how-is-the-iv-embedded-in-an-encrypted-file-when-you-do-not-indicate-it
- https://stackoverflow.com/questions/39412760/what-is-an-openssl-iv-and-why-do-i-need-a-key-and-an-iv/58940595
Исходя из этой информации можно написать простой скрипт, который будет использовать openssl и добавлять IV в конец зашифрованного файла. Пример находится в директории openssl-examlpes.
Perl
-
Crypt::Rijndael - этот пакет не умеет шифровать блоками (если нужно читать длинный файл через буфер), не учитывает padding, не добавляет IV в конец файла.
-
Crypt::CBC и Crypt::Mode::CBC - поддерживают padding и буферный режим. Добавлять IV в конец файла нужно самостоятельно.
С простыми примерами можно ознакомиться в директории perl-examples в этом проекте.