文|庞德公
编辑|郭嘉
在计算过程中确保数据隐私和安全性很重要,尤其是在使用云服务。传统的加密方法要求在处理数据之前对数据进行解密,使其面临潜在风险。同态加密是隐私计算的分支,允许在不泄露底层信息的情况下对加密数据进行计算。
同态加密 (HE) 是一种加密技术,它支持对加密数据进行计算,而不会向操作进程泄露底层未加密数据。例如1+1=2,同态加密将原始的1进行加密后将密文相加,能够得到2加密之后的密文。因此在保证完成计算任务同时,又不会泄露原始数据。
它为客户端提供了一种将加密数据发送到服务器的方法,服务器对该加密数据进行操作并返回客户端可以解密的结果。在执行请求期间,服务器本身永远不会解密原始数据,甚至无法访问解密密钥。这种方法为云服务提供了新的机会,可以在保护用户数据的隐私和安全的同时进行操作,这显然对许多方案非常有吸引力。
Apple 引入了一个Swift的新开源包swift-homomorphic-encryption,以实现同态加密技术。swift-homomorphic-encryption 软件包利用了几个高级功能:
Swift on Server:利用Hummingbird HTTP框架和跨平台支持。
基准测试库:用于轻松进行性能基准测试。
Swift Crypto:提供高性能的低级加密原语。
该算法的实现使用Brakerski-Fan-Vercauteren(BFV)HE方案。该方案基于环学习有误差(RLWE)硬度问题。确保后量子128位安全性,防止经典和未来潜在的量子攻击。
Apple在iOS 18的实时来电显示查找功能中使用了同态加密。此功能通过向服务器发送加密查询来提供来电显示和垃圾邮件阻止服务,该服务器在不知道请求中的特定电话号码的情况下检索有关电话号码的信息。
实时来电显示查找功能还依赖于个人私有信息检索 (PIR),允许客户端执行私有键值数据库查找。在 PIR 设置中,客户端拥有私有键值(例如电话号码),并从服务器检索关联的值。由于键值是私有的,因此客户端希望在服务器不知道真实的键值下执行此查找。采用同态加密,只需要将少量数据库元数据与客户端同步。这种有效的方法支持频繁更新的超大型数据库,从而增强了数据隐私和安全性。
Swift同态加密包的一个基本使用示例:
import HomomorphicEncryption
// We start by choosing some encryption parameters for the Bfv<UInt64> scheme.
// *These encryption parameters are insecure, suitable for testing only.*
let encryptParams =
try EncryptionParameters<Bfv<UInt64>>(from: .insecure_n_8_logq_5x18_logt_5)
// Perform pre-computation for HE computation with these parameters.
let context = try Context(encryptionParameters: encryptParams)
// We encode N values using coefficient encoding.
let values: [UInt64] = [8, 5, 12, 12, 15, 0, 8, 5]
let plaintext: Bfv<UInt64>.CoeffPlaintext = try context.encode(
values: values,
format: .coefficient)
// We generate a secret key and use it to encrypt the plaintext.
let secretKey = try context.generateSecretKey()
let ciphertext = try plaintext.encrypt(using: secretKey)
// Decrypting the plaintext yields the original values.
let decrypted = try ciphertext.decrypt(using: secretKey)
let decoded: [UInt64] = try decrypted.decode(format: .coefficient)
precondition(decoded == values)