你好,
我正在研究心率传感器应用程序,并且整理了一个运行良好的应用程序。即,我能够使用任何标准的Android BLE应用程序连接和查看HR。
为此,我将基本开发套件用作外围奴隶。
现在,我想添加一些安全性,以便只有具有PIN的用户才能连接到外围。我知道这很容易受到蛮力攻击的攻击,但这还可以。
这些是我所做的更改。
void app_sec_init_func(void)
{
#if(ble_app_sec)
app_sec_env.auth =(gap_auth_req_mitm_bond);
#万一
}
void app_send_pairing_rsp_func(struct gapc_bond_req_ind *param)
{
struct gapc_bond_cfm* cfm = ke_msg_alloc(gapc_bond_cfm,ke_build_id(task_gapc,app_env.conidx),task_app,gapc_bond_cfm);
cfm-> request = gapc_pairing_rsp;
cfm-> accept = true;
// OOB信息
cfm-> data.pairing_feat.oob = gap_oob_auth_data_not_present;
//加密密钥大小
cfm-> data.pairing_feat.key_size = key_len;
// IO功能
cfm-> data.pairing_feat.iocap = gap_io_cap_display_only;
//身份验证要求
cfm-> data.pairing_feat.auth = gap_auth_req_mitm_bond;
//安全要求
cfm-> data.pairing_feat.sec_req = gap_sec1_auth_pair_enc;
//启动器密钥分布
cfm-> data.pairing_feat.ikey_dist = gap_kdist_enckey;
//响应者密钥分布
cfm-> data.pairing_feat.rkey_dist = gap_kdist_enckey;
ke_msg_send(cfm);
}
由于cfm-> data.pairing_feat.iocap = gap_io_cap_display_only;; yocap; thyly; ocap; thyly; ocap; thyly; ocap; yocap; yocap; yocap; yly; yly; hyly; handroid设备应该弹出一个键盘以在配对时输入PIN。
收到键合请求后,应调用APP_SEND_TK_EXCH_FUNC(),该请求将设置为静态引脚。
现在,当我尝试使用Android设备配对的Android时,Android设备只是说键不匹配而不会弹出键盘。另外,对于这种情况,我没有得到GAPC_TK_EXCH请求GAPC_REQ_REQ_IND_HANDLER()。
只是要检查,如果我更改为cfm-> data.pairing_feat.iocap = gap_io_cap_kb_only;但是,这不是我需要的。
你能告诉我可能出了什么问题吗?
提前致谢。
你好,
有人有任何信息吗?
问候,
阿什温
嗨,阿什温(Ashwin),其中一支团队将开始为您的明天看一下。br je_dialog
嗨,阿什温·饶
如果我正确理解,您希望通过使用主机键盘(电话)输入的PassKey连接到设备。好吧,您可以尝试将主机的io_capabilitions更改为“仅键盘”,以完成类似的事情。设备的IO功能应为Nointup/noOutput,因为该设备不会具有任何按钮,并且PIN号将被修复。您提到的“显示功能”我认为这不会迫使Android设备显示键盘。
谢谢mt_dialog
你好,
感谢您的回复。
根据
https://developer.bluetooth.org/technologyoverview/pages/le-security.aspx
我提到的设置是正确的。
在您的帖子中,您提到了“设备的IO功能应该是NoInput/noOutput,因为该设备将没有任何按钮,并且PIN号将被修复。”
但是根据上面的链接,如果完成的话,则只需使用工作身份验证模式,而不是我需要的。
嗨,阿什温·饶
我会脱机地向您发送一些东西,请看看,希望它对您有帮助。
谢谢mt_dialog
我正在阅读这篇文章,以寻求帮助/提示我如何能够做到这样的事情:
- 在外围设备上,按下按钮,并在接下来的2秒钟内广播并允许从任何正在扫描的Android设备(寻找我的服务的UUID)进行连接。
- 建立该债券,关闭Braodcasting,现在将来只允许该Android设备在不按按钮的情况下重新连接。
- 这似乎很简单,但是我找不到有关如何做到这一点的好建议。
- 我已经在外围工作中拥有其他所有内容,只是想添加它。
我应该在对话中向大家提及,这可能会更有帮助,并在尽可能的情况下为您节省很多工作,您可以在论坛中充分回答问题。随着时间的流逝,我读过的许多帖子都没有得到答复,最后一篇文章来自对话框主持人,他们说:“我要脱机向您发送一些东西。...”我意识到有时候没有简单的答案对于你们遇到的许多问题,但遇到一堆死胡同,这对我们来说几乎没有什么好处。
嗨,Klim,感谢您的反馈。我同意,离线事物并不理想:有时是必要的(因为问题的长度 /复杂性意味着它不能在此处处理),但总的来说,您的情感是正确的和赞赏的:在线上越好。我将让一个团队研究您的要求,我们将反馈。
谢谢&br je_dialog
感谢Je_dialog,我很高兴您没有将其视为负面评论,这并不是本意。我会密切关注这个线程,看看你们是否有东西可以将我指向正确的方向。
嗨,Klim9531,我们最初的想法是:
您需要区分Android和iOS设备吗?
这可以通过键盘参考设计(已删除)构建。我们有关于可以共享的白名单的内部注释(这显示了如何在白名单中添加设备,这将有效地列出已知连接的列表,并且仅连接到白名单的连接)。
br je_dialog
嗨,je_dialog,
感谢您的意见,这里有一些澄清:
- 客户设备是Android还是iOS都没关系(我目前有一个功能齐全的Android应用程序可以与设备接口,我打算很快构建iOS应用程序)。Android应用程序扫描广告设备,如果它找到了我的姓名/服务,我将开始数据传输。该设计基于串行端口服务应用程序。
您的想法。在DA14580中获取设备的蓝牙地址并将其列入白色,这似乎符合我的需求。这是我所需的序列:
1. DA14580已启动,从未连接到对等设备(Android或iOS)。
2.用户按DA14580上的一个按钮(重置白名单,但是此列表在首先加电时是空的)。
3.用户启动Android/iOS应用程序,持续2.5秒,应用程序开始扫描任何BT设备,找到我的命名服务,并开始双向通信(目前正在工作)。
4. DA14580查询Android/iOS设备并获取BD地址,然后将其存储在白名单中。
5.沟通一直持续到DA14580停机为止。
6.重新启动DA14580时,它现在只允许与白名单中的设备进行通信。
7.如果再次按下DA14580上的按钮,则清除白名单中的Android/iOS设备,并且DA14580在#2开始重复上述。
如果您可以在白名单上发布指向对话框的内部注释的链接 - 以查询设备,然后将其BD地址添加到白名单中 - 那将有助于我解决这个问题。
我将等待您的答复,并在此过程中查看键盘参考设计。
感谢您的帮助,Klim9531
je_dialog,
这正是我希望与SPS一起做的。您能评论如何解决吗?
谢谢,
富有的
嗨,理查德,
请检查您的上一篇文章,我相信它将涵盖您的问题。
https://support.dialog-spoomendonductor.com/forums/post/dialog-smartbond-bl ...
谢谢mt_dialog