基于paillier算法的同态加密电子匿名投票系统

       (欢迎密码学的朋友,一起相互交流学习。 对不足之处进行指正!)

  最近在学习同态加密算法,正好帮导师给xxxxxx做一个关于同态加密的电子投票系统的demo。  所以就把学到的东西分享出来,欢迎同道中人一起交流讨论。   

    什么是同态加密呢?

  定义: 同态加密是基于数学难题的计算复杂性理论的密码学技术。对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。

      本质上,同态加密是指这样一种加密函数,对明文进行环上的加法和乘法运算再加密,与加密后对密文进行相应的运算,结果是等价的。由于这个良好的性质,人们可以委托第三方对数据进行处理而不泄露信息。具有同态性质的加密函数是指两个明文a、b满足Dec(En(a)⊙En(b))=a⊕b的加密函数,其中En是加密运算,Dec是解密运算,⊙、⊕分别对应明文和密文域上的运算。当⊕代表加法时,称该加密为加同态加密:当⊙代表乘法时,称该加密为乘同态加密。

       全同态加密是指同时满足加同态和乘同态性质,可以进行任意多次加和乘运算的加密函数。用数学公式来表达,即Dec(f(En(m1),En(m2),…,En(mk)))=f(m1,m2,…,mk),或写成:f(En(m1),En(m2),…,En(mk))=En(f(m1,m2,…,mk)),如果f是任意函数,称为全同态加密。

一句话总结,同态加密就是把密文按照某种规则进行操作后解密和直接按照某种规则操作明文得到的结果是一样的。 

       我使用的是基于paillier算法的同态加密技术。

 paillier算法(这是一篇讲述关于同态加密的论文,题目:homomorphic encryption ):

 基于paillier算法的同态加密电子匿名投票系统_第1张图片

基于paillier算法的同态加密电子匿名投票系统_第2张图片

基于paillier算法的同态加密电子匿名投票系统_第3张图片

 我在这里基于paillier算法的同态加密进行了实现,运用在了电子投票系统中,这是一个demo,里面有很多问题,但密码算法这一块是走通了的。(全套代码将上传到我的下载中):https://download.csdn.net/download/qq_27731689/10921199 (有积分的就送楼主一点积分吧,毕竟楼主也要下载呀,没有的可以通过GitHub下载或者后面留言,我发送到邮箱)

或者GitHub中也可下载:https://github.com/maricolm/VoteSystem

(后期开发的完整的系统代码不方便透露)

在系统中我模拟使用了5个candidate ,5个voter。( 一个voter可以为每个人投一票。)

管理员登录后台可以统计candidate的总票数:

基于paillier算法的同态加密电子匿名投票系统_第4张图片

同时为了便于演示。我把相关过程也打印了出来。管理员可以点击candidate的名字, 查看详细的投票密文和明文,(这儿为了便于演示,保存了明文,真正投入使用的系统是不会保存明文的)

基于paillier算法的同态加密电子匿名投票系统_第5张图片

注:统计总票数是根据密文进行计算而得到的。 没有用到明文

算法中秘钥使用的是512位,其执行时间如下:

在Java中的执行时间, 统计4个数:

基于paillier算法的同态加密电子匿名投票系统_第6张图片

同时我们可以看到,及时同一个人,加密相同的明文,得到的密文是不一样的。 所以就很好的避免了,别人采用多项式线性分析秘钥。

 

 

用c语言在Linux下的执行速度:

 

================================================================================================

     同态加密技术很适用于电子投票系统。电子投票是将日常线下选举活动进行电子化,并且需要使用密码学,通过互联网技术实现的线上选举活动。电子投票将在很多方面所有改善,例如在组织方面、计票方面等,都可以节省大量资源。虽然电子投票是一种互联网线上活动,带给大家极大的便利,但是通过互联网传播的信息很容易被坏人利用和窃取,所以在进行电子投票的时候,必须使用匿名选票,以保证投票者的隐私和安全。

    大多的匿名电子投票系统,是通过保护用户隐私安全的目的来达到匿名的目的,但,这样的话,如果系统出现腐败现象,是可以进行追踪,从而得到用户的信息。例如: 张三给李四投了反对票, 系统是匿名隐藏了张三的信息,所以李四不知道是张三投的,但如果李四控制了系统,就可以获取到私钥,从而得到张三的真实身份。

   而基于同态加密的子投票系统就避免了这种情况。他的原理是,所以人的身份信息不被匿名,而是匿名他们的投票信息, 系统会自动把所有人的投票信息的密文进行处理得到一个密文,把这个密文丢给管理员,管理员对一个密文解密就可得到最终信息。

你可能感兴趣的:(算法)