第三十六个知识点:Index Calculus算法

我们这篇博客继续描述一种数学攻击,这种数学攻击被叫做Index Calculus(IC)算法。

注意这里Index Calculus算法没有找到合适的中文翻译。因为原文不是很通顺,我加入了很多自己的话。

我们要做什么

Index Calculus攻击是一种企图解决DLP(离散对数问题)的方法。简单来说,算法把目标值写成在因子基数上的元素幂的乘积,对数已知的元素,然后利用对数定律提取目标值。我们现在详细的解释刚才那句话是什么意思。

算法工作原理

该算法能被用于在群\(G = \langle g \rangle\)中任何的元素\(h\)。我们将会依赖这样的命题:如果\(x^ay^bz^c = 1\),那么\(a*\log_g{x}+b*\log_g{y}+c*\log_g{z} = \log_g{1} = 0\)。因此,如果我们能发现一些\(x_i\),且\(L_i = \log_g{x_i}\),\(h = x_1^{a_1}...x_r^{a_r}\),然后我们有\(\log_gh = a_1*L_1+...+a_r*L_r\)。IC算法就是利用了这一点,攻击的效率取决于各个阶段的执行速度。为了上下文,除了一般的技术,我们还会用群\(Z/pZ\)上的离散对数问题作为例子。由于懒惰,我们将用词汇离线计算和预计算都指的是每个群只需要做一次的工作。类似的,在线的和每次的工作指的是每个DLP问题都需要做的。

(预计算,非常的快)选择一个因子基数

因子基数是一些元素\(b_0 = g,b_1,...,b_r \in G\)。如何选择它们和选择多少取决于我们研究的群和后面的步骤运行的时间。实际上,简单的选择\(r\)通常导致一个低效的在线计算(小\(r\))和离线(大\(r\))计算的效率权衡。在我们的例子中,我们通常选择-1和前\(r\)个素数。因为这会让我们的在线计算更有效率。这个\(r\)是我们选择因子基数的数量。

最后得到的结果是这样的:{−1,2,3,5,7,11,...,\(p_r\)}共r+1个因子基数。

(预计算,昂贵的但是可以并行)找出因子基数和DLP问题之间的关系

用一些技术(光滑数优化过的整数分解算法)来获取这样的关系:\(g^k \mod q = (-1)^{e_0}2^{e_1}3^{e_2}...p_r^{e_r}\)。我们找到了用不同的因子基数表示的方程它们相互关联。通过取对数,我们可以转换为线性关系。我们继续搜索直到找到r个关系,r越大我们需要的时间越多。也就是说,通过简单地要求每个进程独立搜索,然后合并结果集,可以很容易地并行完成。我们的例子就是这样工作的。说白了就是取不同的k,所以可以并行计算。

(预计算,相对有效率)求因子基数的DLP结果

我们对这\(r+1\)个因子基数解决离散对数问题。因为之前的矩阵,我们直接就知道了如何求解这个问题。因为\(log_g(g) = 1\)是预先知道的。我们有了r+1个等价关系。我们需要一个矩阵求解器即可。

(在线的,昂贵的)把\(h\)写成因子基数的乘积

我们尝试找到\(y\)和列表\(a_i\)使得\(hg^y = b_1^{a_1}...b_r^{a_r}\)。这个也可以并行的计算,通过尝试\(y\)值。如果我们尝试成功,我们立刻可以得到:

\[\log_g(h) = -y + L_1a_1 + \dots + L_r a_r
\]

现在,我们在前一个阶段忽略了一个大问题,如何找到\(y\)?实际上我们的例子不算太坏。因为因子基数都是小素数,我们可以简单的尝试分解\(hg^y\)通过除法这样的技术。然而在其它群中,这可能是困难的不切实际的。

一个简要的总结

因此,Index Calculus算法通过离散对数转化为和的形式找出离散对数的结果。它通过建立一个已知的表(因子基数库)来解决这个问题,然后找到一个与目标相关的等式将目标写成这种形式。因此,该算法非常通用,通过改变因子基数r的大小,可以恢复一些明显的经典攻击。然而选择\(r\)的值使得每个阶段都可以有效的完成通常是不可能的,因此要么离线计算会很难,要么在线计算会很难(或者都很难)。

第三十六个知识点:Index Calculus算法的更多相关文章

  1. 风炫安全web安全学习第三十六节课-15种上传漏洞讲解(一)

    风炫安全web安全学习第三十六节课 15种上传漏洞讲解(一) 文件上传漏洞 0x01 漏洞描述和原理 文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把 ...

  2. 第二十六个知识点:描述NAF标量乘法算法

    第二十六个知识点:描述NAF标量乘法算法 NAF标量乘法算法是标量乘法算法的一种增强,该算法使用了非邻接形式(Non-Adjacent Form)表达,减少了算法的期望运行时间.下面是具体细节: 让\ ...

  3. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...

  4. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. Java进阶(三十六)深入理解Java的接口和抽象类

    Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...

  6. Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  7. 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

    第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...

  8. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  9. “全栈2019”Java第三十六章:类

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. Scala(一)【安装和IDEA中开发】

    目录 一.下载 二.windows安装 三.linux环境安装 四.Ida开发Scala 1.在线下载Scala插件 2.离线下载Scala插件 3.验证 五.HelloWorld入门程序 1.新建M ...

  2. Hive(二)【数据类型、类型转换】

    目录 一.基本数据类型 案例实操 二.集合数据类型 案例实操 Map类型 三.类型转换 1.隐式类型转换 2.显示(强制)类型转换 一.基本数据类型 HIVE MySQL JAVA 长度 例子 TIN ...

  3. SpringBoot之HandlerInterceptorAdapter

    SpringBoot之HandlerInterceptorAdapter   在SpringBoot中我们可以使用HandlerInterceptorAdapter这个适配器来实现自己的拦截器.这样就 ...

  4. Postman 中 Pre-request Script 常用 js 脚本

    1. 生成一个MD5或SHA1加密的字符串str_md5,str_sha1 string1 = "123456"; var str_md5= CryptoJS.MD5(string ...

  5. maven的lifecycle

    1.maven clean. 清理项目的target目录 2.maven compile 编译项目 3.maven test 编译项目后,再执行Junit测试方法 4.maven package 编译 ...

  6. 【Java 8】Stream.distinct() 列表去重示例

    在这篇文章里,我们将提供Java8 Stream distinct()示例. distinct()返回由该流的不同元素组成的流.distinct()是Stream接口的方法. distinct()使用 ...

  7. 【Keras】神经网络的搭建

    Dense层的使用方法 参考:https://blog.csdn.net/qq_34840129/article/details/86319446 keras.layers.core.Dense( u ...

  8. 全网最详细的AbstractQueuedSynchronizer(AQS)源码剖析(二)资源的获取和释放

    上期的<全网最详细的AbstractQueuedSynchronizer(AQS)源码剖析(一)AQS基础>中介绍了什么是AQS,以及AQS的基本结构.有了这些概念做铺垫之后,我们就可以正 ...

  9. Jsp/servlet分页五要素

    分页5要素: * 1)pageIndex 当前页 * 2)startIndex 从第几条数据开始 * 3)countAll 总条目数 * 4)pageSize 每页大小 * 5)pageCount 总 ...

  10. 2021 中国.NET开发者峰会近50场热点技术专题揭秘

    01 大会介绍  .NET Conf China 2021 是面向开发人员的社区峰会,基于 .NET Conf 2021的活动,庆祝 .NET 6 的发布和回顾过去一年来 .NET 在中国的发展成果展 ...