51822静态配对密码
主要讲解SDK11下静态密码的设定
起初提供安全性的两个设备如果希望做一些需要安全性的工作,就必须先配对,配对涉及两个设备的身份认证,链路加密,如果配对时设置了绑定,
随后还会有一个密钥分配,分配密钥用户可以存储在flash中这样两个设置再第二次重连是的安全启动会更快。而不是需要像第一次需要再启动整个配对过程
配对的第一个过程首先是配对信息的交换,这些信息用于确定认证方式,以及后续是否需要分配密钥以及分配哪些密钥。
交换的信息包括:
两端设备的输入输出能力如:是否有显示屏,键盘等。
是否需要绑定
是否需要MITM,是否使用OOB等
这些信息会让BLE协议栈确定一种认证方式:
比如:
1.如果两端设备的输入输出能力有限,比如都没有键盘和显示器,认证方式就是just work,这其实就是没有认证
2.如果两端设备一个有显示屏,而另一个有键盘,而配对中设置了MITM保护,那么认证方式就是passkey entery
一端会显示一个配对码,另一个需要输入这个配对码,之后的配对才能正确进行下去。
3.如果设置了OOB,那么这个配对码就是通过另外的通信方式来发送,而不是像上面一样一端显示输入。
这一讲的密码设置就是第二种,显示的密码是可以随机的也可以是静态的,由于设备并没有显示器,但是我们仍然可以设置输入输出能力为显示器
因为我们使用的是静态密码
配对的过程不仅只是输入配对码这样,后续还会根据输入配对码,以及两端设备交换的随机数来生成链路来加密链路以及分配后续长期密钥,身份解析等
根据上面的理论描述,我们来总结一下:
我们需要的输入密码这个功能,其实是配对过程中的一部分,而配对过程又是需要首先交换配对信息,然后协议栈会根据交换的信息才决定是否有输入密码这一过程
那么我们要做的有如下几步:
1.首先设置要输入的静态密码
2.设置配对时会交换的信息:根据上面的介绍如果我们需要手机输入密码,那么配对时就要设置只有显示器,设置需要MITIM攻击保护
3.触发配对。
下面先介绍如何设置静态密码
//首先定义一下静态密码,配对密码只能是6-dinit ASCII string
#define STATIC_PASSKEY"123456"
//改变结构体中可以设置静态密码
static ble_opt_tm_static_pin_option;
定义了这两个参数后,我们需要设置一下静态密码,设置的操作需要在协议栈初始化之后,我们将设置密码操作放在gap_param_init函数的最后
文章图片
到这里设置静态密码的操作就做完了
然后是设置配对时要交换的信息
下面定义我们需要交换的信息的宏,也就是和安全参数相关的一些宏
//这里只是演示静态密码不需要绑定
#defineSEC_PARAM_BOND0
//因为要输入密码,就是一种MITM 攻击保护,所以这里设置MITM
#define SEC_PARAM_MITM1
//这里设置只有显示屏
#define SEC_PARAM_IO_CAPABILITIESBLE_GAP_IO_DISPLAY_ONLY
//不使用带外数据
#define SEC_PARAM_OOB0
//链路加密钥匙的长度
#define SEC_PARAM_MIN_KEY_SIZE7
#define SEC_PARAM_MAX_KEY_SIZE16
定义了宏之后我们需要在设置参数,写一个如下的函数 m_sec_params是一个全局变量
ble_gap_sec_params_t m_sec_params;
文章图片
将该函数放在main函数的初始化流程中的conn_param_init();
函数之后。
这种了这个全局变量之后再配对启动的信息交换中使用
到这里我们设置了配对启动后会交换的信息,但是怎么把这个信息给对端设备呢?先看完最后一步的触发配对的问题,再来解决陪信息发给
对端设备的问题。
notify 性质RX特征值的CCCD设置为需要认证和加密的安全链路,因为手机端使能notify是需要写CCCD的,那么当手机连锁板子之后 点击RX特性值的notify
按钮后主机会发送一个写密码板子上的rx特征的cccd,因为初始连锁的不完全,那么这是手机会返回错误,然后启动配对过程
设置如下
在添加RX特性值的函数中做如下的简单就可以了
文章图片
这样当时报使能开发板上的rx特征notify功能时,就会因为没有写权限触发陪,手机会发来配对请求,然后板子回复配对信息,怎么回复
这就是第二部中最后留下的问题,如何将配对信息交给对手机
当手机发来配对请求时,这对板子来说是一个世界,机配对事件,最终由dispatch派发给函数交给哥哥服务或模块的事件处理函数
那么我们做的就是在收到这个配对请求事件后回复第二步中设置的配对信息就可以了,在main.c文件中的on_ble_evt做如下修改
文章图片
到这里需需要的配置都设置完成,程序运行后,手机连上板子,然后访问rx特征值,因为该特征值是用俩将板子数据通过Notify方式传给手机
那么首先点击手机上的notify按钮使能板子notify功能,当我们点击俺就是会弹出输入密码对话框。
【51822静态配对密码】
推荐阅读
- iOS,打Framework静态库
- java静态代理模式
- Android|Android JNI之静态注册(android studio)
- C语言静态动态两版本通讯录实战源码
- 超轻量级静态服务器
- tensorflow的堆叠多层RNN
- Django导入静态文件
- 2018-05-29|2018-05-29 Django 模板文件引入静态文件
- 【JavaScript Weekly #554】ES2022 特性(类静态初始化块)
- 【BZOJ】4316:|【BZOJ】4316: 小C的独立集 静态仙人掌