DA14581芯片的BLE堆栈是否强制执行BLE LTK大小限制(7-16字节),以便应用程序始终相信密钥大小有效?
谢谢!
嗨jameshiebert,
你能澄清你的问题吗?您是介于什么意思DA14581芯片的BLE堆栈强制执行BLE LTK大小限制(7-16字节)。请注意,LTK是16字节。
谢谢,PM_DIALOG.
你好对话框,
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来创建以提供a得到的密钥具有商定的加密密钥大小。掩蔽应该是生成后和在分发之前完成(在LTK的情况下),使用或存储。
例如,如果128位加密密钥是0 x123456789abcdef0123456789abcdef0
它减少到7个八位字节(56位),然后得到的键是0x00000000000000000000003456789abcdef0。
所以我的问题是,如果主机发送无效的密钥大小,则堆栈会将堆栈将无效大小(<7或> 16)传递给应用程序(例如,在绑定请求指示的GAPC_LTK_EXCH风味中)吗?
根据DA14581的ROM代码,仅当LTK更大的16bytes时才有一个校验。因此,如果LTK超过16字节,则ROM代码将发送前16字节以具有有效大小。如果LTK大小小于7字节,则将用零屏蔽未使用的字节。在这两种情况下,LTK大小将是16字节,因此如果主设备发送无效大小,则ROM代码中存在校正。
谢谢提供信息。有关通过的密钥大小的一个更新问题:
如果主设备具有LTK大小为7并且从站具有LTK大小为16并且也应该生成LTK,则从Slave的堆栈将Gapc_bond_req_ind(gapc_ltk_exch)消息发送到应用程序的数据.key_size字段值为7。
相反,如果主设备具有5(是无效大小)的LTK大小(其大小),因此从设备具有LTK大小为16并且也应该生成LTK,因此从堆栈仍将发送GAPC_BOND_REQ_IND(GAPC_LTK_EXCH)消息应用程序?如果它,它会表示(无效)键大小为5?
在每种情况下,主站和从头发送的LTK由ROM代码修改为16个字节。在您所做的这两个问题中,Master的LTK将用零屏蔽以才能有16Bytes大小。
嗨,对话框中,
我知道堆栈填充键的大小为16字节。我的问题是关于报告的“key_size”字段是一个主LTK大小为5。如果主从双方协商的LTK大小为7,则该值为7。如果master提供的LTK大小是5,会是什么?我试图确定,如果应用程序可以确定和反应无效的key_size提供了GAPC_LTK_EXCH堆栈消息。
嗨jameshiebert,
你能澄清你的问题吗?您是介于什么意思DA14581芯片的BLE堆栈强制执行BLE LTK大小限制(7-16字节)。请注意,LTK是16字节。
谢谢,PM_DIALOG.
你好对话框,
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来创建以提供a
得到的密钥具有商定的加密密钥大小。掩蔽应该是
生成后和在分发之前完成(在LTK的情况下),使用或
存储。
例如,如果128位加密密钥是
0 x123456789abcdef0123456789abcdef0
它减少到7个八位字节(56位),然后得到的键是
0x00000000000000000000003456789abcdef0。
所以我的问题是,如果主机发送无效的密钥大小,则堆栈会将堆栈将无效大小(<7或> 16)传递给应用程序(例如,在绑定请求指示的GAPC_LTK_EXCH风味中)吗?
嗨jameshiebert,
根据DA14581的ROM代码,仅当LTK更大的16bytes时才有一个校验。因此,如果LTK超过16字节,则ROM代码将发送前16字节以具有有效大小。如果LTK大小小于7字节,则将用零屏蔽未使用的字节。在这两种情况下,LTK大小将是16字节,因此如果主设备发送无效大小,则ROM代码中存在校正。
谢谢,PM_DIALOG.
谢谢提供信息。有关通过的密钥大小的一个更新问题:
如果主设备具有LTK大小为7并且从站具有LTK大小为16并且也应该生成LTK,则从Slave的堆栈将Gapc_bond_req_ind(gapc_ltk_exch)消息发送到应用程序的数据.key_size字段值为7。
相反,如果主设备具有5(是无效大小)的LTK大小(其大小),因此从设备具有LTK大小为16并且也应该生成LTK,因此从堆栈仍将发送GAPC_BOND_REQ_IND(GAPC_LTK_EXCH)消息应用程序?如果它,它会表示(无效)键大小为5?
嗨jameshiebert,
在每种情况下,主站和从头发送的LTK由ROM代码修改为16个字节。在您所做的这两个问题中,Master的LTK将用零屏蔽以才能有16Bytes大小。
谢谢,PM_DIALOG.
嗨,对话框中,
我知道堆栈填充键的大小为16字节。我的问题是关于报告的“key_size”字段是一个主LTK大小为5。如果主从双方协商的LTK大小为7,则该值为7。如果master提供的LTK大小是5,会是什么?我试图确定,如果应用程序可以确定和反应无效的key_size提供了GAPC_LTK_EXCH堆栈消息。