消息认证和散列函数
认证函数
-
消息加密函数
-
用完整信息的密文作为对信息的认证
-
对称加密
-
公钥加密和认证
-
从根本上说,信息加密提供的是保密性而不是真实性
-
-
消息认证码MAC
- MAC是消息和密钥的函数,产生一个固定长度的值作为认证标识
- 使用对称密钥实现MAC
-
散列函数
- 是一个公开的函数,将任意长度的信息映射成一个固定长度的信息
- 是单向散列,且能够抗强弱碰撞
- 与MAC的区别,没有密钥,输入只有一个
- 能够检测出消息是否发生变化
散列函数的应用
-
对称加密散列码,实现MAC : M ∣ ∣ E ( k , H ( M ) ) M || E(k,H(M)) M∣∣E(k,H(M))
-
公钥加密散列码,实现数字签名 M ∣ ∣ E ( P R a , H ( M ) ) M || E(PR_a,H(M)) M∣∣E(PRa,H(M))
-
对称密码加密签名,实现保密性 E ( K , M ∣ ∣ E ( P R a , H ( M ) ) ) E(K,M||E(PR_a,H(M))) E(K,M∣∣E(PRa,H(M)))
-
带秘密值的散列码 M ∣ ∣ H ( M ∣ ∣ S ) M||H(M||S) M∣∣H(M∣∣S)
MD5算法概述
- 填充数据
- 首先计算数据长度(bit)对512求余的结果,如果不等于448,就需要填充数据使得数据长度对512求余的结果为448,其填充方式为第一位填充1,其余位填充0.填充后数据长度为512*N+448。
- 记录数据长度,附加消息长度
- 用64位来存储填充前数据的长度,这64位将加在填充后数据的后面,这样最终的数据长度为512*N+448+64=(N+1)*512
- 初始化缓冲区,装入标准幻数
- A=01234567 B=89ABCDEF C=FEDCBA98 D=76543210
- 分组处理消息,四轮循环运算
- 在上面对数据处理后,数据长度将是(N+1)/512,我们将每512位(64字节)作为一块,总共要循环N+1次,并将块细分为16个小组,每组的长度为32位(4字节),这16个小组即为一轮,总共得循环4轮,即64次循环。总的来说我们需要(N+1)个主循环,每个主循环包含了64次子循环,来不断的改变幻数A,B,C,D才能最终得到数据的MD5值。
- 输出消息摘要