问题标签 [mbedtls]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
154 浏览

windows - 在 Windows 上使用 Mbedtls-SGX

我有一个具有 Intel SGX Enclave 的应用程序。我想从 enclave 中创建到服务器的 https 连接(以便会话密钥和其他秘密隐藏在 enclave 中)。

我看到了 mbedtls-sgx github 页面 ( https://github.com/bl4ck5un/mbedtls-SGX ),我尝试通过更改 cmake 文件中的一些设置在 Windows 上构建这个库。

然而,我所有的尝试都没有成功。

有人设法在 Windows 上使用这个库吗?

或者你知道我可以在 Windows 上使用另一个库来在 enclave 内构建 https 连接的客户端吗?

0 投票
1 回答
720 浏览

c++ - 将 openthread 与 mbedtls 一起使用时,如何解决“未定义的引用”错误?

我正在为OpenThread堆栈通过 CoAP 实现 EST(安全传输注册)客户端。为此,我想使用 mbedTLS 编写 CSR(证书签名请求),它是作为第三方软件的堆栈的一部分。我现在的问题是,当我构建代码时(我在 Ubuntu 18.04.2 LTS 机器上使用 GCC),我从链接器收到了一些“未定义的引用”错误。

由于有多个函数会发生错误,因此我将仅提供一个示例的代码。这是我的源文件:

openthread/src/core/crypto/ecp.cpp:

我的头文件:

openthread/src/core/crypto/ecp.hpp

导致错误的函数在这里是 mbedtls_pk_write_pubkey_pem 和 mbedtls_pk_write_key_pem。

这也是控制台输出的一部分:

我首先认为这是因为我缺少一些#define 来实际使用这些函数,但我将它与其他使用 mbedtls 的 OpenThread 代码进行了比较,我看不出我做错了什么。据我了解,我必须修改“openthread/third_party/mbedtls/mbedtls-config.h”文件以便构建这些功能,所以这就是我所做的:

它解决了我之前遇到的“未在此范围内定义”错误,但我现在遇到了上述错误。

这是我在 common-switch 文件中编辑的内容:

openthread/examples/common-switches.mk

和她我添加的配置:

开放线程/configure.ac

我还编辑了makefile:

openthread/src/core/Makefile.am

我的构建命令是“make -f examples/Makefile-nrf52840 EST_CLIENT=1”。

我认为一旦解决了这个问题,我可以自己解决其他问题,因为问题的根源似乎是一样的。

谢谢。

0 投票
1 回答
75 浏览

mbedtls - 如何使用 mbedtls 逐块散列大文件?

我想递归地散列一个大文件,我怎么能用 mbedtls 做到这一点?

0 投票
1 回答
954 浏览

c - 使用 openssl 将代码转换为使用 mbedtls

我正在尝试将一些编写为在 Mac 上运行的 C 代码转换为没有任何加密库的嵌入式设备。Mac 的代码使用 libcrypto。我尝试从嵌入式设备的 openssl 源构建 libcrypto,但由于函数指针原型不匹配,我收到数百个错误。openssl 充满了巨大的宏。作为替代方案,我现在正在尝试使用 mbedtls,但我无法使解密功能正常工作。

我试图移植的代码有点奇怪。它有所谓的公钥,实际上是RSA_public_encrypt()在没有填充的情况下调用来解密数据。作为测试,我将 Mac 代码更改为 callRSA_public_decrypt()并且它有效,所以我假设密钥是对称的。它使用的密钥如下所示:

对于我mbedtls_pk_parse_public_key()用来解析密钥的 mbedtls。如果我在解析密钥后检查低级 RSA 密钥结构,则有一个 128 字节的 N 组件和一个 16 字节的 E 组件。我使用 openssl 和 mbedtls 获得了相同的密钥数据,因此看来密钥已正确解析。在 Mac 上使用 解密时RSA_public_decrypt(),输入和输出都是 128 字节。对于 mbedtls,我正在调用mbedtls_pk_decrypt()解密,但是当我跟踪它调用的代码时,它mbedtls_rsa_rsaes_pkcs1_v15_decrypt()会强制填充为 11 个字节。

所以我的问题是:1)究竟什么样的“公钥”只包含 N 和 E 组件并且不使用填充;2) 我是否调用了正确的 mbedtls 解密函数?

编辑:尝试了另一种方法,我的输出缓冲区只是被零填充。

编辑 2:我的最终目标是带有 ARM 处理器的嵌入式设备,但我正在 Windows 上进行测试以查看 mbedtls 是否可以工作。我从 VS 2010 开始,因为这是我正在从事的项目所使用的。我切换到 VS 2015,导入原始密钥数据和调用的第二种方法mbedtls_rsa_public()效果很好。我猜 VS 2010 编译器还不够好。然后我将代码移植到我的嵌入式设备的开发系统中,它也可以工作。

0 投票
1 回答
539 浏览

c# - ECDiffieHellman - mbedTLS 与 C#

