6个职位/ 0个新职位
最后发表
tcrussell
离线
最后看到:5年10个月前
加入:2014-08-11 16:02
保存键键

是否有可能保存键以保留RAM而不是EEPROM,从而避免在一个非常简单的应用程序中需要EEPROM ?
有这样的库函数吗?如果不是,涉及什么?

谢谢,
汤姆

关键词:
设备:
Joacimwe
离线
最后看到:一年6个月前
大师
加入:2014-01-14 06:45
是的,但那样你就会输

是的,但重启芯片后就会丢失,但我猜你已经知道了。
最简单的方法是将它们存储在带有属性的变量中__attribute__((部分(“retention_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或在case retention ram中)。

然后,您需要使用值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。否则返回假。

请注意,“just works”版本的配对机制是不安全的,如果有人在配对过程中嗅探到空中交通,因为长期密钥是明文通过空中发送(但仅在配对阶段),所以尽量避免这种模式。

您还可以查看键盘参考源,在app_kbd_project .c中查看这些函数是如何实现的。您可能还想阅读下面的注释:“我们可能在从一个未绑定的主机获得一个LL_ENC_REQ,并将EDIV和RAND设置为0之后到达这一点。”Reject the Host in case of MITM since no Pairing has been performed ."和app_paired_func后面的代码。

注意,在默认情况下,最新的密钥总是存储在app_sec_env(在保留ram中)中,而app_validate_encrypt_req_func默认情况下只返回true,因此如果您只连接到一个设备,则总是加载正确的ltk。

tcrussell
离线
最后看到:5年10个月前
加入:2014-08-11 16:02
看起来可以

看起来可以用写保留ram的类似调用来替代多bond中的eeprom调用。有没有更简单的实现,只允许一个单独的bond?

我认为许多BLE应用需要绑定(心率、键盘、遥控器等)。雷竞技安卓下载必须添加EEPROM在某种程度上破坏了使用内部OTP的简单性。如果我使用键盘应用程序作为一个例子和一个大的EEPROM,有什么原因我不能在它存储代码和键通过重定位键到高内存?最好使用SPI flash并保留两个页面作为键值(如果需要multibond的话,允许从一个页面复制到另一个页面)。

谢谢,
汤姆

Joacimwe
离线
最后看到:一年6个月前
大师
加入:2014-01-14 06:45
既不是flash也不是eeprom

据我所知,flash和eeprom都不能被映射到da14580上。因此,您需要使用驱动程序代码来读写外部内存。otp是一次性可编程的,所以你不能在里面存储键。

tcrussell
离线
最后看到:5年10个月前
加入:2014-08-11 16:02
如果我使用外部SPI flash

如果我使用外部SPI flash存储代码(不使用OTP),有任何原因,我将不能也存储键?我会保留一页或两页的flash,并修改多键代码。

MT_dialog
离线
最后看到:3个月1周前
工作人员
加入:2015-06-08 34
嗨tcrussell,

嗨tcrussell,

您可以使用SPI来在SPI flash中存储bonding键。键盘应用程序通过一个EEPROM内存实现了这一点。

由于MT_dialog