客户端在本地存储其私钥并用于签署发送给服务器的消息,服务器将用户的公钥存储在数据库中以验证来自客户端的消息。
这是我的问题,如果客户端由于某些意外(例如硬盘被破坏)而丢失其私钥,它将永远无法连接到服务器(除非调用服务器的管理员来重置他的密钥)。
所以我在想,如果有一种算法可以从密码生成确定性RSA密钥对(可以保存在客户端的人脑中),那么上面提到的问题就会被消除。
使用Rust-openssl可以实现这样的算法吗?
答案 0 :(得分:0)
这样做基本上归结为使用密码作为输入来为种子伪随机数生成器播种。相同的种子将产生相同的伪随机数。可以找到这样做以确定性地生成素数(将用于最终生成RSA密钥)的示例here。如果这是一个单用途的独立可执行文件,则可以执行RSA_generate_key_ex
,否则编写RSA密钥生成器(使用BN函数)并导入密钥。
答案 1 :(得分:0)
签出dOpenSSL:https://github.com/bernardoaraujor/dopenssl.rs
它由某些OpenSSL功能的确定性实现组成,即:
我作为练习开始了这个存储库。 我还维护用C语言编写的https://github.com/bernardoaraujor/dopenssl(fork)。
我在dopenssl.rs中的目标是使用bindgen
自动生成Rust Wrappers。
dOpenSSL功能稳定,但是Rust Wrappers仍在开发中。
欢迎捐款。