上個禮拜 Swift 的 blog 上面發表了 Homomorphic encryption 的 library (其實當作 Apple 發表的比較實際):「Announcing Swift Homomorphic Encryption」。
裡面提到了 Live Caller ID Lookup 這個功能用到了 Homomorphic encryption:
One example of how we’re using this implementation in iOS 18, is the new Live Caller ID Lookup feature, which provides caller ID and spam blocking services. Live Caller ID Lookup uses homomorphic encryption to send an encrypted query to a server that can provide information about a phone number without the server knowing the specific phone number in the request.
傳統實作 Live Caller ID Lookup 的作法是手機將號碼傳回伺服器端,然後伺服器回答相關的資訊,這樣做的缺點是伺服器端的單位就會知道誰打進來。
而以前改善的方式是類似於 k-anonymity 的方式,像是手機端只傳其中幾位數字給伺服器端 (像是收到 0912-345678
的號碼,只傳 0912-345
的部分給伺服器端),然後伺服器端針對符合的 range 給出答案,這樣可以避免伺服器端直接知道哪個號碼打來,但也透漏了比較多的資訊給手機端。
Homomorphic encryption 的重點在於可以對 ciphertext 進行運算,在手機端提供 ciphertext A 給伺服器後,伺服器端拿著 ciphertext A 與資料庫互動,最後也會得到一個 ciphertext B,然後手機端拿回 ciphertext B 後可以解回結果。
不過我沒有很買單就是了,在資料庫是 plaintext 的情況下,是否有機會從 ciphertext A 與資料庫互動的 access pattern 得知更多資訊?畢竟不能是 table scan,不然以 Apple 會拿到的查詢量來說太大了...
算是個嘗試,但是不是 snakeoil 後續可以再看看。