我需要在 ARM cortex M3 和 PC 之间使用椭圆曲线 Diffie Hellman。在 ARM 上,我使用mbed TLS。在 PC 端,我想要我们 C# 和ECDiffieHellman(Cng)类。

我可以在 ARM 与 ARM 上进行 ECDH,但是当我尝试用 PC 替换一侧时确实遇到了麻烦。

  1. 问题是密钥交换。我发现,密钥由 mbed TLS 导出为<LEN><0x04><X><Y>.

因此,在 C# 中,我正在使用

私有静态 EC

  1. 生成我试过的密钥

我的问题是生成的共享密钥与 mbed TLS 生成的共享密钥长度不同,并且不匹配。

有人已经解决了这个问题吗?

谢谢!

编辑1:

我忘了提到,我在 ARM 上使用了裸 ECDH。所以我认为没有执行任何密钥派生函数。对结果进行散列(SHA256)以匹配 C# 端(在将 SHA256 配置为 KDF 时)是否足够?

0 投票
1 回答
181 浏览

c - 为什么 mbedtls_ecdsa_from_keypair 返回错误?

我正在从缓冲区解析 RSA 私钥mbedtls_pk_parse_key(),它返回 0。然后我调用mbedtls_ecdsa_from_keypair()它,它返回 -20096(我相信它对应于MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE).

我正在使用 XDK Workbench 构建类似于以下代码的内容:

当我查看 的实现时mbedtls_ecdsa_from_keypair(),我看到它pk.pk_ctx被视为mbedtls_ecp_keypair. 的grp成员mbedtls_ecp_keypair有一个id为零的成员,对应于MBEDTLS_ECP_DP_NONE。我把错误的东西传递给了mbedtls_ecdsa_from_keypair吗?

0 投票
0 回答
301 浏览

c - 如何在没有 RTOS 的情况下将 mbedTLS 与 lwip 一起使用?

我想在 STM32F4 中使用 mbedtls 和 lwip。而在 Cubemx 中,当我想选择带有 lwip 的 mbedtls 时,我无法选择没有 FreeRTOS 的中间件。但我不想使用 FreeRTOS。当我生成代码并删除 FreeRTOS 文件、文件夹等时。我有很多错误。我怎样才能同时使用 lwip 和 mbedtls ?

0 投票
1 回答
202 浏览

c - MBED TLS 对称密钥包装

我正在尝试使用 MBED TLS 加密函数来解包已使用 AES-128 密钥包装加密的密钥,该密钥包装使用我拥有的对称密钥。

我是加密新手,我的理解是密钥包装/解包与加密/解密不同。这个对吗?

此页面上列出了示例,但 aes 示例正在解密而不是密钥解包,并且包装示例使用公钥而不是对称密钥。

是否有一些使用 MBED TLS 使用 AES-128 加密进行密钥解包的参考或示例?

我试过简单地使用解密功能,结果我没有得到正确的数据。见下文。

谢谢!

0 投票
2 回答
1669 浏览

ssl - 如何使用 mbedtls 验证证书是否验证密钥?

Mbedtls 可以使用其mbedtls_x509_crt_verify(...)功能(链接)验证 x509 证书。

但是,我有什么:

  • 公钥/私钥对(保存在 中mbedtls_pk_context)。
  • 我从其他来源获得的证书(因此,不能保证它不包含任何可能的智能修改)。

证书的验证没有问题。

但是,如果该证书验证了不同的密钥怎么办?(可能是软件问题和破解尝试的结果。)当然,这样的密钥/证书对将无法进行 tls 握手,但我认为我不需要建立 tcp 连接为了那个原因。

这个来源(虽然它是用于 openssl 脚本)使得证书密钥匹配验证很可能发生在简单的模数匹配中。

还有一个mbedtls_pk_verify(...)函数(ref),但在我看来,它主要使用签名。但是我没有签名,我有一个证书(以 pem 格式获得)和我的密钥(我也有一个 pem 格式的密钥)。将它们处理成内部 mbedtls 数据结构 ( mbedtls_x509_crtand mbedtls_pk_context) 不是问题,但我如何验证它们是否匹配?

0 投票
1 回答
191 浏览

arm - 库 embedTLS 与 LwIP 2.1.0 的集成在未定义对“_gettimeofday”的引用时出现错误

我尝试将库 mbedTLS 与 LwIP 2.1.0 集成。我已将以下内容添加到我的 lwipopts.h 文件中

我已经像这样将库添加到我的项目中,并为编译器引用了它们:

在此处输入图像描述

我还在 mbedtls/include/config.h 文件中进行了更改,以便不使用 windows 或 linux。

我得到了一个“对“_gettimeofday”的未定义引用,我将它缩小到唯一定义它的地方是在我的 arm-gnu 工具链中:

可能是什么情况?当我关闭 LWIP_ALTCP_TLS 时,一切都会编译文件,但随后无法使用 TLS。我需要打开/关闭更多标志吗?