from: http://www.cnblogs.com/songhan/archive/2012/07/29/2613898.html

Hash, MAC,HMAC

Hash-MD5, SHA-1, integrity

MAC- keyed hash, integrity & authenticity. HMAC 长度和其所用的hash长度一样

Hash

是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。

如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。

这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。

但另一方面,散列函数的输入和输出不是唯一对应關係的,如果两个散列值相同,两个输入值很可能是相同的。

但也可能不同,這種情況稱為「碰撞」,這通常是兩個不同長度的散列值,刻意計算出相同的輸出值。

Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系

了解了hash基本定义,就不能不提到一些著名的hash算法,MD5 和 SHA1 可以说是目前应用最广泛的Hash算法。

MD5(RFC1321) 是 Rivest 于 1991 年对 MD4 的改进版本,将任意长的明文 hash 成 128 bit 的杂凑值。

MD5是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。
那么它有什么用呢?很简单,通过它可以判断原始值是否正确(是否被更改过)。一般用于密码的加密。而我们所提供的MD5校验码就是针对安装程序的唯一对应的一段代码。你可以使用任何MD5运算器对下载的文件进行运算,运算出来的结果如果完全符合我们提供的MD5校验码,那么说明你下载的这个程序没有被中途修改过。
这个特征码有如下特性,首先它不可逆,例如我有一段秘密的文字如:"My Secret Words",经算法变换后得到MD5码(b9944e9367d2e40dd1f0c4040d4daaf7),把这个码告诉其他人,他们根据这个MD5码是没有系统的方法可以知道你原来的文字是什么的。 
其次,这个码具有高度的离散性,也就是说,原信息的一点点变化就会导致MD5的巨大变化,例如"ABC" MD5(902fbdd2b1df0c4f70b4a5d23525e932)和"ABC "(多了一空格)MD5(12c774468f981a9487c30773d8093561)差别非常大,而且之间没有任何关系,也就是说产生的MD5码是不可预测的。 
最后由于这个码有128位那么长,所以任意信息之间具有相同MD5码的可能性非常之低,通常被认为是不可能的。 
所以一般认为MD5码可以唯一地代表原信息的特征,通常用于密码的加密存储,数字签名,文件完整性验证等。

SHA1 是由 NIST NSA 设计为同 DSA 一起使用的,sha 是 Secure Hash algorithm 的缩写;它对长度小于 2^64 的输入,产生长度为 160bit 的散列值; SHA-1 设计时基于和 MD4 相同原理,并且模仿了该算法。

SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。SHA-1是由美国标准技术局(NIST)颁布的国家标准,是一种应用最为广泛的hash函数算法,也是目前最先进的加密技术,被政府部门和私营业主用来处理敏感的信息。而SHA-1基于MD5,MD5又基于MD4。

http://blog.csdn.net/showfray/article/details/2067362

http://blog.csdn.net/miaouu/article/details/6058126

MAC

消息认证码(带密钥的Hash函数):密码学中,通信实体双方使用的一种验证机制,保证消息数据完整性的一种工具。

安全性依赖于Hash函数,故也称带密钥的Hash函数。消息认证码是基于密钥和消息摘要【hash】所获得的一个值,可用于数据源发认证和完整性校验。

1. 发送者通过MAC算法计算出消息的MAC值,并和消息一起发给收信者

2. 收信者用同样的MAC算法计算收到的消息的MAC值,并对比两者。

HMAC

介绍:

Hash-based message authentication code,利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

a specific construction for calculating a message authentication code (MAC) involving a cryptographic hash function in combination with a secret cryptographic key. As with any MAC, it may be used to simultaneously verify both the data integrity and theauthenticity of a message.【主要是为了能让人对对方身份正确性和消息有效性进行验证,与消息摘要的最大不同,就是有签名密钥!】

方法:

HMAC(K,m) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ m))

【opad重复0x36,ipad重复0x5C】

通过两次hash两个不同的key来生成。 还没有发现有任何的方法来产生碰撞。

步骤:

First-Hash: H(Ko XOR Ipad || (data to auth))

Second-Hash: H(Ko XOR Opad || First-Hash)

1. 字符含义

  H 代表所采用的HASH算法(如SHA-256)

  K 代表认证密码

  B 代表H中所处理的块大小,这个大小是处理块大小,而不是输出hash的大小 【SHA-1和SHA-256 B = 64,SHA-384和SHA-512 B = 128 】

  Ko 代表HASH算法的密文 【在密钥K后面添加0来创建一个字长为B的字符串。(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00)

  Opad 用0x5a重复B次 
  Ipad 用0x36重复B次

2. Ko与ipad做异或运算。

3. 将数据流text填充至第2步的结果字符串中

4. 用H作用于第3步生成的数据流。

5. Ko与opad做异或运算。

6. 再将第4步的结果填充进第5步的结果中。

7. 用H作用于第6步生成的数据流,输出最终结果

应用:

HMAC的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中

1. 客户端向服务器发出一个验证请求

2. 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)

3. 客户端将收到的随机数提供给ePass,由ePass使用该随机数存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。

4. 与此同时,服务器也使用该随机数存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户

安全性:

