我正在开发一个分布式应用程序,我们需要一种授权客户的方法。每个客户端都有一个与它们相关联的PGP密钥,我们要求它们输入它们的私钥(而不是存储的),通过该密钥派生并使用它们来识别客户端并在分布式数据库中修改它们的字段。
现在,考虑到用户体验,在网站上输入私钥是很麻烦的。但是,我们也不能为基于用户名/密码的身份验证维护一个中央数据库,因为这会造成单个故障点(而不是分布式应用程序要做的事情)。
我希望有一些方法可以更容易地记住私钥的人类可读的描述符,它可以用于身份验证--如果存在类似的东西。任何其他的想法也是值得赞赏的。
在背景方面,我不是一个密码学家,我是一个计算机开发人员,所以我不完全理解PGP是如何工作的--不好意思,如果这是一个菜鸟问题。
发布于 2019-08-27 12:56:47
显然,这个答案将被更新,因为OP发展对他的应用程序的理解。我从来没有使用过PGP,但是一般的公钥密码学概念总是适用的。
当你需要做某事时,在网站上输入私钥是很麻烦的。
您可以让客户端通过令人难忘的字符串派生密钥--用户代理首先使用安全密钥派生函数(KDF)从用户提供的字符串派生种子,以及( 2)随机盐,然后将种子输入到密码确定性随机比特生成器( DRBG ),然后使用公正种子DRBG运行密钥对生成。
通常,带有大小写字母和数字的难以猜测的16个字符字符串是最小的。盐应该是至少16个完全随机字节的字符串.
但是,我们也不能维护用户名/密码的中央数据库。
如果您没有一个用户数据库,如何对它们进行身份验证(从外部识别实际用户)?有一种解决方案:使用将身份验证器绑定到公钥的原语,例如ECQV隐式证书方案或基于身份的加密(IBE)。这些并不是常用的公钥密码功能,它们的后量子对等物还远未成熟。
发布于 2019-08-31 06:27:17
是的,比特币协议中有BIP39(比特币改进方案)。它将十六进制私钥转换为包含12到24个人类可读的单词的列表。
例如,您有一个加密密钥。
E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262转换为:
witch collapse practice feed shame open despair creek road again ice leastBIP 39有所有主要编程语言的实现。
还有一个较旧的和不太受欢迎的规范(1994年)来自互联网工程任务组,称为RFC 1752。
这可能是BIP39的灵感所在。要了解更多关于它的信息,请参阅此中篇
https://crypto.stackexchange.com/questions/72844
复制相似问题