HMAC 挑戰 響應雙向認證

2021-09-01 05:38:25 字數 2272 閱讀 7610

hmac的乙個典型應用是結合「挑戰/響應」(challenge/response)來保障客戶端和伺服器傳輸資料的安全性 。

使用的金鑰是雙方事先約定的,第三方不可能知道。從整個流程可看出,攻擊者只能截獲作為「挑戰」的隨機數和作為「響應」的hmac結果,無法根據這兩個資料推算出金鑰。由於不知道金鑰,所以攻擊者無法偽造出正確的響應。同時,由於每次請求獲得的「挑戰」隨機數都不一樣,攻擊者也無法對請求進行重放攻擊。

客戶端**:

#coding:utf-8,

#!/usr/bin/env python

import xmlrpclib,hmac,hashlib

key = "d5ea6c5905746ebb826a9c8ad31db1be" #金鑰

name = "andy"

address = "waltstreet";

server = xmlrpclib.serverproxy(「

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 ******xmlrpcserver,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 = ******xmlrpcserver.******xmlrpcserver((「0.0.0.0」, 8888))

server.register_instance(server_object) #註冊rpc服務

print 「listening on port 8888」

server.serve_forever()

(1)、在伺服器端啟動監聽:

(2)、執行客戶端**,wireshark抓包如下:

(3)、伺服器返回認證通過:

(4)、修改**使得客戶端和伺服器金鑰不一致,則認證失敗。

分類:

安全知識庫

好文要頂

關注我收藏該文

fish_ou

關注 - 0

粉絲 - 29

+加關注 0 0

smart config風險分析與對策

橢圓曲線加密演算法(ecc)原理和c++實現原始碼(摘錄)

posted on 2015-01-06 20:57

收藏

訊息認證碼 hmac

hmac hash message authentication code 是用來確認訊息的完整性及認證訊息的傳送者的技術 完整性,是通過判斷hash值來確定的 認證,是通過對稱密碼的金鑰來完成的 因為是對稱密碼,所以傳送發和接收方事先需要共享金鑰 公式 hmac hash msg,key 傳送方傳...

雙向認證 什麼是單向認證和雙向認證?

雙向認證 ssl 協議要求伺服器和使用者雙方都有證書。單向認證 ssl 協議不需要客戶擁有ca證書,具體的過程相對於上面的步驟,只需將伺服器端驗證客戶證書的過程去掉,以及在協商對稱密碼方案,對稱通話金鑰時,伺服器傳送給客戶的是沒有加過密的 這並不影響 ssl 過程的安全性 密碼方案。這樣,雙方具體的...

ssl雙向認證

ssl雙向認證 ca.key 根證書的私鑰 ca.crt 根證書的簽名證書 server.key,server.crt client.key,client.crt 1 openssl ca.key,ca.crt 2 openssl server.key server.csrserver.crt 3 ...