简介:

ChaCha20-Poly1305是由ChaCha20流明码和Poly1305音讯认证码(MAC)联合的一种利用在互联网安全协定中的认证加密算法,由Google公司率先在Andriod挪动平台中的Chrome中代替RC4应用。因为其算法精简、安全性强、兼容性强等特点,目前Google致力于全面将其在挪动端推广。

概念:

流明码

又叫流加密,是对称加密算法的一种,加密和解密单方应用雷同伪随机加密数据流作为密钥,明文数据每次与密钥数据流顺次对应加密,失去密文数据流。实际中数据通常是一个位(bit)并用异或操作加密。

音讯认证码

通过特定算法后产生的一小段信息,查看某段音讯的完整性,以及作身份认证。查看内容是否被更改,作消息来源的身份验证。

算法介绍:

ChaCha20

chaochao系列流明码,作为salsa明码改进版本,具备更强的抵制明码分析攻击的个性,20示意该算法有20轮的加密计算。

因为是流明码,故以字节为单位进行加密,安全性的要害体现在密钥流生成的过程,即所依赖的伪随机数生成器(PRNG)的强度,加密过程即是将密钥流与明文逐字节异或失去密文,反之,解密是将密文再与密钥流做一次异或运算失去明文。

(1)ChaCha20的初始矩阵

矩阵的输出为一个256位的密钥、64位随机数、64位计数器值以及4×32位的常数,它们均填充在32位整型数组中作为初始矩阵。

(2)初始矩阵置换

ChaCha20算法有20轮运算,其中奇数轮次与偶数轮次在执行轮函数前须要别离通过行置换和列置换,故20轮运算能够看作10次迭代,每次迭代先做行置换再做列置换。

(3)轮函数

在矩阵每次实现置换后,都须要执行一次轮函数QUARTERROUND,该函数输出为4个32位串,即4个数组中的元素,输入同样也为4个32位串,这样执行完轮函数后除了数据以外,矩阵构造未产生任何变动。

(4)生成密钥流

在通过轮函数20轮周期(10轮行周期+10轮列周期)后,初始矩阵曾经变成了一个新的4×4矩阵,此时将新矩阵与初始矩阵矢量相加,失去的矩阵再拆分倒序序列化解决后即失去一个512位的密钥比特流。

(5)加密

将须要加密的信息(明文)与密钥流按位异或即失去密文,当明文大于512位时,依照上述步骤顺次生成密钥流,因为计数器是32位,实践上能够生成2 ^ 512 bit(256GB)的密钥流,所以个别长度的信息加密齐全足够。

(6)解密

接管方应用发送方传输过去的初始密钥、随机数以及协商好的常数和顺次递增的计数器值依照ChaCha20的密钥流生成规定产生与加密雷同的密钥流,按位与密文异或即可失去明文。

Poly1305

Poly1305音讯认证码的输出为32字节(256bit)的密钥和任意长度的音讯比特流,通过一系列计算生成16字节(128bit)的摘要。

(1) 密钥解决

首先将32字节的密钥分成16字节的两组,前16字节称作“r”,后16字节称作“s”,申请两个大小为16的数组r[]和s[]。

对于s,将其以字节为单位,倒序排列。

对于r, 将r[3],r[7],r[11],r[15]前4位清零(使其小于16),r[4],r[8],r[12]最初两位清零(可能被4整除),实现清零操作后,类按字节倒序排列。

最初失去s和r.

(2) 加密函数

加密之前在零碎中调配一个寄存器作为累加器ACC(程序中以数组示意),ACC初始值为0。明文划分为16字节一组,依照铭文长度s,划分为s/16组,进行s/16次加密(加密中会✖️r)。最初与s相加失去16字节明文摘要。

ChaCha20-Poly1305 AEAD实现

ChaCha20-Poly1305的加密数据筹备:

  • 256位密钥(32字节)
  • 96位随机数(12个字节)
  • 任何长度的关联数据
  • 任何长度的数据进行加密

加密波及步骤:

  1. creating the cipher using createCipheriv
  2. optionally adding the associated data
  3. adding data to the encryption stream
  4. finalizing the encryption
  5. obtain the authorization tag

解密波及步骤:

  1. create the decipher object usig createDecipheriv
  2. optionally set the associated data
  3. update the decipher stream with the ciphertext
  4. set the authorization tag
  5. finalize the decipher, which will validate the authorization tag for the associated data and the encrypted stream

留神:chacha20-poly1305仅在Node v11.2.0 +中受反对。

参考链接:https://www.derpturkey.com/ch...