HMAC算法更象是一种加密算法,它引入了密钥,其安全性已经不完全依赖于所使用的HASH算法

1. 使用的密钥是双方事先约定的,第三方不可能知道。能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。

2. HMAC与一般的加密重要的区别在于它具有“瞬时”性,即认证只在当时有效

http://stamen.iteye.com/blog/1558255

http://baike.baidu.com/view/1136366.htm

转载于:https://www.cnblogs.com/jhj117/p/5945866.html

转:Hash, MAC,HMAC说明相关推荐

  1. HASH和HMAC(8):HMAC算法原理

    HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写,在1997发布的RFC2104中被公布.它可以与任何迭代HASH函数(SH ...

  2. HASH和HMAC(3):SHA-1算法原理

    协议标准:https://csrc.nist.gov/CSRC/media/Publications/fips/180/2/archive/2002-08-01/documents/fips180-2 ...

  3. HASH和HMAC(4):SHA-224和SHA-256算法原理

    协议标准:https://csrc.nist.gov/CSRC/media/Publications/fips/180/2/archive/2002-08-01/documents/fips180-2 ...

  4. HASH和HMAC(5):SHA-384、SHA-512、SHA-512/224和SHA-512/256算法原理

    协议标准:https://csrc.nist.gov/CSRC/media/Publications/fips/180/2/archive/2002-08-01/documents/fips180-2 ...

  5. HASH和HMAC(1):HASH和HMAC概述

    HASH(哈希)函数是信息安全中一个非常重要的工具,它对一个任意长度的消息m施加运算,返回一个固定长度的HASH值h(m),HASH函数h是公开的,对处理过程不用保密.HASH值又被称为哈希值.杂凑值 ...

  6. HASH和HMAC(6):SM3算法原理

    协议标准:http://www.sca.gov.cn/sca/xxgk/2010-12/17/1002389/files/302a3ada057c4a73830536d03e683110.pdf 算法 ...

  7. HASH和HMAC(7):SHA3-224/256/384/512算法原理

    协议标准:https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf SHA3的算法处理类似于SHA1/2,整个处理过程可归纳为: 消息填充和消息 ...

  8. 使用node加密解密数据,创建Hash/HMAC,并生成签名与验证签名

    1.数据加密与解密 主要使用了node的crypto模块的Cipher与Decipher类来加密解密,加密与解密的方法主要有以下几种: 1.1 使用Cipher与Decipher对象作为流来加密解密 ...

  9. 认知理论与技术(hash函数,SHA,MD

    概述: 认证是个过程,通过这个过程一个实体向另一个实体证明某种声称的属性 认证参数: "口令"相当于平时登录系统时输入的密码. "密钥"相当于公钥密码体制中的私 ...

  10. HMAC算法及其应用

    HMAC算法及其应用 MAC HMAC HMAC的应用 HMAC实现举例 MAC 在现代的网络中,身份认证是一个经常会用到的功能,在身份认证过程中,有很多种方式可以保证用户信息的安全,而MAC(mes ...

最新文章

  1. 从词袋到Transfomer,NLP十年突破史
  2. boost::math模块非有限信号 NaN 环回测试
  3. 计算机教育 如何投稿,高职院校计算机教育论文投稿教育杂志-教育论文投稿
  4. 数据库面试中常用的10个问题
  5. python3.7界面_Python3.7+tkinter实现查询界面功能
  6. 搜索关键字字符串NSSCanner:scanString()详解
  7. 计算机论文与护理,快速护理论文范文
  8. Intent的一些简单用法
  9. difference between a Tensor and a Variable
  10. 朝花夕拾-不务正业的大学生做了什么比赛?
  11. NGUI的长按事件以及检测按钮点击事件的常用方法
  12. python怎么写游戏脚本_用PYTHON做一个简单的游戏脚本(基础,详细)
  13. 清除一个挖矿程序、步骤!!!
  14. 第6期丨一周电商零售News10条(2.15-2.21)淘宝在微信“开店”/人民网评茶颜悦色被指侮辱女性/最高检重点监督直播带货
  15. shell判断文件目录或文件是否存在
  16. 涉密计算机等级台账,保密工作台账的.doc
  17. 辣味人生:享受有辣而不辣
  18. ExpressBox 7 – RAS
  19. oracle 触发器用法,Oracle触发器用法实例详解
  20. 网络分析仪自动化测试软件,基于Agilent PNA系列网络分析仪实现脉冲器件自动测试系统的设计...

热门文章

  1. 二叉树的中序遍历—leetcode94
  2. 拼音开头有什么字_语文基础 孩子刚上一年级学习拼音太难了?家长在家这样教真不比老师差!...
  3. Pixhawk代码分析-姿态解算篇C
  4. allocator类初学的简单例子
  5. 简单说明c语言中常用的基本数据类型有哪些,C语言基本数据类型的.ppt
  6. 计算机语言表示教师节快乐,表达教师节快乐的微信祝福语大汇总54句
  7. js 只准输入数字_js实现文本框只允许输入数字并限制数字大小的方法
  8. Interfacing to kdb+ from Java
  9. 我的青春谁做主的经典语录
  10. MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