跳过主要内容

栈执行LTK大小

DA14581

3年前

发布的JamesHiebert0点 6个回答
0的问题

DA14581芯片的BLE堆栈是否强制BLE LTK大小限制(7-16字节),以便应用程序始终可以相信密钥大小是有效的?

谢谢!

3年前

PM_Dialog

嗨JamesHiebert,

你能把你的问题说清楚吗?你说DA14581芯片的BLE堆栈强制BLE LTK大小限制(7-16字节)是什么意思?请注意,LTK是16字节。

谢谢,PM_Dialog

3年前

JamesHiebert 0点

你好,对话框,

BLE v4.1规范说LTK可以在7到16字节之间。

2.4.2.3 LTK、EDIV和Rand的生成

“生成的LTK大小不得超过协商的加密密钥大小,其大小可能需要减少(见第2.3.4节)”。

2.3.4加密密钥大小
每个设备都应该有最大和最小加密密钥长度参数
哪个定义了加密密钥的最大和最小大小
允许在八位字节。最大和最小加密密钥长度参数
应该在7个字节(56位)和16个字节(128位)之间,在1个字节(8
位)的步骤。这是由配置文件或设备应用程序定义的。

发起和响应设备的值越小,加密量越大
密钥长度参数应使用作为加密密钥的大小。

起爆装置和响应装置都应检查结果
加密密钥大小不小于最小密钥大小参数
如果是,则发送配对失败错误命令
代码“加密密钥大小”。

加密密钥的大小可以存储,以便任何服务都可以检查
对加密密钥长度的要求最小。
如果密钥的加密密钥大小小于16字节(128位),则必须
通过屏蔽生成密钥的适当msb来创建
得到的密钥具有商定的加密密钥大小。掩蔽应该是
在生成之后,在分发之前(在LTK的情况下),使用或
存储。

例如,128位加密密钥为
0 x123456789abcdef0123456789abcdef0

并且它被减少到7个八位(56位),然后得到的密钥是
0 x0000000000000000003456789abcdef0。

所以我的问题是,如果主程序发送一个无效的键大小,堆栈是否会传递一个无效的大小(<7或>16)给应用程序(例如,在GAPC_LTK_EXCH风格的bond请求指示)?

3年前

PM_Dialog

嗨JamesHiebert,

根据DA14581的rom代码,只有当LTK大于16字节时才会进行检查。因此,如果LTK大于16字节,rom代码将发送前16字节以获得有效的大小。如果LTK大小小于7字节,那么未使用的字节将被0掩盖。在这两种情况下,LTK大小都是16字节,所以如果主程序发送了一个无效的大小,就会在rom代码中进行修正。

谢谢,PM_Dialog

3年前

JamesHiebert 0点

谢谢你提供的信息。关于传递的密钥大小,还有一个后续问题:

如果主节点LTK大小为7,从节点LTK大小为16,并且也应该生成LTK,那么从节点堆栈将GAPC_BOND_REQ_IND (GAPC_LTK_EXCH)消息与数据一起发送给应用程序。Key_size字段值为7。

相反,如果主服务器的LTK大小为5(这是一个无效的大小),从服务器的LTK大小为16,并且也应该生成LTK,从服务器的堆栈还会发送GAPC_BOND_REQ_IND (GAPC_LTK_EXCH)消息给应用程序吗?如果是,它会指示一个(无效的)键大小为5吗?

3年前

PM_Dialog

嗨JamesHiebert,

在每种情况下,主服务器和从服务器发送的LTK都被rom代码修改为16字节。在你所做的两个问题中,master的LTK将被0掩盖以获得16字节的大小。

谢谢,PM_Dialog

3年前

JamesHiebert 0点

嗨,对话框中,

我知道堆栈填充键的大小为16字节。我的问题是关于报告的“key_size”字段是一个主LTK大小为5。如果主从双方协商的LTK大小为7,则该值为7。如果master提供的LTK大小是5,会是什么?我试图确定,如果应用程序可以确定和反应无效的key_size提供了GAPC_LTK_EXCH堆栈消息。