熟悉以下加密算法的使用场景和优缺点,理论部分点到为止,不去深入研究(只是入门级)
1,对称加密算法,AES加密
2,SHA256,散列函数
3,非对称加密算法,RSA加密算法
4,CCM算法
5,HMAC算法
比如发送端如何传输一个安全的文件给接收端,此处就涉及到文件安全的问题,首先通过网络总线的协议基本可以将数据分成header+img的方式传输,因此需要对在总线上的数据进行加密解密以及安全证书,保证文件完整性且不会对外暴露和篡改
……对称加密算法。最小运算单元是bit。通常传输文件会对明文进行AES加密,生成一个密文在总线上传输,AES的特点是计算速度快。主要分为AES-128,AES-192,AES-256,对应的秘钥长度为128bits、192bits、256bits ,对应加密轮数为10,12,14。其中AES-256的安全性最高,但是性能最高的是AES-128。
……其加解密原理是:
…………发送方: 明文(block0~blockn) + 秘钥K = 密文(block0-blockn);
…………接收方: 密文 (block0-blockn)+ 秘钥K = 明文(block0-blockn);
……无论使用哪种加密方式,对于明文只能按照128bit来进行拆分,比如使用的是AES-128的算法,则表示会将明文img拆分成n个128大小的块,对于秘钥K也是128bits(分成key[0],key[1],key[2],key[3]四组,每组表示32bits)。经过秘钥扩展变成44个word(从key[0]~key[43]),用于将每一个img块(128bits)进行10次加密运算 ,n个img块都如此进行最终生成密文。
……其加解密的步骤如下:
…………1)明文----->轮秘钥加---->(字节代换,行移位,列混合,轮秘钥加)9次------>字节代换,行移位,轮秘钥加---->密文
…………2)密文----->同上----->明文
……因此AES的加密方式是可逆的,主要用于对镜像文件进行加密和解密。其加解密的秘钥为同一个秘钥K,因此保证秘钥K的安全性尤为重要。
…………AES-ECB电码本模式:如上所描述,针对明文进行分组,然后加密,生成密文
…………AES-CBC密文快链式模式:针对明文进行分组,第0组先于一段数据M(随机)进行异或再进行加密运算,生成密文,第2组先与第1组的密文进行异或,在进行加密。以此类推成链式
…………AES-CTR计数器模式:有一个自加的算子m(随机值),通过密钥对该算子进行加密,加密后的算子(m-k),与明文块(0-n)进行异或得到密文,此种方法速度最快,最常用
…………AES-CFB 密文反馈模式,类似CBC模式,对M先进行加密,再与明文0进行异或,生成密文0。再用下一组的密钥对密文0进行加密,再与明文1进行异或生成密文1,以此类推。
…………AES-OFB 输出反馈方式,与CFB模式类似,只是用加密后的M,对其加密,再与明文1进行异或生成密文1
……散列函数,又称哈希函数,主要功能是计算摘要,以字为单位。类似MD5那种算法。其重要功能是对一个镜像进行哈希,生成一个为256bits的摘要信息,主要目的是保证img镜像的完整性。主要原理分为以下几个步骤:
……1)数据处理:
………首先将img的数据进行填充,填充规则为img_size mod 512 = 448,在镜像文件后添加1,其余再添加0。数据填充完成后,在对其进行拆分,拆成n个512bit大小的块。
……2)确定哈希8个初值和64个常量:
………8个哈希初值(8个words)为前8个质数取平方根后,小数的前32bits(H[0]_1-H[0]_7)。64个常量(64个words C[0]~C[63])表示取自然界前64个质数的立方根后,小数的前32bits,
……3)计算方式:
…………a:构造64个字(img[0]~img[63]):将第一个512的数据块分成16个word,再通过这16个word计算生成后面48个word
…………b:通过64次加密循环 : img[i] + C[i] + H[0]_1~H[0]_7
…………c:通过b步骤 生成新的H[1]_0 ~ H[1]_7哈希值用于下一个512数据块
…………d:依次通过n次迭代生成的最后一笔H[n]_1~H[n]_7即为镜像最终的256bits摘要信息。
……常用的公钥加密算法(非对称),其原理为两个大质数相乘比较容易,但是对其乘积进行分解质因式非常难。因此可以将乘积进行公开。
……加解密原理为 fun{明文,E} mod N = 密文, 明文 = func{密文,D} mod N,因此公钥为(E,N),私钥为 (D,N)。
……求E,D,N的方法:
…………a:求N的方法:随机取两个大质数p,q,则pq=N
…………b:求E的方法:L表示(p-1)和(q-1)的最小公倍数,取值E的条件为:大于1小于L,并且E与L互质。
…………c:求D的方法:D必须大于1小于L,并且满足ED mod L =1
……此时公钥(E,N),私钥(D,N)已经求出,所以加解密的密钥对已经生成。
常用的rsa算法衍生版如 rsa-pss算法
……首先CCM是 AES-CTR加密和CBC-MAC认证的结合体,两者相互独立,对明文既进行加密又会生成认证码tag(通过分组加密后才生成),CCM对数据的加解密是可逆的,对数据header可以作认证码但不加密。
………CBC-MAC简介:MAC首先是一种认证码大致原理是@=mac(key,message);通过密钥key和消息message,生成的@,即为message的认证码。所谓CBC-MAC就是通过AES-CBC的加密方式对最后的数据块加密完成后,从结果中再取M个bytes作为认证码。
具体CCM算法如下:
…… 处理数据header:分别构建16byte大小的数据结构 B[0], B[1],,,,B[n], 其中B[0]数据结构由 flag (1个字节)|| nonce(12个字节)|| nonce_size(2个字节) || 字节大小占用空间(1个字节),B[1]-B[n] 是由header+img_body组成,不足16个补0填充,使用AES-CBC的模式生成16bytes 的MIC信息认证码,B[0] (加密) 异或 B[1] {其格式为: header_size(2个bytes) || header_info(14bytes) } ,然后对生成的结果再加密 ,然后与B[2] 异或,依次链式计算生成MIC。
………B[0的]flag信息组成:bit15-7 =0 || bit6 =1 header 存在 || bit5-bit3 MIC的size大小 || bit 2-0 size占用的大小
………加密img_body: 分别构建16bytes大小的数据结构的秘钥流,ctr[0] ,ctr[1] -ctr[n] ,其格式为 flag (1个字节)|| nonce(12个字节) ||nonce_size (2个字节) || index=1 (AES-CTR = 1),,ctr[1] - ctr[n] 通过秘钥加密 与 镜像(不包过header)进行异或生成密文。ctr[0] 通过秘钥加密后与MIC异或生成16个bytes的mac,即为最终的认证码。
………ctr[0]的flag信息组成:bit15-6 = 0 || img_body的size大小 || bit 2-0 size占用的大小。
……通过密钥和哈希的运算生成tag,一般只对header用该方法进行认证。公式为:H(K XOR opad, H(K XOR ipad, text)),ipad:0x36 进行多次重复。 opad:0x5a 进行多次重复。它们均保持和K 的长度一致。HMAC与CCM的区别是,HMAC通过摘要生成认证码,不能对数据使用hamc,因为摘要是不可逆的,若要对数据进行认证,则必须使用CCM。
1,只加密不认证。适用于普通的img大文件(带header)一般用于AES-CTR加密方式加密,因为速度快。不需要认证的原因是,img一般会有证书签名,保证其被授权过
2,加密且认证,适用于固定格式的img小文件(带header),一般用CCM算法,保证此img是经过认证授权的。类似带加密功能的CRC
3,只认证不加密,使用于专门对header进行该操作,一般用Hmac算法。高级版CRC算法。
4,非对称算法,一对多,公钥加密,私钥解密。需要保证私钥的安全性
5,对称算法,一对一,同一个秘钥加解密。需要保证秘钥的安全性。