gpt4 book ai didi

android - 我的Android项目的FIPS合规性

转载 作者:行者123 更新时间:2023-12-04 06:20:32 30 4
gpt4 key购买 nike

我正在从事与安全性相关的项目,因此必须确保它符合FIPS的规定。

根据我的理解,FIPS合规性是指硬件和软件级的合规性。当前有2台符合FIPS要求的三星Android设备,即它们在硬件和软件级别均符合要求。
我有几个问题,如下:

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设备上进行了测试。不符合FIPS的Android硬件在这里重要吗?

3)AES算法符合FIPS要求。这是否意味着如果我在Java代码中使用AES算法而不是使用FIPS兼容的OpenSSL库,则它不符合FIPS。

如果AES符合FIPS要求,那么它与AES的Java或C#实现有什么关系。他们俩都必须通过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(对称) key ,以验证软件本身中软件的完整性。 (将 key 烧入rom中, fuse 烧断,防篡改PCB以及防篡改 shell 中时,情况大不相同)。

为了完整起见,您可以在 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加密的消息时,您将无法重用 key 和ivs。

两者兼有:您必须调用 FIPS_mode_set,并且它必须返回非零值。未能调用 FIPS_mode_set是一个程序错误,表示您没有使用经过验证的加密。 FIPS_mode_set失败是操作错误,表示您未使用经过验证的加密。

如果您使用的是OpenSSL,则还应在数据表中包括“确认的供应商”,并引用1747证书。我认为这是安全策略的要求,并且未提供此要求意味着您的加密技术是 而不是验证的!

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



我不使用充气城堡,所以我不知道它的状态。如果该库已通过验证,则将有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.



这是一个难以解决的难题。史蒂夫·马克斯(Steve Marquess)试图在 OpenSSL FIPS 2.0 Object Module platform questions上回答它。

这是我的理解(可能是不正确的):验证平台后,加密模块验证程序(CMVP)可以容忍对该平台进行较小的更改。我避免使用“平台”,但是它包括主板,处理器,指令集和其他操作影响。通常,它不包括运行时库之类的环境影响。

例如,Apple可以对带有A6处理器的iPad的主板进行较小的修改(也许更改其外形尺寸或提供改进的集成摄像头)。它甚至可以对A6处理器本身进行较小的修改(也许会增加缓存大小)。他们可以随心所欲地调用它(IpAd 3,iPad 4或烦恼Fan Boi的任何东西)。但是,同一主板上的A7处理器将需要进行另一次验证,因为它是主要版本。指令集也是如此:armv7和armv7s需要单独的验证。

再举一个例子,考虑ARMv7处理器。使用ARMv7的Snapdragon处理器与ARM Holdings公司的经典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.



    您无法在静态库上运行 fipsldincore,因此听起来好像有问题。它们只能在可执行文件和共享对象上运行。 fipsldincore一起工作,并将与FIPS相关的代码和数据的签名嵌入到您的可执行文件,共享库或应用程序中。与FIPS相关的代码和数据来自(1) fipscanister.o和(2) fips_premain.c

    为了使它完整, fipsld编译 fips_premain.c并将 fipscanister.o中的链接链接到您的可执行文件,共享库或应用程序。然后 incore将签名写入您的可执行文件,共享库或应用程序中。当您调用 FIPS_mode_set时,将通过HMAC验证与FIPS相关的代码的完整性,然后执行与FIPS相关的自测试。如果所有操作都成功,则 FIPS_mode_set返回非零值,并且您正在使用FIPS验证的加密技术。

    作为引用,OpenSSL在此处提供一个Wiki页面: FIPS Library and Android。它讨论了如何设置 CCFIPSCC_LD,以便在 fipsld对项目进行设置时 incoremake“可以正常工作”。

    没有等效的iOS页面。但是您可以在 OpenSSL FIPS User Guide 2.0附录E中找到该指令。

    关于android - 我的Android项目的FIPS合规性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17103032/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com