假设我想加密浏览器内的数据(通过JavaScript,使用PGP)。由于不保存将密钥存储在浏览器中(LocalStorage),我希望将它们放在外部设备上,例如提供PGP加密/解密的YubiKey。
因此,用户写了一些秘密文本,插入他的YubiKey,按下一些按钮,秘密文本转到YubiKey,后者对其进行加密(而加密密钥保留在YubiKey上,然后返回加密文本。解密也一样。
这样的技术可能吗?如果没有,我还能在哪里保留加密密钥?
答案 0 :(得分:0)
目前无法使用浏览器访问此类设备。有一些plans要添加这样的功能,但它仍处于编辑器的草稿阶段,因此它可能需要一些时间才能作为标准发布。当然,并非每个浏览器在标准化时都不支持该功能。
关于您的问题,我认为如果您确实需要良好的保护,可以尝试将密钥存储在服务器上。
第一次生成密钥时,用户可以使用服务器生成的密码和随机GUID创建一种帐户(以确保服务器上不存在双GUID - 我知道几乎没有机会出现这种情况,但它也是一个很好的额外保护层)。您可以在客户端存储GUID(例如在localStorage中),这样每次都不会提示用户。必须注意用户,但是如果清除了localStorage,则需要将密钥保存在磁盘上的某个位置。然后,当创建帐户时,密钥将安全地(通过https)传输到服务器,密钥的名称将是生成的GUID。
创建帐户并且您希望从服务器接收密钥后,浏览器必须发出ajax请求 - 用户必须提供他/她的密码和密钥ID(GUID),如果它不存在在localStorage。一旦服务器将keyID与密码匹配,它将返回密钥。您可以使用密码和收到的密钥解密文本。