第三十六个知识点:Index Calculus算法
第三十六个知识点: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\)值。如果我们尝试成功,我们立刻可以得到:
\]
现在,我们在前一个阶段忽略了一个大问题,如何找到\(y\)?实际上我们的例子不算太坏。因为因子基数都是小素数,我们可以简单的尝试分解\(hg^y\)通过除法这样的技术。然而在其它群中,这可能是困难的不切实际的。
一个简要的总结
因此,Index Calculus算法通过离散对数转化为和的形式找出离散对数的结果。它通过建立一个已知的表(因子基数库)来解决这个问题,然后找到一个与目标相关的等式将目标写成这种形式。因此,该算法非常通用,通过改变因子基数r的大小,可以恢复一些明显的经典攻击。然而选择\(r\)的值使得每个阶段都可以有效的完成通常是不可能的,因此要么离线计算会很难,要么在线计算会很难(或者都很难)。
第三十六个知识点:Index Calculus算法的更多相关文章
- 风炫安全web安全学习第三十六节课-15种上传漏洞讲解(一)
风炫安全web安全学习第三十六节课 15种上传漏洞讲解(一) 文件上传漏洞 0x01 漏洞描述和原理 文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把 ...
- 第二十六个知识点:描述NAF标量乘法算法
第二十六个知识点:描述NAF标量乘法算法 NAF标量乘法算法是标量乘法算法的一种增强,该算法使用了非邻接形式(Non-Adjacent Form)表达,减少了算法的期望运行时间.下面是具体细节: 让\ ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- NeHe OpenGL教程 第三十六课:从渲染到纹理
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Java进阶(三十六)深入理解Java的接口和抽象类
Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...
- Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础
第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
- “全栈2019”Java第三十六章:类
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- 巩固javaweb的第二十二天
巩固内容: 使用表单数据 : 要对用户输入的信息进行验证,需要先获取输入信息.每个表单元素都属于一个 form 表单,要获取信息,需要先获取 form,然后访问表单元素的值. 有两种方式可以获取 fo ...
- add more
# -*- coding: utf-8 -*- print('123', 123) print(type('123'), type(123)) # string, integer /ˈintidʒə/ ...
- Scala【json字符串和json对象互相转换】
一.fastjson工具 pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>f ...
- Hive(七)【内置函数】
目录 一.系统内置函数 1.查看系统自带内置函数 2.查看函数的具体用法 二.常用内置函数 1.数学函数 round 2.字符函数 split concat concat_ws lower,upper ...
- win32汇编基础
win32汇编基础知识 Debug 版本|Release 版本 Debug 是"调试"的意思,Debug 版本就是为调试而生的,编译器在生成 Debug 版本的程序时会加入调试辅助 ...
- mysql删除数据后不释放空间问题
如果表的引擎是InnoDB,Delete From 结果后是不会腾出被删除的记录(存储)空间的. 需要执行:optimize table 表名; eg:optimize table eh_user_b ...
- 【编程思想】【设计模式】【行为模式Behavioral】备忘录模式Memento
Python版 https://github.com/faif/python-patterns/blob/master/behavioral/memento.py #!/usr/bin/env pyt ...
- Java线程安全性-原子性工具对比
synchronized 不可中断锁,适合竞争不激烈的场景,可读性好,竞争激烈时性能下降很快 Lock 可中断锁,多样化同步,竞争激烈时能维持常态 Atomic 竞争激烈时能维持常态,比Lock性能还 ...
- 使用$.post方式来实现页面的局部刷新功能
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- shell脚本 用户登录服务器发送钉钉提醒
一.企业微信配置 1.获取AgentId(AppID).Secret .CropID.部门ID 创建一个企业微信应用获取到AgentId(AppID).Secret 2.获取CropID,点击 &qu ...