虽然通常要避免算法安全性,但我对代理/客户端软件(在Windows下本地系统帐户下运行)的方法感兴趣,以便对REST Web服务进行身份验证:
简而言之,我正在试图将冒名顶替的应用程序与我编写的合法客户端/代理软件区分开来。我知道这样的安全性可以通过(1)我的代码的反汇编或(2)我的代理发送的许多消息的分析来破解 - 或者揭示算法。我很满意(安全性永远不会完美)。
那说,你会建议什么?
由于其他原因,我需要每个客户端/代理通过GUID唯一地标识自己,我正在考虑一种方法,每个代理为自己生成一个GUID,然后使用GUID和时间作为“秘密”的种子算法“哈希。对我的一个Web服务的每个请求都需要额外的信息:代理GUID,特殊散列(以及可能在种子中使用的时间值)。收到请求后,我的Web服务尝试使用相同的“隐藏”算法重新创建相同的哈希。如果两个哈希匹配,那么可能是我写的合法客户端应用程序。
此时,除非有人(1)对我的输入(GUID和时间)进行了足够的分析以破解算法或(2)反转/解密我的代码以找到算法...然后我的网络服务可能会拒绝冒名顶替者和重播攻击。
哪种类型的数学/算法公式适合组合散列两个输入(例如GUID和时间)?是否存在这种“廉价”安全性的现有模式?是否有预定义的实现或标准?有关于我应该如何修改方法的建议吗?
答案 0 :(得分:1)
因为,正如您所知,没有办法阻止人们冒充您的应用程序,保持简单:在您的应用中嵌入共享密钥,然后根据您的意愿“保护”,并使用{{3来签署您的请求}}。不要忘记包含HMAC和时间戳以防止重播攻击。