对于Java,我只知道Salsa20的Bouncy城堡实现。然而,该版本比AES-CTR和ARC4慢得多.
C中有很多库,但是在Java中有什么好的实现流密码吗?
发布于 2013-07-04 01:41:35
我怀疑您会发现Salsa20在Java中的快速实现(已经花费了大量时间试图实现这一点)。
Salsa20会变异由16×32位整数组成的512位状态,这意味着不利用SIMD的实现(无论是在Java上还是其他方面)的性能可能不会很好--有太多独立的状态部件使它们在任何公共体系结构上都保持在通用寄存器中,因此不可避免地会导致负载/存储开销,这会降低吞吐量。
Java (至少)在优化所有基本操作(例如内联、单指令旋转等)方面做了合理的工作。但它不具备动态进行小规模SIMD优化的智能。
我尝试过各种方法来解决这个问题:通过将32位整数封装为64位长(过多的额外指令)来模拟SIMD;触发热点矢量化优化(过多的数组消耗开销),但没有发现任何有效的方法。
通过比较: Threefish 512,尽管具有相同的状态大小,使用8×64位字,所以在64位Java上,整个状态可以保存在寄存器中,性能大约是AES的150%。
BouncyCastle Salsa20实现可以稍微推一推(通过尽可能多地注册状态),以获得比AES更快的速度,但与支持SIMD的平台上的实现相比,它仍然慢得可怜。
XSalsa20和ChaCha将有相同的问题,因为它们具有相同的基本结构。
https://crypto.stackexchange.com/questions/9019
复制相似问题