我正在开发分布式应用程序,我们需要一种授权客户端的方法。每个客户端都有一个与之关联的PGP密钥对,我们要求他们输入其私有密钥(未存储),通过该私有密钥派生其发布密钥,并将其用于识别客户端并修改其在分布式数据库上的字段。
现在,考虑到用户体验,每当需要执行某项操作时都在网站上输入私钥很麻烦。但是我们也不能维护用于基于用户名/密码的身份验证的中央数据库,因为这会创建单个故障点(而不是分布式应用程序的意图)
我希望有某种方法可以使人们更容易记住易读的私钥描述符,该描述符可以用于验证是否存在类似的东西。任何其他想法也将受到赞赏。
答案 0 :(得分:0)
我将提出很多想法来澄清这个问题:
您确定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)
优点:可用密码,更快的对称加密
使用QR码 如果您坚持使用PGP并配有相机,那将非常方便。 您还可以使用十六进制,base64等,但是对于2048位RSA密钥,仍然可以获取数百个字符。