我正在开发一个分布式应用程序,我们需要一种方法来授权客户端。每个客户端都有一个与其相关联的PGP密钥对,我们要求它们输入其私钥(未存储),通过该私钥,其pubkey将被派生并用于标识客户端并修改其在分布式数据库上的字段。
现在,考虑到用户体验,当你需要做一些事情时,在网站上输入私钥是很麻烦的。但我们也不能维护一个用于基于用户名/密码的身份验证的中央数据库,因为这会创建单个故障点(而不是分布式应用程序要做的事情)
我希望有一些方法可以更容易地记住私钥的人类可读描述符,如果存在这样的东西,可以用它来进行身份验证。任何其他的想法也很受欢迎。
发布于 2019-08-29 17:09:39
我将抛出一堆想法来澄清这个问题:
您确定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密钥来说,仍然需要数百个字符。
https://stackoverflow.com/questions/57680212
复制相似问题