TenSEAL库介绍:如何开始同态加密

这篇具有很好参考价值的文章主要介绍了TenSEAL库介绍:如何开始同态加密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TenSEAL库:

TensSEAL是一个python的第三方库,是一个方便的同态加密库。他并不是一个原生库,而是Microsoft SEAL(一个C++库)的python接口。实现了BFV和CKKS两种同态加密算法,可以直接对tensor进行加密,隐藏了很多具体细节,可以很容易上手编写同态加密的代码。是一款新手友好性的同态加密库。

库的安装是比较简单的,可以用以下命令简单安装:

pip install tenseal

这是他的github上的地址github官网

公钥与私钥

由于TenSEAL库实现的是公钥加密算法,所以这一小节简单介绍以下公钥加密的思想。

加密呢,就是对一个消息也叫明文,比如m=1,进行某种变换,成为一个无法识别的随机数c,我们把这个随机数c叫做密文。可以用一个函数TenSEAL库介绍:如何开始同态加密表示加密过程,其中TenSEAL库介绍:如何开始同态加密表示密钥。将密文还原为明文的操作叫做解密,可以用TenSEAL库介绍:如何开始同态加密表示。

TenSEAL库介绍:如何开始同态加密时,也就是加密和解密使用的密钥是相同的,这种加密方案是对称加密,也叫做私钥密码体制。这个密钥只能由加密方和解密方知道,为了保证明文不被泄露,密钥不能透露给其他人。

然而这种方法在很多时候使用起来并不是特别方便,尤其是加密的双方需要协商一个共同的私钥。而且,有时候,有很多人都是加密者,但是解密的只能是特定的人。比如要收集员工的一些个人信息,这些个人信息只希望被老板知道,而不愿让其他员工也知道。这时公钥密码体制就可以发挥作用了。

公钥密码体制有两个不同的密钥,公钥pk和私钥sk,其中公钥pk用来进行加密,sk用来解密。加密的公钥可以公开,使得每个人都可以加密,但是只有拥有私钥的人才能解密。

这就是公钥和私钥密码的简单的理解。

下面我们来看如何用TenSEAL生成公私钥(以BFV的为例)。

import tenseal as ts

ctx=ts.context(ts.SCHEME_TYPE.BFV,poly_modulus_degree=4096,plain_modulus=1032193)
if ctx.is_private():
    print("This context is private!")
if ctx.is_public():
    print("This context is public!")

TenSEAL中定义了一个context的对象用于封装加解密所需要的参数,里面包含了密钥。在导入tenseal包之后,就可以实例化一个context对象,输入需要的参数来生成公钥和私钥了。

但是,值得注意的是,在context的初始化时,公钥和私钥都是放在context对象里面的。也就是这时的context是私有的。

如果我们需要将这个产生的公钥发布出去,那么,要做的第一件事情就是将私钥分离。下面这段代码展示了如何提取私钥并将私钥从context对象中删掉。

sk=ctx.secret_key()
ctx.make_context_public()
if ctx.is_private():
    print("This context is private!")
if ctx.is_public():
    print("This context is public!")

这时候的context就是public的,可以将他公开了。这样子,别人就可以通过这个context来加密。

BFV加解密的简单演示

在得到了context之后,就可以进行加密了。

m1=[1,2,3,4,5]
m2=[5,4,3,2,1]

c1=ts.bfv_vector(ctx,m1)
c2=ts.bfv_vector(ctx,m2)

print("m1 is ",c1.decrypt(sk))
print("m2 is ",c2.decrypt(sk))

在TenSEAL中的加密,并不是直接提供加密函数,而是使用bfv_vector这样含有加密方案名称的方法。他将编码和加密结合到了一起,我只需要传入需要加密的明文就可以了。同时加密是需要提供公钥的,也就是我们生成的那个context对象。

在加密完成后,得到的是一个密文对象,里面包含了公钥等信息。需要解密的话,可以调用密文对象的decrypt方法。解密时,需要传入私钥sk。

当然,如果你在加密时使用的context中含有私钥,那么解密的时候可以不用传入私钥。当加密时使用的公钥和解密传入的私钥不一致的时候,显然就会失败。我想这也是密文对象里面包含公钥的原因之一。

我们加密了两个明文向量,接下来展示一下BFV支持的同态运算。

#homomorphic addition
c3=c1+c2
print("The sum is ",c3.decrypt(sk))

#homomorphic scale
c4=2*c1
print("2 times of m1 is ",c4.decrypt(sk))

#homomorphic multiplication
c5=c1*c2
print("The product is ",c5.decrypt(sk))

接下来就可以开始你的愉快的同态探索之旅啦!

下面是演示的完整代码:文章来源地址https://www.toymoban.com/news/detail-424524.html

import tenseal as ts

ctx=ts.context(ts.SCHEME_TYPE.BFV,poly_modulus_degree=4096,plain_modulus=1032193)
if ctx.is_private():
    print("This context is private!")
if ctx.is_public():
    print("This context is public!")
    
sk=ctx.secret_key()
ctx.make_context_public()
if ctx.is_private():
    print("This context is private!")
