基于密码在javascript中生成RSA密钥对

She*_*man 12 javascript security cryptography rsa key-generator

据我所知,RSA密钥通常是基于(强)随机生成器生成的.

相反,我想基于密码创建它们.

或者更确切地说是它的哈希值,例如sha512(sha512(密码+盐)+密码+辣椒)

这需要在JavaScript中完成客户端.

谁会知道怎么做?是否有一个简单的JavaScript库,可以根据给定的输入确定性地创建RSA密钥对?

(实际上,我提到了RSA,但任何安全的非对称加密就足够了,我只需要公私加密)


另外:我需要这个,因为我正在构建一些安全的通信解决方案,不需要依赖连接甚至服务器来保证安全.

我正在使用随机密钥使用AES加密所有内容,并且密钥是RSA加密的.这个想法是Alice可以使用Bob的公钥对其内容(或实际上是她的内容的AES密钥)进行RSA加密(因此Bob的公钥必须在线存储).

之后,当Bob再次输入密码时,他的浏览器可以在现场确定性地计算他的RSA私钥和公钥,从Alice下载内容,并使用他的私钥在本地解密.

Eug*_*its 10

当您将密码作为RNG的种子提供时,看起来Cryptico可以帮助您.


Vla*_*kov 5

2020 年浏览器/客户端的答案:

如果您想通过 TypeScript 在客户端使用 RSA 加密(例如在浏览器或带有 Ionic 的混合应用程序中),请执行以下操作:

  • npm i cryptico-js --save
  • 在您的 TypeScript (v3.4+) 代码中使用 next import:import * as cryptico from 'cryptico-js/dist/cryptico.browser.js';
  • 之后,您可以使用cryptico此处描述的所有方法:https ://www.npmjs.com/package/cryptico


Pet*_*y B 2

RSA 密钥不像大多数对称算法那样只是随机位,它们是从大素数导出的指数和模数。因此,我没有看到任何合理的方法可以从密码生成它们。请参阅这篇维基百科文章

您使用这些密钥对做什么?为什么它们必须从密码中派生?如果您想使用密码来加密某些内容,您可以使用 SHA256(密码)来派生 AES256 密钥。(如果您打算这样做,请务必阅读关键强化内容)。

  • @Petey:我知道 RSA 密钥不仅仅是随机位,但我可以简单地用从密码派生的东西替换随机生成器(无论它出现在现有 RSA 密钥生成器中的何处)。它甚至可以是一个随机生成器,只是用密码的哈希值作为种子。这样,相同的密码将产生完全相同的 RSA 密钥。 (2认同)