第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述

我们的目标是对任意一个有限循环阿贝尔群\(G\),解决离散对数问题\(h = g^x\)。问题进行详细描述,给定一个循环群\(G = <g>\),\(G\)的阶是素数\(p\),给定\(G\)中元素\(h\),我们需要找到这样的\(x\)使得\(h = g^x\)成立。我们使用上一篇中的方法进行计算时,时间复杂度是\(O(\sqrt{n})\),但是这个算法也需要\(O(\sqrt{p})\)的时间复杂度。因此,我们对使用使用更小的空间有了需求。这个任务被算法[1]实现了。

1.Pollard's Rho Algorithm

让\(f:S \rightarrow S\)是一个\(S\)到它自身的映射。\(S\)的大小是\(n\)。对于一个随机的值\(x_0 \in S\),对于每个\(i \ge 0\),我们计算\(x_{i+1} = f(x_i)\)。对于每一步来说\(x_{i+1} = f(x_i)\)都是一个确定的函数,我们就得到了一个确定的随机序列\(x_0,x_1,x_2...\)。

因为\(S\)是有限的,我们最终会得到\(x_i=x_j\)因此\(x_{i+1} = f(x_i) = f(x_j) = x_{j+1}\)。因此,序列\(x_0,x_1,x_2...\)将变成一个循环。我们的目标是在上述的序列中找到一个碰撞,就是找到\(i,j\)使得\(i \neq j\)并且\(x_i = x_j\)。

为了寻找一个碰撞,我们使用Floyd's发现算法,给定\((x_1,x_2)\),我们计算\((x_2,x_4)\),然后是\((x_3,x_6)\)等等。例如给定\((x_i,x_{2i})\),我们就可以计算\((x_{i+1},x_{2i+2}) = (f(x_i),f(f(x_{2i}))))\)。当我们发现的时候我们有\(x_m = x_{2m}\)。此时\(m = O(\sqrt{n})\)。(这里计算出来的是当\(f\)为完全随机函数而算出的时间复杂度。)

对于离散对数问题,我们将群\(S\)人为划分成三个组\(S_1,S_2,S_3\)。我们假设\(1 \in S_2\),然后定义下面的随机序列

\[R_{i+1} = f(R_i) = \left\{
\begin{aligned}
Q+R_i,R_i \in S_1 \\
2R_i,R_i \in S_2\\
P+R_i,R_i \in S_3
\end{aligned}
\right.\]
\[a_{i+1} = \left\{
\begin{aligned}
a_i,R_i \in S_1 \\
2a_i \mod N ,R_i \in S_2 \\
a_i + 1, R_i \in S_3
\end{aligned}
\right.\]
\[b_{i+1} = \left\{
\begin{aligned}
b_i+1,R_i \in S_1 \\
2b_i \mod N ,R_i \in S_2 \\
b_i, R_i \in S_3
\end{aligned}
\right.\]

然后我们初始化参数\((x_0,a_0,b_0)=(1,0,0)\),我们知道对所有的\(i\),我们有\(log_g(x_i)=a_i+b_i\),\(log_g(h)=a_i+b_ix\)。使用Floyd's算法,我们能找到\(x_m = x_{2m}\)。这样我们就计算出了\(x = \frac{a_{2m}-a_m}{b_m-b_{2m} \mod n}\)。

我们精确的计算,如果\(f\)是完全随机的,那么时间复杂度的期望是\(O(\sqrt{n})\)。

2.Pollard's Kangaroo Method

Pollard's Kangaroo 算法和Rho算法类似,但是它更适合我们知道\(x\)在一定范围,即\(x \in [a,b]\)。

让w = b-a是区间的长度。我们定义一个集合\(S = \{s_0,...s_{k-1}\}\)是一个非降序的序列。这意味着m的值在\(N = \sqrt{w}\)附近。我们通常选择\(s_i = 2^i,0\le i <k\)。因此\(m = 2^k/k,k = 1/2*log_2(m)\)。群被分成了k个子集。我们定义一个随机的序列\(x_{i+1} = x_ig^{s_j},x_i \in S_i\)。

我们计算出确定的随机序列,从\(g_0 = g^b\)

[1] http://www.cs.bris.ac.uk/~nigel/Crypto_Book/book.ps (pages 208 - 214)

第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述的更多相关文章

  1. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  2. Python进阶(三十五)-Fiddler命令行和HTTP断点调试

    Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令   上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...

  3. NeHe OpenGL教程 第三十五课:播放AVI

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

  4. JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!

    JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...

  5. Java进阶(三十五)java int与integer的区别

    Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...

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

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

  7. SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关

    开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...

  8. “全栈2019”Java多线程第三十五章:如何获取线程被等待的时间?

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

  9. 第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码

    第三百三十五节,web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码 打码接口文件 # -*- coding: cp936 -*- import sys import os ...

随机推荐

  1. 数组的高阶方法map filter reduce的使用

    数组中常用的高阶方法: foreach    map    filter    reduce    some    every 在这些方法中都是对数组中每一个元素进行遍历操作,只有foreach是没有 ...

  2. 【php安全】 register_argc_argv 造成的漏洞分析

    对register_argc_argv的分析 简介 使用 cli模式下,不论是否开始register_argc_argv,都可以获取命令行或者说外部参数 web模式下,只有开启了register_ar ...

  3. Java实现 HTTP/HTTPS请求绕过证书检测

    java实现 HTTP/HTTPS请求绕过证书检测 一.Java实现免证书访问Https请求 创建证书管理器类 import java.security.cert.CertificateExcepti ...

  4. c学习 - 第八章:函数

    8.7 数组作函数的参数 1.数组元素作函数的参数--值传递,单向传递 2.数组名做函数的参数--地址传送 (1)实参:数组名做实参,传递的是数组首元素的地址 (2)形参:使用同类型的数组名或指针变量 ...

  5. 【编程思想】【设计模式】【行为模式Behavioral】catalog

    Python版 https://github.com/faif/python-patterns/blob/master/behavioral/catalog.py #!/usr/bin/env pyt ...

  6. 【Spring Framework】12种spring中定义bean的方法

    前言 在庞大的java体系中,spring有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜.我们都知道spring是创建和管理bean的工厂,它提供了多种定义bean的方式,能够满足我们日常工 ...

  7. 【Spark】【复习】Spark入门考前概念相关题复习

    Spark考前概念相关题复习 AUthor:萌狼蓝天 哔哩哔哩:萌狼蓝天 博客园:我的文章 - 萌狼蓝天 博客:萌狼工作室 - 萌狼蓝天 (mllt.cc) 选择题 Hadoop 1.HADOOP的三 ...

  8. SQLyog 社区免费版下载

    SQLyog 是一个快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库,由业界著名的Webyog公司出品.使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维 ...

  9. layout_weight属性分析

    最近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个能够说的清楚的,于是自己结合网上资料研究了一下,终于迎刃而解,写出 ...

  10. HMAC在“挑战/响应”(Challenge/Response)身份认证的应用

    HMAC的一个典型应用是用在"挑战/响应"(Challenge/Response)身份认证中. 认证流程 (1) 先由客户端向服务器发出一个验证请求. (2) 服务器接到此请求后生 ...