2012-06-12 6 views
1

FIPS 인증을 받기 위해 애플리케이션에있는 암호화 라이브러리가 필요한 안드로이드 프로젝트를 진행 중입니다. 내 지식에는 FIPS 검증 된 JAVA 보안 라이브러리가 없습니다. Boucy Castle은 훌륭하지만 검증되지 않았습니다. 포럼 게시물을 읽은 후 OpenSSL의 FIPS 모듈을 NDK를 통해 사용할 수 있음을 알게되었습니다.안드로이드 용 FIPS 모듈 빌드

지금은 Android 용 fips-openssl 모듈을 작성하려고합니다. 크로스 컴파일을위한 환경 변수 스크립트를 작성했습니다.

이 프로젝트에서는 openssl-fips 및 ndk-r8을 사용하고 있습니다. 나는 fips를 따라 갔다. guideline 나는 google에서 찾았다. 나는 이것이 내가하려고하는 것에 대한 명확한 그림을 보여주기를 바랍니다.

#! /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 
+0

"필자가 아는 한 FIPS 호환 Java 보안 라이브러리는 없습니다."- 사실이 아닙니다. 예를 들어 RSA Data Security의 [BSAFE] (http://www.emc.com/security/rsa-bsafe.htm)는 FIPS의 유효성을 검사합니다. – jww

답변

3

문제는 내보내기 명령문에있는 것처럼 보이며, PATH 행에 대시가 있어야하는 공백이 있습니다.

또한
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"; 

이에이 변경

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/"; 
+0

공백은 오타였습니다. 경로를 추가했지만 여전히 동일한 오류가 발생합니다. 컴파일러 "arm-linux-androideabigcc"가 이미 libexec 디렉토리에서 찾고있는 것처럼 보입니다. "arm-linux-androideabigcc -print-search-dirs"를 실행했는데 그 디렉토리가 있음을 알았습니다. 감사합니다. – feverDream

0

지금은 Android 용 fips-openssl 모듈을 만들려고합니다. 크로스 컴파일을위한 환경 변수 스크립트를 만들었습니다.

OpenSSL은 관심있는 경우 Android 용 스크립트를 제공합니다. OpenSSL 위키 : FIPS Library and Android에서 찾을 수 있습니다. 그것은 크로스 컴파일 툴 체인을 포함하지 않는 PATH처럼 보이는

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

다음 메이크업을 할 때


이 내가 얻을 그 오류입니다.

스크립트를 어떻게 호출합니까? 선행 점 (".")을 포함하여 변경 사항이 현재 쉘 (그리고 스크립트를 실행하는 하위 쉘 (단순히 종료 됨)이 아닌)에 적용되도록해야합니다.

여기에 'FIPS Library and Android에있는 Android 용 OpenSSL 빌드 절차의 첫 번째 단계가 있습니다.설정에는 OpenSSL 구축 시스템에 의해 사용되는 변수의 무리 스크립트를 실행

$ . .setenv-android.sh 

결과 : 선행 점을 주목

$ . ./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}/툴체인/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/"

나는 그렇지 않습니다. 이것이 필요하다고 생각하십시오.


수출 ANDROID_NDK = "~/안드로이드/안드로이드 NDK-R8"

은 안드로이드 NDK 사용자 목록에있는 사람들에 따르면, 당신은 ANDROID_NDK_ROOTANDROID_SDK_ROOT 모두를 설정해야합니다. 다양한 NDK 및 SDK 도구는 이러한 환경 변수를 사용합니다. 귀하의 설치에 대한 SDK 값이 "~/Android/android-sdk"이라고 가정합니다.

자세한 내용은 Recommended NDK Directory?을 참조하십시오.


나는 또한 ANDROID_SYSROOT을 사용해야한다고 생각합니다. NDK 또는 SDK 도구에서는 사용하지 않습니다. 오히려 OpenSSL에서 사용하고 컴파일시 sysroot으로 전달됩니다.