【问题标题】:OpenSSL FIPS Module Incore Script signature bounds off-by-oneOpenSSL FIPS 模块 Incore 脚本签名界限一倍
【发布时间】: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 的系统。

标签: openssl fips


【解决方案1】:

我刚刚在我的 linux/ARM 平台上遇到了同样的问题。是否有可能您正在构建 THUMB 代码而不是 ARM?

不幸的是,FIPS incore 脚本似乎只支持传统的 ARM 指令集,不考虑 THUMB 模式。

了解您是否使用 THUMB 代码构建的一种简单方法是在 gcc 命令行上查找“-mthumb”标志。就我而言,我删除了“-mthumb”标志,然后一切都突然正确对齐,而无需更改内芯脚本。

说明

ARM 架构支持 2 个指令集系列:传统的 32 位 ARM 指令和 16 位 THUMB 指令。

所有地址在 ARM 模式下必须能被 4 整除(4 字节对齐),在 THUMB 模式下必须能被 2 整除(2 字节对齐),不使用所有奇数地址。他们决定使用地址的最低有效位(始终为零)来确定被分支的代码是应该使用 ARM(LSB = 0)还是 THUMB(LSB = 1)指令运行。换句话说,当我们看到一个奇数地址时,这意味着位于 [odd_address - 1] 的代码需要被解释为 THUMB 指令。参考:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.kui0100a/armasm_cegbgefe.htm

FIPS incore 脚本直接使用 ELF 符号表来查找 FIPS_text_start 和 FIPS_text_end 对象的地址,而不查看它们是奇数还是偶数。如果要签名的模块是在 THUMB 模式下构建的,地址的 LSB 将设置为 1,说明脚本中需要的“-1”偏移量。当然,如果模块是用传统的ARM指令集构建的,地址的LSB设置为0,一切都对齐了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多