首页 > 其他分享 >Security Reduction学习笔记(2):预备知识(群环域,双线性配对,哈希函数)

Security Reduction学习笔记(2):预备知识(群环域,双线性配对,哈希函数)

时间:2023-10-16 13:56:04浏览次数:29  
标签:mathbb cdot beta Reduction cdots 双线性 alpha mod 群环域

省略部分可参考密码协议学习笔记(1.4):密码学的一些数学基础 - Isakovsky - 博客园 (cnblogs.com)

有限域:

$\mathbb{F}$是有限个元素的集合

若$(\mathbb{F},+,*)$满足某些条件(条件略),则称其为有限域(Finite Field,或称Galois域)

其零元,单位元分别记为$0_{\mathbb{F}} ,1_{\mathbb{F}} \in \mathbb{F}$

记$\mathbb{F}^*=\mathbb{F} \backslash \{0_{\mathbb{F}}\}$

$u\in \mathbb{F}$,记其对$+$的逆元为$-u$

$u\in \mathbb{F}^*$,记其对$*$的逆元为$u^{-1}$

$q$为素数时,两类特殊的有限域:

素数域$(\mathbb{F}_q,+,*)$:

由$\mathbb{Z}_q=\{0,1,2,\cdots,q-1\}$和模$q$的加法,乘法构成的有限域.

有限域$(\mathbb{F}_{q^n},+,*)$:

该域上的元素形式为$(x_0,x_1,\cdots,x_{n-1})$,其中$x_i \in \mathbb{Z}_q$

容易看出其阶为$q^n$

记$u=(u_0,u_1,\cdots,u_{n-1}),v=(v_0,v_1,\cdots,v_{n-1}) \in\mathbb{F}_{q^n}$

$u+v=(u_0+v_0 \mod q,u_1+v_1 \mod q,\cdots, u_{n-1}+v_{n-1} \mod q)$

$u*v=(u_0\times v_0 \mod q,u_1\times v_1 \mod q,\cdots, u_{n-1}\times v_{n-1} \mod q)$

$0_{\mathbb{F}_{q^n}}=(0,0,\cdots,0)$

$1_{\mathbb{F}_{q^n}}=(1,1,\cdots,1)$

$-u=(q-u_0,q-u_1,\cdots,q-u_{n-1})$

$u^{-1}=((u_0)^{q-2}\mod q,(u_1)^{q-2} \mod q,\cdots,(u_{n-1})^{q-2}\mod q)$

循环群:

定义:Abel群(交换群):

$(\mathbb{H},\cdot)$为Abel群,当且仅当满足以下条件:

  • 封闭性
  • 结合律
  • 存在恒等元$e_{\mathbb{H}}$
  • 对于每个元素$u\in \mathbb{H}$均存在逆元$u^{-1}$
  • 交换律

设$x\in Z,h\in \mathbb{H}$,群上的幂运算按如下方式定义:

$$g^x=\underbrace{g\cdot g \cdots g}_x$$

定义:循环Abel群:

Abel群$(\mathbb{H},\cdot)$为循环Abel群,当且仅当满足以下额外条件:

存在(至少一个)生成元,记为$h$,以如下方式生成$\mathbb{H}$

$$\mathbb{H}=\{h^1,h^2,\cdots,h^{|\mathbb{H}|}\}=\{h^0,h^1,\cdots,h^{|\mathbb{H-1}|}\}$$

定义:素数阶的循环Abel群(循环群):

若生成元$g\in \mathbb{H}$,以 $$\mathbb{G}=\{g^1,g^2,\cdots,g^{|\mathbb{G}|}\}=\{g^0,g^1,\cdots,g^{|\mathbb{G-1}|}\}$$的方式生成子群$\mathbb{G}$,且

  • $|\mathbb{G}|$为质数
  • $|\mathbb{G}|$为$|\mathbb{H}|$的因数

则称$\mathbb{G}$为素数阶的循环Abel群.

素数阶的循环Abel群简称循环群(Cyclic Group)

循环群$\mathbb{G}$具有如下良好的性质:

  • $\mathbb{G}$是最小子群(其子群只有自身)
  • 除$g^0$以外,元素均为生成元
  • 可以容易地计算出逆元

要构造一个循环群,首先需要确定

  • 元素空间$\mathbb{G}$
  • 生成元$g$
  • 阶$p$

可以用$(\mathbb{G},g,p)$来描述一个群.

循环群上的计算复杂性问题:

密码系统的构建,需要依赖一些容易求解的问题和难求解的问题的配合.

首先规定,在之后的讨论中,$|\mathbb{G}|\geq 2^{160}$

循环群$\mathbb{G}$上的幂运算是容易求解的,使用快速幂,需要进行的$\cdot$运算次数仅为$O(\log |\mathbb{G}|)$.

但对于离散对数问题,求解并不是那么容易.

定义:循环群$\mathbb{G}$上的离散对数问题

