密码研发和隐私计算研发
主动攻击是指攻击者通过假冒、重放、篡改、拒绝等方式完成攻击。
消息认证可以抵抗主动攻击,可以验证接收消息的真实性、完整性、顺序性和时间性;数字签名也可抗主动攻击,用于验证消息的不可否认性。
消息认证和数字签名机制都会产生认证符。认证符是用于认证消息的数值,产生方式又可以分为消息验证码和哈希函数。
消息认证码是指消息「\(M\)」被一个密钥「\(K\)」控制的公开函数「\(C_K(M)\)」作用后产生的、用于认证符的、固定长度的数值,也被称为密码校验和「\(MAC\)」。
如何使用?
假设通信双方共享一个密钥\(K\),设\(A\)预发送给\(B\)的消息是\(M\)。
可以看出\(MAC\)实现了消息的:
MAC函数和加密函数的区别?
补充:加密算法的安全性
加密算法「对称或者公钥」的安全性一般取决于密钥的长度。如果加密算法没有弱点,则敌手只能使用穷搜索攻击以测试所有可能的密钥,如果密钥长度为\(k\)比特,则穷搜索攻击平均进行\(2^{k-1}\)个测试。
以CBC模式的DES算法为例,其初始向量为零向量,需被认证的数据(消息、记录、文件、程序)被分为64比特长的分组\(D_1,...,D_N\),其中如果最后一个分组不够64比特,则补0,然后计算数据认证码:
\(O_{1}=E_{K}\left(D_{1}\right)\)
\(O_{2}=E_{K}\left(D_{2}\oplus O_{1}\right)\)
\(O_{3}=E_{K}\left(D_{3}\oplus O_{2}\right)\)
\(...\)
\(O_{N}=E_{K}\left(D_{N}\oplus O_{N-1}\right)\)
数据认证码为\(O_N\)或者\(O_N\)的最左\(M\)个比特,其中\(16<=M<=64\)
ZUC的完整性算法128-EIA3是消息认证码函数,用于为输入的消息使用完整性密钥\(IK\)产生的\(MAC\)。
(1)根据参数按照一定规则产生初始向量\(IV\);
(2)以完整性密钥\(IK\)作为ZUC算法的密钥,执行ZUC算法产生出长度为\(L\)的32位密钥字节流\(Z_0,...,Z_{L-1}\);
(3)把\(Z_0,...,Z_{L-1}\)看成二进制比特流,从\(Z_0\)首位开始逐比特向后形成一系列新的32位密钥流,并在消息比特流的控制下进行累加,最后再加上\(Z_{L-1}\),便产生消息认证码\(MAC\)。
具体参考:国密复习
哈希函数\(H\)是一个公开函数,用于将任意长的消息\(M\)映射为较短的、固定长度的一个值\(H(M)\),作为认证符,称函数\(H(M)\)为哈希值或消息摘要值。
Hash函数的特点:
将Hash函数用于构造MAC方法,HMAC中Hash函数作为一个黑盒,容易替换。
输入消息\(M\),\(Y_i\)是\(M\)的第\(i\)个分组,\(L\)是分组数,\(b\)是一个分组中的比特数,\(n\)是哈希函数输出的长度,\(K\)是密钥,若密钥长度大于\(b\),则将密钥输入到哈希函数中产生一个\(n\)比特长的密钥,\(K^+\)是左边经填充\(0\)后的\(K\),长度为\(b\)比特,\(ipad\)是\(b/8\)个00110110,\(opad\)是\(b/8\)个01011010。
最终:\(H M A C_{k}=H\left[\left(K^{+}\oplus{o p a d}\right)\parallel H\left[\left({K^{+}\oplus{i p a d}}\right)\parallel{M}\right]\right]\)
HMAC的安全性取决于其中使用哈希函数的安全性。
给出椭圆曲线方程的定义:\(y^2+axy+by=x^3+cx^2+dx+e\),其中\(a,b,c,d,e\)是满足某些条件的实数。
下面是两个例子:
有图可知:椭圆曲线关于\(x\)轴对称,记椭圆曲线上的无穷远点为\(O\)。
椭圆曲线上的加法运算:若曲线上的三个点位于同一条直线上,则它们的和为\(O\)。
less 文件:以较少内容展示,按辅助键(数字+回车、空格+上下)
more 文件:以较多内容展示,按辅助键(数字+回车、空格+上下)
wc -l 文件:统计文件内容的行数
传统构造MAC的方法使用的是分组密码,正如上面提到的「DES数据认证算法」,使用CBC模式下的SM4构造MAC算法如下:
需要被认证的数据被分为128比特长的分组\(D_1,...,D_N\),其中若最后一个分组不够128比特,则补零,通过下面的方式计算数据认证码,数据认证码为\(O_N\)或者\(O_N\)的最左\(M\)个比特:
\(O_{1}=E_{K}\left(D_{1}\right)\)
\(O_{2}=E_{K}\left(D_{2}\oplus O_{1}\right)\)
\(O_{3}=E_{K}\left(D_{3}\oplus O_{2}\right)\)
\(...\)
\(O_{N}=E_{K}\left(D_{N}\oplus O_{N-1}\right)\)
1、现代密码学-杨波