使用非对称加密保护文件
Posted
技术标签:
【中文标题】使用非对称加密保护文件【英文标题】:Protecting a file using asymmetric cryptography 【发布时间】:2012-01-21 19:57:54 【问题描述】:我知道非对称加密的工作原理。我知道有两把钥匙(一把私人钥匙和一把公共钥匙)。
当有人想要交流时,他们用这些公钥交换他们的公钥加密消息,然后相应的消息只能由拥有私钥的用户解密。
现在,我正在使用 Node.js,我需要做这样的事情......
我需要一个每小时读取数据库、提取数据并将其保存到需要发送到另一台服务器的文件的应用程序。 我的问题是我不希望该文件对其他人可见,我使用 SSH 进行传输所以没有问题但是 我必须加密该文件,因为我不是该服务器的管理员,所以也许有人可以阅读它。不幸的是,两台服务器的管理员都是相同的。 所以我的想法是用公钥加密文件,然后只有拥有私钥的人(我)才能解密。
我认为使用类似的东西是没有意义的:
var key = 'blablabla'
如果我使用公钥,没有问题,所有人都可以读取它......它确实是公开的。但是有了这个公钥,没有人可以解密消息,所以它是 类似于单向加密。
现在,有人可以告诉我是否需要签名者/验证者来完成这项工作,或者我是否必须使用 openssl 生成两个密钥(公共/私有)并将这些密钥传递给密码器/解密器?
我正在查看加密模块,但没有示例......
【问题讨论】:
【参考方案1】:一般来说,您的想法是正确的 - 您使用公钥加密并使用您的私钥解密。然而,实际上该过程更复杂。生成随机对称密钥,并使用该密钥对数据进行加密。然后使用公钥对随机密钥进行加密。加密密钥与加密数据一起发送给接收方。另一方面,使用私钥解密加密密钥,然后解密数据。
您可以使用 OpenPGP 密钥或 X.509 证书来完成这项工作。
在 OpenPGP 的情况下,该标准将加密和解密作为原子过程(在用户级别)提供。如果是 X.509 证书,您需要使用 PKCS#7 / CMS。
OpenSSL 库提供使用 PKCS#7 / CMS 的操作,但是当我查看用于 OpenSSL 的 nodeJS API 时,该 API 非常有限,并且没有公开这些功能。也许您可以编写自己的 nodeJS 模块,该模块将与 OpenSSL 接口并提供缺少的功能。
另一种选择是使用 OpenPGP 密钥和node-gpg 模块。该模块使用 gnupg 来完成实际工作,因此必须安装 gnupg。
不幸的是,我在 nodeJS wiki 中提供的 3rd-party 模块列表中没有看到任何其他合适的库。
【讨论】:
使用 OpenPGP 代替 OpenSLL 有没有区别?两者都使用 PKCS#7 / CMS @Dail OpenPGP 与 PKCS#7/CMS 无关。以上是关于使用非对称加密保护文件的主要内容,如果未能解决你的问题,请参考以下文章