你好,
我正在研究一个心率传感器应用程序,我已经把一个应用程序是工作得很好。例如,我可以连接和查看HR使用任何标准的android BLE应用程序。
为此,我使用BASIC开发工具包作为外围从机。
现在,我想添加一些安全性,以便只有带有大头针的用户才能连接到外设。我知道这很容易受到暴力攻击,但没关系。
这些是我做的改动。
空白app_sec_init_func(空白)
{
#如果(BLE_APP_SEC)
app_sec_env。auth = (GAP_AUTH_REQ_MITM_BOND);
# endif
}
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请求- > = GAPC_PAIRING_RSP;
cfm - >接受= 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;, Android设备应该弹出一个键盘,以在配对时输入pin。
当接收到绑定请求时,应该调用app_send_tk_exch_func(),它将设置静态pin。
当我尝试用android设备配对时,android设备只会说键不匹配,键盘不会弹出。同样,我没有得到GAPC_TK_EXCH请求gapc_bond_req_ind_handler()。
只是为了检查一下,如果我更改为cfm->data.pairing_feat。iocap = GAP_IO_CAP_KB_ONLY;,然后当配对Android设备时显示应该在外设从机上输入的随机配对代码(如预期)。然而,这不是我需要的。
你能告诉我哪里出了问题吗?
提前谢谢。

你好,
有人知道这方面的信息吗?
问候,
Ashwin
嗨,Ashwin,明天会有一个团队开始看这个。BR JE_Dialog
嗨Ashwin饶
如果我理解正确的话,您希望通过使用一个密钥连接到您的设备,该密钥将由您的主机(电话)键盘输入。好吧,你可以尝试改变你的主机的IO_Capabilities为“Keyboard Only”,以完成类似的事情。设备的IO能力应该是无输入/无输出,因为设备没有任何按钮和PIN号码将是固定的。你提到的“显示功能”,我不认为它会迫使android设备显示键盘。
由于MT_dialog
你好,
谢谢你的回复。
根据
https://developer.bluetooth.org/TechnologyOverview/Pages/LE-Security.aspx
我提到的设置是正确的。
在你的帖子中,你提到“设备的IO能力应该是无输入/无输出,因为设备没有任何按钮,PIN号码将是固定的。”
但是根据上面的链接,如果那样做了,那么只会使用工作身份验证模式,这不是我需要的。
嗨Ashwin饶
我将在线下发给你一些东西,请看看,希望对你有帮助。
由于MT_dialog
我正在阅读这篇文章,寻求帮助/提示,我可能会做这样的事情:
——在外围设备上,按下一个按钮,在接下来的2秒内,广播并允许任何正在扫描的android设备连接(寻找我的服务的UUID)。
一旦绑定建立,关闭广播,现在在未来,只允许android设备重新连接,而不按按钮。
这看起来很简单,但是我找不到任何好的建议。
——我已经在外围工作的所有其他东西,只是想添加这个。
我应该向你提到的对话,这可能会更有帮助,节省你很多工作,如果可能的话,你在论坛回答问题完全。我在这里读过的很多帖子都没有回复,最后一个帖子来自一个对话的主持人,他说:“我要给你发一些线下的东西....”。我知道有时候对于你们所面临的许多问题没有一个简单的答案,但如果我们陷入一堆死胡同,对我们都没有什么好处。
klim你好,谢谢你的反馈。我同意把东西下线是不理想的:有时这是必要的(因为问题的长度/复杂性意味着它不能在这里处理),但总体上你的观点是正确的和赞赏的:在线越多越好。我会让一个团队调查你的需求,然后我们会反馈。
由于br JE_Dialog
谢谢JE_Dialog,我很高兴你没有把这当成一个负面评论,这不是故意的。我会密切关注这个帖子,看看你们是否有什么东西能给我指明正确的方向。
Hi 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-semiconductor.com/forums/post/dialog-smartbond-bl..。
由于MT_dialog