我的家庭服务器运行 OpenBSD 5.3,并通过 Samba 向多台 Windows 计算机提供文件服务。我编写了一个脚本来备份视频文件,方法是加密每个文件openssl enc -aes-256-cbc
并将其上传到 Amazon S3。为了测试一种可能的恢复方案,我尝试在文件上运行脚本,将该文件下载到一台 Windows 计算机,并使用多个宣传为解密 AES 加密文件的程序对其进行解密,但他们无法解密它。 OpenSSL加密的文件只能用OpenSSL解密吗?在 OpenBSD 上通过 OpenSSL 加密的文件只能通过 OpenBSD 上的 OpenSSL 解密吗?
根据记录,我可以毫无问题地将文件下载到我的服务器并使用 OpenSSL 对其进行解密。但是,我有兴趣了解我在 S3 上的视频(快速存档到 Glacier)是否仍然可以访问,无论我选择什么服务器设置。
答案1
AES-CBC-256完整地规定了加密算法和解密算法。给定明文、密钥和 IV,AES-256-CBC 加密的两种实现将产生相同的密文。给定密文、密钥和 IV,AES-256-CBC 的两种实现将产生相同的明文。
IV 是加密消息时生成的随机字符串。如果你对相同的数据加密两次,你会得到不同的密文,因为 IV 会不同。这在一定程度上是为了让只能看到两个长度相同的密文的人无法检测密文是否相等。大多数工具都会将 IV 添加到密文前面,以便解密所需的所有数据都位于一处(当然,密钥除外)。
OpenSSL 命令行工具生成一个包含 16 字节标头、IV 和密文的文件。此格式特定于 OpenSSL,但不依赖于平台。
OpenSSL 的命令行更多地是作为库可能性的演示,而不是生产级命令行工具。我不建议使用它,它太容易犯错误,并且最终会得到不可恢复的数据或不安全的数据。此外,OpenSSL 不会帮助您进行密钥管理。
相反,请使用旨在加密文件的工具。GPG就是为此目的而设计的。生成密钥对,然后使用.gpg -e [email protected] /path/to/file
答案2
AES 加密和格式化由NIST 规范。可以安全地假设,只要实现兼容,您的文件就可以跨平台访问。