Thursday, December 26, 2019

5G Security Architecture 安全架構初探

引言
理論上,5G(第五代流動通信)不但具有更快的速度、更高的頻譜效益,還有更高的安全性。 其中一個具體例子,就是手機註冊流程。相比起 4G 使用的 EPS-AKA,5G 使用的 5G AKA 既能更加有效防止竊聽者的追蹤,也能減少在漫遊下,手機身分被盜用的風險。

本文章會先分析 5G Core 中,與保安相關的 Functional Entities 的名稱及功能。然後在下一篇文章,會詳細解釋 5G-AKA 的運作原理,以及與 4G EPS-AKA 的異同之處。

基本保安架構
名詞解釋:
  • ME = Mobile Equipment 
  • USIM = Unique Subscriber Identity Module
  • 3GPP / Non-3GPP AN = 3GPP / Non-3GPP Access Network
  • SN = Serving Network
  • HE = Home Environment
簡單來說,就是 ME(手機)會與 USIM(電話卡)交換資料,為上層的應用提供保安。
而手機會利用 3GPP AN(例如基地台)或 Non-3GPP AN(例如 Wi-Fi 熱點)與 Serving Network(最就近的網絡)溝通。同時,Serving Network 也需要索取有關你 USIM 的資料,用作認證身分。而且,Serving Network 有時未必是 Home Environment(你訂購的網絡)(例如漫遊情況下)。所以,兩者會一起合作,為上層提供保安。

四個主要的保安個體 (Four Fundamental Entities)

  • UE (User Equipment) - 毋庸置疑,手機終端是最重要的個體。
    手機中會插著 USIM 卡,而且手機正正就是資料的使用者。
  • AMF (Access and Mobility Management Function) - 它與 4G EPC 的 MME (Mobility Management Entitiy) 十分相似。與 MME 不同:它不會處理與 Session 相關的工作,只會把 Session 相關的訊息 forward 去 SMF 處理。但是,與 MME 相似:它也會處理 Mobility Event 的 Notification。在保安方面,它只會負責做 SEAF (Security Anchor Functionality),把 SUPI / SUCI 的 request / response forward 去 AUSF / UE。
  • AUSF (Authentication Server Function) - 它只負責做 Authentication 相關的工作,也就是處理所有來自 3GPP / Non 3GPP AN 的 5G AKA / EAP-AKA' / EAP-TLS 的請求。
  • UDM (User Data Function) - 又稱 ARPF (Authentication credential Repository and Processing Function)。它就是一個儲存 SUPI 和所有 secret key 的倉庫。與 4G 的 HSS 一樣,它只會回應合法的請求。而且,它保證所有 Secret keys 都不會離開它,因為它只會回應 hashed keys / calculated keys。而與 4G HSS 不同:4G HSS 有很多其他功能,而 UDM 只有這一個功能,所以相對簡單。
5GC 的明確分工,不但有助防止伺服器過度繁忙,更令局部強化變得簡單。例如:如果有非常多人進行 5G-AKA,只需要開多一台 AUSF 即可解決。又例如,如果某一天需要改掉 secret key 的加密方法,我們只需要更新一下 UDM 就可以,而不會影響 HSS 的其他功能。

註:SMF (Session Management Function) 與 4G 的 SGW 相似,它只做 Session Management,並不提供保安相關功能。而 UPF (User Plane Function) 也一樣,只根據用戶身分,進行 application detection 和 QoS control,同樣不會提供保安相關功能。

---

參考:

[1] 3GPP 23.501 V15.7 - https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3144

[2] 3GPP 33.501 - V15.2 - https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3169

Thursday, December 19, 2019

在 Mac OS X Catalina 下運行 FAME

FAME (Fast Attribute-based Message Encryption) 是由 Visa 及 Microsoft 的研究人員發表的 ABE (Attribute-based Encryption) 。不論加密速度,解密速度,以及私鑰大小,均比最主流的 BSW (John Bethencourt,  Amit Sahai,  Brent Waters) 所發布的方法更快 [1]。而近年來,隨著 Functional Encryption 的概念越來越流行,FAME 的作者也使用 Charm Crypto Framework [2] 來實作了 FAME 的雛型。