if ctx.is_public():
    print("This context is public!")

m1=[1,2,3,4,5]
m2=[5,4,3,2,1]

c1=ts.bfv_vector(ctx,m1)
c2=ts.bfv_vector(ctx,m2)

print("m1 is ",c1.decrypt(sk))
print("m2 is ",c2.decrypt(sk))

#homomorphic addition
c3=c1+c2
print("The sum is ",c3.decrypt(sk))

#homomorphic scale
c4=2*c1
print("2 times of m1 is ",c4.decrypt(sk))

#homomorphic multiplication
c5=c1*c2
print("The product is ",c5.decrypt(sk))

到了这里,关于TenSEAL库介绍:如何开始同态加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 同态加密的理解

    同态加密 是数据加密方式的一种,特点是允许加密后的数据(密文)进行数学或逻辑运算,同时密文进行数学或逻辑运算之后再解密,结果 近似等于 原始数据(明文)的数学或逻辑运算结果。 假设:我们想通过云计算平台进行两个数的加法运算,如: m 1 = 100 m_1 = 100 m 1 ​

    2024年02月06日
    浏览(29)
  • 全同态加密:BFV

    参考文献: O. Regev. On lattices, learning with errors, random linear codes, and cryptography. In H. N. Gabow and R. Fagin, editors, STOC , pages 84–93. ACM, 2005. Full version in J. ACM 56(6), 2009. V. Lyubashevsky, C. Peikert, and O. Regev. On Ideal Lattices and Learning with Errors over Rings. In Advances in Cryptology - EUROCRYPT 2010 , volume 611

    2023年04月08日
    浏览(35)
  • 隐私计算之全同态加密

    【引】走近任何一个领域,都会发现自己的渺小和微不足道,会越发地敬畏技术和未知,隐私计算也不例外。读了一点儿文章和paper,觉得还是ACM 上的这篇综述(https://queue.acm.org/detail.cfm?id=3561800)可以对全同态加密有一个概貌,从而了解其脉络方向,进而对隐私计算增加一点

    2024年02月07日
    浏览(36)
  • 隐私保护技术之同态加密(转)

    参考链接: https://blog.csdn.net/shn111/article/details/124594241 chapters 同态加密(Homomorphic Encryption)是指将原始数据经过同态加密后,对得到的密文进行特定的运算,然后将计算结果再进行同态解密后得到的明文等价于原始明文数据直接进行相同计算所得到的数据结果。 同态加密与一

    2024年02月12日
    浏览(48)
  • 关于同态加密算法的原理与应用

    (一)同态加密算法的基本概念   (二)算法特点 (三)算法分类 (一)公钥加密算法 (二)同态加密算法的实现过程 (一)Paillier算法 图4.1 验证同态加正确性 图4.2 验证同态标量乘正确性 (二)RSA算法 (一)数据隐私保护 (二)云计算安全 (一)医疗数据共享与隐私

    2024年02月03日
    浏览(32)
  • 同态加密:重塑数据隐私与安全的未来

    同态加密技术是当今信息安全领域的一个重要研究方向,它允许在加密数据上直接进行计算,而无需将数据解密。这种加密方式对于保护数据隐私和增强云计算安全具有重要意义。在这篇文章中,我们将深入探讨同态加密的基本概念、技术特点、应用场景以及面临的挑战。

    2024年04月14日
    浏览(41)
  • 基于量子同态加密的安全多方凸包协议

    摘要 安全多方计算几何(SMCG)是安全多方计算的一个分支。该协议是为SMCG中安全的多方凸包计算而设计的。首先,提出了一种基于量子同态加密的安全双方值比较协议。由于量子同态加密的性质,该协议可以很好地保护量子电路执行过程中数据的安全性和各方之间的交互。结

    2024年02月15日
    浏览(43)
  • 基于量子同态的安全多方量子求和加密

    摘要 安全多方计算在经典密码学中一直扮演着重要的角色。量子同态加密(QHE)可以在不解密的情况下对加密数据进行计算。目前,大多数协议使用半诚实的第三方(TP)来保护参与者的秘密。我们使用量子同态加密方案代替TP来保护各方的隐私。在量子同态加密的基础上,提出了

    2024年02月13日
    浏览(42)
  • 全同态加密(FHE)体系概述(初学版)

    假设有这样一个场景,用户有一组私密数据,被加密存储在了第三方的云平台,现在,该用户想对这组数据进行某种处理,但是处理过程和结果都不想让第三方云平台看到。当然,用户可以选择将数据下载下来,处理后再加密上传,但是,假如这一组数据量很大,那么势必会

    2023年04月14日
    浏览(22)
  • 同态加密:一个基于多方计算的CKKS方案

    这篇文章主要介绍LattiGo团队搞出来的一个多方同态加密的工作。个人觉得比较优雅,而且有库支持,方便把玩,所以记一下。 在攒毕业论文的时候整了这么个看上去很烂,但是(个人觉得)有一点意思的烂活,没心思写那么多的公式,各位dalao凑合看,欢迎轻喷。 实现了C

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包