Назад | Перейти на главную страницу

зашифровать ленточные файлы с помощью openssl и tar

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

tar -czpvf /dev/nst0 /home /otherdir

поэтому добавление openssl дает следующее:

tar czpvf - /home /otherdir | openssl aes-256-cbc -e -salt -pass file:/my_passwd > /dev/nst0

что не дает никаких ошибок, однако единственный способ, который я могу найти в сети для расшифровки, это:

dd if=/dev/nst0 conv=sync | openssl aes-256-cbc -d -salt -pass file:/my_passwd | tar xzpvf -

это дает правильный список файлов, но я получаю:

bad decrypt 8340:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:461:

каждый раз.

Что я могу сделать, чтобы это исправить?

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

Я получаю аналогичную ошибку, когда делаю:

$ tar czpvf - /test/directory |openssl aes-256-cbc -e -salt -pass pass:password | dd of=/tmp/foo.encrypted.tgz
$ dd if=/tmp/foo.encrypted.tgz conv=sync | openssl aes-256-cbc -d -salt -pass pass:password |tar xzpvf -

Но когда я использую потоковый шифр, например rc4, например:

$ tar czpvf - /test/directory |openssl rc4 -e -salt -pass pass:fred | dd of=/tmp/foo.encrypted.tgz

Я не получаю этой ошибки.

Вам нужно дополнить ввод блочным шифром. Попробуйте связать свой tar с dd с размером блока 4 КБ и опцией conv = sync. Это заполнит конец данных.

В большинстве случаев я видел такое сообщение об ошибке от OpenSSL из-за неправильного пароля. Можете ли вы временно попробовать при замене file:/my_passwd с участием pass:yourpassword при расшифровке строки все в порядке? Это, конечно, было бы плохим постоянным решением, но попробуйте это для отладки.

Вам лучше использовать mbuffer для записи на ленту, поскольку он может обрабатывать растягивание ленты и буферизацию (уменьшая блеск обуви), и записывает полными блоками, чтобы ленточный накопитель работал. Видеть этот ответ для примера скрипта. mbuffer читает из stdin поэтому сжатие и шифрование для него не проблема, даже при охвате нескольких лент (что-то tar не могу сделать.)

Что касается необходимости использования dd с участием sync, это связано с тем, что ленточному накопителю необходимо записывать блоками. Видеть этот ответ для подробного описания того, почему, но краткий ответ заключается в том, что снова используя mbuffer запись данных в блоки фиксированного размера (например, по 256 КБ каждый) решает проблему.