DA14531洪hj - 131 imh
唐山宏佳电子科技有限公司利用Dialog 's开发了一款超小型、超低功耗的蓝牙5.1 SIP模块SmartBond DA14531小,世界上最小、最节能的蓝牙5.1 SoC。HJ-131IMH内置高性能天线,尺寸为4 x 4 x 1.3mm,封装在LGA17封装中,使其成为需要超小占地面积的可穿戴设备和医疗设备的理想选择。
特性
尺寸:4 x 4 x 1.3毫米
内置高性能天线(也可使用外置天线)
包:LGA17
GPIOs: 6
电源电压:1.1 v - 3.6 v
马TX < 3.5;RX < 2.2 mA
车载天线范围:5-10m;外置天线范围:40-80m
支持BLE 5.1,支持微信和用户开发
内置4 kb eepm
外部内存支持Flash的用户软件和SUOTA
工作温度:-40℃至+85℃
亚博国际官网平台网址
微小的医学应用亚博国际官网平台网址
灯塔
智能玩具
智能锁
遥控器
工业智能设备
订购信息
样品可用。联系您当地的销售代表。
DA14530和DA14531
4个月前
安全与PIN -混淆的设置
发布的UnicycleBloke230点 5回复我想为我的设备创建一个更安全的连接。
该设备没有输入或输出能力(除了可能闪烁一个LED)。当我用手机连接它时,我希望被要求在手机上输入密码。PIN的值是用户可配置的项,存储在设备的外部闪存中。如果这个交换是加密的,以阻止中间人重播,那就最好了。
因此,我在SDK中尝试了ble_app_security示例,这似乎或多或少做到了我想要的。我已经尝试在我自己的项目中复制相关设置,但这并不像预期的那样工作,影响行为的因素是令人困惑的。
出于某种原因。我的手机报告了两个配对请求。接受第一个选项并不需要任何数据,只是工作而已。接受第二个要求输入密码。
我从示例中复制了以下配置设置:
在user_config.h:
#定义USER_CFG_ADDRESS_MODE APP_CFG_ADDR_PUB # define USER_CFG_FEAT_IO_CAP GAP_IO_CAP_DISPLAY_YES_NO # define USER_CFG_FEAT_OOB GAP_OOB_AUTH_DATA_NOT_PRESENT # define USER_CFG_FEAT_AUTH_REQ (GAP_AUTH_BOND | GAP_AUTH_MITM | GAP_AUTH_SEC) # define USER_CFG_FEAT_KEY_SIZE 16 # define USER_CFG_FEAT_SEC_REQ GAP_SEC1_NOAUTH_PAIR_ENC #定义USER_CFG_FEAT_INIT_KDIST (GAP_KDIST_ENCKEY | GAP_KDIST_IDKEY | GAP_KDIST_SIGNKEY) #define GAP_KDIST_ENCKEY | GAP_KDIST_IDKEY | GAP_KDIST_SIGNKEY
在da1458x_config_basic.h:
#定义CFG_APP_SECURITY
在da1458x_config_advanced.h:
#定义CFG_ENABLE_SMP_SECURE
在user_callback_config.h中,所有的回调都与示例中完全相同,并且我已经将user_app_on_tk_exch()复制到我的项目中。
在user_app.c中,我已经将以下几行复制到user_app_on_init()回调中:
//设置服务安全要求app_set_prf_srv_perm(task_id_cust1, APP_CUSTS1_SEC_REQ);//从外部内存中获取bond数据app_easy_security_bdb_init();
我实际上想使用APP_CFG_ADDR_STATIC,但这似乎根本不起作用。为什么不呢?我不明白这有什么不同。我宁愿不使用bond DB,而是每次都输入PIN,但这似乎也不起作用。
我真的很难理解各种设置的相互作用,不知道如何得到我想要的简单行为:一个安全链接,输入一个PIN作为身份验证,以防止第三方使用SUOTA和我自己的自定义服务。
我错过了什么?我在联机文档中没有找到任何关于各种回调的有用信息。我花了一天的大部分时间研究示例代码,但显然遗漏了一些东西。
亲切的问候。
2个月前
嗨,对话框的团队,
我想为DA14531MOD设备构建ble_app_security示例。
我遵循教程:http://lpccs-docs.dialog-semiconductor.com/Tutorial-DA145x-BLE-Security..。
无论我对教程做了什么更改,如果我选择DA14531作为目标,那么BLE_APP_SEC将变为未定义的
在user_callback_config.h有未声明的标识符错误。
顺便说一下,项目构建时没有任何错误和警告,但看起来不需要结对。
谢谢,
阿提拉
附件 | 大小 |
---|---|
ble_app_security.png | 41 KB |
4个月前
我已经做了这些改变。我已经阅读了BLE安全模式/级别之类的教程和文档。我看到的这种行为对我来说似乎很奇怪。设备目前有以下业务:DISS、SUOTA、cust1。在我的手机上,我使用BLE Scanner和LightBlue应用程序来监控和连接设备。
BLE扫描仪:
这可以连接到设备。我收到一个配对请求的通知。我接受这个,它只是成功,没有进一步的输入(我希望输入一个PIN)。我立即收到配对请求的第二个通知(这很奇怪)。我接受了,现在被要求输入密码。[设备通过调用user_app_on_tk_exch()中的app_easy_security_tk_exch()来设置PIN,参数为->data.]tk_type GAP_TK_DISPLAY -这部分很好。]
-我不明白为什么有两个配对通知。示例应用程序没有这样做。
-我不明白他们为什么表现得不一样。是因为有两个定制服务(SUOTA和cust1)吗?
-我的自定义服务有两个特点,具有人类可读的名称。BLE Scanner默认不显示这些,但我可以事先阅读特征用户描述。打开安全功能后,我无法再阅读这些描述。是否有关贸总协定数据库项目是单独保护的?
LightBlue:
如果没有安全性,这是一个更有用的应用程序。特征用户描述会自动读取和显示,广告包会定期更新。打开安全开关后,浅蓝色再也无法连接设备。我得到一个错误说没有数据可用。这可能是应用本身的局限性,但我希望得到确认。
APP_CFG_ADDR_STATIC:
这是我对BD地址的首选设置。示例使用APP_CFG_ADDR_PUB。在我的代码中,会用APP_CFG_ADDR_PUB请求PIN,而不是用APP_CFG_ADDR_STATIC。说实话,由于自动连接,整个测试非常困难。我怎样才能关掉它?我认为这只是从USER_CFG_FEAT_AUTH_REQ中删除GAP_AUTH_BOND的问题。
我已经恢复了所有的安全更改,但直到我删除了芯片才恢复了原始行为。例如,尽管使用APP_CFG_ADDR_STATIC并对设备进行功率循环,设备的地址仍然保持不变。看来现有的联系数据库影响了一些事情。叹息……
我刚刚再次尝试了安全示例。它的行为与LightBlue似乎是我想要的。它连接并指示配对请求。如果我取消请求,设备将断开连接。如果我等待的时间过长,请求就会超时(一条消息说数据过时了)。如果我连接,手机会显示一个我接受的PIN码,然后我就连接了。我看到在连接之后,特征用户描述被读取并显示。我不知道为什么密码显示而不是要求。而且,连接没有绑定。如果我断开连接,我就需要再次进行配对通知。
因此,我遍历了配置文件中的所有设置,以使我的应用程序匹配安全性示例(我认为)。这次我没有看到双配对请求(很好)。我被要求输入个人识别码(很好),但当我输入密码后,自定义服务特征用户描述没有被读取和显示,服务似乎无法工作。我看不出custs1_att_db中的条目与示例中的条目有什么不同。这次连接存储在键合数据库中。到底发生了什么?!!
就像这个SDK的情况一样,我真的在努力弄明白什么应该是一个琐碎的任务。所有的安全特性都内置在SDK中,不是吗?好像我什么都不用做似的。这件事花了我两天的时间,我可负担不起。
我想要的只是用密码保护设备,这样SUOTA和cust1就不会被任何人使用。我可以很容易地将自己的登录特性添加到cust1,但这并不能阻止攻击者通过SUOTA覆盖应用程序。有没有更好的方法来保证安全呢?我希望通过BLE堆栈加密OTA通信。
4个月前
作为进一步的查询,是否有可能在建立连接时获得用于链接键的值?我用的是Ellisys的蓝牙协议嗅探器来监控流量,看看到底发生了什么。似乎建立密钥的初始交换是正常的,但如果不知道密钥,就不可能理解随后的消息。我希望我能从SDK中提取这个,然后转储到UART。或者类似的东西。或者出于调试目的而关闭加密是否有意义?
4个月前
嗨UnicycleBloke。
以[DLG]为前缀的内联答案
BLE扫描仪:
这可以连接到设备。我收到一个配对请求的通知。我接受这个,它只是成功,没有进一步的输入(我希望输入一个PIN)。
[DLG] -用户“响应”/请求依赖于USER_CFG_FEAT_IO_CAP的值。“GAP_IO_CAP_DISPLAY_YES_NO”将要求您确认配对请求。您需要设置GAP_IO_CAP_KB_DISPLAY来告诉堆栈您有一个显示PIN的物理显示器和一个输入它的键盘——我认为您没有(就我所了解的项目而言)。
我立即收到配对请求的第二个通知(这很奇怪)。我接受了,现在被要求输入密码。[设备通过调用user_app_on_tk_exch()中的app_easy_security_tk_exch()来设置PIN,参数为->data.]tk_type GAP_TK_DISPLAY -这部分很好。]
-我的自定义服务有两个特点,具有人类可读的名称。BLE Scanner默认不显示这些,但我可以事先阅读特征用户描述。打开安全功能后,我无法再阅读这些描述。是否有关贸总协定数据库项目是单独保护的?
[DLG] -听起来像是典型的安全价值缺失。
APP_CFG_ADDR_STATIC:
这是我对BD地址的首选设置。示例使用APP_CFG_ADDR_PUB。在我的代码中,会用APP_CFG_ADDR_PUB请求PIN,而不是用APP_CFG_ADDR_STATIC。说实话,由于自动连接,整个测试非常困难。我怎样才能关掉它?我认为这只是从USER_CFG_FEAT_AUTH_REQ中删除GAP_AUTH_BOND的问题。
[DLG] -是一些其他依赖- CFG_APP_SECURITY和'。user_config.h security_request_scenario”
我已经恢复了所有的安全更改,但直到我删除了芯片才恢复了原始行为。例如,尽管使用APP_CFG_ADDR_STATIC并对设备进行功率循环,设备的地址仍然保持不变。看来现有的联系数据库影响了一些事情。叹息……
[DLG] -绑定数据库位于一个单独的flash扇区,而不是SDK构建的一部分。使用sstooobox重新闪烁将只写入SDK映像。在SSToolbox中,完整的芯片擦除过程是手动的,并将其清除。
我刚刚再次尝试了安全示例。它的行为与LightBlue似乎是我想要的。它连接并指示配对请求。如果我取消请求,设备将断开连接。如果我等待的时间过长,请求就会超时(一条消息说数据过时了)。如果我连接,手机会显示一个我接受的PIN码,然后我就连接了。我看到在连接之后,特征用户描述被读取并显示。我不知道为什么密码显示而不是要求。而且,连接没有绑定。如果我断开连接,我就需要再次进行配对通知。
[DLG] -听起来像是绑定数据库,应用程序代码和手机缓存之间的不匹配(绑定功能,设备名称,数据库等)
因此,我遍历了配置文件中的所有设置,以使我的应用程序匹配安全性示例(我认为)。这次我没有看到双配对请求(很好)。我被要求输入个人识别码(很好),但当我输入密码后,自定义服务特征用户描述没有被读取和显示,服务似乎无法工作。我看不出custs1_att_db中的条目与示例中的条目有什么不同。这次连接存储在键合数据库中。到底发生了什么?!!
[DLG] -你给自定义服务特性分配了什么属性?-无论您是否已绑定,都应满足安全要求。请在完全擦除闪存后进行测试,以确保存储的绑定BD是您所期望的。
我想要的只是用密码保护设备,这样SUOTA和cust1就不会被任何人使用。我可以很容易地将自己的登录特性添加到cust1,但这并不能阻止攻击者通过SUOTA覆盖应用程序。有没有更好的方法来保证安全呢?我希望通过BLE堆栈加密OTA通信。
[DLG] - Bonding和SUOTA图像加密提供最强的安全性。SUOTA图像可以被加密- SUOTA示例/walk through在这方面指导你。
作为进一步的查询,是否有可能在建立连接时获得用于链接键的值?我用的是Ellisys的蓝牙协议嗅探器来监控流量,看看到底发生了什么。似乎建立密钥的初始交换是正常的,但如果不知道密钥,就不可能理解随后的消息。我希望我能从SDK中提取这个,然后转储到UART。或者类似的东西。或者出于调试目的而关闭加密是否有意义?
[DLG] - AFAIK sniffer通常可以遵循配对过程-安全连接和OOB是例外。
最好的问候,
KB_Dialog
4个月前
嗨UnicycleBloke,
谢谢你的问题。你查过我们的DA145x设备上的BLE安全教程?
请在ble_app_security示例中进行以下修改。
通过这种方式,设备连接到移动应用程序,当试图读/写一个特征时,应用程序正在请求键入pass key (APP_SECURITY_MITM_PASSKEY_VAL)
>>>我实际上想使用APP_CFG_ADDR_STATIC,但这似乎根本不起作用。
你能解释一下是什么问题吗?
谢谢,PM_Dialog