大概兩年前,我就一直在尋找可以用 HomeKit 的智慧門鎖方案。後來找著找著就放棄了,當時的研究結果是這樣的:
大部分支援 HomeKit 的門鎖都是歐美款式的門鎖,然而歐美國家使用的鎖,外型跟亞洲國家不太一樣,亞洲的鎖通常會長很多,而這種鎖唯一有支援 HomeKit 的只有當時一組叫做「多靈 P8」的鎖。
但是電子鎖這種關乎安全的東西,還是找大牌子比較保險,而就我當時研究,最高階的電子鎖應該不外乎是 Yale(耶魯)跟三星兩家。可惜這兩家都不支援 HomeKit,所以那時候我就放棄購買了,想說等過段時間再看看會不會有出 HomeKit 的門鎖。
敗家不需要理由
兩年過去了,市面上支援 HomeKit 的門鎖多了一些,包括小米也出了平價的 HomeKit 門鎖。但我還是認為選擇大品牌的門鎖比較妥當,可惜這兩家大廠這兩年依然沒有出支援 HomeKit 的鎖(Yale 有出,但是是歐美規格)。因此最後還是放棄了 HomeKit,趁著特價活動,把 Yale 的 YDM-7116 + 藍牙模組 + Yale Link Bridge 一次入手。
沒錯,這款特價時會送整組藍牙跟 Bridge,這邊有傳送門。注意要確定有沒有寫送 Bridge(遠端橋接器),因為之前有陣子沒送,現在又突然送了,這顆橋接器單買要三四千,買到賺到。或者有時候門市會做特價也會整組包在一起賣,有興趣的可以打電話去問看看。
順帶一提,YDM-7116 是舊款,新款是 YDM-7116A,差別在於指紋感應的模式不同,新款感應當然比較好,如果對這方面沒有要求,買舊款就夠了。如果你想要知道這系列的電子鎖有什麼功能,可以看陳甯的這篇 YDM-7216 介紹。
遠端功能真難用
在請師傅安裝門鎖完成後,我就使用了一下 Yale Link 的 App。用完真的是想罵髒話,下面的動畫完美示範了 App 的問題:
很明顯的,這款 App 有許多問題:
- 對 iPhone 12 Pro 解析度不支援,整個跑版
- 打開 App 要先等動畫,之後要手動按門鎖,再按遠端連線,最後再按解鎖,太花時間
如果用 App 解鎖要花十幾秒鐘,誰還要用?刷指紋就好了啊。花三四千買這組橋接器的人真的是有夠浪費錢。
✭ 黑魔法研究室 ✭ 魔改
不過買都買了,與其抱怨還不如想辦法研究看看它的機制,所以我就開始逆向 App 以及分析 App 請求 API 的封包內容,過了兩天,居然還給我真的研究成功。
(順帶一提,在台灣販售的耶魯電子鎖確實是使用韓國 iRevo 的晶片,因為 App 連線的伺服器的確是 iRevo 的伺服器。)
研究完成之後,就開始著手寫 Homebridge 外掛套件(JavaScript 跟 TypeScript 我都不會,苦手),由於我個人的喜好原因,我偏向使用 Homebridge 而非 HomeAssistant。有興趣的話可以下載 homebridge-yale-link 來安裝。根據其他使用者的說法,可能需要 30 分鐘左右的時間來摸索如何設定。
最後 HomeKit 串接成果如下:
雖然還是要花 5 秒鐘,但是整體時間已經比上面開 App 快上了三倍,在某些條件下還可以再省略一隻 API 的呼叫,會再快一兩秒,詳情可以看套件安裝說明。
我打算在樓梯牆壁貼一個 NFC 感應卡,然後搭配捷徑與 HomeKit 的方式來開門,這樣就可以先提早算好這幾秒鐘的時間差,讓人走到門前的時候剛好門鎖已解鎖。
結界限制
由於魔改再怎麼樣都是非原生的 HomeKit,因此會有一些限制:
- 如果開啟了「家庭」App 之後用傳統方式改變門鎖狀態(例如用指紋開門),則 App 中的狀態不會即時更新。要做到這點其實不難,問題是得每隔幾秒就去呼叫 API,我擔心會大量消耗門鎖的電力,造成很快就沒電的情形發生。
- 如果先打開門,再開啟家庭 App,則狀態會偵測為已開門,這部分沒有問題。
- 門鎖打開後,若門的位置已歸位,過幾秒會自動上鎖。我的實作方式是在「家庭」App 中會自動把狀態變回已上鎖狀態,但實際上這只是一個過幾秒鐘會切換狀態的指令,實際上有沒有上鎖不能從那邊看出來。
- 舉個例子:用 HomeKit 解鎖後,馬上把門推開並且不要歸位,過幾秒鐘 App 會顯示門已經上鎖(時間到,自動切換狀態),但是實際上未上鎖。
安全性
方便與安全性是很難兼顧的,在本次的研究中我就發現了幾個安全性的問題。
雖然 Yale Link App 理論上會綁定手機的 UDID、門鎖藍牙模組的序號,搭配每次操作都會更新的 Google 帳號 token,而使得只有符合以上組合的請求才可以成功解鎖。但由於部分 API 設計的缺陷,導致攻擊者只要能入侵你的 Google 帳號,控制你家的門鎖根本成了易如反掌的事情。
如果你在乎安全,我會建議直接把橋接器拔掉,不要使用。或者你得確定你的帳號密碼強度夠強,然後有開兩階段認證,之後禁止其他沒有安全觀念的家庭成員使用自己的 Google 帳號登入、綁定門鎖橋接器。
如果你非常在乎安全,我會建議你藍牙模組也拔掉,並且不要使用 App,因為這個 App 目前也是有一些安全問題存在。細節不多說,但若按照台灣的「行動應用資安聯盟」的標準,這個 App 是不會通過審查的。
至於我個人目前是採用高強度密碼的 Google 帳號搭配兩階段認證的方法,並禁止家裡其他成員使用 App,一律走 HomeKit 解鎖,或者就用電子鎖原本的指紋或卡片解鎖,來取得安全性與方便性中間微妙的平衡。
2021.12.30 更新:
注意,Yale 推出了新的橋接器,且新版門鎖皆使用此款橋接器連線,而可能不適用於此方法,在購買前請先留意。或者贊助我買新版門鎖來破解也可以。
發佈留言