Я пытаюсь добавить шифрование к своим текущим сценариям резервного копирования на ленту, передавая вывод через 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 КБ каждый) решает проблему.