conf-rijndael

0

Описание

Программа для шифрования файлов. Формат подходит для создания файлов Auto Provision для IP-телефонов Fanvil и SNR.

Языки

  • C75,7%
  • Perl19,4%
  • Shell4,9%
README.md

conf-rijndael

Программа для шифрования файлов. Формат подходит для создания файлов Auto Provision для IP-телефонов Fanvil и SNR.

Синтаксис

./conf-rijndael enc|dec <infile> <outfile> <key>

  • end|dec
    - выбор действия:
    enc
    - зашифровать,
    dec
    - расшифровать файл
  • <infile>
    - исходный файл
  • <outfile>
    - файл для записи результата
  • <key>
    - ключ для шифрования, 32 символа

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

./conf-rijndael enc - - my-32-bytes-key

Компиляция

У программы нет зависимостей от сторонних библиотек. Если в системе установлен 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 не поддерживает встраивание вектора инициализации в зашифрованный файл. Возможно, что такой формат устарел на текущий момент.

Ссылки по теме:

Исходя из этой информации можно написать простой скрипт, который будет использовать openssl и добавлять IV в конец зашифрованного файла. Пример находится в директории openssl-examlpes.

Perl

  1. Crypt::Rijndael - этот пакет не умеет шифровать блоками (если нужно читать длинный файл через буфер), не учитывает padding, не добавляет IV в конец файла.

  2. Crypt::CBC и Crypt::Mode::CBC - поддерживают padding и буферный режим. Добавлять IV в конец файла нужно самостоятельно.

С простыми примерами можно ознакомиться в директории perl-examples в этом проекте.