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 ...
随机推荐
- skb管理函数之alloc_skb、dev_alloc_skb、kfree_skb、dev_kfree_skb、consume_skb
alloc_skb--分配skb dev_alloc_skb--分配skb,通常被设备驱动用在中断上下文中,它是alloc_skb的封装函数,因为在中断处理函数中被调用,因此要求原子操作(GFP_AT ...
- OPENSOLARIS source
http://blog.csdn.net/nemo2011/article/details/8543220 http://fxr.watson.org/fxr/source/?v=OPENSOLARI ...
- Oracle with重用子查询
--with 重用子查询对于多次使用相同子查询的复杂查询语句来说,用户可能会将查询语句分成两条语句执行.第一条语句将子查询结果存放到临时表,第二条查询语句使用临时表处理数据.从 Oracle 9i 开 ...
- VM虚拟机,Linux系统安装tools过程遇到 what is the location of the “ifconfig” program
安装步骤: 复制到/mnt 解压文件 tar -zxvf VMwareTools-10.1.6-5214329.tar.gz 进入减压文件夹后安装 ./vmware-install.pl ... 一直 ...
- HDU-2819
Swap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1426(DFS+坑爹的输入输出)
Sudoku Killer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- [转载] Python itertools模块详解
原文在这里,写的很详细,感谢原作者,以下摘录要点. itertools用于高效循环的迭代函数集合. 无限迭代器 迭代器 参数 结果 例子 count() start, [step] start, st ...
- 197. Rising Temperature
Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to ...
- python 网络爬虫框架scrapy使用说明
1 创建项目scrapy startproject tutorial 2 定义Itemimport scrapyclass DmozItem(scrapy.Item): title = scra ...
- Java中多线程问题
线程调度中的方法: sleep() 顾名思义线程休眠可传递连个参数-@毫秒 @纳秒 yield() 暂时挂起 这里的线程会释放资源,但是有一个坑是虽然是释放资源但是是公平竞争资源 如:a线程释放资源后 ...