从物联网设备生命周期理解Apple Homekit框架
本次笔记主要基于苹果公开的HomeKit Accessory Protocol协议文档和IOS Security Guide中相关部分。
总体来讲,设备与App之间采用端到端的加密,密钥由设备和App自己协商存储,云只负责在云上维护身份并且转发消息给客户端。用户的控制分为两部分,一部分是云端控制,一部分是设备自己存储凭据控制。这个分布式的访问控制系统不可避免的存在一些同步上的瑕疵。
1. 发现与绑定
(1)使用IP地址的设备要求支持Bonjour来发现设备。Bonjour是在局域网中寻找服务的一个主要方法。这项技术广泛用于Mac OS X,允许用户不用在任何设置下建立一个网络连接。
(2)设备与App用户的绑定称为pair(配对)过程。配对的结果就是设备与App互相交换了自己生成的公钥并且存储,利用公钥来进行未来的身份认证。简要概括如下(忽略细节):
a. 设备生成(或固定)一个setup code,形如101-22-333,App需要通过某种第三方渠道(如扫设备上的二维码)获得这个码来开始配对过程。开始配对时设备要验证App发来的setup code是否正确。
b. 通过苹果厂商级认证的设备会有一个证书类似的东西,在配对开始时给App,否则App会提示设备未认证,需要用户确认风险并点击继续。
c. App和设备各生成一个公私钥对,通过密码算法进行交换,然后存储起来作为未来认证配对的依据,即这个公钥就是身份。至此与设备配对结束。
d. 设备通过某种方式映射到了iCloud中。设备、家庭、用户数据可以在iCloud中加密同步。在iCloud中用户有home的单位来管理设备和其他用户。
(3)注意:设备被绑定后(有至少一个管理员)账号后,会拒绝其他用户绑定。设备会上报自己的设备ID给App,设备ID协议中要求每次重置更新。
2. 控制
(1) 局域网控制:局域网控制利用绑定过程中商定的公钥来做身份认证,之后协商出加密密钥来保持长连接通信。
(2)远程控制:设备只与家中的Hub通信(仅apple TV、ipad可以作为hub)。利用某种机制,用户通过iCloud将要做的请求发给在家中局域网的Hub(ipad),由ipad代为操作控制设备。(产生了个疑问,主人用手机绑定了设备,手机和ipad共享的是一个私钥身份吗?)
3. 分享与取消分享
谈到分享,首先讲一下Homekit的用户管理控制。设备上存有各个用户的名字和公钥,每个用户有对应的管理员标志位。只有管理员才可以进行用户管理操作,
(1)分享:官方正常App操作流程中,(猜测)利用iCloud分享出公私钥给被分享者,同时给设备添加该公钥到用户列表中,将被分享用户添加至iCloud的home中。在有hub的情况下,主人可以将用户设置成管理员;但是在设备中并没有将该用户设置成管理员,被分享用户需要添加别的用户时,只能是在iCloud上添加,然后主人的hub代为执行添加用户的操作。所以homekit有个缺点,必须拥有hub才能将分享用户设置为管理员;同时这也保证了安全:用户App中可以通过云来管控所有的授权用户,而杜绝了被分享用户偷偷地在局域网添加与操作访问控制。
(2)取消分享:官方App中,首先会通过iCloud的home中删除被分享用户,然后再局域网通知设备让设备删除该用户的public key。但是,这两部是分开执行的,若删除用户时主人不能与设备通信,则仅会删除云中的用户,App会在跟设备再次建立连接时执行操作。也就是说这两方的删除同步上存在问题,不过安全风险很小,App会记得保留状态只要能和设备通信就删除那个用户。
4. 删除设备
主人在云端删除该设备,同时给设备发送删除自己的命令。当设备判断用户列表中没有管理员后,会删除所有的用户。
注意只有管理员才能在设备上删除用户,所以由于被分享者不是管理员,他不能从设备上删除自己。因此,被分享者删除自己其实只是退出了iCloud上的home,主人app界面中的home仍然可以看到该用户在,因为毕竟设备上的密钥还没删,其实被分享者是可以控制的。
By Ascii0x03,转载请注明出处:https://www.cnblogs.com/ascii0x03/p/11198608.html
从物联网设备生命周期理解Apple Homekit框架的更多相关文章
- JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期
JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成ser ...
- Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态
ylbtech-Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态 1.返回顶部 1. SIM 卡状态 每个设备都有一个状态,决定了它能否在网络上建立数据连接,并且会影响设备是否计 ...
- activity学习(1) 生命周期理解
可以忽略onWindowFocusChanged.onSaveInstanceState.onRestoreInstanceState几个事件,这几个事件官网中的生命周期里面没有提到.忽略掉这几个方法 ...
- maven生命周期理解
你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点.当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期. 知道了每套生命周期的大概用途和相互关系 ...
- Maven的构建生命周期理解
以下引用官方的生命周期解释https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html: 一.构建生命 ...
- Activity生命周期理解
在Android应用程序运行时,Activity的活动状态由Android以Activity栈的形式管理,当前活动的Activity位于栈顶.随着应用程序之间的切换.关闭等,每个Activity都有可 ...
- [转] Actor生命周期理解
[转] https://blog.csdn.net/wsscy2004/article/details/38875065 镇图:Actor内功心法图 Actor的生命周期可以用Hooks体现和控制,下 ...
- spring web 生命周期理解
spring web /bean 生命周期 反射注解 aop代理类生成 init servlet 初始化 load spring-context.xml load XmlParser 类解析对象 ...
- Spring的Bean生命周期理解
首先,在经历过很多次的面试之后,一直不能很好的叙述关于springbean的生命周期这个概念.今日对于springBean的生命周期进行一个总结. 一.springBean的生命周期: 如下图所示: ...
随机推荐
- hdu 1272 使用set和并查集
http://acm.hdu.edu.cn/showproblem.php?pid=1272 这道题就是求图是不是连通无环,我觉得其实就是看看图是不是一棵最小生成树. 所以要是图满足条件,就必然有n个 ...
- jQuery $.isNumeric vs. $.isNaN vs. isNaN
在jQuery中,有几种方式可以判断一个对象是否是数字,或者可否转换为数字. 首先,jQuery.isNaN()在最新版本中已经被移除了(1.7之后),取而代之的是 jQuery.isNumeric ...
- HZOJ trade
强烈谴责$skyh$的没$\Huge 脸$行为. 很经典的可反悔贪心,然而我一直以为是sbdp还一直想着怎么优化…… 正常的贪心肯定是不对的. 但是由于A-C=A-B+B-C, 所以用一个小根堆维护, ...
- poj 2342 hdu 1520【树形dp】
poj 2342 给出每个顶点的happy值,还有若干组两个顶点L,K关系,表示K是L的上司.求当K.L不同时出现时获得的happy值的最大和. 设dp[u][0]表示不选u结点时获得的最大值,dp[ ...
- Myeclipse 方法中文注释看不到
参考以下几种解决方式: 1 改变整个文件类型的编码格式 1) eclipse->window->preferences->General->Content Types 2) 找 ...
- HDU-1257_最少拦截系统
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Desc ...
- 在SAE上使用Flask插件
因为我之前学习的时候使用的是虚拟环境,下载的所有需要用到的插件都在flask这个文件夹里面,SAE上Flask的版本和我本地用的版本对不上,导致有时候import都不对,于是我就把本地的环境直接放到S ...
- MapReduce数据流-输入
- H3C 各种视图之间的关系
- 生成所有2^n个长度为n的比特串
#include<stdio.h> void BitstringsRec(int n); int A[1000]; int G_N; int main(void) { while(1) { ...