本次笔记主要基于苹果公开的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框架的更多相关文章

  1. JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期

    JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成ser ...

  2. Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态

    ylbtech-Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态 1.返回顶部 1. SIM 卡状态 每个设备都有一个状态,决定了它能否在网络上建立数据连接,并且会影响设备是否计 ...

  3. activity学习(1) 生命周期理解

    可以忽略onWindowFocusChanged.onSaveInstanceState.onRestoreInstanceState几个事件,这几个事件官网中的生命周期里面没有提到.忽略掉这几个方法 ...

  4. maven生命周期理解

    你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点.当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期. 知道了每套生命周期的大概用途和相互关系 ...

  5. Maven的构建生命周期理解

    以下引用官方的生命周期解释https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html: 一.构建生命 ...

  6. Activity生命周期理解

    在Android应用程序运行时,Activity的活动状态由Android以Activity栈的形式管理,当前活动的Activity位于栈顶.随着应用程序之间的切换.关闭等,每个Activity都有可 ...

  7. [转] Actor生命周期理解

    [转] https://blog.csdn.net/wsscy2004/article/details/38875065 镇图:Actor内功心法图 Actor的生命周期可以用Hooks体现和控制,下 ...

  8. spring web 生命周期理解

    spring web /bean 生命周期 反射注解 aop代理类生成 init servlet  初始化 load spring-context.xml load XmlParser 类解析对象   ...

  9. Spring的Bean生命周期理解

    首先,在经历过很多次的面试之后,一直不能很好的叙述关于springbean的生命周期这个概念.今日对于springBean的生命周期进行一个总结. 一.springBean的生命周期: 如下图所示: ...

随机推荐

  1. 【JZOJ4860】【NOIP2016提高A组集训第7场11.4】分解数

    题目描述 Dpstr学习了动态规划的技巧以后,对数的分解问题十分感兴趣. Dpstr用此过程将一个正整数x分解成若干个数的乘积:一开始令集合A中只有一个元素x,每次分解时从A中取一个元素a并找出两个大 ...

  2. request header....

    root@xxx# curl -i --get --include 'http://ali-barcode.showapi.com/barcode?code=6938166920785' -H 'Au ...

  3. 命名实体识别学习笔记——使用Ltp

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xuewenstudy/article/d ...

  4. 在oracle中操作数据——使用特点的格式插入日期 sql函数的使用——日期函数

    日期函数用于处理date类型的数据,默认情况下的日期格式是dd-mm-yy即12-7月-78 (1)sysdate:该函数返回系统时间 (2)add_months(d,n) (3)last_day(d ...

  5. 对The Curse of Dimensionality(维度灾难)的理解

    一个特性:低维(特征少)转向高维的过程中,样本会变的稀疏(可以有两种理解方式:1.样本数目不变,样本彼此之间距离增大.2.样本密度不变,所需的样本数目指数倍增长). 高维度带来的影响: 1.变得可分. ...

  6. dva与create-react-app的结合使用

    dva与我们的create-react-app创建的两款脚手架是我们写react项目的两款优秀框架,之前一种使用create-react-app这款脚手架进行开发.然后这个框架美中不足的是redux方 ...

  7. Java练习 SDUT-1959_简单枚举类型——植物与颜色

    简单枚举类型--植物与颜色 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 请定义具有red, orange, yell ...

  8. @codeforces - 1214G@ Feeling Good

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n*m 的 01 矩阵 A,一开始所有格子都为 0. ...

  9. 洛谷P1510 精卫填海

    //01背包 求背包内物品价值超过某一定值时的最小体积 #include<bits/stdc++.h> using namespace std; ; ; int n,v_tot,w_tot ...

  10. [wikipedia] List of free and open-source software packages

    List of free and open-source software packages From Wikipedia, the free encyclopedia     This articl ...