安卓和 FIPS

信息安全 加密 爪哇 安卓 菲普斯
2021-08-30 07:17:44

我最近的任务是使用“政府批准的协议”(政府是美国)编写一个“安全消息传递应用程序”的研究项目。我认为这是指非对称加密和政府批准的加密算法,AKA FIPS 140(-1?) 和散列 (FIPS 180-x)。

某些 Android 设备(例如 Galaxy S4 和 HTC One)被宣传为通过 FIPS 认证。

  1. 应用程序级代码是否可以利用这些设备上的认证实现?例如,如果我使用标准的 Android/Java API 打开 HTTPS 连接或生成 SHA256 哈希,这些调用是否会通过 FIPS 认证的实现来完成?

    如果是这样:

    • 这意味着他们已经替换了默认的 android JCE 提供程序,对吗?
    • 有什么方法可以确定 FIPS 认证的 JCE 是否可用?

    如果不:

    • 为了制作一个 FIPS 可认证的应用程序,至少需要使用 JNI 调用FIPS 认证的 OpenSSL 实现,或者替代纯 Java JCE 提供程序,对吗?(在创建自定义实现之外)
    • 假设使用 FIPS 认证的 OpenSSL 实现,这意味着任何安全网络调用(例如 HTTPS)都必须在调用 OpenSSL 实现的本机代码 (C) 中完成,或者使用 JNI 调用 OpenSSL 库?那会显得非常麻烦。
    • 是否有任何 FIPS 认证的纯 Java JCE 提供程序可以与 Android 一起使用?开源或合理低成本的首选。我查看了列表,但很难说出开发人员可以在应用程序中获得和使用的东西,而不是 OEM。跳出来的两个是 RSA 的 Jsafe 和 IBM 的 JCE。RSA 是唯一一个似乎在 Android 上获得认证的产品,但我发现它的价格超过 200,000 美元,这对于小型研究项目来说太贵了。但是假设它在那里并且可以工作,我也许可以使用相同的算法继续使用像Spongy Castle这样的东西,并且希望只是改变提供者就可以工作(例如,如果有人想买单。)
3个回答

应用程序级代码是否可以利用这些设备上的认证实现?

是的。作为安全系

这意味着他们已经替换了默认的 android JCE 提供程序,对吗?

正确的。Sun/Oracle 没有经过 FIPS 验证的模块。

有什么方法可以确定 FIPS 认证的 JCE 是否可用?

是的,IBM 有一个“IBM Java JCE 140-2 加密模块”您可能想查看FIPS 140-1 和 FIPS 140-2 供应商列表

为了制作 FIPS 可认证的应用程序,至少需要使用 JNI 调用 FIPS 认证的 OpenSSL 实现,或替代纯 Java JCE 提供程序,对吗?

不可以。至少您必须提出令人信服的正式安全论据,证明您的应用程序具有安全运行理论,并且它将在安全模式下运行,否则将停止运行。FIPS 验证有许多特定要求,仅使用安全组件甚至无法让您获得一小部分验证方法。这就像将 Fararri 发动机放入您的紧凑型车中并称其为赛车。

假设使用 FIPS 认证的 OpenSSL 实现,这意味着任何安全网络调用(例如 HTTPS)都必须在调用 OpenSSL 实现的本机代码 (C) 中完成,或者使用 JNI 调用 OpenSSL 库?那会显得非常麻烦。

实际上比这要糟糕得多。对于 FIPS 批准,您必须证明在同一硬件上运行的另一个应用程序不会干扰您的应用程序的安全功能,这通常意味着操作系统具有特定的安全控制并且硬件支持操作系统安全控制。是的,这是正确的:

您的通用 Android 应用程序将仅针对 Android 操作系统上具有特定版本的特定硬件进行验证

例如“在 Galaxy S2 和 Galaxy S3 上运行的 Android Ice Cream Sandwich 4.0”

是否有任何 FIPS 认证的纯 Java JCE 提供程序可以与 Android 一起使用?开源或合理低成本的首选。

不太可能以低成本找到。

我也许可以继续使用类似 Spongy Castle 之类的东西,使用相同的算法,希望只是改变提供者就可以工作(例如,如果有人想买单。)

否,因为加密提供程序是安全参数不可或缺的。真正的工作是提出安全论点,而不是创建应用程序。

我们不要混淆概念。有批准的算法和批准的实现

要使用“批准的算法”(或协议),您可以使用 SHA-256。这是一个数学定义的函数。有一个 SHA-256;只要您使用的代码按照标准实现 SHA-256,那么您使用的是“认可的算法”。

经批准的实施是已由 NIST 正式验证的系统,它对于某些正确性定义是“正确的”。这样的验证时间长,成本高,涉及大量的审计和文件(我们这里说的是几十万页和几十万美元)。开源项目通常没有时间、资金或羡慕这样做;这只发生在某些需要认证印章以便向不灵活的政府出售某些产品的公司的特定赞助下。

您确定要获得批准的实施吗?这看起来很奇怪,因为批准的实现没有多大意义,除非作为同样经过认证的整体应用程序的一部分——你会知道的。

如果您需要“政府批准的协议”,那么要求是您使用由政府编纂并被该政府批准使用的算法和协议。冒昧地假设所说的政府是美国政府,这意味着您必须使用当前NIST出版物指定的算法。

大多数主要的加密构建块由 NIST 在FIPS或 NIST 出版物中指定,并批准用于美国政府产品。一个方便的算法列表是 NIST 运行验证程序的算法;这包括:

大多数使用密码学的精心设计的产品都使用这些算法,因此“政府批准的算法”是一种常见的要求,即使是非政府实体也是如此。它实际上并没有比“使用每个人都知道的好的加密算法”更多。

政府很少指定通信协议,因此您可能需要澄清该要求如何应用于协议。Internet 上协议的事实标准是RFC

NIST 运行加密模块验证程序FIPS 140 证书是美国政府颁发的印章,证明经认可的实验室已经测试了实施并发现其符合要求。FIPS 140 1 级(即 FIPS 140-2 1 级,-2 是标准的版本)只需要计算一些样本值并验证它们是否正确;更高级别(在 Android 设备上找不到)有一些安全要求。

除非您的要求指定您必须使用政府批准的这些算法的实现,否则您不需要在实现上寻找任何特定的证书。获得证书需要时间和金钱,因此大众市场产品的供应商通常会遇到麻烦。您可以在 NIST 网站上查看经过验证的产品(或更准确地说是模块)的完整列表。

获得 FIPS 证书的主要原因是出售给美国政府。对于一个研究项目,您不太可能需要一个,除非该项目的目标是构建一个包含本身已通过 FIPS 认证的 Android 设备的系统。鉴于您的请求的措辞,您可能只需要使用正确的算法(无论如何您都想做)。