我面临的问题很有趣,我对安全的了解很强,但我的理解力很弱。也就是说,我理解这个理论,但在这方面几乎没有实际应用。我已经存储了密码,使用salt传输它们,验证它们是哈希等等。我的需求类似但具体。
我有一个应用程序,其他外部应用程序可以通过ContentProvider URI“挂钩”。外部应用程序可能由任何人开发,因此我无法控制它们。但是,我想限制对订阅者的一些访问。为方便起见,每个“订阅”的应用程序将在其包名称中注册一个密钥。然后,ContentProvider需要验证此密钥是否有效。
我的问题是: 由于它是通过URI传递的,因此很容易拦截传输中的密钥。此外,我的订户需要一种方法,通过该方法,他们可以存储自己的密钥,而无需连接到安全的服务器。当然,他们无法将密钥存储在他们的应用程序中,因为这样可以轻松实现漏洞。我试图提供尽可能多的解决方案,而不必“信任”这些其他应用程序的安全性。
那么,我们如何在我的数据库及其外部应用程序中存储密钥,并允许它们将其发送给我以进行特别验证的查询?我认为我在理解如何执行此操作时遇到的问题是持久存储的方面以及它如何影响模型。也就是说,使用密码模型,密码是键入的,通常不会存储。
FuzzicalLogic
答案 0 :(得分:1)
在加密质询/响应中处理密钥。
客户端请求使用预定的每个应用程序公钥加密的质询值。 如果客户端然后将正确的值返回给使用客户端特定服务器的公钥加密的服务器,则握手成功。
使用每个应用程序私钥/公钥以及诸如guid之类的挑战值,将很难复制。
除非最初注册应用程序开发人员,否则密钥永远不会转手。