涉密文件的异地备份与恢复
节点代号说明
- A 数据源节点,制作备份
- B 用于存储备份的物理存储或云存储
- C 用于异地恢复数据备份的节点
数据备份的加密与存储
任务目标:
将节点A上的涉密文件 xxx 压缩并加密后传输到设备B上,防止备份节点B的文件泄露后被直接利用。
备份步骤:
- A生成对称密钥Symmetric-key用作数据加密密钥DEK,对较大文件进行加密
openssl rand -hex 32 |tr -d '\n' > aes256.key #去掉结尾换行符 32字节对应256位长度
wc -c aes256.key
(可选)随机生成一个64盐值文件并保存到本地
openssl rand -hex 8 |tr -d '\n' > hex.salt #8字节对应64位长度
wc -c hex.salt
- 对文件加锁,防止误删改
chattr +i aes256.key hex.salt
- 对涉密文件xxx进行打包、压缩、加密,生成文件 xxx.tgz.enc
tar -czf xxx.tgz xxx
openssl enc -aes-256-cbc -salt -in xxx.tgz -out xxx.tgz.enc -pass file:aes256.key
注意:
- openssl1.1.0以上可以 -pbkdf2 -iter 100000
- 两个盐值参数二选一:-salt随机盐值 ,-S $(cat hex.salt)指定盐值
- 加密时 Salt 已嵌入到加密文件头部(Salted__ 开头),解密时会自动读取,无需在解密命令中重复指定。
md5sum xxx.tgz xxx.tgz.enc #生成摘要哈希值
- A发送 xxx.tgz.enc 给B作为异地备份
md5sum xxx.tgz.enc #B端校验加密备份哈希值
数据备份的解密与恢复
-
A主机本地恢复,直接使用未加密的tgz格式备份文件
-
C主机异地恢复
前提:C主机上保存有A主机上的数据加密密钥
使用旧版本openssl解密步骤:
openssl enc -aes-256-cbc -d -in xxx.tgz.enc -out decFile.tgz -pass file:aes256.key
新版openssl兼容旧版解密步骤:
openssl enc -aes-256-cbc -d -in xxx.tgz.enc -out decFile.tgz -pass file:aes256.key -md md5
md5sum decFile.tgz #校验解密后的备份
注意事项:
- 密钥文件内容:确保 aes256.key 的内容与加密时完全一致(例如,若加密时文件内容是密码文本,则此处也需相同)。
- 算法兼容性:-md md5 是关键,它确保使用与 OpenSSL 1.0.2k 相同的密钥派生方式。
可能遇到的问题
- 加解密版本不同导致的失败
bad decrypt
48470000:error:1C800064:Provider routines:ossl_cipher_unpadblock:bad decrypt:../openssl-3.2.4/providers/implementations/ciphers/ciphercommon_block.c:107:
如果加密是使用旧版本 OpenSSL(如 1.x)默认方式做的,解密用的是新版本
那就必须显式指明密钥派生函数(Key Derivation Function, KDF):
openssl aes-256-cbc -d -in xxx.tgz.enc -out xxx.tgz -pass file:aes256.key -md md5
================# 水平有限 欢迎指正 #=================

浙公网安备 33010602011771号