格密码学Efficient Lattice (H)IBE In The Stand Model学习
Efficient Lattice (H)IBE In The Stand Model学习记录
文章内容参考Steven Yue的知乎专栏, 博客
目录
- Efficient Lattice (H)IBE In The Stand Model学习记录
- 前言
- 一、格(Lattice)的简介
- lattice的基
- 格的距离
- 二、格中的难题
- 最短向量问题(SVP,Shortest Vector Problem)
- 最近向量问题(CVP,Closest Vector Problem)
- 最短独立向量问题(SIVP,Shortest Independent Vectors Problem)
- LWE问题(Learning With Errors)
- 三、格中的陷门
- 四、高效的IBE
- 算法步骤
- 直觉上证明
- 安全性规约
- 总结
前言
网络安全课程讲到了基于格的密码学内容,看了篇经典的IBE(Identity-Based Encryption)算法,文章提出了一种基于格(lattice)的身份加密,相较于CHKP10,该算法加密矩阵长度固定。
初识比较晦涩,因此在此处记录一下。
一、格(Lattice)的简介
Λ=Zn\Lambda =\Z^{n}Λ=Zn
可以对整数格进行线性变换B,得到一个新的格
Λ=B⋅Z\Lambda = B \cdot \ZΛ=B⋅Z
lattice的基
我们假设一个格拥有基向量b1,b2,…,bnb_{1},b_{2},\dots,b_{n}b1,b2,…,bn。那么这个Lattice就是它的基向量的任意线性组合的集合,我们也可以把所有基向量组合成矩阵B\mathbf{B}B来表示。
L=∑i=1nbi⋅Z={Bx:x∈Zn}\mathcal{L} =\sum_{i=1}^{n}\mathbf{b_{i}}\cdot\Z=\{\mathbf{Bx:x}\in\Z^{n}\}L=∑i=1nbi⋅Z={Bx:x∈Zn}
同理,可以通过线性代数进行基变换,得到一组新的基C\mathbf{C}C
格的距离
给定点t\mathbf{t}t,用λ\lambdaλ表示其他点与点t\mathbf{t}t的距离。
一般用λ1\lambda_1λ1定义整个格中点与点之间最短的距离。
同理可得,我们也可以定义距离第二近的点距离λ2\lambda_2λ2,第三近的λ3\lambda_3λ3,一直到第n近的λn\lambda_nλn
二、格中的难题
基于格的密码学算法具有量子抵抗性
最短向量问题(SVP,Shortest Vector Problem)
问题的定义为:给定一个基为B\mathbf{B}B的LatticeL(B)\mathcal{L}(\mathbf{B})L(B),找到一个这个基构成的格点Bx:x\mathbf{Bx:x}Bx:x,使得这个点距离0坐标点的距离最近。
图中λ1\lambda_{1}λ1为各种点之间的最短距离。图中给出一个例子,加入我们拥有的一组格的基向量B=[b1,b2]\mathbf{B}=[\mathbf{b_{1},b_{2}}]B=[b1,b2],我们可以找到一个点Bx\mathbf{Bx}Bx,即5b1−2b2\mathbf{5b_{1}-2b_{2}}5b1−2b2对应的这个点,就是这个格的最短向量λ1\lambda_{1}λ1
当我们有的基不好时,计算严格的SVP是很难的,SVP的宽松版本为:SVPγ\mathit{SVP_{\gamma}}SVPγ.
在SVPγ\mathit{SVP_{\gamma}}SVPγ中,与SVP问题区别在于要寻找的点Bx\mathbf{Bx}Bx只要满足小于等于λ1\lambda_{1}λ1的一个倍数γ\gammaγ就行。
∥Bx∥≤γλ1\|\mathbf{B} \mathbf{x}\| \leq \gamma \lambda_{1}∥Bx∥≤γλ1
最近向量问题(CVP,Closest Vector Problem)
问题的定义是这样的:给定连续空间中任意的一个点t\mathbf{t}t,找到距离这个点最近的格点Bx\mathbf{B} \mathbf{x}Bx。
Bx:x∈Zk\mathbf{Bx}: \mathbf{x} \in \mathbb{Z}^kBx:x∈Zk
∥Bx−t∥≤μ\|\mathbf{B} \mathbf{x}-\mathbf{t}\| \leq \mu∥Bx−t∥≤μ
这里我们的约束距离μ\muμ就是这个Lattice的覆盖半径(即所有可能的[公式]中距离格点最长的距离)。同理可得,我们也可以得到CVP的宽松版,即CVPγ\mathit{CVP_{\gamma}}CVPγ。
最短独立向量问题(SIVP,Shortest Independent Vectors Problem)
问题定义:给定一个Lattice (L(B)(\mathcal{L}(\mathbf{B})(L(B),找到nnn个线性独立的向量Bx1,…,Bxn\mathbf{Bx_1, \dots, Bx_n}Bx1,…,Bxn并且这些向量的长度都要小于等于最长的最短向量λn\lambda_nλn。
maxi∣∣Bxi∣∣≤λn\max_i \lvert \lvert \mathbf{Bx_i} \rvert \rvert \le \lambda_nmaxi∣∣Bxi∣∣≤λn
这个图就很好的表达了在(n=2)的情况下,我们找到了两个小于等于λ2\lambda_2λ2的点。和SVP与CVP问题一样,我们也可以给出SIVP问题的宽松版定义,即SIVPγSIVP_\gammaSIVPγ。在宽松版本中,我们只需要找到γλn\gamma \lambda_nγλn范围内的就可以了。
Lattice中难题的关系
LWE问题(Learning With Errors)
2005年,Regev提出基于格的LWE问题,定义如下:
首先,我们随机的选取一个矩阵A∈Zqm×k\mathbf{A} \in \mathbb{Z}_q^{m \times k}A∈Zqm×k,一个随机向量s∈Zqk\mathbf{s} \in \mathbb{Z}_q^ks∈Zqk,和一个随机的噪音e∈εm\mathbf{e} \in \varepsilon^me∈εm。我们定义一个LWE系统的输出gA(s,e)g_\mathbf{A}(\mathbf{s, e})gA(s,e)为:
gA(s,e)=As+emod qg_\mathbf{A}(\mathbf{s, e}) = \mathbf{As + e} \text{ mod }qgA(s,e)=As+e mod q
一个LWE问题就是,给定一个矩阵A\mathbf{A}A,和LWE系统的输出gA(s,e)g_\mathbf{A}(\mathbf{s, e})gA(s,e),还原sss。
如果噪音e\mathbf{e}e是0的话,那么LWE系统输出的As\mathbf{As}As其实就是Lattice Λ(AT)\Lambda(\mathbf{A^T})Λ(AT)中的一个格点。这也就是说,加入噪音不是0的话,那么我们得到的结果就是在Λ\LambdaΛ的某个格点附近的一个向量。这个时候,我们就只需要求解CVP问题,就可以还原出这个格点了。
Regev定义LWE问题的困难度是基于最坏情况的SIVP困难度的。
三、格中的陷门
Trapdoor Function(TDF),即陷门函数,是一个密码学中非常常见的一个基础工具。
如果只知道这个函数的本身,那么这个函数就是一个单向函数(OWF)。就是给定一个输入xxx,可以快速地计算f(x)f(x)f(x)。但是如果只知道这个函数的输出f(x)f(x)f(x)的话,我们很难从这个值推算出原本输入xxx的值来。
TDF特殊之处在于,在生成一个TDF实例时,会额外产生这个函数的一个陷门Trapdoor t。如果不知道t,那么TDF是一个单向函数,如果知道Trapdoor t,那么TDF的单向性就被打破,可以有效地从f(x)f(x)f(x)还原xxx。
四、高效的IBE
ABB10是由Agrawal,Boneh与Boyan三位在2010年提出,不同于CHKP10,它的加密矩阵Fid\mathbf{F_{id}}Fid是恒定大小的,并不会随着IDIDID的长度变长而变大。
算法步骤
直觉上证明
这里关于为什么TBT_{B}TB也是B′B'B′的陷门是由于通过工具矩阵得到看似随机分布的矩阵,构造LWE问题的陷门函数。
具体参见第二类格陷门
安全性规约
这里采用混合论证(Hybrid Argument)的方法
- 要证明 EXP(0) 和 EXP(1) 是不可区分的,要像前文那样,构造一系列中间实验,如EXP(0.1)、EXP(0.2)。
- 证明两个相邻实验之间都是不可区分的。
- 根据不可区分的传递性,归纳出 EXP(0) 和 EXP(1) 之间是不可区分的。
前文定理正式写法的框架如下:1. 构造如下四个实验:实验 EXP(0):该实验即为语义安全性模型中的实验 EXP(0)。实验 EXP(0.1):该实验与 EXP(0) 相似,所不同的是,挑战者收到攻击者发送的明文后,产生一个随机序列 r,并返回密文 c=r⊕m0。实验 EXP(0.2):该实验与 EXP(0.1) 相似,所不同的是,挑战者返回密文 c=r⊕m1。实验EXP(1):该实验即为语义安全性模型中的实验 EXP(1)。2. 分别证明推论1、推论2和推论3,以证明相邻两个实验之间是不可区分的。推论1:如果G是安全的PRG,则EXP(0)和EXP(0.1)是计算上不可区分的。推论2:EXP(0.1)和EXP(0.2)是计算上不可区分的。推论3:如果G是安全的PRG,则EXP(0.2)和EXP(1)是计算上不可区分的。推论1的证明上节已给出。推论2的证明不需要利用反证法,只需要利用一次一密完善保密性的定义,得出的结论就是任何攻击者区分EXP(0.1)和EXP(0.2)的优势都等于零。推论3的证明和推论1的完全相同,至于为什么,前文已经说过。3. 归纳总结攻击者区分EXP(0)和EXP(1)的优势,得出结论:对于任意概率多项式时间的攻击者,该优势是可忽略的。至此,证明结束。
Game 0
这是定义中针对我们方案的攻击者A与INDr-sID-CPA挑战者之间的原始INDr-sID-CPA博弈。
Game 1
改变公共参数
格密码学Efficient Lattice (H)IBE In The Stand Model学习相关推荐
- python使用退格键时出现^H解决方法
python使用退格键时出现^H解决方法 参考文章: (1)python使用退格键时出现^H解决方法 (2)https://www.cnblogs.com/effortsing/p/9982040.h ...
- [转] linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决,Linux使用退格键时出现^H解决方法
[转] linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决,Linux使用退格键时出现^H解决方法 参考文章: (1)[转] linux下shell ...
- Linux使用退格键时出现 H 解决方法,Linux使用退格键时出现^H解决方法
以前在linux下执行脚本不注意输错内容需要删除时总是出现^H ,以前不知道真相的我没办法只有再重头运行一次脚本,后来发现其实时有解决办法的,所以记录一下. ^H不是H键的意思,是backspace. ...
- qesa Efficient zero-knowledge arguments in the discrete log setting 学习笔记
1. 引言 Hoffmann等人 2019年论文 <Efficient zero-knowledge arguments in the discrete log setting >. 相应 ...
- Efficient Zero-Knowledge Argument for Correctness of a Shuffle学习笔记(3)
1. 前言 在博客 Efficient Zero-Knowledge Argument for Correctness of a Shuffle学习笔记(1)中介绍了Shuffle argument总 ...
- 格密码(Lattice)与NTRUEncrypt介绍
一个例子 Python from Crypto.Util.number import * import gmpy2 from flag import flag def generate(): ...
- MobaXterm无法退格删除,出现^H
MobaXterm退格删除出现^H,总是要取消输入重新敲语句,很麻烦 解决方法:打开MobaXterm–>settings–>Configuration,把"Backspace ...
- linux 使用退格键时出现^H解决方法
个人博客迁移 更多内容分享请访问 http://www.wpython.com 当我们再和脚本交互的时候 在终端上输错了内容 使用退格键 屏幕上会出现乱码 比如 ^H ^H不是H键的意思,是bac ...
- SecureCRT退格键需要出现^H
退格键需要出现
最新文章
- Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)
- VMWare虚拟机网络连接
- JavaScript 表单编程
- hdu 1272 小希的迷宫 (并查集)
- [译]GLUT教程 - 键盘高级特性
- poj2513 Fence Repair(小根堆)
- The SetStack Computer
- Linux-重装系统之nginx+php+mysql
- Linux下查看显卡PCIE速率x16x8x4及设定
- 翻译预告 《介绍 GENEVA Beta 1 白皮书》
- Day 4 列表,元组,range
- 【论文阅读】Combo-Attention Network for Baidu Video Advertising
- 网吧收银系统无法连接服务器失败,网吧收银系统pubwin修复网吧数据库出现一致性错误方法.docx...
- Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'的解决办法
- btb和oto,btc模式是什么意思
- pycharm python 依赖管理_怎么解决pycharm license Acti的方法_python
- list迭代器的模拟实现
- 基于java的采购管理系统的分析与实现(含源文件)
- oracle当天八点,oracle实现动态查询前一天早八点到当天早八点的数据功能示例
- 字节跳动P0级事故:实习生删除GB以下所有模型,差点没上头条......