是否可以将绑定键保存到保留RAM而不是EEPROM,从而避免在一个非常简单的应用中需要EEPROM?没有图书馆职能吗?如果没有,所涉及的是什么?
谢谢,汤姆
是的,但是当你重启芯片时,你会丢失它们,但我假设你知道这一点。最简单的方法是只需将它们存储在变量中“属性__Attribute __((部分(“保留_mem_area0”),ZERO_INIT))。您应该将它们存储为((rand_nb,ediv),(Ltk,LTK_Length))。也许还包括密钥中的MAC地址或IRK。有一个可以存储多对的数组。
__Attribute __((部分(“保留_mem_area0”),ZERO_INIT))
流程如下:
将生成LTK时,将调用函数app_send_ltk_exch_func。此函数调用app_sec_gen_ltk,它生成一个随机键。(请注意,默认实现使用仅使用32位种子的伪数生成器rand()。如果您想要安全,则应使用新的TRNG API)。密钥大小至少为7个字节,最多16个字节。此密钥存储在app_sec_env中,后来被发送到主站。
它位于函数app_paired_func中,您应该将app_sec_env.rand_nb,app_sec_env.ediv,app_sec_env.ltk和app_sec_env.key_size值存储到您的永久存储(例如EEPROM或您的情况保留RAM)。
然后,您需要使用Value Param-> RAND_NB和PARAM-> EDIV在App_validate_encrypt_req_func中执行查找。如果您在永久存储中找到匹配项,将值写入app_sec_env.rand_nb,app_sec_env.ediv,app_sec_env.ltk和app_sec_env.ltk_size,并返回true。否则返回false。
请注意,如果在配对期间通过某人嗅到空气交通,因此长期键在空气中以明文(但仅在配对阶段,但仅在配对相位期间),则“只有作品”版本的配对机制的不安全是不安全的。如果可能的话。
您也可以查看键盘参考源,在app_kbd_proj.c中实现这些功能。您可能还想阅读评论“从带有EDIV和RAND从一个未绑定的主机获取LL_ENC_REQ之后,我们可能会达到这一点。如果没有配对,则拒绝主持人,因为没有承包。”和app_paired_func之后的代码。
请注意,默认情况下,最新键始终存储在app_sec_env(它处于保留RAM)中,app_validate_encrypt_req_func默认情况下只返回true,因此如果只能与一个设备进行连接,则将始终加载正确的LTK。
它看起来可以替换多晶体中的EEPROM调用,具有类似的呼叫来编写保留RAM。是否有更简单的实现,它只允许单个键?
我认为许多BLE应用程序需要粘合(心率,键盘,遥控等)。亚博国际官网平台网址必须添加EEPROM,有点击败使用内部OTP的简单性。如果我用键盘应用程序作为一个例子和一个大的EEPROM,就没有任何原因我无法通过将键重新定位到高内存来存储代码和键?可以更好地使用SPI Flash并保留两个页面的键(允许从一个页面复制到另一页,如果需要Mulibond)。
既不据我所知,闪光和EEPROM都不能在DA14580上映射。因此,您需要使用驱动程序代码来编写或读取外部内存。OTP是一个时间可编程,因此您无法在其中存储绑定密钥。
如果我使用外部SPI闪存来存储代码(不使用OTP),是否有任何原因我将无法在那里存储键合键?我将保留一两个闪存,并修改多元代码。
嗨tcrussell,
您可以使用SPI才能将键合键存储在SPI闪存中。键盘应用程序用EEPROM内存实现这一点。
谢谢mt_dialog.
是的,但是当你重启芯片时,你会丢失它们,但我假设你知道这一点。
最简单的方法是只需将它们存储在变量中“属性
__Attribute __((部分(“保留_mem_area0”),ZERO_INIT))
。您应该将它们存储为((rand_nb,ediv),(Ltk,LTK_Length))。也许还包括密钥中的MAC地址或IRK。有一个可以存储多对的数组。
流程如下:
将生成LTK时,将调用函数app_send_ltk_exch_func。此函数调用app_sec_gen_ltk,它生成一个随机键。(请注意,默认实现使用仅使用32位种子的伪数生成器rand()。如果您想要安全,则应使用新的TRNG API)。密钥大小至少为7个字节,最多16个字节。此密钥存储在app_sec_env中,后来被发送到主站。
它位于函数app_paired_func中,您应该将app_sec_env.rand_nb,app_sec_env.ediv,app_sec_env.ltk和app_sec_env.key_size值存储到您的永久存储(例如EEPROM或您的情况保留RAM)。
然后,您需要使用Value Param-> RAND_NB和PARAM-> EDIV在App_validate_encrypt_req_func中执行查找。如果您在永久存储中找到匹配项,将值写入app_sec_env.rand_nb,app_sec_env.ediv,app_sec_env.ltk和app_sec_env.ltk_size,并返回true。否则返回false。
请注意,如果在配对期间通过某人嗅到空气交通,因此长期键在空气中以明文(但仅在配对阶段,但仅在配对相位期间),则“只有作品”版本的配对机制的不安全是不安全的。如果可能的话。
您也可以查看键盘参考源,在app_kbd_proj.c中实现这些功能。您可能还想阅读评论“从带有EDIV和RAND从一个未绑定的主机获取LL_ENC_REQ之后,我们可能会达到这一点。如果没有配对,则拒绝主持人,因为没有承包。”和app_paired_func之后的代码。
请注意,默认情况下,最新键始终存储在app_sec_env(它处于保留RAM)中,app_validate_encrypt_req_func默认情况下只返回true,因此如果只能与一个设备进行连接,则将始终加载正确的LTK。
它看起来可以替换多晶体中的EEPROM调用,具有类似的呼叫来编写保留RAM。是否有更简单的实现,它只允许单个键?
我认为许多BLE应用程序需要粘合(心率,键盘,遥控等)。亚博国际官网平台网址必须添加EEPROM,有点击败使用内部OTP的简单性。如果我用键盘应用程序作为一个例子和一个大的EEPROM,就没有任何原因我无法通过将键重新定位到高内存来存储代码和键?可以更好地使用SPI Flash并保留两个页面的键(允许从一个页面复制到另一页,如果需要Mulibond)。
谢谢,
汤姆
既不据我所知,闪光和EEPROM都不能在DA14580上映射。因此,您需要使用驱动程序代码来编写或读取外部内存。OTP是一个时间可编程,因此您无法在其中存储绑定密钥。
如果我使用外部SPI闪存来存储代码(不使用OTP),是否有任何原因我将无法在那里存储键合键?我将保留一两个闪存,并修改多元代码。
嗨tcrussell,
您可以使用SPI才能将键合键存储在SPI闪存中。键盘应用程序用EEPROM内存实现这一点。
谢谢mt_dialog.