从物联网设备生命周期理解Apple Homekit框架
本次筆記主要基于蘋果公開的HomeKit Accessory Protocol協(xié)議文檔和IOS Security Guide中相關(guān)部分。
總體來講,設(shè)備與App之間采用端到端的加密,密鑰由設(shè)備和App自己協(xié)商存儲,云只負(fù)責(zé)在云上維護(hù)身份并且轉(zhuǎn)發(fā)消息給客戶端。用戶的控制分為兩部分,一部分是云端控制,一部分是設(shè)備自己存儲憑據(jù)控制。這個分布式的訪問控制系統(tǒng)不可避免的存在一些同步上的瑕疵。
1. 發(fā)現(xiàn)與綁定
(1)使用IP地址的設(shè)備要求支持Bonjour來發(fā)現(xiàn)設(shè)備。Bonjour是在局域網(wǎng)中尋找服務(wù)的一個主要方法。這項(xiàng)技術(shù)廣泛用于Mac OS X,允許用戶不用在任何設(shè)置下建立一個網(wǎng)絡(luò)連接。
(2)設(shè)備與App用戶的綁定稱為pair(配對)過程。配對的結(jié)果就是設(shè)備與App互相交換了自己生成的公鑰并且存儲,利用公鑰來進(jìn)行未來的身份認(rèn)證。簡要概括如下(忽略細(xì)節(jié)):
a. 設(shè)備生成(或固定)一個setup code,形如101-22-333,App需要通過某種第三方渠道(如掃設(shè)備上的二維碼)獲得這個碼來開始配對過程。開始配對時(shí)設(shè)備要驗(yàn)證App發(fā)來的setup code是否正確。
b. 通過蘋果廠商級認(rèn)證的設(shè)備會有一個證書類似的東西,在配對開始時(shí)給App,否則App會提示設(shè)備未認(rèn)證,需要用戶確認(rèn)風(fēng)險(xiǎn)并點(diǎn)擊繼續(xù)。
c. App和設(shè)備各生成一個公私鑰對,通過密碼算法進(jìn)行交換,然后存儲起來作為未來認(rèn)證配對的依據(jù),即這個公鑰就是身份。至此與設(shè)備配對結(jié)束。
d. 設(shè)備通過某種方式映射到了iCloud中。設(shè)備、家庭、用戶數(shù)據(jù)可以在iCloud中加密同步。在iCloud中用戶有home的單位來管理設(shè)備和其他用戶。
(3)注意:設(shè)備被綁定后(有至少一個管理員)賬號后,會拒絕其他用戶綁定。設(shè)備會上報(bào)自己的設(shè)備ID給App,設(shè)備ID協(xié)議中要求每次重置更新。
2. 控制
(1) 局域網(wǎng)控制:局域網(wǎng)控制利用綁定過程中商定的公鑰來做身份認(rèn)證,之后協(xié)商出加密密鑰來保持長連接通信。
(2)遠(yuǎn)程控制:設(shè)備只與家中的Hub通信(僅apple TV、ipad可以作為hub)。利用某種機(jī)制,用戶通過iCloud將要做的請求發(fā)給在家中局域網(wǎng)的Hub(ipad),由ipad代為操作控制設(shè)備。(產(chǎn)生了個疑問,主人用手機(jī)綁定了設(shè)備,手機(jī)和ipad共享的是一個私鑰身份嗎?)
3. 分享與取消分享
?談到分享,首先講一下Homekit的用戶管理控制。設(shè)備上存有各個用戶的名字和公鑰,每個用戶有對應(yīng)的管理員標(biāo)志位。只有管理員才可以進(jìn)行用戶管理操作,
(1)分享:官方正常App操作流程中,(猜測)利用iCloud分享出公私鑰給被分享者,同時(shí)給設(shè)備添加該公鑰到用戶列表中,將被分享用戶添加至iCloud的home中。在有hub的情況下,主人可以將用戶設(shè)置成管理員;但是在設(shè)備中并沒有將該用戶設(shè)置成管理員,被分享用戶需要添加別的用戶時(shí),只能是在iCloud上添加,然后主人的hub代為執(zhí)行添加用戶的操作。所以homekit有個缺點(diǎn),必須擁有hub才能將分享用戶設(shè)置為管理員;同時(shí)這也保證了安全:用戶App中可以通過云來管控所有的授權(quán)用戶,而杜絕了被分享用戶偷偷地在局域網(wǎng)添加與操作訪問控制。
(2)取消分享:官方App中,首先會通過iCloud的home中刪除被分享用戶,然后再局域網(wǎng)通知設(shè)備讓設(shè)備刪除該用戶的public key。但是,這兩部是分開執(zhí)行的,若刪除用戶時(shí)主人不能與設(shè)備通信,則僅會刪除云中的用戶,App會在跟設(shè)備再次建立連接時(shí)執(zhí)行操作。也就是說這兩方的刪除同步上存在問題,不過安全風(fēng)險(xiǎn)很小,App會記得保留狀態(tài)只要能和設(shè)備通信就刪除那個用戶。
?
4. 刪除設(shè)備
主人在云端刪除該設(shè)備,同時(shí)給設(shè)備發(fā)送刪除自己的命令。當(dāng)設(shè)備判斷用戶列表中沒有管理員后,會刪除所有的用戶。
注意只有管理員才能在設(shè)備上刪除用戶,所以由于被分享者不是管理員,他不能從設(shè)備上刪除自己。因此,被分享者刪除自己其實(shí)只是退出了iCloud上的home,主人app界面中的home仍然可以看到該用戶在,因?yàn)楫吘乖O(shè)備上的密鑰還沒刪,其實(shí)被分享者是可以控制的。
?
?
By Ascii0x03,轉(zhuǎn)載請注明出處:https://www.cnblogs.com/ascii0x03/p/11198608.html
轉(zhuǎn)載于:https://www.cnblogs.com/ascii0x03/p/11198608.html
總結(jié)
以上是生活随笔為你收集整理的从物联网设备生命周期理解Apple Homekit框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【HAOI2015】树上染色
- 下一篇: MySQL大小写