低功耗藍牙的安全
安全概念
安全性包括了以下內容:
- 認證
- 授權
- 完整性
- 機密性
- 隱私
認證
認證是一種證明身份的方式,用來證實所連接的設備真正是其聲稱的設備,而非第三方攻擊者。認證採用了下列兩種基本方法:
- 初始認證和祕密共享
- 使用預先共享的祕密重新認證
授權
授權是指分配權限做某事,通常包括兩種方式:
- 文檔提供授權
- 直接進行授權
完整性
完整性的定義是指數據的內部一致性和無訛誤性。無論使用有線還是無線通信協議,數據從一個設備傳送到另一個設備時都容易產生各種錯誤。因此,錯誤檢測和防範非常重要。
機密性
機密性是指將事物保持機密的意圖。
在低功耗藍牙中,機密性意味着即使一個第三方竊聽者接收到一個消息,她也無法解碼。消息的編碼過程稱爲加密。第二次世界大戰期間開發的恩尼格瑪機是一個可以加密或解密消息的設備的經典例子。
隱私
另一個安全的關注點在於任何溝通都應是私人的。完全的匿名性很難做到,例如有一個名人登機,有許多人會通過他的樣子認出他。因此,要在每一個位置授予完全匿名性幾乎是不可能的。
因此,隱私是能夠防止他人根據你的設備認出你,而且無法在一個空間跟蹤你的運動的能力。
加密引擎
低功耗藍牙有一個密碼塊,實際上是一個單向函數,用於產生密鑰、加密和提供完整性檢查。這種加密引擎被稱爲先進加密系統(AES),在 NIST 的出版物 FIPS-197 中有具體的定義。低功耗藍牙使用 AES 的 128 位版本,稱爲 AES-128。
共享機密
幾乎所有的安全性都是基於共享機密:你的銀行卡密碼是一個機密,由你和你的銀行之間共享;
在低功耗藍牙裏也有很多共享機密,稱之爲密鑰。一個密鑰是一個“共享機密”的速記方式。可以有很多密鑰,就如同你有車鑰匙、門鑰匙(一到兩個或者三個)、自行車鎖的鑰匙或存取工作文件的鑰匙等。
低功耗藍牙主要有五個密鑰:
- 臨時密鑰(TK)
- 短期密鑰(STK)
- 長期密鑰(LTK)
- 身份解析密鑰(IRK)
- 連接簽名解析密鑰(CSRK)
配對和綁定
爲了保證低功耗藍牙的絕大多數安全特徵,必須完成兩件事情:首先,設備必須互相配對;其次,連接一旦加密,設備必須分配用於加密、保障隱私並對消息進行驗證的密鑰。只要密鑰被保存下來,設備就處於綁定狀態了。
配對
配對有三個不同的階段:
- 配對信息交換
- 鏈路認證
- 密鑰分配
綁定
綁定真正來說屬於通用訪問規範的討論範疇,然而,此刻也不妨考慮一下它的操作。綁定指的無非是將密鑰及相關身份信息保存到安全數據庫當中。如果設備不保存這些值,它們雖能配對,但卻不能綁定。只要當中某一個設備不保存,重新連接後,只有一個設備擁有 LTK(長期密鑰),因此加密的啓動將會失敗。
爲了避免這種情況,兩個設備在最初配對時就會交換綁定信息,從而能夠清楚地知道對方是否保留了該綁定信息。如果對方設備不保存信息,那麼一旦啓動加密地嘗試失敗,主機將試圖再次配對。
數據簽名
當一個設備已經連接但尚未加密時,可以發送沒有保密性地認證數據。要實現這一點,第一次連接配對時應當交換 CSRK。在此之後,只要沒有具有保密性要求的數據需要交互,就可以使用簽名。
數據簽名採用 CMAC 算法。該算法需用到進行身份驗證的消息、一個簽名計數器(SignCounter)和用來驗證發送方的 CSRK,之後生成一個簽名值。
參考資料
《低功耗藍牙開發權威指南》第11章 安全