人类可读的方式来表示PGP密钥(分散式客户端身份验证)



我正在开发一个分布式应用程序,我们需要一种授权客户端的方法。每个客户端都有一个与之关联的 PGP 密钥对,我们要求它们输入其私钥(未存储(,通过该私钥派生其公钥并用于标识客户端并修改其在分布式数据库中的字段。

现在,考虑到用户体验,每当您需要做某事时在网站上输入私钥很麻烦。但是我们也无法维护基于用户名/密码的身份验证的中央数据库,因为这会创建一个故障点(不是分布式应用程序要做的事情(。

我希望有某种方法可以更容易记住私钥的人类可读描述符,该描述符可用于验证是否存在类似的东西。任何其他想法也值得赞赏。

我会抛出一堆想法来澄清这个问题:

您确定PGP适合您的需求吗?

我觉得你应该提供更多的细节来确定: - 私钥和公钥究竟是如何使用的?我理解以下内容:用户输入其私钥,信息被解密和修改,公钥是从私钥中推断出来的,用于加密更新的信息。 - 这与使用常规密码并能够对用户进行身份验证和加密数据有何不同? - 您似乎在网络上发送私钥,它们应该保持私密。

如何使用常规密码:用户有一个密码,您的应用程序使用一个函数(例如sha256,KDF,...(使其可以通过经典加密算法(例如AES(使用。然后,使用相同的(未存储(密钥,您可以加密和解密数据。您只需要通过在数据开头添加已知值(例如密钥的一部分(来确保解密有效。

快速示例:

password: "WeakPassword"
key: sha256("WeakPassword"+"MySalt") = 493e3ae...b2eec8ef
Decrypt(data,key)
clearData = "493e3ae{123;456}" //valid, because you can check the beginning
Encrypt(clearData,key)

优点:可用密码,更快的对称加密

使用二维码如果您坚持使用 PGP 并有可用的相机,那就非常方便了。 您也可以使用十六进制,base64,...但是对于 2048 位 RSA 密钥,这仍然可以为您提供数百个字符。

最新更新