ckks 运行时间分析
时间: 2023-10-26 17:03:23 浏览: 54
ckks(Ciphertext-Key Homomorphic Encryption over the Integers)是一种混淆加密方案,用于保护机密数据的隐私。它的运行时间分析主要涉及以下几个方面。
首先,ckks方案的运行时间与数据大小和计算操作的复杂度有关。当数据大小增加时,计算密钥切换和加密操作的时间会增加。相对于其他同类方案,ckks具有较高的计算复杂度,主要体现在同态操作和加密过程中。
其次,ckks方案的加密过程中,生成加密密钥、密钥切换和加密操作都需要时间。生成加密密钥是ckks方案的初始化过程,需要一定的计算时间。密钥切换操作用于支持不同的同态计算,它需要将密钥更新成特定的结构,该过程也需要时间。加密操作主要是将明文转化为密文,这一过程涉及到数学运算和数据转换,所以时间较长。
最后,ckks方案中的同态操作是实现加法和乘法的关键步骤。同态加法和同态乘法的运行时间与数据的大小和复杂度有关。在ckks方案中,同态乘法的运算时间较长,主要是由于乘法的复杂性决定的。对于乘法操作,可能需要多次迭代计算,因此运行时间相对较长。
综上所述,ckks方案的运行时间分析与数据大小、计算复杂度以及同态操作有关。尽管ckks方案的计算复杂度较高,但它提供了更高级的同态操作,可以实现更复杂的计算,从而保护隐私数据。
相关问题
CKKS算法计算开销
CKKS算法的乘法操作比较耗费性能,因为在编码时对系数进行了放大,所以无论是密文还是明文的乘法都需要进行重缩放。这对机器学习等应用来说并不是很友好。此外,CKKS算法的计算开销也比较大,因为它需要进行多次加密和解密操作,而且在进行同态计算时需要使用加密的秘钥和公钥,这也会增加计算的开销。因此,在实际应用中需要仔细考虑CKKS算法的计算开销和性能问题。
python 同态加密库
TensSEAL是一个方便的同态加密库,它是Microsoft SEAL的Python接口。它实现了BFV和CKKS两种同态加密算法,并提供了对张量进行加密的功能。使用TensSEAL,你可以隐藏很多具体细节,轻松编写同态加密的代码。它是一款适合新手的同态加密库。\[1\]
在TensSEAL中,加密不是直接提供加密函数,而是使用包含加密方案名称的方法,例如bfv_vector。你只需要传入需要加密的明文即可。同时,加密需要提供公钥,也就是生成的上下文对象。\[2\]
上下文对象在TensSEAL中相当于对CKKS的密钥和其他参数进行了封装。在编码、加密、加法、乘法和解密的过程中,只需要将上下文作为参数传入即可。\[3\]
以下是一个使用TensSEAL进行同态加密的Python代码示例:
```python
import tenseal as ts
import numpy as np
def gencontext():
context = ts.context(ts.SCHEME_TYPE.CKKS, 8192, coeff_mod_bit_sizes=\[22, 21, 21, 21, 21, 21, 21, 21, 21, 21\])
context.global_scale = pow(2, 21)
context.generate_galois_keys()
return context
def encrypt(context, np_tensor):
return ts.ckks_tensor(context, np_tensor)
def decrypt(enc_tensor):
return np.array(enc_tensor.decrypt().tolist())
def bootstrap(context, tensor):
# 刷新已经用尽深度的张量
# 这里 bootstrap = enc(dec())
tmp = decrypt(tensor)
return encrypt(context, tmp)
if __name__ == "__main__":
a = np.array(\[\[1., 2., 3., 4.\], \[1., 2., 5., 4.\]\])
context = gencontext()
enc_a = encrypt(context, a)
enc_at = encrypt(context, a.T)
enc_b = encrypt(context, a)
res = enc_a + enc_b
# res = enc_a - enc_b
# res = enc_a * enc_b
# res = enc_a @ enc_at
print(decrypt(res))
```
这段代码演示了如何使用TensSEAL进行同态加密。首先,我们生成一个上下文对象,然后使用该上下文对象对张量进行加密。最后,我们可以进行加法、减法、乘法和矩阵乘法等操作,并通过解密函数将结果解密。\[1\]
#### 引用[.reference_title]
- *1* *2* [TenSEAL库介绍:如何开始同态加密](https://blog.csdn.net/watqw/article/details/129539757)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [同态加密:CKKS方案详解及一个python实现:TenSEAL](https://blog.csdn.net/weixin_43466027/article/details/118792866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]