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);
		}
	}


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