HMAC的一個典型應用

HMAC的一個典型應用是用在“挑戰/響應”(Challenge/Response)身份認證中,

認證流程:

  (1) 先由客戶端向服務器發出一個驗證請求。
  (2) 服務器接到此請求後生成一個隨機數並通過網絡傳輸給客戶端(此爲挑戰)。
  (3) 客戶端將收到的隨機數提供給ePass,由ePass使用該隨機數與存儲在ePass中的密鑰進行HMAC-MD5運算並得到一個結果作爲認證證據傳給服務器(此爲響應)。
  (4) 與此同時,服務器也使用該隨機數與存儲在服務器數據庫中的該客戶密鑰進行HMAC-MD5運算,如果服務器的運算結果與客戶端傳回的響應結果相同,則認爲客戶端是一個合法用戶

安全性淺析

  由上面的介紹,我們可以看出,HMAC算法更象是一種加密算法,它引入了密鑰,其安全性已經不完全依賴於所使用的HASH算法,安全性主要有以下幾點保證:
  (1) 使用的密鑰是雙方事先約定的,第三方不可能知道。由3.2介紹的應用流程可以看出,作爲非法截獲信息的第三方,能夠得到的信息只有作爲“挑戰”的隨機數和作爲“響應”的HMAC結果,無法根據這兩個數據推算出密鑰。由於不知道密鑰,所以無法仿造出一致的響應。

  (2) HMAC與一般的加密重要的區別在於它具有“瞬時”性,即認證只在當時有效,而加密算法被破解後,以前的加密結果就可能被解密。

public byte[] encode(byte[] data) throws TransformerException {
		SecretKeySpec sk = new SecretKeySpec(StringTools.getAsciiBytes(this.key), ""HmacMD5"");
		Mac mac;
		try {
			mac = Mac.getInstance(HMAC_MD5_NAME);
			mac.init(sk);
			return mac.doFinal(data);
		} catch (NoSuchAlgorithmException e) {
			throw new TransformerException(e);
		} catch (InvalidKeyException e) {
			throw new TransformerException(e);
		}
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章