我的Android项目的FIPS合规性

前端之家收集整理的这篇文章主要介绍了我的Android项目的FIPS合规性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个与安全相关的项目,并且必须确保它符合FIPS标准.

根据我的理解,FIPS合规性是硬件和软件级别的合规性.目前有2款三星Android设备符合FIPS标准,即它们在硬件和软件级别都具有合规性.
我的问题如下: –

1)如果我想让我的Android应用程序符合FIPS标准,如果我在我的项目FIPS兼容中使用了唯一的加密模块,这就够了吗?

Android SDK提供的加密模块是BouncyCastle库,不符合FIPS标准.

我按照stackoverflow link在我的项目中使用符合FIPS标准的OpenSSL库

我使用OpenSSL库构建了我的项目库,即使用FIPS模块配置的libssl.a和libcrypto.a.

2)根据Android documentation的FIPS OpenSSL模块,该模块已经在armv7架构的不同Android设备上进行了测试. Android硬件不符合FIPS标准吗?

3)AES算法符合FIPS标准.这是否意味着如果我在Java代码中使用AES算法而不是使用符合FIPS标准的OpenSSL库,那么它不符合FIPS标准.

如果AES符合FIPS标准,那么它与AES或C#的AES实现有什么关系.他们都必须通过CMVP吗?

请赐教.

解决方法

According to my understanding,FIPS compliance is compliance at hardware as well as software level.

FIPS 140-2是一个以硬件为中心的大文档.写这些要求的人是建造硬件的电气工程师.例如,Randy Easter博士运行加密模块验证程序(CMVP).这是他简短的简历:http://www.nist.gov/itl/csd/easter-randy.cfm.他肯定是双E;)

当NIST和CMVP重新满足软件的要求时,他们将一个方形钉子钉在一个圆孔中.你会发现许多在软件环境中毫无意义的东西.例如,OpenSSL(和其他FIPS验证的库)存储HMAC(对称)密钥以验证软件本身中软件的完整性. (当密钥烧成rom,熔断器熔断,防篡改PCB和防篡改外壳时,它会有很大的不同).

为了完整起见,您可以在Implementation Guidance for FIPS PUB 140-2 and the Cryptographic Module Validation Program中找到经过批准的完整性测试方法.它们确实包括CMAC和HMAC.

… Android app FIPS compliant …

首先要做的事:)

根据加密模块验证程序(CMVP),有两种类型的加密:验证和未验证. “符合”意味着什么(也不是“符合”,“批准”,“等同”等).

您的应用将使用经过验证的加密,或者它不会使用经过验证的加密.如果您声明您的应用正在使用“兼容”加密,那么它不会使用经过验证的加密.这是一个典型的营销错误http://webdrive.com/support/webdrive/v11/fips_compliance.htm.

我知道DHS从联邦提取了一堆交换机,因为交换机制造商的营销部门称它们为“FIPS兼容”而不是“FIPS验证”.

1) If i want to make my Android app FIPS compliant,if i have
the only crypto module used in my project FIPS compliant,is it enough?

不.这个有两个部分.首先是程序性的,它在模块的安全策略中列出.例如,OpenSSL有一个从源代码构建它的过程,您不能偏离这些过程.

第二个是使用(缺少更好的术语),它要求您遵守FIPS 140-2操作要求.例如,在发送AES下加密的邮件时,您无法重复使用密钥和iv.

属于两者的东西:你必须调用FIPS_mode_set,它必须返回非零.未能调用FIPS_mode_set是一个程序错误,意味着您没有使用经过验证的加密. FIPS_mode_set失败是一个操作错误,意味着您没有使用经过验证的加密.

如果您使用的是OpenSSL,则还应在数据表中包含“vendor affirmed”,并引用1747证书.我认为这是安全策略的要求,未能提供它意味着您的加密不会被验证!

Crypto module provided by Android SDK is the BouncyCastle
library and it is not FIPS compliant.

我不使用Bouncy Castle,所以我不知道它的状态.如果库已经过验证,那么CMVP将颁发证书.你可以在Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules查阅它们.

I am using FIPS compliant OpenSSL library in my project
as per stackoverflow link

