本次笔记主要基于苹果公开的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. 详解composer的自动加载机制

    composer是一个用PHP开发的用来管理项目依赖的工具,当你在项目中声明了依赖关系后,composer可以自动帮你下载和安装这些依赖库,并实现自动加载代码. 安装composer composer ...

  2. TIJ——Chapter Ten:Inner Classes

    先提纲挈领地来个总结: 内部类(Inner Class)有四种: member inner class,即成员内部类.可以访问外部类所有方法与成员变量.生成成员内部类对象的方法:OuterClass. ...

  3. Spark in action on Kubernetes - 存储篇(一)

    前言 在上篇文章中,我们分析了Spark Operator内部的机制,今天我们会讨论一个在大数据领域中最重要的话题 - 存储.大数据已经无声无息的融入了每个人的生活中.大到旅游买房,小到外卖打车,都可 ...

  4. XAML 很少人知道的科技 - walterlv

    原文:XAML 很少人知道的科技 - walterlv XAML 很少人知道的科技 发布于 2019-04-30 02:30 更新于 2019-04-30 11:08 本文介绍不那么常见的 XAML ...

  5. oracle函数 RAWTOHEX(c1)

    [功能]将一个二进制构成的字符串转换为十六进制 [参数]c1,二进制的字符串 [返回]字符串 [示例] select RAWTOHEX('A123')  from dual;

  6. url地址栏参数<==>对象(将对象转换成地址栏的参数以及将地址栏的参数转换为对象)的实用函数

    /** * @author web得胜 * @param {Object} obj 需要拼接的参数对象 * @return {String} * */ function obj2qs(obj) { i ...

  7. day3_python之函数返回值、语句形式、表达式形式

    一. 函数对象 1. 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二.返回值 return的返回值没有类型 ...

  8. 洛谷 1602 Sramoc问题

    Description 话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个sramoc(k,m)函数,这什么东西?什么意思?于是餐厅找来了资深顾问 ...

  9. uni-app中使用Echarts绘画图表

    enmnm...一般会使用npm下载echarts这个包,但是不知道是我自己的配置问题还是别的原因,一直出不来图线, 于是,把Hello uni-app模板里的那个组件抱过来,然后,成了! 首先, 1 ...

  10. 关于==和equals的探索

    在我的概念之中,==在对比两个基本数据类型的时候,对比的是两者的值是否相同.而在对比两个引用数据类型的时候,比较的是两者的内存地址是否相同. 而equals方法,我一直认为这个方法是对比两个引用数据类 ...