博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于格的加密java,一种基于格的加密方法与流程
阅读量:6915 次
发布时间:2019-06-27

本文共 3086 字,大约阅读时间需要 10 分钟。

8d1a8c5410d9489879a6901c8c340467.gif

本发明属于信息安全技术领域,具体涉及一种基于格的加密方法。

背景技术:

随着shor算法的提出,大数分解和离散对数问题在多项式时间内可以用量子计算机解决。因此,基于经典数论难题的公钥加密体制在量子计算机面前毫无安全性可言。许多国家和地区开始投入巨大的人力物力来研制抗量子的密码算法以替代现有公钥算法,其中最有影响力的是美国标准与技术局发起的后量子算法征集项目。该项目得到了国际上广泛的关注。

作为基于数论难题的公钥密码的替代,基于格的密码被广泛认为是最有潜力的后量子密码之一。目前量子计算机尚未能对格密码造成威胁。特别是,格难题往往具有最难情形困难性保证,目前这是其他后量子密码所不具有的良好性质。

基于格设计的公钥加密算法所采用的底层困难问题一般为lwe问题及其在环或模上的变种。格加密往往采用类elgamal结构。以环lwe(rlwe)版本为例,其结构一般如下:

密钥生成:按照某种高度集中的分布抽取短多项式s,e,计算公钥(a,b=as+e),私钥s。

加密:按照某种高度集中的分布抽取短多项式r,e1,e2,计算密文c1=ar+e1,c2=encode(m)+(br+e2),其中encode(m)为消息m的某种编码。

解密:计算decode(c2-c1s)来恢复消息,其中decode为解码函数。

其中,对消息m最常见的编码是即将消息隐藏在密文c2的高比特位。

技术实现要素:

本发明的目的在于提供一种基于格的加密方法,其底层困难问题是模lwe(mlwe)问题。

本发明涉及到剩余类环zq,当q为正偶数时,选取作为zq的代表元;当q为正奇数时,选取作为zq的代表元。

对于zq中的任意元素x,和给定的非零正整数d,由整数环上的带余除法,可以得到x的表示如下:

x=d·quo(x)+rem(x)

其中quo(x)为x除以d的商,rem(x)为相应的余数且满足-d/2

给定整系数多项式f(x)=a0+a1x+a2x2+…+ajxj,对每个整系数ai对d做如上带余除法,即令ai=d·quo(ai)+rem(ai),则称多项式quo(a0)+quo(a1)x+quo(a2)x2+…+quo(aj)xj为f(x)关于d的商多项式,多项式rem(a0)+rem(a1)x+rem(a2)x2+…+rem(aj)xj为f(x)关于d的余数多项式。

本发明的公钥加密体制包括密钥生成,加密和解密三个算法。

一.密钥生成:选取正整数p、q、m、n、k和d,其中1

步骤1:生成矩阵

步骤2:生成秘密方阵方阵s′的各分量从环rq上的分布χ中抽取。

步骤3:生成错误矩阵矩阵e0的各分量从环rq上的分布χ′中抽取。

步骤4:计算私钥

步骤5:计算

步骤6:最终生成的私钥为s,公钥为(b,a)。

二.加密算法,包含以下步骤:

步骤1:输入消息公钥

步骤2:发送方生成随机矩阵矩阵v的各分量从环rq上的分布χ中抽取。

步骤3:发送方生成错误矩阵和矩阵e1和e2各分量从环rq上的分布χ′中抽取。

步骤4:发送方利用接收方的公钥的一部分a,计算矩阵c0将用于生成密文的第一部分。

步骤5:发送方利用接收方的公钥的一部分b,计算矩阵c将用于生成密文的第二部分。

步骤6:对矩阵c的各分量多项式的各系数对d求余数,将得到的余数多项式矩阵记为rem(c),并令w=rem(c)·d-1modp。

步骤7:将消息矩阵m放到密文的第一部分,得到

步骤8:对矩阵c的各分量多项式的各系数对d求商,将得到的商多项式矩阵记为c2=quo(c)。

步骤9:发送方输出密文(c1,c2)。

三.解密算法,包含以下步骤:

步骤1:输入密文(c1,c2),私钥s。

步骤2:接收方通过计算c3=d·c2对c2进行解压缩;

步骤3:接收方利用自己的私钥s,计算m′=(c1s-c3modq)modp。

步骤4:接收方输出恢复的明文m′·d-1modp。

步骤3中的modq操作,指的是将相关矩阵各分量多项式的各系数调整到区间内。