由於 Charm 的範例中已經包含 FAME 的演示源碼,故以下簡介 Charm 的安裝步驟:

1. 下載 Charm Crypto 的源碼  
網址: https://github.com/JHUISI/charm

2. 安裝 OpenSSL 及 LibreSSL
輸入 brew install openssl 及 brew install libressl
再將 LibreSSL 或 OpenSSL 放入 .zshrc 中:
export LDFLAGS="-L/usr/local/opt/libressl/lib"
export CPPFLAGS="-I/usr/local/opt/libressl/include"
echo 'export PATH="/usr/local/opt/libressl/bin:$PATH"' >> ~/.zshrc

3. 按指示安裝 Charm
先 checkout dev branch,執行 ./configure --enable-darwin,再 make install 及 make test

4. 下載 FAME 原作者的 main example
https://github.com/sagrawal87/ABE

5. 執行原作者的 example
python main.py 或 python3 main.py
如果發現有問題,可改一下 ac17.py 中的第 19 行:
-from msp import MSP
+from charm.toolbox.msp import MSP
儲存後重試即可。你也可修改 debug = True ,查看詳細運作原理。


---
參考:

[1]: FAME - https://dl.acm.org/citation.cfm?doid=3133956.3134014
[2]: Charm: a framework for rapidly prototyping cryptosystems - https://link.springer.com/article/10.1007/s13389-013-0057-3

Functional Encryption 初探

近年來,Functional Encryption 越來越引起大眾的關注。不同的 Libraries 也開始以 Functional Encryption 作為構思藍本,包括 CiFEr、GoFE 等等。事實上,FE 的概念,早在 2005 年左右就已經出現,而 Dan Boneh 在 2010 年發布的一篇論文「Functional Encryption: Definitions and Challenges」[1] 則正式地對這個詞語下了一些定義。

Functional Encryption 的定義,主要包括以下數項 [2]:
  • 它是 Public Key Encryption 的一種(也就是非對稱加密)
  • 「滿足既定條件,就能知道內容」
    • 在傳統的 Public Key Encryption 中,「條件」只有一個,就是持有私鑰。
      而在 Functional Encryption 中, 加密者持有的,並非一對一的公鑰。
      而解密者即使持有的私鑰,也未必等於可以解開內容。

      例如 IBE 中,加密者可以根據受眾的名稱加密,
      而解密者只能解出以自己的名稱加密的內容。
      每個解密者會有不同的私鑰,但加密者卻只需要持有一套公鑰。
  • 整個加密系統可以分成四個部分:Setup / Keygen / Encrypt / Decrypt
    • Setup 是指由系統管理員產生 Public Key Parameters 及 Master Key。
      Public Key Parameters 可以公開,但 Master Key 只有系統管理員知道。
    • Keygen(或者稱為 Extract)是指使用者向系統管理員索取 Secret Key。
      管理員會按著使用者的名稱、身分等不同屬性,用 Master Key 產生一條獨特的 Secret Key 給用家。
    • Encrypt 是指加密,運用 Public Key Parameters 加上不同的屬性來加密內容。
    • Decrypt 是指解密,以私鑰來解開內容。
      只有當 Secret Key 符合 Encrypt 時的屬性,密文才能解開。
典型例子:包括 IBE,ABE 及 CP-ABE 等。

有部分人會將 FE 跟 Fully Homomorphic Encryption (FHE) 混為一談 [3] 。
事實上,兩者不互相衝突,技術上也可以同時存在,只是學者們仍未提出具體的演算法。

---
參考:

[1]: Functional Encryption: Definitions and Challenges - https://eprint.iacr.org/2010/543.pdf
[2]: Functional Encryption - http://cryptowiki.net/index.php?title=Functional_encryption
[3]: Forget Homomorphic Encryption, Here Comes Functional Encryption - https://research.kudelskisecurity.com/2019/11/25/forget-homomorphic-encryption-here-comes-functional-encryption/