我对加密文件格式感到有点困惑。
假设我想用AES-256加密文件。我通过加密算法运行文件,现在我有一个加密字节流。
我显然可以将该字节流写入文件,但任何第三方加密应用程序都不会理解它,因为它不期望只是一个原始的加密字节流。
我可以编写哪种文件格式,以便其他加密工具可以理解它?
我所知道的(我认为)是:
PKCS#7
ASN.1
DER
PEM
PKCS#8
但我不确定它们是如何相互关联的。
显然,AESCrypt实用程序也有一种格式,它似乎是它自己的专有格式: http://www.aescrypt.com/aes_file_format.html
这个东西上有备忘单吗?我一直在谷歌搜索,发现了点点滴滴,但从来没有觉得我有完整的画面。
答案 0 :(得分:7)
PKCS#8不是加密文件格式,它是私钥的格式。
ASN.1和DER是将结构化消息转换为二进制的规则。虽然它们用于定义和描述文件格式,但它们本身并不是文件格式。
PKCS#7与PEM密切相关,它们都是公钥加密文件的格式。它们是根据base-64封装的DER编码的ASN.1消息定义的。它们是安全互联网邮件的S / MIME格式的基础。 (见RFC3851)
与S / MIME并行的是OpenPGP文件格式,也主要用于公钥加密文件。 (见RFC4880)
在S / MIME和OpenPGP格式中,都有一个包含对称密钥加密数据的块。可以创建仅包含此块的有效S / MIME或OpenPGP文件。这样,S / MIME(a.k.a. PKCS#7)和OpenPGP格式也可用于对称密钥加密。
答案 1 :(得分:2)
AES是一种加密算法,而不是文件格式。
正如你所指出的,算法上有很多旋钮和杠杆 - 关键力量是一个。 AES-256只是指具有256位密钥的AES算法。但是还有很多其他的旋钮。模式,一个。 AES有多种模式:CBC,ECB,OFB,CFB,CTR等。另一种是IV,适用于某些模式。填充是另一个。通常这些旋钮在AES api中暴露,无论您使用何种框架。
在大多数情况下,AES与其他加密技术相结合 - 例如,基于密码的密钥派生(PBKDF2)通常用于生成密钥或IV。 MAC通常用于验证加密数据的完整性。
不同的工具使用AES进行加密,如果他们希望他们的数据可读,他们会发布他们使用的旋钮列表,它们的设置方式,以及如何使用相关的加密技术。
创建文件格式时,如果您希望其他应用程序可以读取您的文件,则需要存储或发布这些类型的内容。
答案 2 :(得分:1)
您可能想研究在2019年底标准化的Crypt4GH。
Crypt4GH,这是来自Global的一种新的标准文件容器格式 基因组与健康联盟(GA4GH),允许将基因组数据 从最初的排序到 与外部组织的专业人员共享。
据我所知,就加密而言,它与NaCl的crypto_box类似,但具有将磁盘上的文件格式规范化的优点。
答案 3 :(得分:0)