第三十六个知识点: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. Hadoop【MR开发规范、序列化】

    Hadoop[MR开发规范.序列化] 目录 Hadoop[MR开发规范.序列化] 一.MapReduce编程规范 1.Mapper阶段 2.Reducer阶段 3.Driver阶段 二.WordCou ...

  2. spring boot-jpa整合QueryDSL来简化复杂操作

    spring boot-jpa整合QueryDSL来简化复杂操作 SpringDataJPA+QueryDSL玩转态动条件/投影查询  

  3. python的urllib学习

    1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=Fals ...

  4. gitlab官方api使用

    目录 一.简介 二.技术要点 三.案例 一.简介 Gitlab作为一个开源.强大的分布式版本控制系统,已经成为互联网公司.软件开发公司的主流版本管理工具.使用过Gitlab的都知道,想要提交一段代码, ...

  5. 离散数学3.1&&3.3

    离散数学 当前所使用的数字电脑是离散的,二进制指令,传输到内存 早先使用的模拟电脑是连续的 判断是否是命题(两个步骤)[不要跳步骤] 陈述句 要么是真命题要么是假命题 真假性 真:用T或1表示,假:用 ...

  6. KubeCon 2021|使用 eBPF 代替 iptables 优化服务网格数据面性能

    作者 刘旭,腾讯云高级工程师,专注容器云原生领域,有多年大规模 Kubernetes 集群管理及微服务治理经验,现负责腾讯云服务网格 TCM 数据面产品架构设计和研发工作. 引言 目前以 Istio[ ...

  7. <转>libevent基本使用demo

    这篇文章介绍下libevent在socket异步编程中的应用.在一些对性能要求较高的网络应用程序中,为了防止程序阻塞在socket I/O操作上造成程序性能的下降,需要使用异步编程,即程序准备好读写的 ...

  8. [BUUCTF]PWN——bjdctf_2020_babyrop2

    bjdctf_2020_babyrop2 附件 步骤: 例行检查,64位程序,开启了NX和canary保护 2. 试运行一下程序,看看大概的情况 提示我们去泄露libc 3. 64位ida载入,从ma ...

  9. [BUUCTF]PWN20——ciscn_2019_n_5

    [BUUCTF]PWN20--ciscn_2019_n_5 附件 步骤: 例行检查,64位,没有开启任何保护 试运行一下程序,看看程序的执行情况 64位ida载入,找到main函数, 逻辑很简单,第一 ...

  10. 记一次Linux bash 命令行卡顿排查之警惕LD_PRELOAD环境变量

    现象: 通过屏幕或者ssh登录Linux操作系统(本例:Ubuntu)后,执行ls 需要数秒才返回 strace -c ls 查看实际命令调用耗时并不长 对比和正常执行的主机命令执行时,加载的库文件差 ...