您还应该尝试OpenSSL的wiki:FIPS Library and Android.

为了完整起见,您不能将Android的构建系统用于OpenSSL,然后声明FIPS验证的加密.它与安全策略中发布的程序完全不同,因此验证无效.

According to the FIPS OpenSSL module for Android documentation,
the module has been tested on different Android devices of armv7
architecture.

这是一个难以解决的难题.史蒂夫马奎斯试图在@L_403_8@回答它.

这是我的(可能是不正确的)理解:一旦验证了平台,加密模块验证程序(CMVP)就可以容忍对平台的微小更改.我正在避开什么是“平台”,但它包括主板,处理器,指令集和其他操作影响.通常,它不包括运行时库等环境影响.

例如,Apple可以对带有A6处理器的iPad进行微调(可能会更改其外形尺寸或提供改进的集成摄像头).它甚至可以对A6处理器本身进行微小的修改(可能会增加缓存大小).他们可以随心所欲地称呼它(IpAd 3,iPad 4,或者Fan Boi的任何痒).但是,同一主板上的A7处理器需要进行另一次验证,因为它是一个重大修订.这同样适用于指令集:armv7和armv7s需要单独的验证.

另一个例子,考虑ARMv7处理器.使用ARMv7的Snapdragon处理器是与ARM Holdings公司的Classic ARM7EJ-S不同的平台.两者都需要单独的验证. NEON是ARMv7,它有一个单独的验证(我认为它在ARMv7之上添加了一些多媒体指令).

CMVP可以随时改变主意,并停止容忍次要平台修改.

Will Android hardware not being FIPS compliant
matter here

不,只要平台(包括硬件)先前已经过验证.如果以前没有验证平台,那么它是一个问题;)

3) AES algorithm is under FIPS compliance. Does this
mean that if i use AES algorithm in Java code instead
of using FIPS compliant OpenSSL library,its not
FIPS compliance.

正确. Java代码未经过FIPS验证,因此您的应用程序无法使用FIPS验证的加密.

为了完整起见,还有一个加密算法验证程序(CAVP). CAVP将通过颁发证书来签署AES实施.例如,OpenSSL的AES实现已经颁发了证书1884,2116,2234,2342,2394和2484.

最终,在其他NIST部门(例如CAVP)完成对模块的检查之后,CMVP将在模块上签名(作为一个整体)并颁发证书.例如,NIST为OpenSSL颁发了证书1747.

If AES is under FIPS compliance,what does it have to do with
Java or C# implementation of AES. Do they both have to pass
through the CMVP ?

由于您使用的是FIPS验证的OpenSSL,因此您必须:

>在Android和Java下,使用JNI并调用共享对象.共享对象必须提供OpenSSL的FIPS验证加密.
>在C#下,使用P / Invoke或Inerop并调用动态链接库.动态链接库必须提供OpenSSL的FIPS验证加密.

I have built my project library using the OpenSSL
library ie libssl.a and libcrypto.a configured
using FIPS module.

你不能在静态库上运行fipsld和incore,所以听起来有些不对劲.它们只能在可执行文件和共享对象上运行. fipsld和incore一起工作,并将FIPS相关代码和数据的签名嵌入到您的可执行文件,共享库或应用程序中.与FIPS相关的代码和数据来自(1)fipscanister.o和(2)fips_premain.c.

为了使它完整循环,fipsld将fips_premain.c和fipscanister.o中的链接编译为可执行文件,共享对象或应用程序.然后incore将签名写入您的可执行文件,共享对象或应用程序.当您调用FIPS_mode_set时,与FIPS相关的代码的完整性通过HMAC验证数据,然后执行与FIPS相关的自检.如果全部成功,则FIPS_mode_set返回非零,并且您正在使用FIPS验证的加密.

作为参考,OpenSSL在这里提供了一个wiki页面FIPS Library and Android.它讨论了如何设置CC和FIPSCC_LD,以便在制作项目时fipsld和incore“正常工作”.

没有相应的iOS页面.但您可以在OpenSSL FIPS User Guide 2.0附录E中找到该说明.

猜你在找的Android相关文章