6个职位/0个新职位
最后一篇文章
拉塞尔
离线
最后一次见到:5年6个月前
已加入:2014-08-11 16:02
保存键合键

是否可以将键合键保存到保留RAM而不是EEPROM,从而避免在非常简单的应用中需要EEPROM?
是否有库函数来执行此操作?如果没有,涉及到什么?

谢谢,
汤姆

关键词:
设备:
乔奇姆韦
离线
最后一次见到:1年3个月前
上师
已加入:2014-01-14 06:45
是的,但是你会输的

是的,但是当你重新启动芯片的时候你会失去它们,但是我想你已经意识到了。
最简单的方法是将它们存储在带有属性的变量中__属性_uuuuuu((节(“retention\u mem\u area0”),zero\u init)).
您应该将它们存储为成对的((rand\u nb,ediv),(ltk,ltk\u length))。也可以在密钥中包含mac地址或irk。有一个可以存储多对的数组。

流程如下:

应生成ltk时,将调用函数app\u send\u ltk\u exch\u func。此函数调用app\u sec\u gen\u ltk,它生成一个随机密钥。(请注意,默认实现使用仅使用32位种子的伪数生成器rand()。如果您希望安全,应该改用新的trngapi)。密钥大小至少为7字节,最多为16字节。此密钥存储在app_sec_env中,稍后会发送给主机。

在函数app\u paired\u func中,您应该存储app\u sec_环境随机数,应用程序秒_环境ediv,应用程序秒_环境有限公司和应用程序秒_环境密钥大小永久存储的值(例如EEPROM或在您的情况下是retention ram)。

然后需要使用param->rand\u nb和param->ediv值在app\u validate\u encrypt\u req\u func中进行查找。如果在永久存储中找到匹配项,请将值写入app\u sec_环境随机数,应用程序秒_环境ediv,应用程序秒_环境有限公司和应用程序秒_环境有限公司大小,并返回true。否则返回false。

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

您还可以在app\u kbd\u proj.c中查看键盘参考源,了解这些函数是如何实现的。您可能还想阅读注释“我们可能在从EDIV和RAND设置为零的未绑定主机获得LL ENC请求之后到达这一点。如果是MITM,则拒绝主机,因为没有执行配对。”并且在应用程序\u paired \u func之后的代码。

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

拉塞尔
离线
最后一次见到:5年6个月前
已加入:2014-08-11 16:02
看来可以

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

我认为许多BLE应用程序需要连接(心率、键盘、遥控器等)亚博国际官网平台网址。必须添加一个EEPROM在某种程度上破坏了使用内部OTP的简单性。如果我使用键盘应用程序作为一个例子和一个大的EEPROM,有没有任何理由我不能存储代码和钥匙,通过重新定位的钥匙高内存?最好使用spiflash并为键保留两页(如果需要mulibond,允许从一页复制到另一页)。

谢谢,
汤姆

乔奇姆韦
离线
最后一次见到:1年3个月前
上师
已加入:2014-01-14 06:45
既不是闪存也不是eeprom

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

拉塞尔
离线
最后一次见到:5年6个月前
已加入:2014-08-11 16:02
如果我使用外部SPI闪存

如果我使用外部SPI flash来存储代码(不使用OTP),有没有什么理由我不能同时在那里存储键呢?我会保留一页或两页的flash和修改多键代码。

MT\u对话框
离线
最后一次见到:1周23小时前
工作人员
已加入:2015-06-08 11:34
嗨,拉塞尔,

嗨,拉塞尔,

您可以使用SPI将键合键存储在SPI闪存中。键盘应用程序通过EEPROM存储器实现这一点。

谢谢你的对话