软件工程与应用第二篇报告

2021SC@SDUSC

2021-10-10

第二周完成事项

工作分工

经过几天的研究,基本掌握了全同态加密的基本流程以及代码基本认识。作为组长,我在周四给大家分配了本周的任务。因为是第一周的代码分析(不包括技术分析),分配的难度不应该很大,循序渐进,所以本周我们小组的工作为工程中的元素存储。

高跃主要负责的是公钥和私钥的存储,李东晓主要负责的是明文的存储,我负责的是密文的存储。这个虽然不算是加密的代码,但是这也是加密的前提,如果说全同态加密算法是一个一个模块,我们所做的便是将不同模块桥接起来,连成一个整体。

密文存储概要

SEAL全同态加密算法生成的密文为两个或多个多项式,这些多项式又以CRT的形式存储在Microsoft SEAL其中且与系数的模数有关。密文用户不能直接修改,是通过Evaluator类中的函数改变的。密文后背数组的大小与密文本身大小和加密参数有关。

下面我将逐一分析代码中的具体函数的功能

细致分析

这次主要分析的是头文件,也就是ciphertext.h。

密文存储的代码首先就是构造密文存储的类。构造函数有多个,分别适应需要的各种情况。

在这里插入图片描述

首先是默认构造函数。调用该构造函数会构建一个不分配内存的空密文,pool指向有效的内存池的MemoryPoolHandle,如果内存池没有初始化则会抛出异常

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后是其他的构造函数,其中的注释是从英文翻译为中文,方便分析。explicit的作用是表明该构造函数是显示的,而非隐式的,跟它相对应的另一个关键字是implicit,意思是隐藏的,类构造函数默认情况下即声明为implicit。这些构造函数都是空的密文,但是前两个构造函数生成密文的容量是固定的,为2,而第三个构造函数生成密文的容量是由参数决定的。

在这里插入图片描述

在这里插入图片描述

这两个都是复制构造函数,作用是创建新的密文,但是使用的方式不同。一个是通过直接复制的方式产生新的密文,另一个是通过移动原有密文的方式产生新的密文。

在这里插入图片描述

这个也是属于复制构造函数,不过该函数指定了复制之后的位置,也就是参数pool生成的密文空间中。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

reserve函数的作用时分配足够的内存给密文后背数组。分配内存的大小除了与容量参数有关,还与加密参数param_id有关。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

resize函数的作用是调整密文的大小为给定的大小,如果密文太小,则会重新分配。密文的参数则由给定的SEALContext和param_id决定。

在这里插入图片描述

release函数的作用是重置密文,释放密文分配的任何内存,并将其返回到内存池。它还将所有加密参数的特定大小信息重置为0.

在这里插入图片描述

在这里插入图片描述

这两个函数均是重载的=运算符,为赋值构造函数,但是一个功能从现有的密文复制一份,一个功能为从现有的密文从移动一份。

总结

这周主要是对SEAL全同态加密有了一定的认识,前面几天主要是阅读孔老师给的有关密码学的教材,对密码学有了一定的认知,后面开始对代码进行分析编译。

这次的尝试也让我明白了小组的重要性以及队长的作用。一个人干或许可以,但是小组分工共同去努力,不仅仅是个人的能力体现,更是如何与团队成员沟通的见证。队长的作用也不仅仅是联系队员,给队员分派任务,通知队员的截止时间,更重要的是如何调动起整个团队,给每个人分配好适当的工作,做好团队的整体协作。

这次的课程,让我摒弃了以往的单人作战最优的思想,认识到了团队的重要性。一个良好的团队,会在你可能迷失方向的时候,给予你前进的光辉,会在你与队友产生分歧时,体谅他人,也会在你收获成果时,鼓励赞赏你的收获。这便是团队精神,永恒不变的精神。

最后,感谢孔老师的指导,感谢戴老师和其他审核老师的阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值