我需要开发一个支付网关,我刚刚意识到我需要存储一个用于身份验证操作的HMAC_SHA256_V1
密钥。这样做的方法是:浏览器调用一个WCF服务,该服务使用用我的HMAC_SHA256_V1键签名的信息进行响应,然后浏览器通过POST发送带有该信息的请求,打开网关支付页面(通过重定向)。那把钥匙和我用来检查支付网关响应的一样。
因此,我想我可以将该密钥存储在一个一行SqlServer表中的配置行中,所以我的问题是:是否需要采取任何措施,例如加密密钥或采取任何措施来保护这些信息?
发布于 2016-03-08 22:44:08
我对工作流程有点不清楚,所以如果我不在,请告诉我。
我相信现在的情况是你在和一家服务公司沟通。您向服务发出请求,它就会做出响应,用HMAC对答复进行签名。然后,您将验证HMAC是否正确,以确保请求既来自服务(真实性),也没有被中介(完整性)修改。
为了让HMAC有效,钥匙必须是秘密的。如果密钥不是秘密的,则攻击者可以执行修改消息的操作,或者假装是服务,这样收件人就无法知道他们正在接收修改后的消息,或者没有与他们想要的合作伙伴交谈。如果你愿意放弃诚信和真实性,那么使用HMAC根本就没有意义。因此,HMAC密钥必须是秘密的,才能有效。
确切地说,哪些保护是适当的,以保持关键的秘密是依赖于应用程序。例如,如果应用程序有SQL注入漏洞,将其存储在数据库表中可能会导致其公开。如果您的体系结构可能易受SQLi攻击(我认为任何接受用户输入并将其作为SQL查询的一部分使用的应用程序都可能容易受到SQLi的攻击),这对我来说是很危险的。将密钥存储在磁盘文件中可能容易受到路径遍历攻击攻击。
最后,没有一个制度是完美的。您必须根据应用程序的敏感性来调整安全性的大小。其中一个诀窍是通过在数据库中存储加密的HMAC密钥并将密钥存储到其他地方(可能是web根目录之外的文件)来实现结合多种安全措施。然后,攻击者需要同时获得加密的HMAC密钥及其解密密钥,才能执行成功的攻击。离HMAC密钥和解密密钥越远,您的应用程序就越安全(而且实现和操作起来也就越不方便)。
https://security.stackexchange.com/questions/116801
复制相似问题