为什么人们使用BouncyCastle而不是Java内置的JCE提供程序?有什么区别?

93

为什么人们使用Bouncy Castle而不是Java Cryptography Extension?它们之间有什么区别?


7
JCE是一个标准API,任何加密算法都可以实现它,以便在不依赖提供程序编码的情况下进行访问。换句话说,使用JCE API,您可以在许多情况下切换密码和密码提供程序而不更改代码。BC是一个提供程序,这意味着它们实现了可以通过JCE API访问的密码。如果出现另一个提供程序,该提供程序比BC实现更好的算法或者有更新更强大的算法,您可以轻松切换而不更改代码(可能)。 - nicerobot
3个回答

88

BouncyCastle拥有比Sun提供的默认JCE更多的加密套件和算法

此外,BouncyCastle还有很多用于阅读像PEM和ASN.1这样的晦涩格式的实用程序,没有一个明智的人会想要自己重写它们。


9
Sun从未打算成为一个提供完整密码工具的公司。这就是为什么JCE使用提供程序框架,而BC支持该框架的原因 http://bouncycastle.org/specifications.html#install 。任何BC的用户都应该尽可能地通过JCE API来使用它。 - nicerobot

32
Bouncy Castle起源于澳大利亚,因此不受从美国出口密码技术的限制。如果您在美国以外,并且需要管理大于该限制所允许的密钥大小,则Bouncy Castle非常有用。在这种情况下,您不被允许使用来自美国的软件。

5
我想知道实际上还有多少限制,截至2016年?据我了解,只要向美国商务部工业与安全局(BIS)注册,密钥大小就不再受限制,我猜Oracle已经在做这件事情。但是,法规很晦涩(暗示加密)。 - peterh
3
如果我在美国以外,我就不需要被允许任何事情。该项目可能需要被允许运输某些物品。 - Petar Donchev
现今西方国家大部分的限制是基于软件出口目的地而非密钥长度。密钥长度限制在90年代末期得到了放宽。至于目前澳大利亚的法规,它并不像这个回答所暗示的那样宽松,但也不像几年前的危言耸听那样糟糕(除非你发明了一种新算法和一两个其他东西。一般情况下,它受到Wassenar安排和ITAR法规(通过澳大利亚国防部)的管控。 - Ben
以上评论的补充内容可能表明可以从澳大利亚进行哪些操作;我完成了DoD ITAR检查,没有触发任何一个点(所有这些都是“致电我们以获得澄清”类型的回复),因此我的FOSS加密工作没有障碍,尽管其中没有一个是Java。这是因为AU关注的更多是新颖和创新的加密技术开发,而不是任何人都已经熟知的东西(另外,AU DoD对“公共领域”的定义与通常的版权定义不同,他们用它来表示它没有被归类或限制)。 - Ben

12

如果在服务器或桌面上,除非需要处理一些未被Sun JCE支持的旧密码或格式,否则我不认为有任何使用BC的理由。

然而,在许多JRE中,并没有提供JCE提供程序,例如移动设备或嵌入式环境。在这种情况下,BC很有用。


2
如果您的服务器正在使用TLS并且您关心安全性(如果您不关心,为什么要使用TLS?),那么服务器上肯定有一个原因。JCE包含的密码套件仅包括CBC模式下的AES,这有一些已知问题:http://googleonlinesecurity.blogspot.dk/2013/11/a-roster-of-tls-cipher-suites-weaknesses.html。 - Søren Boisen
1
FYI,这不是真正的Java8(来自Oracle)。 - Usman Ismail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接