我正在编写一个Java程序以使用256位AES加密来加密消息,但是我得到illegal key size error,我读到我必须使用一些JCE无限强度管辖策略文件来加密/解密带有256位或以下密钥的消息。更长的时间,但我不明白为什么使用密钥大小会有限制?为什么默认情况下在Java中禁用了使用256位加密?

使用256位密钥加密/解密文件是否构成犯罪?

评论

实际上,Oracle Java需要Unlimited Policy附加组件来进行超过128位的对称加密。其中包括AES-192和AES-256。在Java或其他任何AES实现中,都不可能使用超过256位的密钥,因为AES不会这样做。

#1 楼

不同国家/地区有许多不同的密码法。一些国家禁止出口密码软件和/或加密算法或密码分析方法。

在某些国家/地区,需要使用许可证才能使用加密软件,而在一些国家/地区,禁止公民对互联网通信进行加密。一些国家/地区要求在进行警方调查的情况下恢复解密密钥。

关于密码法的问题分为四类:




出口管制,这是一个国家/地区向其他国家或商业实体出口密码方法的限制。有国际出口管制协议,主要是瓦森纳协定。 Wassenaar安排是在COCOM(多边出口管制协调委员会)解散后创建的,该协定于1989年“取消了对密码和仅身份验证的密码的控制。”

进口管制,这是对使用某些限制的限制。国家/地区的
加密类型。


专利问题,涉及使用已获得专利的加密工具。

搜索和查封问题,关于是否可以强迫一个人在什么情况下解密数据文件或泄露加密
密钥。

对密码学导入的限制

各国可能出于多种原因而希望限制密码技术的进口:


密码术可能会增加该国家/地区以外的隐私级别,这是什么呢?政府的愿望。
公民可以彼此匿名交流,从而防止任何
外部人士监视他们。
加密的交易行为可能会阻止外部实体控制业务行为。
导入的加密技术可能有后门或安全漏洞,有意或无意,这使外国人可以监视使用
的人导入的密码学;因此,加密技术的使用仅限于政府认为安全或自行开发的技术。

电子隐私信息中心和全球互联网自由运动的报告使用颜色代码指示限制级别,含义如下:



绿色:无限制

黄色:进口许可证必不可少

红色:全面禁令

这里是国家列表,每个国家都有其进口限制级别。



和具有进出口限制的国家/地区详细信息和说明

Java中加密算法的进口限制

由于某些国家/地区的进口规定,Oracle实现提供了默认设置限制加密算法强度的加密管辖区策略文件。

如果需要更强大的算法(例如,具有256位密钥的AES),则必须获取JCE无限强度管辖权策略文件并将其安装在JDK / JRE中。

用户有责任验证该操作是否符合当地法规。

评论


$ \ begingroup $
请注意,自2018年1月8u161起,默认值现在为无限制“ bug.openjdk.java.net/browse/JDK-8170157,默认情况下在Oracle JDK构建中启用无限制加密策略”。
$ \ endgroup $
–buzz3791
18 Mar 26 '18 at 14:19