

自制加密通信协议(一):对称加密算法
source link: https://z-rui.github.io/post/2020/11/chacha20/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

自制加密通信协议(一):对称加密算法
Fri Nov 27, 2020
自古以来,有大量信息需要隐秘地传输,例如军事机密。密码学也随之发展起来。一种常用的加密算法是对称加密算法,它由加密函数E和解密函数D构成:
C=E(T,K)
T=D(C,K)
其中T为明文,C为密文。信息的传输双方事先约定一个共用的密钥K。密文可以在不安全的信道中传递,即使被敌人截获,在未知密码的情况下也很难恢复出原文。
ChaCha20 算法
我尝试使用名为 ChaCha20 的算法来处理互联网上传输的信息。该算法的详细描述可以参阅 RFC 8439。 ChaCha20 使用的核心部分是由 16 个 32 位整数构成的状态:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
之后用一种“四分之一轮” (quarter round) 算法 QR 来操作这个状态:
QR(a, b, c, d) ::
a += b; d ^= a; d <<= 16;
c += d; b ^= c; b <<= 12;
a += b; d ^= a; d <<= 8;
c += d; b ^= c; b <<= 7;
一“轮”由 4 个“四分之一轮”构成, 奇数轮为:
QR(0, 4, 8, 12);
QR(1, 5, 9, 13);
QR(2, 6, 10, 14);
QR(3, 7, 11, 15);
即对每列执行 QR 操作。 偶数轮为:
QR(0, 5, 10, 15);
QR(1, 6, 11, 12);
QR(2, 7, 8, 13);
QR(3, 4, 9, 14);
即沿着主对角线的方向执行 QR 操作。
初始时,0-3 是常数 expand 32-byte k
(共 16 字节),4-11 是密钥 K(共 32 字节),12 是计数器 B, 13-15 是一次性随机数 N (nonce):
cccccccc cccccccc cccccccc cccccccc
kkkkkkkk kkkkkkkk kkkkkkkk kkkkkkkk
kkkkkkkk kkkkkkkk kkkkkkkk kkkkkkkk
bbbbbbbb nnnnnnnn nnnnnnnn nnnnnnnn
运行一次 ChaCha20 算法执行 20 “轮”, 即 80 次 QR 操作,然后再和初始状态逐位相加(目的是使计算过程不可逆)。这样得到的的状态和明文(密文)逐位异或,就得到了密文(明文)。注意,解密过程和加密过程完全等价。
这样的计算一次只能处理 64 字节的明文。每处理 64 字节的明文,计数器 B 自加一。这样,每次用于异或的状态都不相同。
给每个明文加密应采用不同的一次性随机数,理由类似。一次性随机数应当在双方通信时协商,可以采用明文方式发送。
密钥则应以其他的安全方式分享。例如,当面分享。也可以采用密钥交换算法(如 Diffie-Hellman)。
Recommend
-
107
一、概述Android下的指纹识别是在Android6.0后添加的功能,因此,在实现的时候要判断用户机是否支持,然后对于开发来说,使用场景有两种,分别是本地识别和跟服务器交互; 本地识别:在本地完成指纹的识别后,跟本地信息绑定登陆; 后台交互:在本地完成
-
112
对称加密和Base64编码
-
81
对称加密算法与非对称加密算法的优缺点
-
64
-
14
DES 3DES AES Blowfish 对称加密算法比较 2021-06-01 15:55:00 https://blog.csdn.net/nightelve/article/details/16865773 随着...
-
5
之前的文章我们讲到blowfish算法因为每次加密的块比较小只有64bits,所以不建议使用blowfish加密超过4G的文件。同时因为加密块小还会导致生日攻击等。所以才有了blowfish的继承者twofish。 今天我们一起来揭秘一下twofish这个加密算法。 twofish...
-
4
Blowfish是由Bruce Schneier在1993年发明的对称密钥分组加密算法,类似的DES和AES都是分组加密算法,Blowfish是用来替代DES算法出现的,并且Blowfish是没有商用限制的,任何人都可以自由使用。 对比而言,虽然AES也是一种密码强度很高的对称密码算法,但...
-
3
微信搜索:码农StayUp 主页地址:https://gozhuyinglong.github.io 源码分享:
-
3
自制加密通信协议(二):密钥交换算法 Fri Dec 4, 2020 使用对称密钥通信时,双方需要事先约定密钥。如何安全地操作...
-
9
PHP对称加密算法(DES/AES)加解密详解 对称密钥加密机制即对称密码体系,也称为单钥密码体系和传统密码体系。对称密码体系通常分为两大类,一类是分组密码(如DES、AES算法),另一类是序列密码(如RC4算法)...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK