2

我在业余时间一直在玩 OpenPGPjs(OpenPGP 的 Javascript 端口)来学习新东西。为了测试它,我正在开发一个简单的 Web 应用程序来存储和检索数据库中的密钥对和加密数据。

由于 OpenPGPjs 可以选择生成“装甲”密钥(以文本形式输出的二进制密钥),因此我想将其保存在数据库中。但是在生成密钥对时,我注意到它们不是固定长度的(正如我错误地假设的那样)。键的可变长度让我对为数据库中的字段大小选择什么限制感到困惑。

有人可以澄清以下对 OpenPGP 的疑问:

-> OpenPGP“装甲”密钥的最大尺寸是多少?
-> 可以根据加密数据的大小来计算加密数据的大小吗?
-> 什么是一般的,推荐的做法(如果有的话)将这些密钥存储在数据库中。

PS:我已阅读并了解使用 Javascript 进行加密的陷阱,因此您可以跳过该警告。:)

注意:根据评论,我已经编辑了这个问题,希望能消除我想知道的任何歧义。

4

2 回答 2

2

无法预测(公共/私人,无关紧要)密钥和加密数据的长度。如果要将它们存储在数据库中,请使用BLOBor TEXT(不是VARCHAR,您不需要任何索引并且会以相当稀疏的数据布局结束)。VARCHAR如果您必须查询它,您可能希望放弃一些规范化并单独存储密钥 ID(或指纹) 。

ASCII 铠装数据更容易处理,而二进制数据更紧凑。


对于加密数据,很容易看出加密长度在很大程度上取决于输入,而且还取决于选择了哪些加密和压缩算法——OpenPGP 允许其中很多。由于压缩不应该(显着)增加存储,对称加密如果不相等,至少应该是线性大小,元数据或多或少是固定大小的,你可以很容易地为你的特殊算法集确定一些上限。对于存储在数据库中,这可能是无关紧要的,因为长度对于合理的内联存储来说太大了。

对于密钥包,这取决于您要存储什么:除了公共主密钥之外,通常还会存储几个公共子密钥(实际上是用于加密的)。公钥还包含用户 ID、可能是图像、可能是一些配置、撤销证书和传入签名。公钥通常可以变得相当大,不信任最大大小。私钥也一样,通常捆绑了公钥。理论上大小可以任意大(至少我不知道指定 RFC 中有任何限制)。

于 2013-11-17T19:10:26.727 回答
1

密钥长度是您选择的 - 如果您采用当前的建议,可能是 4096 位。Base64 对其进行编码并将其保存为 varchar。

加密数据的长度是完全可变的。IIWM 我会对它进行base64编码并将其写入磁盘。将生成的文件名保存在表中,而不是实际数据。

于 2013-11-17T11:32:23.027 回答