【发布时间】:2018-08-24 04:21:28
【问题描述】:
我正在构建支持 FIPS 的 OpenSSL 版本以用作共享库,使用以下版本:
FIPS 模块:2.0.16
OpenSSL:1.0.2n
当我为 x86 本机构建它时,我没有任何问题,并且模块可以成功进入 FIPS 模式(通过 FIPS_mode_set(1))。
但是,当我为 arm (linux_armv4) 进行交叉编译并使用提供的内核脚本生成库指纹时,“FIPS_mode_set(1)”调用因指纹无效而失败。
我将此追踪到内核脚本本身,该脚本获得了“FIPS_text_start”和“FIPS_text_end”的偏移量。打印出来时,这些地址似乎与库中符号的实际位置值相差 1。为了确认,我从每个中减去 1 并重新运行签名生成(下面给出之前和之后):
注意:这个 sn-p 从 incore 脚本的第 407 行开始
之前:
sub FIPS_incore_fingerprint {
my $p1 = $FIPS_text_start->{st_offset};
my $p2 = $FIPS_text_end->{st_offset};
之后:
sub FIPS_incore_fingerprint {
my $p1 = $FIPS_text_start->{st_offset}-1;
my $p2 = $FIPS_text_end->{st_offset}-1;
当加载到 arm 系统时,通过指纹并成功从“FIPS_mode_set”返回。
但是,根据 OpenSSL FIPS 用户指南中的指南,该更改可能会使库的 FIPS 认证无效。我对 perl 不是很熟悉,除了我不熟悉的某种编译器细微差别之外,不知道是什么导致了这种情况,并且正在寻找人们可能有的任何建议。
总结:
- 生成支持 FIPS 的 OpenSSL 版本
- 在 x86 上运行良好
- 交叉编译失败指纹检查失败出现由于 内核脚本为 FIPS_text_start 和 FIPS_text_end
- 不确定如何正确修复,因为内部脚本修改被认为是被禁止的
【问题讨论】:
-
安卓设备的交叉编译方式?
-
不是专门针对 android 的,而是在 ARM Cortex-A9 上运行的基于 linux 的系统。