先解决一个实际问题:如果你在CentOS7上运行某些程序时碰上了“Exception: libsodium not found”的报错,别慌——这通常是因为系统缺少M2Crypto和libsodium这两个依赖。而要支持ChaCha20加密算法,这两个环境是必不可少的。
Salsa20是一种流加密算法,由Daniel J. Bernstein提交到eSTREAM项目。它的核心是构建在add-rotate-xor(ARX)操作之上的伪随机函数——说白了,就是32位模加、异或(XOR)和循环移位这三板斧。Salsa20将256位密钥、64位nonce(随机数)以及64位流位置映射到一个512位的输出(同时也有一个128位密钥的版本)。这一设计带来的一个独特优势是:用户可以在常数时间内定位到输出流中的任意位置,无需从头计算。在现代x86处理器上,它的速度大约为每4~14个CPU周期处理一字节,硬件性能也相当合理。最让人欣赏的一点是,它没有注册专利,而且Bernstein本人还提供了针对常见架构优化的公有领域实现。Salsa20已经正式提交到了eSTREAM项目。
与之相关的ChaCha加密算法,在2008年由Bernstein发布,特点与Salsa20类似,只是循环移位函数有所不同,现在也被广泛采用。
M2Crypto与Libsodium简介
M2Crypto:一个Python加密和SSL工具包
M2Crypto是对OpenSSL功能最完整的Python封装,涵盖了RSA、DSA、DH、EC、HMAC、消息摘要、对称密码(包括AES)等。它的SSL功能支持客户端和服务器端,并且扩展了Python标准库中的httplib、urllib和xmlrpclib。此外,它还提供了不可伪造的HMAC 'AuthCookie'用于网络会话管理、FTP/TLS客户端和服务器、S/MIME、ZServerSSL(Zope的HTTPS服务器)以及ZSmime(Zope的S/MIME信使)。M2Crypto也能为Twisted框架提供SSL支持,并通过引擎接口支持智能卡。可以说,它是Python开发者处理加密和SSL任务的一站式工具包。
Libsodium
Libsodium专注于加密、解密、签名和密码散列,目标是为构建更高级别的加密工具提供所有核心操作。尽管它强调高安全性,但在实际性能上,它的原语往往比大多数NIST标准实现还要更快。这也是为什么很多现代加密方案(包括ChaCha20)都喜欢用它作为底层库。
如果你需要在CentOS7上支持ChaCha20加密算法,请按照以下命令安装依赖:
yum install m2crypto gcc -y wget -N --no-check-certificate https://download.libsodium.org/libsodium/releases/libsodium-1.0.8.tar.gz tar zfvx libsodium-1.0.8.tar.gz cd libsodium-1.0.8 ./configure make && make install echo "include ld.so.conf.d/*.conf" > /etc/ld.so.conf echo "/lib" >> /etc/ld.so.conf echo "/usr/lib64" >> /etc/ld.so.conf echo "/usr/local/lib" >> /etc/ld.so.conf ldconfig
