本次笔记主要基于苹果公开的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. Python之路,Day1 - Python基础1 --转自金角大王

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  2. hdu5438 dfs+并查集 长春网赛

    先dfs对度小于2的删边,知道不能删为止. 然后通过并查集来计算每一个分量里面几个元素. #include<iostream> #include<cstring> #inclu ...

  3. JPA中id前面有空格导致的"Column 'id' not found"问题

    问题背景 昨晚有个同事发生了一个神奇的问题,一如既往的问题,一如既然的用我写的BEJSON-JAVA代码生成器生成,却发现一直提示Column 'id' not found.这就很TM神奇了 2018 ...

  4. @bzoj - 4378@ [POI2015] Pustynia

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 n 的正整数序列 a,每个数都在 1 到 10^ ...

  5. HZOI 可怜与超市

    网上搜不着,八成又是哪个学长留下的…… 因为考试第二题我们都好不容易才搞懂,学长有给我们扔了几道类似的题. 其实这道题思路挺好想的,就是一些细节还有复杂度比较难弄,好难调啊. 看到题的第一眼以为是树形 ...

  6. 洛谷 2279 [HNOI2003]消防局的设立

    Description 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了 ...

  7. LRJ-Example-06-16-Uva10129

    #include <cstdio> #include <cstring> #include <vector> using namespace std; + ; // ...

  8. HTML5--语法

    一.标记方法 1.内容类型(ContentType)还是.text/html 2.声明:<!DOCTYPE html SYSTEM “about:legacy-compat”> 3.字符编 ...

  9. 创建JAVASCRIPT对象3种方法

    创建JAVASCRIPT对象3种方法 方法一:直接定义并创建对象实例 var obj = new Object();    //创建对象实例 //添加属性obj.num = 5;   //添加属性 o ...

  10. 2001年NOIP普及组复赛题解

    题目涉及算法: 数的计算:动态规划: 最大公约数和最小公倍数问题:质因数分解: 求先序排列:递归: 装箱问题:动态规划(纯0-1背包问题) 数的计算 题目链接:https://www.luogu.or ...