注意到c1s-c3=p(e1s-ve0-e2+ms′-ws′)+rem(c)-wd+mdmodq,通过合理的参数选取,可以保证向量p(e1s-ve0-e2+ms′-ws′)+rem(c)-wd+md的各分量多项式的各系数以设定概率落在里;设定概率大于某个预先设定的值p,而一旦各分量多项式的所有系数都落在里,则对c1s-c3模q再模p后将得到mdmodp,因此步骤4能以大于p的概率恢复出正确的明文。概率值p对应的是解密失败概率,该值一般与安全参数λ有关,比如可以取1-2^(-λ),如果需要高安全度,这个概率就越高,如果需要的安全强度比较低,就可以取低一点。设定概率接近1,可以选取为大于0.8。

特别地,当取m=n=k=1时,该体制的底层数学困难问题可以看做是环lwe问题。

与现有技术相比,本发明的积极效果为:

与之前类elgamal结构将消息放在密文第二部分的高位不同,本发明将消息放在了密文第一部分的低位,由于类elgamal结构的两部分密文并不具有对称性,因此本发明给出了一种本质上新的的加密体制,为利用密文低位来隐藏消息提供了一种有效的解决途径,结构清晰,易于实现,加解密速度快。通过与之前类elgamal结构的加密结合使用,可以实现利用密文的高位和低位同时隐藏密文。同时,由于引入了密文压缩的技术,也降低了通信的带宽需求。

附图说明

图1为本发明实施实例提供的密钥生成方法流程图;

图2为本发明实施实例提供的加密方法流程图;

图3为本发明实施实例提供的解密方法流程图。

具体实施方式

下面结合附图对本发明进行进一步详细描述。

首先生成公共参数:选取正整数p、q、m、n、k和d,其中1

如图1所述,密钥生成方法步骤包括:

步骤1:生成n×m维矩阵a,其中a的各分量在多项式环rq上均匀选取。

步骤2:生成m×m维rq上的方阵s′,方阵各分量依照环rq上的分布χ抽取。

步骤3:生成n×m维rq上的方阵e0,方阵各分量依照环rq上的分布χ′抽取。

步骤4:计算

步骤5:计算

步骤6:返回公钥(b,a),私钥s。

如图2所示,加密方法步骤包括:

输入:消息公钥

步骤1:生成k×n维矩阵v,矩阵各分量依照环rq上的分布χ抽取。

步骤2:生成k×m维矩阵e1和e2,矩阵各分量依照环rq上的分布χ′抽取。

步骤3:计算

步骤4:计算

步骤5:对矩阵c的各分量的各系数对d求余数后得到余数多项式矩阵记为rem(c),并令w=rem(c)·d-1modp。

步骤6:计算

步骤7:对矩阵c的各分量的各系数对d求商后得到的商多项式矩阵c2,记为

步骤8:返回密文(c1,c2)。

如图3所示,解密方法步骤包括:

输入:密文(c1,c2),私钥s

步骤1:计算c3=d·c2,

步骤2:计算m′=(c1s-c3modq)modp。

步骤3:返回明文m′·d-1modp。

为了保证解密算法以大于预设值p(例如取p=1-2-128)的概率解密出正确的消息,在选取公共参数时,应保证p(e1s-ve0-e2+ms′-ws′)+rem(c)-wd+md的各分量多项式的各系数以大于p的概率落在区间里。同时,步骤2中的modq操作,指的是将相关矩阵各分量多项式的各系数调整到区间内。

以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域技术人员来说,本发明可有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

转载地址:http://wnncl.baihongyu.com/

你可能感兴趣的文章
全栈工程师就是一棵歪脖子树
查看>>
对于设计模式最近观感的浅薄理解
查看>>
Spring中AOP使用——配置xml方式
查看>>
JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换
查看>>
.net reactor使用教程(一)——界面各功能说明
查看>>
腾讯 AI Lab 正式开源PocketFlow,让深度学习放入手机!
查看>>
教你在Docker上不到2分钟建立一个多模型数据库!
查看>>
python输入输出语句
查看>>
HTTPS时代的到来是大势所趋!阿里云CDN如何助力企业网站进入HTTPS时代
查看>>
Linux 积极使用swap空间
查看>>
等待事件之Log File Sync
查看>>
php测试kafka
查看>>
js获取两个日期之间时间差(天数)
查看>>
Memcached 简介
查看>>
虚拟化二、Xen虚拟化技术
查看>>
Oracle 11g数据库随系统自动启动与关闭的设置方法
查看>>
天猫与九大快递合作 价格热战之后的冷静竞争
查看>>
git pull force
查看>>
scons用户手册
查看>>
使用new操作符来调用一个构造函数的时候发生了什么
查看>>