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

2、安全性分析:
使用的密钥是双方事先约定的,第三方不可能知道。从整个流程可看出,攻击者只能截获作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以攻击者无法伪造出正确的响应。同时,由于每次请求获得的“挑战”随机数都不一样,攻击者也无法对请求进行重放攻击。
3、HMAC 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)、在服务器端启动监听:

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

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


(4)、修改代码使得客户端和服务器密钥不一致,则认证失败。
HMAC结合“挑战/响应”保障数据传输安全的更多相关文章
- HMAC在“挑战/响应”(Challenge/Response)身份认证的应用
HMAC的一个典型应用是用在"挑战/响应"(Challenge/Response)身份认证中. 认证流程 (1) 先由客户端向服务器发出一个验证请求. (2) 服务器接到此请求后生 ...
- TLS是如何保障数据传输安全(中间人攻击)
前言 前段时间和同事讨论HTTPS的工作原理,当时对这块知识原理掌握还是靠以前看了一些博客介绍,深度不够,正好我这位同事是密码学专业毕业的,结合他密码学角度对tls加解密这阐述,让我对这块原理有了更进 ...
- 通信技术以及5G和AI保障电网安全与网络安全
摘 要:电网安全是电力的基础,随着智能电网的快速发展,越来越多的ICT信息通信技术被应用到电力网络.本文分析了历史上一些重大电网安全与网络安全事故,介绍了电网安全与网络安全.通信技术与电网安全的关系以 ...
- hmac的python实现
Hash-based message authentication code,利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出 可以查看python的内置模块hmac.py的源码来学 ...
- 转:Hash, MAC,HMAC说明
from: http://www.cnblogs.com/songhan/archive/2012/07/29/2613898.html Hash, MAC,HMAC Hash-MD5, SHA-1, ...
- HMAC算法原理
HMAC算法是一种基于密钥的报文完整性的验证方法 ,其安全性是建立在Hash加密算法基础上的.它要求通信双方共享密钥.约定算法.对报文进行Hash运算,形成固定长度的认证码.通信双方通过认证码的校验来 ...
- 蛙蛙推荐:WEB安全入门
信息安全基础 信息安全目标 真实性:对信息的来源进行判断,能对伪造来源的信息予以鉴别, 就是身份认证. 保密性:保证机密信息不被窃听,盗取,或窃听者不能了解信息的真实含义. 完整性:保证数据的一致性, ...
- WEB安全入门
WEB安全入门 信息安全基础 信息安全目标 真实性:对信息的来源进行判断,能对伪造来源的信息予以鉴别, 就是身份认证. 保密性:保证机密信息不被窃听,盗取,或窃听者不能了解信息的真实含义. 完整性:保 ...
- 2.SDL规范文档
01.安全设计Checklist 输入验证 校验跨信任边界传递的不可信数据(策略检查数据合法性,含白名单机制等)格式化字符串时,依然要检验用户输入的合法性,避免可造成系统信息泄露或者拒绝服务 禁止向J ...
随机推荐
- spin lock的理解
为什么在spin lock保护的代码里面不允许有休眠的操作呢? 因为spin lock不是空实现的前提下(内核没关抢占,或者是SMP打开),spin lock中是关抢占的,如果一个进程A拿到锁,内核抢 ...
- C基础 读写锁中级剖析
引言 读写锁 是为了 解决, 大量 ''读'' 和 少量 ''写'' 的业务而设计的. 读写锁有3个特征: 1.当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞 2.当 ...
- 利用eclipse调试ofbiz之debug使用
1.项目右键-配置debug 2.new一个debug调试 3.配置运行类org.ofbiz.base.start.Start 4.设置内存大小:arguments-VM arguments -Xms ...
- thinkphp模板常用的方法
thinkphp模板我是看了3.2的文档,对里面的东西过了一遍,然后在写到需要用到模板的东西的时候就有印象,有的能直接回顾,但是有的就可能只知道有这个东西,但是不知道怎么用,所以就重新查手册,这个的话 ...
- Zookeeper之Curator(1)客户端对节点的一些监控事件的api使用
<一>节点改变事件的监听 public class CauratorClientTest { //链接地址 private static String zkhost="172.1 ...
- Java实现POI读取Excel文件,兼容后缀名xls和xlsx
1.引入所需的jar包: maven管理项目的话直接添加以下坐标即可: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -- ...
- Structs2 校验框架
代码结构: 使用Struts校验框架,保证输入学生的基本信息:学号.姓名.性别.出生年月.专业.总学分等,要求输入满足以下条件:(1) 学号前两位大于“13”并且后面4位必须为数字:(2) 出生年月必 ...
- 洛谷P2168 [NOI2015] 荷马史诗 [哈夫曼树]
题目传送门 荷马史诗 Description 追逐影子的人,自己就是影子. ——荷马 Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马 ...
- Ajax使用进阶
关于Ajax的概念不再做解释了,我想通过三个小例子来让大家对Ajax有个清晰的认识.要学习它,必须从最基础最原始的方式开始认识,然后通过使用框架来提升效率,逐步认识它. 一.原生js版(注册的用户名是 ...
- Linux含交互的自动登录脚本
近来经常要通过ssh登录服务器,每次输入命令和密码很麻烦,查资料发现有两种解决,一种是本地创建密钥直接登录,另一种是写个脚本. 这里介绍第二种方法,第一种资料也很多,但是觉得没啥意思. 先上脚本: # ...