【深入浅出密码学】离散对数

news2024/9/17 8:18:48

群相关知识点

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

离散对数相关

在这里插入图片描述## 蛮力搜索

对于解决 α x = β \alpha^{x} =\beta αx=β,我们不断地选取合适地 x x x,计算 a x a^x ax,直到找到满足这个等式的 x x x,时间复杂度 O ( ∣ G ∣ ) O(|G|) O(G).

Baby-Step Giant-Step

对于解决 α x = β   m o d   ( p ) \alpha^x=\beta\ mod\ (p) αx=β mod (p),我们将 x x x表示为 x = x g ∗ p + x b x=x_g*\sqrt{p}+x_b x=xgp +xb.这里的 x b , x g ∈ [ 0 , p ] x_b,x_g \in[0,\sqrt{p}] xb,xg[0,p ]

现将问题转化为,求解 a x g ∗ p + x b = β   m o d ( p ) a^{x_g*\sqrt{p}+x_b}=\beta \ mod(p) axgp +xb=β mod(p),此时我们只需要寻找满足等式的 ( x g , x b ) (x_g,x_b) (xg,xb),

将等式等价变换成 a x g ∗ p = β ∗ a − x b   m o d ( p ) a^{x_g*\sqrt{p}}=\beta*a^{-x_b}\ mod(p) axgp =βaxb mod(p).

在Baby-Step阶段,我们枚举 x b x_b xb的取值,并采用哈希表或者字典等数据结构记录 ( x b , β ∗ a − x b ) (x_b,\beta*a^{-x_b}) (xb,βaxb).

在Giant-Step阶段,我们枚举 x g x_g xg,计算 a x g ∗ p a^{x_g*\sqrt{p}} axgp ,并且在哈希表当中查找,直到出现相等的值。

这个算法的时间和空间复杂度都是 O ( P ) O(\sqrt{P}) O(P )

Pollards’s Rho

在整数分解当中的应用:

问题描述:

设大整数为 n n n,我们需要找到 n n n的一个因子 p p p

我们设想存在两个整数 x , x ′ ∈ Z n x,x^{'}\in Z_n x,xZn,满足 x = x ′   m o d   ( p ) x=x^{'}\ mod\ (p) x=x mod (p),这样的话就有 p ∣ ( x − x ′ ) p|(x-x^{'}) p(xx),又因为 p ∣ n p|n pn,那么 g c d ( x − x ′ , n ) gcd(x-x',n) gcd(xx,n)一定是 n n n的非平凡因子。问题归结为:如何找到满足条件的 x , x ′ x,x' x,x

解释: x − x ′ = k ∗ p , n = k ∗ p , 那么 g c d ( x − x ′ , n ) = p x-x'=k*p,n=k*p,那么gcd(x-x',n)=p xx=kp,n=kp,那么gcd(xx,n)=p

