双向共享秘密

时间:2016-10-29 01:34:18

标签: api encryption shared-secret

我正在开展一个项目,在这个项目中,双方可以互相发出API请求,并使用共享密钥进行身份验证。另一方希望共享秘密在两个方面都是相同的,但我不明白这是如何工作的。所以我要么找一个如何安全地做到这一点的解释,要么找出这是不可能的事情,并且共享的秘密应该根据请求的方向而有所不同。

如果API请求只是向一个方向发展,我会使用密钥定义函数对密码进行加密,并存储散列和盐,然后我可以通过生成并匹配每个请求的散列来验证用户。但是如果我需要使用相同的共享密钥来向其他API发出请求,那么我似乎需要以可以解密的方式存储密码,这似乎是错误的/不可能的。

有没有办法做到这一点,或者共享秘密应该根据请求的方向而有所不同?

1 个答案:

答案 0 :(得分:0)

您的分析是正确的。如果双方都可以是来电者,那么双方都需要知道这个秘密(不仅仅是能够验证它)。

有两个单独的密钥(每个呼叫者一个,你可能在这个用例中称之为“密码”)似乎是一个合理的默认设置。

考虑“政党”并给予每个人自己的证书总是好的,特别是如果以后会有更多的政党参与。使以后更容易撤销单个访问权限,强制执行细粒度访问控制,并最大限度地减少泄露凭据的影响(攻击者只能冒充一方,而不是模拟系统中的任何其他人)。

只有一个可能看起来稍微容易管理,但是你负责不泄漏另一个人的钥匙(除了你自己的)。我会尽量避免这种额外的负担。