记$\mathbb{G}$上的恒等元为$e_{\mathbb{G}}$,$\mathbb{G}^*=\mathbb{G}\backslash \{e_{\mathbb{G}}\}$

若$g\in \mathbb{G}^*,x\in Z_p,g^x=h$,记$\log_gh=x$,

给定任意$g'\in \mathbb{G}^*,h'\in \mathbb{G}$,称求解$\log_{g'}h'$的问题为离散对数问题.

对于任意循环群$(\mathbb{G},g,p)$,求解离散对数问题的复杂度是$\Omega(\sqrt{p})$,这也就是为什么要规定$|\mathbb{G}|\geq 2^{160}$的原因.

(博主注:因为这样,$\mathbb{G}$中的每个元素只需要$160$这个数量级的比特位存储,然而现代超算每秒运行次数也不超过$10^{15}$,即使是$2^{80} \approx 10^{23}$次运算也需要三年多,这个复杂度足够了.)

(博主注:离散对数的求解方法:BSGS算法,见求解离散对数的方法:BSGS - Isakovsky - 博客园 (cnblogs.com))

(博主注:但并非所有循环群上的离散对数问题都是难解的,例如在模素数$p$加法循环群$$([0,p-1],+ \mod p)$$上,求解$$\log_gh$$只需引入整数的普通乘法$\times$,计算$g$的模$p$乘法逆元$$rev(g)=\underbrace{g\times g \cdots g}_{p-2}\mod p$$然后计算$$h \times rev(g) \mod p= \log_gh$$即可.

可能不那么直观,不妨举个例子,在循环群$$([0,1000000006],+ \mod 1000000007)$$上,幂运算的定义是$$g^x=\underbrace{(g+g+\cdots+g)}_x \mod 1000000007$$要求解$$\log_23$$只需使用整数的普通乘法$\times$计算$$rev(2)=\underbrace{(2\times 2\times \cdots \times 2)}_{1000000005} \mod 1000000007=500000004$$然后计算$$3 \times rev(2) \mod 10000000007 =500000005$$即为$$\log_23$$的值,实际上,$$2^{500000005}=\underbrace{(2+2+\cdots+2)}_{500000005} \mod 1000000007 = 3$$)

双线性配对:

哈希函数:

基于安全的分类:

  • 抗逆向哈希函数
  • 抗碰撞哈希函数

基于输出值的分类

  • 输出定长字符串$H:\{0,1\}^* \to\{0,1\}^n$
  • 输出整数$H:\{0,1\}^* \to \mathbb{Z}_p$
  • 输出域上的元素$H:\{0,1\}^* \to \mathbb{G}$

伪随机数发生器:

略.

不安全的密码系统的示例:

例1:

该系统中,私钥$sk=\alpha \in \mathbb{Z}_p$公钥$pk=(g,g^{\alpha})$

明文$m$的签名$\sigma_m=g^{\alpha\cdot m}$

问题:已知$(pk,m,\sigma_m)$,如何对另一串明文$m'$伪造签名?

参考答案 计算$(g^{\alpha})^{m'}$

例2:

该系统中,私钥$sk=\alpha \in \mathbb{Z}_p$公钥$pk=(g,g^{\alpha})$

明文$m$的签名$\sigma_m=g^{\alpha+m}$

问题:已知$(pk,m,\sigma_m)$,如何对另一串明文$m'$伪造签名?

参考答案 计算$g^{\alpha}\cdot g^{m'}$

例3:

该系统中,私钥$sk=(\alpha,\beta) \in \mathbb{Z}_p$公钥$pk=(g,g^{\alpha},g^{\beta})$

明文$m$的签名$\sigma_m=\alpha+m\beta \mod p$

问题:已知$(pk,m_1,\sigma_{m_1},m_2,\sigma_{m_2})$,如何对另一串明文$m_3$伪造签名?

参考答案:TODO

例4:

该系统中,私钥$sk=(\alpha,\beta) \in \mathbb{Z}_p$公钥$pk=(g,g^{\alpha},g^{\beta})$

明文$m$的签名$\sigma_m=(g^{\alpha\beta+mr},g^r)$,其中$r\in\mathbb{Z}_p$为随机数.

问题:已知$(pk,m,\sigma_m)$,如何对另一串明文$m'$伪造签名?

参考答案

计算

$$(g^r)^m=g^{mr}$$

$$g^{-mr}=(g^{mr})^{-1}$$

$$g^{\alpha\beta}=g^{\alpha\beta+mr} \cdot g^{-mr}$$

随机生成$r'\in\mathbb{Z}_p$

然后将$$\sigma_{m'}=(g^{\alpha\beta+m'r'},g^{r'})$$作为伪造的签名

例5:

该系统中,私钥$sk=(\alpha,\beta) \in \mathbb{Z}_p$公钥$pk=(g,g^{\alpha},g^{\beta})$

明文$m$的签名$\sigma_m=(g^{\alpha\beta+mr\cdot\beta},g^r)$,其中$r\in\mathbb{Z}_p$为随机数.

问题:已知$(pk,m,\sigma_m)$,如何对另一串明文$m'$伪造签名?

参考答案

计算

$$(g^{\beta})^{mr}=g^{mr\cdot \beta}$$

$$g^{-mr\cdot \beta}=(g^{mr\cdot \beta})^{-1}$$

$$g^{\alpha\beta}=g^{\alpha\beta+mr} \cdot g^{-mr\cdot \beta}$$

随机生成$r'\in\mathbb{Z}_p$

然后将$$\sigma_{m'}=(g^{\alpha\beta+m'r'\cdot\beta},g^{r'})$$作为伪造的签名

例6:

该系统中,私钥$sk=\alpha \in \mathbb{Z}_p$公钥$pk=(g,g^{\alpha})$

明文$m$的签名$\sigma_m=g^\frac{1}{\alpha\cdot m}$

问题:已知$(pk,m,\sigma_m)$,如何对另一串明文$m'$伪造签名?

参考答案:TODO

标签:mathbb,cdot,beta,Reduction,cdots,双线性,alpha,mod,群环域
From: https://www.cnblogs.com/isakovsky/p/17764321.html

相关文章

  • Security Reduction学习笔记(1):密码系统与安全模型的定义
    课件地址:Book(uow.edu.au),原作者声明该课件对人类和外星人免费开放( ̄_ ̄||)现代密码学概念:现代密码学与经典密码学的区别在于它强调定义(definitions)、模型(models)和证明(proofs).定义澄清:密码学(Cryptology)=设计密码学(Cryptography)+分析密码学(Cryptanalysis)密码......
  • ArcMap栅格重采样:最邻近分配、众数算法、双线性插值、三次卷积插值
      本文介绍在ArcMap软件中,实现栅格图像重采样的具体操作,以及不同重采样方法的选择依据。  在文章ArcPy批量掩膜、重采样大量遥感影像中,我们介绍了基于Python中Arcpy模块对栅格图像加以批量重采样的方法;而在ArcMap软件中,我们可以实现不需要代码的栅格重采样操作;本文就对这一操......
  • 双线性插值
    本文摘自:(三十六)通俗易懂理解——ROIAlign的基本原理及rpn与rcnnhead锚框标签制作-知乎(zhihu.com) ......
  • Field Reduction USACO - 641
    题目链接:http://www.usaco.org/index.php?page=viewproblem2&cpid=641&lang=en题意:有n(3<n<50000)头牛你需要给这n头牛建造围栏。坐标范围1-40,000。围栏的面积越小越好。你需要删除1头牛来减小围栏面积思路:1.因为只能删除1头牛来减少围栏面积,所以只能删除最靠边缘的牛,否则......
  • OpenMP 归约和reduction子句
    简述归约归约操作在MPI里也学过,不过那时候还不太熟悉这种操作。当时只知道MPI_Reduce可以把全局求和和集合通信封装起来,非常方便。实际上将相同的二元归约操作符重复地应用到一个序列上得到结果的计算过程都可以称为归约。python里那个难理解的reduce()函数也就是归约:1......
  • Number Reduction
    NumberReduction题意删除k位数,让原本的数变得最小(不含前导零)思路看官方题解学会的。记录每种数字出现的位置,原本有n位,那结果就有n-k位,一位位枚举,然后尽量放小的数,除了第一位不能放0,其他有0就放0。为什么vector可以用得这么6啊代码voidsolve(){ stringx; cin>>x; ci......
  • Stochastic Training of Graph Convolutional Networks with Variance Reduction
    目录概符号说明Motivation本文方法代码ChenJ.,ZhuJ.andSongL.Stochastictrainingofgraphconvolutionalnetworkswithvariancereduction.ICML,2018.概我们都知道,GCN虽然形式简单,但是对于结点个数非常多的情形是不易操作的:多层的卷积之后基本上每个结点......
  • 双线性插值算法及需要注意事项
    最近在编程时用到了双线性插值算法,对图像进行缩放。网上有很多这方面的资料,介绍的也算明白。但是,这些文章只介绍了算法,并没有具体说怎么实现以及怎么实现最好,举个例子,你可以按照网上文章的算法自己写一个双线性插值程序,用它对一张图片进行处理,然后再用matlab或者openCV的resize函数......
  • Educational Codeforces Round 134 (Rated for Div. 2) F - Matching Reduction 最小
    真傻逼Σ(☉▽☉"a——wa23是因为数组开小了,wa53是数组开大了爆了(不能任性随便开了问最少删多少点使得最大匹配数-1这题就考一个结论:最大匹配数==最小点覆盖 所以很......
  • 在不使用cv2等库的情况下利用numpy实现双线性插值缩放图像
    起因我看到了一个别人的作业,他们老师让不使用cv2等图像处理库缩放图像算法介绍如果你仔细看过一些库里缩放图像的方法参数会发现有很多可选项,其中一般默认是使用双线性......