热门标签 | 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;专注于区块链上的密码技术研发。



推荐阅读
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 深入浅出TensorFlow数据读写机制
    本文详细介绍TensorFlow中的数据读写操作,包括TFRecord文件的创建与读取,以及数据集(dataset)的相关概念和使用方法。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • 本文深入探讨了 Python 列表切片的基本概念和实际应用,通过具体示例展示了不同切片方式的使用方法及其背后的逻辑。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 本文详细介绍了Python中文件的基本操作,包括打开、读取、写入和关闭文件的方法,并通过实例展示了如何将Excel文件转换为CSV文件以及进一步转换为HTML文件。此外,还涉及了成绩等级替换的具体实现。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
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社区 版权所有