我正在开发一个与安全相关的项目,并且必须确保它符合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.

这是一个难以解决的难题.史蒂夫马奎斯试图在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公司的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项目的FIPS合规性的更多相关文章

  1. ios – 找不到lcrypto的库

    我正在尝试构建iOSAllJoyn项目,但我遇到了OpenSSL集成的问题.我一直在看这些方向:https://allseenalliance.org/docs-and-downloads/documentation/configuring-build-environment-ios-and-osx#unique_16我已经按照指示一直到XcodeIDEBuild,但现在我收到一个错误,上面写着:

  2. 添加WebViewClient时,Android WebView忽略target =“_ blank”

    因为我有15个链接,我需要比较.我无法在新浏览器中加载所有网址,因为有一些链接需要在同一个WebView中打开.解决方法我有一个解决方法的想法.使用自定义架构替换应在新窗口中打开的所有链接.然后你可以自己处理.对于最小的中断设置,还可以设置自定义主题并处理所有配置更改:然后在链接处理程序中,您可以使用getIntent().getData()读取url.还请记住,你应该处理http和https,我在上面的简短例子中跳过了.这是一个如何重写网址的JavaScript示例:

  3. android – 尝试commitAllowingStateLoss时的FragmentManager NullPointerException

    上下文:我有一个带片段的活动和3个InnerFragments.当调用FragmentonDestroy()时,我想从FragmentManager中删除内部片段.onDestroy()的代码如下.问题:FragmentManager抛出NullPointerException,可能是在调用commitAllowingStateLoss()时.我不明白为什么.堆栈跟踪:解决方法FragmentMa

  4. Android,AES-GCM或普通AES上的数据加密?

    我的团队需要开发一个解决方案来加密二进制数据(存储为byte[])在用Java编写的Android应用程序的上下文中.加密数据将以各种方式传输和存储,在此期间不能排除数据损坏.最终,另一个Android应用程序(再次用Java编写)将不得不解密数据.已经确定加密算法必须是AES,密钥为256位.但是,我想知道我们应该使用哪种AES实现和/或“模式”.我已经阅读了一些名为GCM模式的内容,我们已经对

  5. Android架构组件ViewModel – 如何在测试Activity上模拟ViewModel?

    我正在尝试设置类似于GithubbrowserSample的UI测试,看起来示例项目只有Frag的模拟viewmodel而不是Activity的示例.这是我的代码,我试图通过模拟viewmodel来测试Activity.但viewmodel未在Activity中的onCreate()之前设置.有人可以帮我解决这个问题吗?解决方法JUnit@Rules在@Before方法之前进行设置,因此您的活动在

  6. android – 开发支持蓝牙技术的跨移动应用程序的最佳方法是什么?

    我已经阅读了Phonegaphere的原生功能支持.显然,它没有提到蓝牙支持.我没有找到或找到任何其他具有跨移动平台开发支持的平台.结果,我目前面临两种选择.>为所有平台独立构建>找到合适的跨平台开发解决方案.我的问题是;对于那里的移动开发者,你建议我选择哪个选项,这里没有列出?

  7. 在android中创建聊天应用程序的最佳做法是什么

    我打算创建一个Android聊天应用程序.实际上聊天将成为应用程序的一项功能.我想知道有关Android聊天应用程序的最佳实践.我熟悉的两个选项是C2MD,每隔几秒就会对服务器db进行一次自定义轮询.现在,我知道C2MD本来应该是伟大的,但根据我的理解,它并不可靠.我试图实现它,它似乎没有工作.此外,如果由于某种原因谷歌结束时发生了某些事情(就像他们的服务器已关闭–不太可能但可能发生)我无法联系他

  8. Android Build Tools无论如何都只构建x86_64. APK通过adb安装,但在Play商店中显示不兼容

    所以这发生了.无论我在build.gradle上做什么,所有的APK都会以native_code=’x86_64’标志出来,所以当我将应用程序部署到商店时,结果是有15K不兼容的设备,只有19兼容.我首先想到,不知何故,安装NDK是原因,或者我修改后的构建脚本.但是当我通过GenerateSignedAPK向导时,它仍然会发生.分裂块也最初缺失,并没有帮助.最奇怪的是,当我通过控制台推送安装时,IT工作!

  9. android – 为什么我们需要onUpgrade(); SQLiteOpenHelper类中的方法

    我正在遵循这个教程可以任何身体请让我清楚这段代码.问题onUpgrade()的目的是什么;方法?重要为什么我们在这个方法中删除表并重新创建?提前致谢.解决方法onUpgrade基本上用于处理任何新版本应用程序的新数据库更改.在onUpgrade中并不总是需要删除表,这取决于您的用例.如果要求不要保留旧版本应用程序中的数据,那么drop应该会有所帮助,但是如果它更改架构那么它应该只有更改脚本.

  10. 如何在Android中的MVP架构中的两个演示者之间共享数据?

    演示者不应直接相互沟通.也许我应该将List抽象为存储库/交互器?如何在演示者之间共享列表?

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部