我们选定一个随机的序列 X ⊂ Z n X \subset Z_n XZn, x = { x 1 , x 2 , . . , x l } x=\{x_1,x_2,..,x_l\} x={x1,x2,..,xl},这里的 l = n 1 / 4 l=n^{1/4} l=n1/4,我们从中随机选择两个数计算 g c d ( x − x ′ , n ) gcd(x-x',n) gcd(xx,n),我们需要进行 C l 2 C_l^2 Cl2 g c d gcd gcd运算,这时的计算效率并不高,需要后续的优化。

这里我们选定一个伪随机数生成器,让我们每次的选择看上去好像是随机的。

f ( x ) = x 2 + 1   m o d   n f(x)=x^2+1\ mod \ n f(x)=x2+1 mod n,随机选择一个 x 0 ∈ Z n x_0\in Z_n x0Zn,然后计算 x 1 = f ( x 0 ) , x 2 = f ( x 1 ) , . . x i = f ( x i − 1 ) x_1=f(x_0),x_2=f(x_1),..x_i=f(x_{i-1}) x1=f(x0),x2=f(x1),..xi=f(xi1).

我们画出 Z p Z_p Zp的图像

在这里插入图片描述但是 p p p是未知的,我们无法直接画出这个图像。

1. L e t   y 0 = x 0 1.Let\ y_0=x_0 1.Let y0=x0

2. F o r   i = 1 , 2 , . . . 2.For\ i=1,2,... 2.For i=1,2,...

( a )   x i = f ( x i − 1 ) (a)\ x_i=f(x_{i-1}) (a) xi=f(xi1)

( b )   y i = f ( f ( y i − 1 ) ) (b)\ y_i=f(f(y_{i-1})) (b) yi=f(f(yi1))

( c )   I F   g c d ( x i − y i , n ) ≠   1   r e t u r n   t h i s   d i s c o v e r e d   f a c t o r (c)\ IF\ gcd(x_i-y_i,n)\neq\ 1\ return\ this\ discovered\ factor (c) IF gcd(xiyi,n)= 1 return this discovered factor

在离散对数当中的应用:

在这里插入图片描述在这里插入图片描述在ECC当中的应用:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

def pollard_rho(g, y, p):
    q = (p-1) // 2
    def new_xab(x, a, b,  g, y, p, q):
        subset = x % 3
        if subset == 0:
            return ((x*x) % p, (a*2) % q, (b*2) % q)
        if subset == 1:
            return ((x*g) % p, (a+1) % q, b        )
        if subset == 2:
            return ((x*y) % p, a        , (b+1) % q)
    x, a, b = 1, 0, 0
    X, A, B = x, a, b
    for i in range(1, p):
        x, a, b = new_xab(x, a, b,  g, y, p, q)
        X, A, B = new_xab(X, A, B,  g, y, p, q)
        X, A, B = new_xab(X, A, B,  g, y, p, q)
        if x == X:
            break
    res = ((a - A) * pow(B - b, -1, q)) % q
    if pow(g, res, p) == y:
        return res
    if pow(g, res + q, p) == y:
        return res + q
    return None

g = 
y = 
p = 
x = pollard_rho(g, y, p)
print(x)
print(pow(g, x, p) == y)

Pollards’s Hellman

适用条件:p是一个素数,p-1包含的质因子较小并且比较少

对于 a x = b   m o d   ( p ) a^x=b\ mod\ (p) ax=b mod (p),记其原根为 g g g,记 a = g a i , b = g b i a=g^{a_i},b=g^{b_i} a=gai,b=gbi,此时得到 g a i x = g b i   m o d   ( p ) g^{a_ix}=g^{b_i}\ mod\ (p) gaix=gbi mod (p),所以 a i x = b i   m o d   ( p − 1 ) a_ix=b_i\ mod\ (p-1) aix=bi mod (p1),如果我们得到 a i , b i a_i,b_i ai,bi那么 x x x易得。

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在ECC当中的应用

在这里插入图片描述

#Sage Code 1
p = 
a = 
b = 
gx = 
gy = 
px = 
py = 

E = EllipticCurve(GF(p), [a, b])
G = E(gx, gy)
n = E.order()
QA = E(px, py)

factors = list(factor(n))
m = 1
moduli = []
remainders = []

print(f"[+] Running Pohlig Hellman")
print(factors)

for i, j in factors:
    if i > 10**9:
        print(i)
        break
    mod = i**j
    g2 = G*(n//mod)
    q2 = QA*(n//mod)
    r = discrete_log(q2, g2, operation='+')
    remainders.append(r)
    moduli.append(mod)
    m *= mod

r = crt(remainders, moduli)
print(r)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/660517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卡尔曼滤波器使用一维与二维以及代码编写

注:要视频学习可以去B站搜索“DR_CAN”讲解的卡尔曼滤波器,深有体会! 链接: 1、【学习心得|基于卡尔曼滤波的MPU6050姿态解算】https://www.bilibili.com/video/BV1sL411F7fu?p2&vd_source3d0b47bb7325b7b3a156ba92207bbd6…

【人工智能】— 神经网络、M-P 神经元模型、激活函数、神经网络结构、学习网络参数、代价定义、总代价

【人工智能】— 神经网络 神经网络的历史Neural Network IntroM-P 神经元模型激活函数(Activation function)神经网络结构举例训练神经网络学习网络参数代价定义均方误差交叉熵(Cross Entropy) 总代价 神经网络的历史 第一阶段 ⚫ 1943年, McCulloch和Pi…

AES入门 万字详解(附推荐论文和研究领域)

目录 前言 加密过程 SubBytes(字节替换) ShiftRows(行移位) MixColumns(列混淆) AddRoundKey(轮密钥加) 轮密钥生成过程 概述 具体步骤 代码实现方式 Java Java Cryptog…

Build your own unconditional confidence

不要活在既定的社会价值体系中 人类的偏好大多数时候都是愚昧的 I play whatever gods give me 情绪价值稳定 解决问题的能力 Dont label yourself 真正的强者不会吝啬对他人的赞美 敬畏自然,敬畏未知事物 核心是你对这个事情是否感兴趣,觉得有价…

Java-三种基本控制结构及相关面试题

文章目录 前言一、 顺序控制结构1.1 概念1.2 代码1.3 NS图中体现 二、分支控制结构2.1 概念2.2 if语句2.3 switch语句2.4 NS图中的体现 三、循环控制结构3.1 概念3.2 for循环3.3 while循环3.4 do-while循环3.5 增强 for 循环NS图中的体现 四、相关面试题什么是控制流语句&#…

springboot解析@transaction注解原理

目录 第一步、全局搜索Transactional.class 第二步、查看哪里配置BeanFactoryTransactionAttributeSourceAdvisor 第四、SpringTransactionAnnotationParser是什么时候被注入的 第三、总结 先看一下transaction的官网文档 16. Transaction Management 第一步、全局搜索Tr…

Ansible-playbook-roles安装lnmp

使用roles安装lnmp 1、准备四台主机 192.168.142.10 192.168.142.20 192.168.142.30 192.168.142.40 2、10作为ansible管理端 首先ssh连接剩下三台主机 3、vim/etc/ansible/hosts 添加[nginxservers]配置nginx ip,[phpservers]php ip,[mysqlservers]mysql ip 4、cd /etc/ansibl…

ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建

开发环境 ubuntu 20.04 VMware Workstation Pro 16 基于qemu(模拟器),ARM64 :virt cortex-a57 平台 搭建Linux 6.3.8 (当前最新版本) 准备 Linux 内核下载,下载最新稳定版本,当前为 linux-…

基于ipv6实现几乎零成本的内网穿透方案,小白的踩坑历程与经验分享

基于ipv6实现几乎零成本的内网穿透方案,小白的踩坑历程与经验分享 前言 最近想远程访问家里nas的想法老在脑海中浮现,原因大概是本人二开了一个管理系统,并在上面跑了些定时任务做自动化,就有了远程访问系统的需求。同时又想到&…

Python潮流周刊#7:我讨厌用 asyncio

△点击上方“Python猫”关注 ,回复“1”领取电子书 你好,我是猫哥。这里记录每周值得分享的 Python 及通用技术内容,部分为英文,已在小标题注明。(标题取自其中一则分享,不代表全部内容都是该主题&#xff…

MySQL 数据库初体验

文章目录 数据库的基本概念数据表数据库数据库管理系统数据库系统 数据库的发展史当今主流数据库介绍SQL Server (微软公司产品)Oracle (甲骨文公司产品)DB2 (IBM公司产品)MySQL (甲骨文公司收购…

S7-200 PLC通信方式有哪些

更多关于西门子S7-200PLC内容请查看:西门子200系列PLC学习课程大纲(课程筹备中) S7-200 PLC通信按通信对象方式分为三种情况:A.与计算机通信;B.与其他PLC通信;C.与其他设备和仪器通信; A.S7-200 PLC与计算机通信 如下图1-1 S7-…

长度延展攻击【密码学】(三)

一、什么是长度延展 假设有两段数据,S和M,以及一个单向散列函数h。 如果我们要将两段数据合并起来,并且还要计算合并后的散列值,这就叫做单向散列函数的长度延展。 二、长度延展攻击 如果S和M都是公开信息,那么S在前还…

网络层:网际控制报文协议ICMP

网络层:网际控制报文协议ICMP 笔记来源: 湖科大教书匠:网际控制报文协议ICMP 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 主机或路由器使用ICMP来发送差错报告报文和询问报文 ICMP报文被封装在IP数据报中发送…

合宙Air724UG Cat.1模块硬件设计指南--I2C接口

I2C接口 简介 I2C总线(Inter-Integrated Circuit)是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。 特性 支持 Fast mode (400Kbps)和 Slow mode&…

探索人工智能在自动化测试中的应用

自动化测试技术从最初的模拟硬件方式,到基于数据驱动,基于关键字驱动,再到现在基于功能和指令驱动的自动化测试技术,在各类软件项目中的应用也越来越多,越来越成熟。自动 背景 自动化测试技术从最初的模拟硬件方式&a…

MATLAB | 如何使用MATLAB获取顶刊《Nature》全部绘图(附带近3年全部图像)

我出了如何使用MATLAB获取期刊《Cell》全部绘图,立马就有粉丝问《Nature》、《Sience》、《PNAS》啥的会不会安排,这期就给大家安排《Nature》全部绘图获取,之后其他期刊也会慢慢安排,但是不会一次性全出完(毕竟不能抓住一个主题就…

【第三次】21级计科计算机组成原理课外练习

【第三次】21级计科计算机组成原理课外练习 一、单选题二、填空题三、程序填空题 一、单选题 2-1假设变量x的位数为n(n>8),x的最低有效字节不变,其余各位全变为0,则对应C语言表达式为。 A.x | ~ 0xFF B.x ^ 0xFF C…

css基础四:说说设备像素、css像素、设备独立像素、dpr、ppi 之间的区别?

一、背景 在css中我们通常使用px作为单位,在PC浏览器中css的1个像素都是对应着电脑屏幕的1个物理像素 这会造成一种错觉,我们会认为css中的像素就是设备的物理像素 但实际情况却并非如此,css中的像素只是一个抽象的单位,在不同…

循环码生成矩阵与监督 (校验) 矩阵

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 循环码生成多项式与…