你好,
我正在研究心率传感器应用程序,我汇集了一个运行的应用程序。即,我能够使用任何标准的Android BLE应用程序连接和查看HR。
我正在使用基本的开发工具包作为此目的的外设从站。
现在,我想添加一些安全性,以便只有具有PIN的用户只能连接到外围设备。我知道这很容易受到蛮力攻击,但这没关系。
这些是我为同样的目标所做的改变。
void应用程序\秒\初始化函数(void)
{
#如果(应用秒)
app_sec_env.auth=(间隙认证要求最小值);
#万一
}
void app_send_pairing_rsp_func(struct gapc_bond_req_ind * param)
{
结构gapc\u bond\u cfm*cfm=KE\u MSG\u ALLOC(gapc\u bond\u cfm,KE\u BUILD\u ID(TASK\u gapc,app\u env.conidx),TASK\u app,gapc\u bond\u cfm);
cfm->请求=GAPC\u配对\u 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_cap_display_only;
//身份验证要求
cfm-> data.pairing_feat.auth = gap_auth_req_mitm_bond;
//安全要求
cfm->data.pairing\u feat.sec\u req=GAP\u SEC1\u AUTH\u PAIR\u ENC;
//启动器密钥分发
cfm-> data.pairing_feat.ikey_dist = gap_kdist_engkey;
//应答器密钥分发
cfm->data.pairing\u feat.rkey\u dist=GAP\u KDIST\u ENCKEY;
发送消息(cfm);
}
因为cfm->data.pairing\u feat.iocap=GAP\u IO\u CAP\u DISPLAY\u ONLY;,Android设备应该在配对时弹出一个键盘来输入pin码。
当收到绑定请求时,应该调用app\u send\u tk\u exch\u func(),它将设置静态pin。
现在,Android当我尝试配对使用Android设备时,Android设备只是说钥匙不匹配没有键盘弹出。此外,我不会为此案例获取GAPC_TK_EXCH请求GAPC_BOND_REQ_IND_HANDLER()。
检查一下,如果我改为cfm->data.pairing\u feat.iocap=GAP\u IO\u CAP\u KB\u ONLY;,当配对Android设备时,会显示随机配对码,该码应该在外设slave上输入(如预期的那样)。然而,这不是我需要的。
你能告诉我怎么了吗?
提前致谢。
你好,
有人知道这件事吗?
问候,
ashwin
嗨Ashwin,其中一支球队将开始为明天看看这个。BR JE\u对话框
嗨,阿什温·拉奥
如果我正确理解,您想通过使用主机键盘(电话)输入的密码来连接到您的设备。好吧,您可以尝试将主机的IO_Capabils更改为“仅限键盘”以便完成类似的东西。由于设备不会有任何按钮,因此设备的IO功能应该是NoInput / NoOutput,并且PIN号将是固定的。您提到的“显示功能”您不认为将强制Android设备显示键盘。
谢谢你的对话
你好,
谢谢你的回复。
根据
https://developer.bluetooth.org/technologyoverview/pages/le-security.aspx.
我提到的设置是正确的。
在您的帖子中,您提到“设备的IO功能应该是NoInput/NoOutput,因为该设备没有任何按钮,并且PIN码是固定的。”
但根据上面的链接,如果完成,那么只需使用工作身份验证模式,这不是我需要的。
嗨,阿什温·拉奥
我要给你发一些离线的东西,请看一下,希望对你有帮助。
谢谢你的对话
我正在阅读这篇文章,寻求帮助/提示,说明我可以如何做这样的事情:
- “外设”,按一个按钮,然后按下一次2秒,广播并允许从扫描的任何Android设备的连接(寻找我的服务的UUID)。
- 即可建立债券,关闭Braodcasting,现在在未来,只允许该Android设备在没有按钮的情况下重新连接。
--这似乎很简单,但我找不到任何好的建议如何做到这一点。
--我已经在外围工作的一切,只是想添加这个。
我应该告诉你们,在对话,它可能会更有帮助,并节省你很多工作,如果可能的话,你在论坛上充分回答问题。我在这里读到的很多帖子都没有得到回复,最后一个帖子来自一个对话主持人,他说了一些类似于“我要给你发一些离线的东西……”我意识到,有时候你们遇到的很多问题都没有简单的答案,但遇到一堆死胡同对我们都没有什么好处。
嗨,克里姆,谢谢你的反馈。我同意,把事情离线并不理想:有时这是必要的(因为问题的长度/复杂性意味着它不能在这里处理),但总的来说,你的看法是正确的,值得赞赏的:在线越多越好。我会让一个团队调查你的要求,我们会给出反馈。
谢谢你的对话
谢谢Je_Dialog,我很高兴你没有看到这是一个负面评论,并不意味着。我会密切关注这个帖子,看看你们是否有一些东西会指向正确的方向。
嗨Klim9531,我们最初的想法是:
您是否需要区分Android和IOS设备?
这可以从键盘参考设计(精简)构建。我们有一个关于白名单的内部说明,我们可以共享(这显示了如何将设备添加到白名单,这将有效地列出已知连接,并且只连接到那些白名单)。
BR JE\u对话框
嗨,我的对话,
感谢您的意见,这里有一些澄清:
- 它是否无论客户端设备是否是Android或iOS(我当前拥有完全运行的Android应用程序到与设备接口,我打算很快建立IOS应用程序)。Android应用程序扫描广告设备,如果它找到一个我的名字/服务,我开始数据传输。该设计基于串行端口服务应用程序。
关于你的想法。获取设备的蓝牙地址并在DA14580中将其列入白名单似乎符合我的需要。这是我想要的顺序:
1. DA14580电源打开,从未连接到对等设备(Android或iOS)。
2.用户按DA14580上的按钮(重置白名单,但第一次上电时,此列表)。
三。用户启动Android/iOS应用程序,2.5秒后,应用程序开始扫描任何BT设备,找到我的命名服务,并开始双向通信(这部分目前正在工作)。
4DA14580查询Android/iOS设备并获取BD地址,然后将该地址存储在白名单中。
5通信一直持续到DA14580断电。
6重新启动DA14580后,它现在只允许与白名单中的设备通信。
7如果再次按下DA14580上的按钮,白名单中的Android/iOS设备将被清除,DA14580将从#2开始重复上述操作。
如果你可以发布一个链接到Dialog关于白名单的内部注释——如何查询设备,然后将其BD地址添加到白名单——那么这将帮助我解决这个问题。
我将等待您的答复,同时这样做,看看键盘参考设计。
谢谢你的帮助,klim9531
je_dialog,
这正是我对SPS做的事情。你能评论这是如何解决的?
谢谢,
富有的
嗨,理查德,
请检查您以前的帖子,我相信它将涵盖您的问题。
https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bl ...
谢谢你的对话