2018 一月重大資安事件新聞-3
作者:專案研究員 林漢洲
LINE 的加密協定的介紹與解析
三、LINE的點對點加解密分析
LINE一對一訊息加密分析
LINE將預設所有使用者為使用 點對點的加密機制 ,叫作 Letter Sealing.
用戶端一開始要先產生一對Letter Sealing ECDH 金鑰,存放在用戶端。
並上傳公鑰至LINE伺服器, 而且會從LINE伺服器傳回一個唯一的金鑰代碼。
如何一對一傳送訊息
首先想發送訊息的使用者要先取得收件人的公鑰。共同對稱鑰則是由下面公式:
Shared Secret
= ECDH curve25519 (key user1-private, key user2-public)
= ECDH curve25519 (key user2-private, key user1-public)
利用Shared Secret, 衍生出 用來對訊息加密的 Key encrypt 和 IV
Key encrypt = SHA256(Shared Secret || salt || “Key”)
IV pre = SHA256(Shared Secret || salt || “IV”)
IV encrypt = IV pre[0:15] ⨁ IV pre [16:31]
用256位元AES-CBC 加密後的訊息為密文 C
C = AESCBC(Key encrypt, IV encrypt, M)
為了要證明訊息未被他人不當更改,算出簽章 MAC
MAC plain = SHA256(C)
MAC enc = AESECB(Key encrypt, MAC plain[0:15]⨁MAC plain[16:31])
[ version, content type, salt, C, MAC enc, sender key ID, recipient key ID ]
收信者收到後,利用 Shared Secret, Key encrypt(利用上面sender用的公式算出來), IV 可以解密。再算出MAC,如果和sender 送來的MAC 吻合, LINE 就會顯示出解密後明文。如果不合,就表示該訊息已被”污染”,將不會顯示出來給用戶。
四、LINE一對多訊息加密分析
在LINE群組聊天時,需要由群組的發起人 (或是想送第一個訊息給群組的人)產生一把共享的群組金鑰Sharedkeygroup,然後,群組其它成員也會收到這把共享的群組金鑰。
就像一對一的加密,其實這把群組金鑰Sharedkeygroup,就像是一對一的私鑰,只是在群組裹,大家都用同一把私鑰來加解密群組訊息。
要讓這把Sharedkeygroup可以安全地送到群組其它成員,作法如下:
首先,先收集其它成員的公鑰,舉例來說,Bob. (Alice 是送訊息者)
KEY for-bob = ECDH cuver25519 (KEY alice-private, KEY bob-public)
把 Sharedkeygroup
用 KEY for-bob 加密後放在messaging server。
當Bob 要送訊息時,Bob 向server 要 Encrypted(KEY for-bob, Sharedkeygroup )
然後Bob 可以用這把KEY for-bob來解密,取得 Sharedkeygroup
KEY for-bob = ECDH cuver25519 (KEY bob-private, KEY alice-public)
當群組人員有異動(新加入或離開)時,新的Sharedkeygroup要重新產生。以確保離開的人員不能再加解密這個群組之後的訊息。
以上說明,如何把從sender 送到群組其它成員Sharedkeygroup
Bob拿到Sharedkeygroup 後,把它存放在local cache, 所以以後不用再向server 取。
Shared Secert group = ECDH curve25519(SharedKey group, Key sender-public)
Key encrypt = SHA256(Shared Secret group || salt || “Key”)
IV pre = SHA256(Shared Secret group || salt || “IV”)
IVencrypt = IVpre[0:15] ⨁ IVpre[16:31]
附註,這KEY for-bob的算法是根據 ECDH (橢圓曲線迪菲-赫爾曼金鑰交換, Elliptic-curve_Diffie–Hellman)
Shared Secret
= ECDH curve25519( KEY user1-private, KEY user2-public)
= ECDH curve25519( KEY user2-private, KEY user1-public)
五,結語
LINE採用點對點加密,並預設所有使用者都自動採用此模式,可大幅改善其訊息傳遞的安全性。其前提是LINE保證所有用戶端的私鑰被安全保管存放在安全的地點,只在用戶端產生且不會離開用戶端,因此用戶間的通訊,理論上無法被LINE公司或員工所解密或監聽。WhatsApp 所公佈的點對點加密方法和群組交換金鑰和LINE的作法基本上是十分相似。未來我們會對這些主要即時通訊軟體的通信協定作更詳細深入的探討和研究。
參考資料
[1] LINE Encryptino Overview (Technical Whitepaper) ver. 1.0, September, 2016 https://scdn.line-apps.com/stf/linecorp/en/csr/line-encryption-whitepaper-ver1.0.pdf