如何在没有第三方 SDK 的情况下使 Android 客户端符合 FIPS,但利用本机 API?

问题描述 投票:0回答:1

我的 Android 应用程序希望在不使用第三方 sdk 的情况下支持 FIPS,但又想特别使用或利用 Android Framework 中的本机 API? 专家的任何意见都会有所帮助

Exepecting 我们如何使用来自 Android Framework 的任何原生 API 用于 FIPS 支持以及限制是 FIPS 许可证将被投诉使用。

如果有任何限制。共享信息以利用 Android Framework API 支持 FIPS。

android frameworks fips
1个回答
0
投票

要在不使用第三方 SDK 的情况下使 Android 客户端符合 FIPS,您可以利用 Android 提供的本机 API。以下是您可以遵循的步骤:

  1. 使用 Android Keystore 系统:Android Keystore 系统是一个用于存储加密密钥和其他敏感数据的安全系统。它符合 FIPS 140-2 标准,可用于生成和存储符合 FIPS 140-2 标准的密钥。您可以使用 Android Keystore System 存储用于加密、解密和数字签名的密钥。

  2. 使用 Android 网络安全配置:Android 网络安全配置允许您为您的应用配置网络安全策略。您可以使用它来指定 SSL/TLS 连接允许哪些加密算法和协议。您应该确保仅启用 FIPS 批准的加密算法和协议。

  3. 使用 Android 加密 API:Android 加密 API 提供了一组加密函数,您可以使用它们来加密、解密和数字签名数据。您应该确保在您的应用程序中只使用 FIPS 批准的加密算法。

  4. 使用 Android SSL 套接字 API:Android SSL 套接字 API 在您的应用和服务器之间提供安全的通信通道。您应确保在 SSL/TLS 连接中仅使用 FIPS 认可的加密算法和协议。

  5. 使用 Android 安全提供程序 API:Android 安全提供程序 API 允许您自定义应用程序使用的加密提供程序。您可以使用它来指定允许哪些加密算法和协议。您应该确保仅启用 FIPS 批准的加密算法和协议。

按照这些步骤,您可以在不使用第三方 SDK 的情况下使您的 Android 客户端符合 FIPS 标准。但是,需要注意的是,实现 FIPS 合规性是一个复杂的过程,建议咨询安全专家以确保您的实施满足所有必要的要求。

我可以为您提供一个使用 Android 的本机 API 来实现 FIPS 合规性的示例。

在此示例中,假设您要在 Android 应用程序中使用 FIPS 认可的加密算法来加密数据。以下是您可以遵循的步骤:

  1. 使用 Android Keystore 系统生成密钥:
KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder(KEY_ALIAS, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
    .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
    .setRandomizedEncryptionRequired(false)
    .build();
keyGenerator.init(keyGenParameterSpec);
SecretKey secretKey = keyGenerator.generateKey();

在此代码片段中,我们使用 Android Keystore 系统生成 AES 密钥,密钥别名为

KEY_ALIAS
。我们已经指定密钥可以用于加密和解密,并且我们将加密模式和填充分别设置为CBC和PKCS7。我们还将
setRandomizedEncryptionRequired
标志设置为
false
,这意味着密钥可以与非随机加密算法一起使用。

  1. 使用 Android 加密 API 加密数据:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(new byte[16]));
byte[] encryptedData = cipher.doFinal(data.getBytes());

在此代码片段中,我们使用 AES/CBC/PKCS7Padding 算法创建密码实例,使用步骤 1 中生成的密钥和 IV 参数对其进行初始化,并使用

doFinal
方法加密数据。

  1. 使用 Android SSL Socket API 建立安全连接:
SSLSocketFactory sslSocketFactory = HttpsURLConnection.getDefaultSSLSocketFactory();
SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket("example.com", 443);
sslSocket.setEnabledCipherSuites(sslSocket.getSupportedCipherSuites());
sslSocket.startHandshake();

在此代码片段中,我们使用默认的 SSL 套接字工厂创建一个 SSL 套接字,连接到端口 443 上的服务器“example.com”,并开始 SSL 握手。

  1. 使用 Android 网络安全配置来指定 FIPS 批准的加密算法和协议:
<network-security-config>
    <base-config cleartextTrafficPermitted="false">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <trust-anchors>
            <certificates src="@raw/example_com_ca_cert" />
        </trust-anchors>
        <pin-set expiration="2022-12-01">
            <pin digest="SHA-256">mX9vJG8oBcd47M2+Mjp+JomSQ0exKKwWcNkvL+IXNpY=</pin>
        </pin-set>
        <cipher-suites>
            <include>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</include>
        </cipher-suites>
    </domain-config>
</network-security-config>

在此代码片段中,我们为我们的应用程序指定网络安全配置。我们已将

cleartextTrafficPermitted
设置为
false
,这意味着所有网络流量都必须加密。我们还使用存储在
raw
资源文件夹中的证书为域“example.com”指定了一个信任锚。我们已经使用密钥的 SHA-256 摘要为域的公钥设置了一个 pin,并且我们已经指定只能使用
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
密码套件。

请注意,您选择使用的特定算法和协议可能取决于您的应用程序要求和您需要满足的 FIPS 认证级别。

  1. 最后,测试您的应用程序以确保它符合 FIPS 标准。

这些只是您如何使用 Android 的本机 API 来实现 FIPS 合规性的一些示例。根据您的具体用例,可能还有其他步骤或注意事项,因此请务必查阅相应的 FIPS 指南并咨询合格的安全专家。

© www.soinside.com 2019 - 2024. All rights reserved.