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来创建产生的密钥具有商定的加密密钥大小。掩蔽应是在生成之后和分发之前完成(在LTK的情况下),使用或存储。
例如,如果128位的加密密钥为0 x123456789abcdef0123456789abcdef0
并且它被减少到7个字节(56位),那么结果的密钥是0 x0000000000000000003456789abcdef0。
所以我的问题是,如果主发送一个无效的密钥大小,堆栈是否会向应用程序传递一个无效的大小(<7或>16)(例如,在GAPC_LTK_EXCH类型的绑定请求指示中)?
根据DA14581的rom代码,只有当LTK大于16字节时才进行检查。因此,如果LTK大于16字节,rom代码将发送前16字节以获得有效的大小。如果LTK大小小于7字节,则未使用的字节将用零掩盖。在这两种情况下,LTK大小都是16字节,因此如果主服务器发送了一个无效的大小,rom代码中就会有一个修正。
谢谢你提供的信息。关于传递的键的大小还有一个后续问题:
如果主服务器的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(无效)?
在每种情况下,主服务器和从服务器发送的LTK都被rom代码修改为16字节。在你所做的两个问题中,master的LTK将被0掩盖,以便拥有16字节的大小。
嗨,对话框中,
我知道堆栈将密钥填充为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来创建
产生的密钥具有商定的加密密钥大小。掩蔽应是
在生成之后和分发之前完成(在LTK的情况下),使用或
存储。
例如,如果128位的加密密钥为
0 x123456789abcdef0123456789abcdef0
并且它被减少到7个字节(56位),那么结果的密钥是
0 x0000000000000000003456789abcdef0。
所以我的问题是,如果主发送一个无效的密钥大小,堆栈是否会向应用程序传递一个无效的大小(<7或>16)(例如,在GAPC_LTK_EXCH类型的绑定请求指示中)?
嗨JamesHiebert,
根据DA14581的rom代码,只有当LTK大于16字节时才进行检查。因此,如果LTK大于16字节,rom代码将发送前16字节以获得有效的大小。如果LTK大小小于7字节,则未使用的字节将用零掩盖。在这两种情况下,LTK大小都是16字节,因此如果主服务器发送了一个无效的大小,rom代码中就会有一个修正。
谢谢,PM_Dialog
谢谢你提供的信息。关于传递的键的大小还有一个后续问题:
如果主服务器的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(无效)?
嗨JamesHiebert,
在每种情况下,主服务器和从服务器发送的LTK都被rom代码修改为16字节。在你所做的两个问题中,master的LTK将被0掩盖,以便拥有16字节的大小。
谢谢,PM_Dialog
嗨,对话框中,
我知道堆栈将密钥填充为16字节大小。我的问题是关于报告的“key_size”字段是一个主LTK大小为5。如果主服务器和从服务器协商的LTK大小为7,则该值为7。如果master提供的LTK大小是5,它会是什么?我试图确定应用程序是否可以确定和反应无效的key_size提供了一个GAPC_LTK_EXCH堆栈消息。