我正在寻找允许我在我的App&之间使用共享密钥的协议/算法一个HTML页面。
共享密钥旨在确保只有拥有该应用的用户才能访问该网页。
我的问题:我不知道什么算法(我的方法来验证对HTML页面的有效访问)&我应该使用什么加密协议。
人们向我建议我使用HMAC SHAXXX或DES或AES,我不确定应该使用哪个 - 你有什么建议吗?
我的算法是这样的:
- 我创建了一个共享秘密,App& HTML页面知道(让我们称之为“MySecret”)。为了确保该共享密钥始终是唯一的,我将添加当前日期&分钟到秘密结束然后使用XXX算法/协议(HMAC / AES / DES)散列它。所以未加密的秘密将是“MySecret08 / 17 / 2011-11-11”&让我们说哈希就是“xyz”
- 然后我将此哈希添加到网址CGI:http://mysite.com/comp.py?sharedSecret=xyz
- 然后comp.py脚本使用相同的共享密钥&日期组合,散列它,然后检查结果散列是否与CGI变量sharedSecret(“xyz”)相同。如果是,那么我知道有效用户正在访问该网页。
你能想出更好的方法来确保有效的人可以访问我的网页(该网页允许用户参加比赛)吗?
我认为我使用共享密钥处于正确的轨道上但我的验证秘密的方法似乎有缺陷,特别是如果哈希算法不会产生相同的结果时间。
答案 0 :(得分:3)
特别是如果哈希算法不能一直为它生成相同的结果。
然后哈希被打破了。为什么不呢?
在简单的情况下,你想要HMAC。您正在使用共享密钥“签署”您的请求,并且服务器会验证签名。请注意,HMAC应包含更多数据以防止重放攻击 - 实际上它应包括所有查询参数(按指定顺序),以及序列号以防止窃听者重播相同的消息。如果您要验证的是共享密钥,则任何听到该消息的人都可以继续使用此共享密钥,直到它过期。通过包含序列号或短的有效范围,您可以将服务器配置为标记该序列号。
请注意,这仍然不完美。 TLS支持客户端和服务器端证书支持 - 为什么不使用它?
答案 1 :(得分:0)
看起来它会起作用。时钟漂移可能是一个问题,如果它在确切的时间内失败,您可能需要验证一个范围,比如+/- 3分钟。
有缺陷,特别是如果哈希算法不能始终为相同的输入生成相同的结果
那么,那将是一个破解的哈希算法。哈希可靠性每次为同一输入产生相同的输出(对于不同的输入,几乎总是不同的输出)。
答案 2 :(得分:0)
尝试使用某种网络加密。您的Web服务器应该能够自动处理该类型的身份验证。剩下的就是让你把它写进你的应用程序(无论如何你必须这样做)。根据您的应用平台,您也可以自动执行此操作。
Google这些:Kerberos,SPNEGO和HTTP 401授权要求。您可以使用简单的硬编码用户名和密码HTTP标头,并通过HTTPS运行连接。这样,您的服务器上的自定义代码就会减少,而您的服务器会负责验证您的请求。更不用说你正在利用HTTP的一些额外功能。