问题标签 [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.
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 连接的客户端吗?
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”。
我认为一旦解决了这个问题,我可以自己解决其他问题,因为问题的根源似乎是一样的。
谢谢。
mbedtls - 如何使用 mbedtls 逐块散列大文件?
我想递归地散列一个大文件,我怎么能用 mbedtls 做到这一点?
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 编译器还不够好。然后我将代码移植到我的嵌入式设备的开发系统中,它也可以工作。
c# - ECDiffieHellman - mbedTLS 与 C#
我需要在 ARM cortex M3 和 PC 之间使用椭圆曲线 Diffie Hellman。在 ARM 上,我使用mbed TLS。在 PC 端,我想要我们 C# 和ECDiffieHellman(Cng)类。
我可以在 ARM 与 ARM 上进行 ECDH,但是当我尝试用 PC 替换一侧时确实遇到了麻烦。
- 问题是密钥交换。我发现,密钥由 mbed TLS 导出为
<LEN><0x04><X><Y>
.
因此,在 C# 中,我正在使用
私有静态 EC
- 生成我试过的密钥
我的问题是生成的共享密钥与 mbed TLS 生成的共享密钥长度不同,并且不匹配。
有人已经解决了这个问题吗?
谢谢!
编辑1:
我忘了提到,我在 ARM 上使用了裸 ECDH。所以我认为没有执行任何密钥派生函数。对结果进行散列(SHA256)以匹配 C# 端(在将 SHA256 配置为 KDF 时)是否足够?
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
吗?
c - 如何在没有 RTOS 的情况下将 mbedTLS 与 lwip 一起使用?
我想在 STM32F4 中使用 mbedtls 和 lwip。而在 Cubemx 中,当我想选择带有 lwip 的 mbedtls 时,我无法选择没有 FreeRTOS 的中间件。但我不想使用 FreeRTOS。当我生成代码并删除 FreeRTOS 文件、文件夹等时。我有很多错误。我怎样才能同时使用 lwip 和 mbedtls ?
c - MBED TLS 对称密钥包装
我正在尝试使用 MBED TLS 加密函数来解包已使用 AES-128 密钥包装加密的密钥,该密钥包装使用我拥有的对称密钥。
我是加密新手,我的理解是密钥包装/解包与加密/解密不同。这个对吗?
此页面上列出了示例,但 aes 示例正在解密而不是密钥解包,并且包装示例使用公钥而不是对称密钥。
是否有一些使用 MBED TLS 使用 AES-128 加密进行密钥解包的参考或示例?
我试过简单地使用解密功能,结果我没有得到正确的数据。见下文。
谢谢!
ssl - 如何使用 mbedtls 验证证书是否验证密钥?
Mbedtls 可以使用其mbedtls_x509_crt_verify(...)
功能(链接)验证 x509 证书。
但是,我有什么:
- 公钥/私钥对(保存在 中
mbedtls_pk_context
)。 - 我从其他来源获得的证书(因此,不能保证它不包含任何可能的智能修改)。
证书的验证没有问题。
但是,如果该证书验证了不同的密钥怎么办?(可能是软件问题和破解尝试的结果。)当然,这样的密钥/证书对将无法进行 tls 握手,但我认为我不需要建立 tcp 连接为了那个原因。
这个来源(虽然它是用于 openssl 脚本)使得证书密钥匹配验证很可能发生在简单的模数匹配中。
还有一个mbedtls_pk_verify(...)
函数(ref),但在我看来,它主要使用签名。但是我没有签名,我有一个证书(以 pem 格式获得)和我的密钥(我也有一个 pem 格式的密钥)。将它们处理成内部 mbedtls 数据结构 ( mbedtls_x509_crt
and mbedtls_pk_context
) 不是问题,但我如何验证它们是否匹配?