【问题标题】:Building FIPS module for android为安卓构建 FIPS 模块
【发布时间】:2014-02-15 23:47:43
【问题描述】:

我正在开发一个 android 项目,该项目要求应用程序中存在的加密库经过 FIPS 认证。据我所知,没有经过 FIPS 验证的 JAVA 安全库。 Boucy Castle 不错,但未经验证。看了一些论坛帖子,发现可以借助 NDK 使用 OpenSSL 的 FIPS 模块。

现在我正在尝试为 Android 构建 fips-openssl 模块,为此我为交叉编译的环境变量创建了一个脚本。

我在这个项目中使用 openssl-fips 和 ndk-r8。我遵循了我在谷歌上找到的 fips guideline。我希望这可以清楚地说明我正在尝试做的事情。

#! /bin/sh
export ANDROID_NDK="~/Android/android-ndk-r8"
export FIPS_SIG="${ANDROID_NDK}/incore"
export GCC_C1="/usr/lib/gcc/i686-pc-linux-gnu/4.7.0/"
export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin";
export MACHINE=armv71
export ARCH=arm. 
export CROSS_COMPILE="arm-linux-androideabi-"
export SYSTEM=android
#export RELEASE=2.6.32.GMU 
export ANDROID_DEV="$ANDROID_NDK/platforms/android-14/arch-arm/usr" 
export HOSTCC=/usr/bin/gcc

在制作时,这是我得到的错误。

arm-linux-androideabi-gcc: error trying to exec 'cc1': execvp: No such file or directory
make[1]: *** [cryptlib.o] Error 1
make[1]: Leaving directory `/home/abhiram/fips/openssl-fips-1.2.3/crypto'
make: *** [build_crypto] Error 1

当我执行“查找”时,cc1 可执行文件存在于这个特定目录中。

  find . -name cc1 
./toolchains/mipsel-linux-android-4.4.3/prebuilt/linux-x86/libexec/gcc/mipsel-linux-android/4.4.3/cc1
./toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/cc1
./toolchains/x86-4.4.3/prebuilt/linux-x86/libexec/gcc/i686-android-linux/4.4.3/cc1

【问题讨论】:

  • “据我所知,没有符合 FIPS 的 JAVA 安全库” - 不正确。例如,RSA Data Security 的 BSAFE 已通过 FIPS 验证。

标签: android android-ndk fips


【解决方案1】:

看起来问题出在导出语句中,PATH 行中应该有一个空格。改变这个:

export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi  4.4.3/prebuilt/linux-x86/bin";

到这里:

export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin";

此外,您的发现表明 cc1 可执行文件不在路径中,因此也将其位置添加到路径导出中:

export PATH=$PATH:"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin":"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/";

【讨论】:

  • 空格是错字。我已经添加了路径,但仍然出现同样的错误。似乎编译器“arm-linux-androideabigcc”已经在 libexec 目录中查找。我运行了“arm-linux-androideabigcc -print-search-dirs”,我看到目录存在。谢谢
【解决方案2】:

现在我正在尝试为 Android 构建 fips-openssl 模块,为此我为交叉编译的环境变量创建了一个脚本。

OpenSSL 提供了一个适用于 Android 的脚本,如果您有兴趣的话。您可以在 OpenSSL wiki 上找到它:FIPS Library and Android


在制作时,这是我得到的错误:

arm-linux-androideabi-gcc: error trying to exec 'cc1'

您的PATH 似乎不包含交叉编译工具链。

你是如何调用脚本的?您需要包含一个前导点(“.”),以确保将更改应用于当前 shell(而不是执行脚本的子 shell(它只是退出))。

这里是 OpenSSL 的 Android 构建过程的第一步,位于 FIPS Library and Android。注意前导点:

$ . .setenv-android.sh

运行脚本的结果设置了一堆OpenSSL构建系统使用的变量:

$ . ./setenv-android.sh 
ANDROID_NDK_ROOT: /opt/android-ndk-r9
ANDROID_EABI: arm-linux-androideabi-4.6
ANDROID_API: android-14
ANDROID_SYSROOT: /opt/android-ndk-r9/platforms/android-14/arch-arm
ANDROID_TOOLCHAIN: /opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin
FIPS_SIG: 
CROSS_COMPILE: arm-linux-androideabi-
ANDROID_DEV: /opt/android-ndk-r9/platforms/android-14/arch-arm/usr

"${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/"

我不认为这是必要的。


导出 ANDROID_NDK="~/Android/android-ndk-r8"

根据 Android NDK 用户列表中的人的说法,您应该同时设置 ANDROID_NDK_ROOTANDROID_SDK_ROOT。各种 NDK 和 SDK 工具使用这些环境变量。我想您安装的 SDK 值为 "~/Android/android-sdk"

详情请见Recommended NDK Directory?


我也认为你应该使用ANDROID_SYSROOT。 NDK 或 SDK 工具不使用它;相反,它由 OpenSSL 使用,并在编译期间作为 sysroot 传递。

【讨论】:

    猜你喜欢
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2021-03-29
    相关资源
    最近更新 更多