Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

切换至纯Rust实现的密码库 #317

Closed
LuoZijun opened this issue Nov 14, 2020 · 3 comments
Closed

切换至纯Rust实现的密码库 #317

LuoZijun opened this issue Nov 14, 2020 · 3 comments

Comments

@LuoZijun
Copy link
Contributor

LuoZijun commented Nov 14, 2020

目前项目当中,对于密码库的依赖非常复杂,有 OpenSSLlibsodium 以及 RustCrypto 组织开发的一些零散的密码库。

这种现象的出现是因为 shadowsocks-rust 项目希望给用户提供更多的密码算法,供他们自由选择。
即便一些密码算法已经出现理论上,甚至是已被证明有明显弱点。

这些复杂的依赖,很明显会让项目的编译更加耗时,同时,使整个项目的编译环境也变得更加复杂。

为解决这个问题,在几个月之前,我写了 shadowsocks/crypto,期望能够缓解这个问题,同时也可以给我自己私有的 TLSSSHDoT 库来使用。

在之前,有发过一篇分享: [分享] Crypto 库的性能表现

之后,我收到了 @driftluo@zonyitoo 提出的一些建议,涉及对 API 做出的一些调整,这些调整会直接关系到性能的表现。

以下测试数据由 LuoZijun/crypto-bench 项目提供:

X86-64:

Cipher OpenSSL Ring Sodium RustCrypto(org) Crypto2
AES-128 470 MB/s N/A N/A 615 MB/s 2666 MB/s ⚡️
AES-128-CCM N/A N/A N/A 81 MB/s 231 MB/s ⚡️
AES-128-GCM 19 MB/s 158 MB/s N/A 122 MB/s 250 MB/s ⚡️
AES-128-GCM-SIV N/A N/A N/A 55 MB/s 110 MB/s ⚡️
AES-128-OCB-TAG128 15 MB/s N/A N/A N/A 216 MB/s ⚡️
AES-128-SIV-CMAC-256 N/A N/A N/A 35 MB/s 296 MB/s ⚡️
AES-256 N/A N/A N/A 444 MB/s 1777 MB/s ⚡️
AES-256-GCM N/A 131 MB/s 61 MB/s 107 MB/s 170 MB/s ⚡️
ChaCha20 N/A N/A N/A 695 MB/s ⚡️ 463 MB/s
ChaCha20-Poly1305 73 MB/s 210 MB/s ⚡️ 145 MB/s 126 MB/s 143 MB/s

AArch64:

Cipher OpenSSL Ring Sodium RustCrypto(org) Crypto2
AES-128 484 MB/s N/A N/A 36 MB/s 1600 MB/s ⚡️
AES-128-CCM N/A N/A N/A 6 MB/s 285 MB/s ⚡️
AES-128-GCM 22 MB/s 210 MB/s N/A 14 MB/s 213 MB/s ⚡️
AES-128-GCM-SIV N/A N/A N/A 4 MB/s 29 MB/s ⚡️
AES-128-OCB-TAG128 18 MB/s N/A N/A N/A 219 MB/s ⚡️
AES-128-SIV-CMAC-256 N/A N/A N/A 3 MB/s 262 MB/s ⚡️
AES-256 N/A N/A N/A 27 MB/s 1066 MB/s ⚡️
AES-256-GCM N/A 183 MB/s ⚡️ N/A 11 MB/s 177 MB/s
ChaCha20 N/A N/A N/A 309 MB/s 390 MB/s ⚡️
ChaCha20-Poly1305 73 MB/s 163 MB/s ⚡️ 128 MB/s 114 MB/s 132 MB/s

通过以上数据,我们可以看到,shadowsocks/crypto 无论是在 X86-64 还是 AArch64 平台,都有着相当不错的性能,
即便是直接跟流行的 ring 做比较也是如此。


Shadowsocks 对于密码库的使用,跟其它的流行项目有着一些差异,如在对待序列密码(流密码)时,跟其它流行的密码应用就有着不一样(如: TLS、SSH)。
为此,新开了 shadowsocks/ss-crypto 项目,它同时也包含了 Shadowsocks
自制的一些密码算法。这同时也可以简化 shadowsocks-rust 对于密码处理这块的代码逻辑。

目前准备在 PR #315 合并后,开始尝试将本项目密码相关的代码切换到 shadowsocks/ss-crypto 项目。
同时,考虑到一些人对于 这个新密码库的不信任,所以,我们会在最开始时,依然保留 ring 依赖。仅仅在当你使用了 ring 不支持的密码算法时,才会使用新密码库。

所以如果你对于安全非常敏感,你只需要使用最流行的密码算法的话,一切都还会和从前一样 :)

一些其它相关的 Issue:

@LuoZijun
Copy link
Contributor Author

CC @raintean

@dev4u
Copy link

dev4u commented Nov 14, 2020

AES-256-GCM在AArch64架构下,居然是减速的效果?!

@LuoZijun
Copy link
Contributor Author

AES-256-GCM在AArch64架构下,居然是减速的效果?!

如果你是指 crypto 库在 X86 里面比 ring 快,但是在 ARM64 里面 AES-256-GCM 比 Ring 慢的话,其实也没有多少,相差就是 10来兆。这个一般也在误差范围内。这就是为什么我上面的描述都是 有着相当不错的性能 ,而并没有直接说 Crypto 比他们快的原因。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants