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位加密密钥为0x123456789abcdef0123456789abcdef0.
并且它被减少到7个八位(56位),然后得到的密钥是0 x0000000000000000003456789abcdef0。
所以我的问题是,如果主程序发送一个无效的键大小,堆栈是否会传递一个无效的大小(<7或>16)给应用程序(例如,在GAPC_LTK_EXCH风格的bond请求指示)?
根据DA14581的rom代码,只有当LTK大于16字节时才会进行检查。因此,如果LTK大于16字节,rom代码将发送前16字节以获得有效的大小。如果LTK大小小于7字节,那么未使用的字节将被0掩盖。在这两种情况下,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。如果主站提供的LTK大小为5,则将是什么?还是我正在尝试确定应用程序是否可以对具有GAPC_LTK_EXCH堆栈消息提供的无效key_size来确定和反应。
嗨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位加密密钥为
0x123456789abcdef0123456789abcdef0.
并且它被减少到7个八位(56位),然后得到的密钥是
0 x0000000000000000003456789abcdef0。
所以我的问题是,如果主程序发送一个无效的键大小,堆栈是否会传递一个无效的大小(<7或>16)给应用程序(例如,在GAPC_LTK_EXCH风格的bond请求指示)?
嗨JamesHiebert,
根据DA14581的rom代码,只有当LTK大于16字节时才会进行检查。因此,如果LTK大于16字节,rom代码将发送前16字节以获得有效的大小。如果LTK大小小于7字节,那么未使用的字节将被0掩盖。在这两种情况下,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。如果主站提供的LTK大小为5,则将是什么?还是我正在尝试确定应用程序是否可以对具有GAPC_LTK_EXCH堆栈消息提供的无效key_size来确定和反应。