algorithm - 客户端服务请求的隐式 "Authentication"

标签 algorithm security web-services authentication hash

虽然通常要避免算法安全性,但我对代理/客户端软件(在本地系统帐户下在 Windows 上运行)向 REST Web 服务验证自身的方法很感兴趣:

  • 不依赖 PKI
  • 不依赖于用户的账户(代理代码是“本地系统”)

简而言之,我试图以低廉的成本将冒名顶替的应用程序与我编写的合法客户端/代理软件区分开来。我知道这种安全性会通过 (1) 反汇编我的代码或 (2) 分析我的代理人发送的许多消息来突破——两者都会揭示算法。我同意这一点(安全从来都不是完美的)。

也就是说,您有什么建议?

由于其他原因,无论如何我都需要每个客户端/代理通过 GUID 唯一地标识自己,我正在考虑一种方法,其中每个代理为自己生成一个 GUID,然后使用 GUID 和时间作为“ secret ”的种子算法”哈希。对我的 Web 服务之一的每个请求都需要额外的信息:代理 GUID、特殊哈希(可能还有种子中使用的时间值)。收到请求后,我的 Web 服务会尝试使用相同的“隐藏”算法重新创建相同的散列。如果这两个哈希匹配,它可能是我编写的合法客户端应用程序。

在这一点上,除非有人 (1) 对我的输入(GUID 和时间)进行了足够的分析以破解算法,或者 (2) 反转/反汇编我的代码以找到算法...那么我的网络服务可能能够拒绝冒名顶替者和重放攻击。

什么类型的数学/算法公式适合组合散列两个输入(例如 GUID 和时间)?这种“廉价”安全性是否存在现有模式?是否有预定义的实现或标准?是否有关于我应该如何修改该方法的建议?

最佳答案

因为,如您所知,没有办法阻止人们冒充您的应用程序,所以保持简单:在您的应用程序中嵌入一个共享 secret ,按您希望的方式“保护”它,并使用它来使用 HMAC 来签署您的请求。 .不要忘记包含 nonce以及防止重放攻击的时间戳。

关于algorithm - 客户端服务请求的隐式 "Authentication",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3368063/

相关文章:

c++ - 计算相邻盒子的数量

c - 难以理解,尤其是在输入方面

c# - 在 C# 控制台应用程序中处理 HTTP 请求

web-services - WSDL 与 REST 优缺点

algorithm - 存储一百万个值的最佳数据结构?

在 C 中比较两个数组并创建具有相同元素的新数组

javascript - 创建 XSS 易受攻击的网页

mysql - 黑盒 SQLi : MySql “error in your SQL syntax” when larger “UNSIGNED BIGINT”

json - 如何安全地使用用户提供的 JSON 文本?

asp.net - 方法 'XYZ'无法反射(reflect)