• 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)、修改代码使得客户端和服务器密钥不一致,则认证失败。

  • 相关阅读:
    批量创建账号脚本
    shell 批量创建_备份 mysql 数据库 表
    优化chkconfig
    cut 命令
    Shell for 循环
    while 读取文件内容
    生成随机数
    linux 资源管理
    shell 脚本后台运行知识
    while 语句
  • 原文地址:https://www.cnblogs.com/fishou/p/4206980.html
Copyright © 2020-2023  润新知