6个员额/0个新
最后一篇文章
罗素
离线
最后一次见到:5年9个月前
已加入:2014-08-11 16:02
保存键

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

谢谢,
汤姆

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

是的,但是当你重新启动芯片时你会失去它们,但我想你知道。
最简单的方法是将它们存储在具有属性的变量中__属性_uuu((节(“保留\u mem\u area0”),零\u init)).
您应该将它们存储为两对(rand_unb,ediv),(ltk,ltk_length))。可能还包括mac地址或irk在密钥中。有一个数组,您可以存储多对。

流量如下:

当生成ltk时,将调用函数app send_ultk_uexch_ufunc。此函数调用生成随机密钥的应用程序\u sec_uGen_uLTK(注意,默认实现使用的伪数字生成器rand()仅使用32位种子。如果您想安全,应该使用新的trngapi)。密钥大小至少为7字节,最多16字节。此密钥存储在app_usec_uenv中,后者随后发送给主控程序。

它在功能app成对的func中,您应该将应用程序\u sec\u env.rand_nb、app sec\u env.ediv、app sec\u env.ltk和app sec\u env.key_size值存储到永久存储区(例如EEPROM或在您的保留ram中)。

然后,您需要使用param->rand_unb和param->ediv值在app validate\u encrypt\u req\u func中进行查找。如果在永久存储中找到匹配项,请将值写入应用程序\u sec\u env.rand_unb、app sec\u env.ediv、app sec\u env.ltk和app sec\u env.ltk_size,然后返回true。否则返回false。

请注意,如果在配对期间有人嗅到空中交通,配对机制的“公正工作”版本是不安全的,因为长期密钥是通过空中明文发送的(但仅在配对阶段),因此尽可能避免这种模式。

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

注意,默认情况下,最新密钥始终存储在应用程序\u sec\u env(保留ram中)中,而app validate\u encrypt\u req\u func默认情况下只返回true,因此如果仅连接到一个设备,则始终会加载正确的ltk。

罗素
离线
最后一次见到:5年9个月前
已加入:2014-08-11 16:02
看起来可以

看起来,人们可以用类似的调用来替换多键的eeprom调用来编写保留ram。是否有一个简单的实现,只允许一个键?

我想很多BLE应用程序需要键(心率、键盘、遥控器等)。必雷竞技安卓下载须添加EEPROM会有点挫败了使用内部OTP的简单性。如果我使用键盘应用程序作为示例和一个大的EEPROM,有没有任何原因我不能存储代码和键在它中,通过重新定位键到高内存?最好使用SPI flash并为键保留两页(如果需要mulibond,则允许从一个页面复制到另一页)。

谢谢,
汤姆

乔西姆
离线
最后一次见到:6个月前的1年
上师
已加入:2014-01-14 06:45
闪光灯和eeprom都不存在

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

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

如果我使用外部SPI闪存来存储代码(不使用OTP),有没有理由我也无法在那里存储键?我会保留一两页flash,修改多键代码。

MT\u对话框
离线
最后一次见到:3个月3天前
工作人员
已加入:2015-06-08 11:34
嗨,特鲁塞尔,

嗨,特鲁塞尔,

您可以使用SPI将键存储在SPI闪存中。键盘应用程序使用EEPROM内存实现此功能。

谢谢你的对话