HMAC 挑战/响应双向认证

HMAC结合“挑战/响应”保障数据传输安全

1、流程图:

         HMAC的一个典型应用是结合“挑战/响应”(Challenge/Response)来保障客户端和服务器传输数据的安全性 。

image

2、安全性分析:

         使用的密钥是双方事先约定的,第三方不可能知道。从整个流程可看出,攻击者只能截获作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以攻击者无法伪造出正确的响应。同时,由于每次请求获得的“挑战”随机数都不一样,攻击者也无法对请求进行重放攻击。

3HMAC Python实例:

3.1、源代码:

客户端代码:

复制代码
#coding:utf-8,
#!/usr/bin/env python
#说明:用户向服务器发起RPC请求,用于更新用户名字、地址等信息。
import xmlrpclib,hmac,hashlib
key = "d5ea6c5905746ebb826a9c8ad31db1be" #密钥
name = "Andy"
address = "WaltStreet";

server = xmlrpclib.ServerProxy(http://10.80.21.34:8888)
challenge
= server.getChallenge(); #向服务器获取“挑战”码
message = name + address + challenge; #组合明文消息和“挑战”码
signature = hmac.new(key,message).hexdigest() #获取明文消息摘要
print server.updateMsg(signature,name,address) #提交用户信息的请求

复制代码

服务端代码:

复制代码
#coding:utf-8,
#!/usr/bin/env python
#说明:服务器验证来客户端的请求是否合法,以及对请求进行处理。
import SimpleXMLRPCServer,hmac,hashlib,random
key = "d5ea6c5905746ebb826a9c8ad31db1be" #密钥,实际应用中可以从数据库中获取

class MyClass:
challenge
= ‘’;
def getChallenge(self): #生成32位的随机数“挑战”码
self.challenge = “”.join([random.choice(0123456789abcdefghjijklmnopqrstuvwxyz) for i in range(0,32)])
return self.challenge;
def updateMsg(self, signature, name , address): #请求处理
message = name + address + self.challenge; #组合明文消息和“挑战”码
if hmac.new(key,message).hexdigest() != signature: #对比两者是否一致
return Authen Failed! Forbidden !
else:
return Update success!

server_object = MyClass()
server
= SimpleXMLRPCServer.SimpleXMLRPCServer((0.0.0.0, 8888))
server.register_instance(server_object)
#注册RPC服务
print Listening on port 8888
server.serve_forever()

复制代码

3.2、过程分析:

1)、在服务器端启动监听:

clip_image002

2)、执行客户端代码,wireshark抓包如下:

clip_image004

3)、服务器返回认证通过:

clip_image006

clip_image008

4)、修改代码使得客户端和服务器密钥不一致,则认证失败。

分类: 安全知识库
0
0
« 上一篇: Smart config风险分析与对策
» 下一篇: 椭圆曲线加密算法(ECC)原理和C++实现源码(摘录)
<div class="postDesc">posted on <span id="post-date">2015-01-06 20:57</span> <a href="https://www.cnblogs.com/fishou/">Fish_Ou</a> 阅读(<span id="post_view_count">584</span>) 评论(<span id="post_comment_count">0</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=4206980" rel="nofollow">编辑</a> <a onclick="AddToWz(4206980);return false;" href="#">收藏</a></div>

猜你喜欢

转载自blog.csdn.net/ielhmps7796/article/details/84192143
今日推荐