Java安全类和提供程序

时间:2014-09-18 12:07:15

标签: java android security cryptography

我无法理解Security类的某些部分是如何工作的。

据我所知,调用getProviders()将返回当前Android设备上可用的所有提供程序。我理解的是如何利用这些提供商的加密/解密算法。

Security类还有一个setProperty()函数。文档没有详细说明它是如何工作的,但似乎我可以在这里用任何我喜欢的值设置任何组成的属性。在设置特定属性后,我如何实际检查设备上是否发生了更改?

如果有人可以指向我在线资源,详细介绍这个主题,我将不胜感激。

编辑:

我会更具体。我正在尝试利用符合FIPS标准的设备。需要使用setProperty()方法设置特定属性,以在设备上启用“FIPS模式”。

我想知道如何在设置属性后确认设备是否在此模式下运行,以及如何利用可用的FIPS验证算法。

2 个答案:

答案 0 :(得分:1)

在您的“加密/解密”请求中,如果您指的是在设备中以加密/安全的方式存储数据(即静态数据,与传输中的数据相对),我认为https://developer.android.com/about/versions/android-4.3.html#Security - KeyStore是一个很好的,显然很简单的解决方案。这样你就会遵循Android的方式,如果你想遵循标准的Java方式,那里也有教程,但我不鼓励添加错误的可能性非常高。 Crypto对任何人来说都很难......

对于传输中的数据(即网络),您应该仅依赖于HTTP(如果使用与HTTP不同的东西,则为纯TLS - 这几乎不会发生),而不是任何临时实现,除非您确实需要一个额外的层(即你想要保护的秘密协议。)

答案 1 :(得分:1)

如果要确保使用特定算法,可以在getInstance方法中指定提供程序。另一种选择是将提供者放在已安装的提供者列表中的第一位。如果您只想将提供程序用于私钥和密钥,您还可以将提供程序放在列表的末尾,并依赖延迟提供程序选择。在密钥与提供者的兼容性建立之后,这实际上在初始化阶段链接了基础CipherSpi

关于编辑中的问题,这取决于提供者。我不认为安全架构中有任何特定内容可以确保运行FIPS模式。相反,您应该检查Provider或底层实现(PKCS#11?)是否有可能记录使用情况。通常,您需要在令牌上使用私钥或密钥之前进行身份验证。如果是这种情况,不必提供密码(使用回叫)是一个非常好的迹象,表明不会访问密钥。