热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bfv同态加密_PySEAL:一个全同态加密的Python接口库

宁波格密链网络科技有限公司一直致力于全同态加密的应用研究。最近陈智罡博士的团队开发了一个将SEAL全同态加密库映射到Python上的接口,解决了机器学习库与全同态加密

宁波格密链网络科技有限公司一直致力于全同态加密的应用研究。最近陈智罡博士的团队开发了一个将SEAL全同态加密库映射到Python上的接口,解决了机器学习库与全同态加密库对接的问题,极大的方便了机器学习领域人员使用全同态加密算法,为其它领域需要用到全同态加密库的人们提供便利的工具。该库已经在GitHub上开源(http://github.com/Huelse/pyseal)。全世界各地的工程技术人员都可以使用该库。

微软的SEAL全同态加密库包含BFV和CKKS两种全同态加密方案,陈智罡博士团队要做的就是将这个库的所有可用接口都映射到Python上来,并使之在Python上正确运行。显然这是一个全新的项目。

经过分析讨论,技术路线确定为使用微软最新的SEAL库(3.3版本)做为基础,与Pybind11官方头文件库作为中间件绑定,使用Setuptools或CMake编译生成动态链接库。这样就可供Python上调用SEAL库接口。技术框架如下:

这不是一个简单问题。初期,他们遇到了复杂的环境和标准问题,经过反复确认,团队选择使用是C++17标准和Python3.6.8的稳定版作为开发环境。然而接下来团队碰到了三个棘手问题。

第一个问题,在最新版的SEAL库中,其使用的是一个名为MemoryPoolHandle的类和MemoryManager基类作为计算过程中的指针与内存池管理。因为Python的内存管理是自动化的,所以这个在Python里是无法直接实现。于是团队在wrapper绑定文件中,将其作为一个参数类导入,最终达成了相同的功能。

第二个问题,SEAL库的Cipertext明文类中有一个关键参数scale,在测试环节中是要做到可自定义修改的,但问题在于这是一个私有变量。在C++中,定义好共有方法后,可通过应用的方式对其赋值,但在Python中因为其语言特性,同样不可能实现对私有变量的直接修改。所以经过研究,团队的解决方法是在Cipertext类中增加一个共有方法set_scale(),该函数方法是整个项目唯一对SEAL库做出修改的地方,也仅应用于测试环节的使用,对全同态加密整体是无影响的。

第三个问题,出自于Python的内存管理,这是一个技术难点与重点。提前说明一下,Python中假如我们在代码文件里定义一个变量a=0,我们再写一个带参数的函数foo(a),然后函数里会对a变量进行一系列运算使之改变。当我们将a带入到这个函数并使之运行后我们发现,在该函数里,a这个变量的确被运算过了,但是在这个函数体之外的那个a,它的值并不会变。通过id()方法观察内存,最终确认是这样的。

而在C&#43;&#43;里通过指针的方式实现对传入参数的修改&#xff0c;SEAL库多处的encode和decode函数都是这样使用的。要在尽可能不改变SEAL库源码的情况下将其转移到Python上来&#xff0c;且Python不能操控指针&#xff0c;仅这个问题困扰了团队很久。最终团队给出的方案是自定义一个变量类。虽然在Python中单一的变量作为参数不会发生改变&#xff0c;但如果是一个类作为参数传入&#xff0c;那它的改变是全局性的。比如uIntVector类在c&#43;&#43;中的原型是std::vector<:uint64_t>&#xff0c;DoubleVector类其原型是std::vector。团队对类的包装完成了这两者最基本的数据交互&#xff0c;这样CKKS方案就能完美运行。至此陈智罡博士团队的Pyseal项目的主要工作也已完成。

最后&#xff0c;陈智罡博士的团队使用Pyseal将SEAL官方给出的6个样例在Python上全部实现&#xff0c;且运行效率也并未减少。接口已经在Github上开源。

宁波格密链网络科技有限公司一直致力于全同态加密的研究与开发&#xff0c;希望能给全世界更多的技术工程人员带来便利&#xff0c;更加方便地使用全同态加密库。PySEAL&#xff1a;一个全同态加密的Python接口库​mp.weixin.qq.com

文章首发在微信公众号&#xff1a;btc201800

知识星球ID&#xff1a;28018093

音频发布在喜马拉雅上“区块链杂谈 (第2季)” 解读区块链白皮书 宁波格密链网络科技有限公司&#xff0c;专注于区块链上的密码技术研发。



推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • 支持向量机训练集多少个_25道题检测你对支持向量机算法的掌握程度
    介绍在我们学习机器算法的时候,可以将机器学习算法视为包含刀枪剑戟斧钺钩叉的一个军械库。你可以使用各种各样的兵器,但你要明白这些兵器是需要在合适的时间合理 ... [详细]
  • 区块链为什么是不可篡改的
    不可篡改是区块链最为重要的特性和应用之一。其是由区块链本身的结构、共识机制、网络拓扑和加 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
author-avatar
冯婉婷562048
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有