概 念
认证(Authentication):即鉴别、确认,它是证实某事是否名副其实,或是否有效的一个过程。
认证与加密的区别:
加密用以确保数据的保密性,阻止对手的被动攻击,如截取、窃听。
认证用以确保报文发送者和接受者的真实性以及原文的完整性,阻止对手的主动攻击,如冒充、篡改、重播等。
认证往往是应用系统中安全保护的第一道防线,极为重要(确保用户的合法性)。
MAC函数与加密函数的区别
MAC函数与加密函数类似,都需要明文、密钥和算法的参与。
但MAC算法不要求可逆性,而加密算法必须是可逆的。
例如:使用100比特的消息和10比特的MAC,那么总共有2100个不同的消息,但仅有210个不同的MAC。也就是说,平均每2^90个消息使用的MAC是相同的。
因此,认证函数比加密函数更不易被攻破,因为即便攻破也无法验证其正确性。关键就在于加密函数是一对一的,而认证函数是多对一的。
MD5的算法框图
输入消息可任意长,压缩后输出为128bits。
算法步骤(1)-分组填充
如果消息长度大于264,则取其对264的模。
执行完后,消息的长度为512的倍数(设为L倍),则可将消息表示为分组长为512的一系列分组Y0,Y1,…,YL-1,而每一分组又可表示为16个32比特长的字,这样消息中的总字数为N=L×16,因此消息又可按字表示为M[0,…,N-1]。
算法步骤(2)-缓冲区初始化
hash函数的中间结果和最终结果保存于128位的缓冲区中,缓冲区用32位的寄存器表示。可用4个32bits字表示:A, B, C, D。初始存数以十六进制表示为
A=01234567
B=89ABCDEF
C=FEDCBA98
D=76543210
算法步骤(3) -HMD5运算
以分组为单位对消息进行处理每一分组Yq(q=0,…,L-1)都经一压缩函数HMD5处理。HMD5是算法的核心,其中又有4轮处理过程。
HMD5的4轮处理过程结构一样,但所用的逻辑函数不同,分别表示为F、G、H、I。每轮的输入为当前处理的消息分组Yq和缓冲区的当前值A、B、C、D,输出仍放在缓冲区中以产生新的A、B、C、D。
每轮又要进行16步迭代运算,4轮共需64步完成。
第四轮的输出与第一轮的输入相加得到最后的输出。
压缩函数中的一步迭代
基本逻辑函数定义
压缩函数中的一步迭代
X[k]当前分组的第k个32位的字。