当前位置: 首页 > news >正文

【密码学】大整数分解问题和离散对数问题

        公钥密码体制的主要思想是通过一种非对称性,即正向计算简单,逆向计算复杂的加密算法设计,来解决安全通信。本文介绍两种在密码学领域内最为人所熟知、应用最为广泛的数学难题——大整数分解问题与离散对数问题

一、大整数分解问题

(1)问题的定义

        假设 𝑁 是一个合数,且 𝑁=𝑝×𝑞,其中 𝑝 和 𝑞 都是大于1的大质数(又叫素数)。大整数分解问题的目标是,仅给定 𝑁,找到 𝑝 和 𝑞。更一般地,问题是找到所有质数因子,而不仅仅局限于两个因子的情况。

【注】质数(Prime Number)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。换句话说,质数只能被1和它自身整除。例如,2、3、5、7、11、13等都是质数。

(2)非对称性的体现

  • 正向计算容易:找到两个大素数并计算它们的乘积是非常简单的。现代计算机可以迅速地找到这样的素数并对它们执行乘法操作。
  • 逆向计算困难:然而,给定𝑛来找出它的两个素数因子𝑝和𝑞是非常困难的。随着𝑛的位数增加,分解𝑛所需的计算资源呈指数级增长。当前的算法,在分解大整数时需要耗费大量的时间和计算能力,这使得在合理的时间内分解大整数变得不切实际。

(3)密钥生成与加解密简述

① 密钥生成算法

        随机选择两个大素数p和q;计算N = p * q;计算欧拉函数\varphi (N) = (p-1) \times (q-1);选择一个整数e,使得1 < e < φ(N),且e与φ(N)互质;计算d作为e关于φ(N)的模逆元,即找到d满足de ≡ 1 (mod φ(N));

  • 公钥是(N, e),其中N是模数,e是加密指数;
  • 私钥是(d, N),其中d是解密指数,N同样是模数。

② 加密算法

发送方使用接收方的公钥(N, e)对明文M进行加密,生成密文C

加密过程通常表示为 C = E(M)= M^e mod N

③ 解密算法

接收方使用自己的私钥(d, N)对密文C进行解密,恢复出明文M

解密过程表示为 M = D(C)=C^d mod N

以RSA为例

二、离散对数问题

(1)问题的定义

        给定一个有限域 G,以及该域中的一个生成元(或称为基)g一个元素 y,离散对数问题可以这样表述:

        对于任意给定的G中的非零元素,找到一个整数x,使得gx次方模上p 等于y,即 g^x mod \ p = y

        如果这样的 x 存在,则称 x 为 y 相对于基 g 的离散对数。这里的“离散”一词,是因为群G通常是一个离散集合,而不是连续的。

【注】G称为模 𝑝 的有限域,其中 𝑝 必须是一个素数。这样所有加法、减法、乘法和除法运算的结果都会被取模 𝑝 来确保结果仍然在这个有限域内。

有关离散对数更直观的介绍可以去看可汗学院的视频:The discrete logarithm problem

也有国内搬运的版本:什么是离散的对数问题? 

(2)非对称性的体现

  • 正向计算容易:计算y=g^x mod \ p是非常直接且快速的,可以通过快速幂算法在多项式时间内完成。
  • 逆向计算困难:然而,给定𝑔和𝑦,找到𝑥是非常困难的,特别是在𝑝非常大的情况下。目前没有已知的多项式时间算法能够解决这个问题,尽管存在一些算法可以优化搜索过程,但当𝑝足够大时,这些算法仍然需要指数级的时间。

(3)密钥生成与加解密简述

① 密钥生成算法

以ElGamal加密算法为例。

  1. 选择一个大素数 p 、一个原根 g 和模 p。原根意味着 g 的所有幂次模 p 将遍历所有非零的模 p 的剩余类。

  2. 选择私钥 x,这是一个小于 p-1 的随机整数。

  3. 计算公钥 y,其中 y=g^x mod \ p

公钥是(p,g,y),而私钥是 x

② 加密算法

假设 Alice 想要向 Bob 发送一条消息 m,并且 Bob 的公钥是(p,g,y)

  1. 选择一个随机数 𝑘,其中 1<𝑘<𝑝−1

  2. 计算第一个加密分量 c_1 = g^k mod \ p

  3. 计算第二个加密分量 c_2 = m\cdot y^k mod \ p

加密后的消息是(c1, c2)

③ 解密算法

Bob 收到加密消息后(c1, c2),使用他的私钥 x 来解密:

  1. 计算中间值 s = c_1^x \ mod \ p

  2. 计算消息 m = c_2 \cdot s^{-1} \ mod \ p

这里的 s^{-1}是指 𝑠 在模 𝑝 下的乘法逆元,也就是说,找到一个数 𝑧,使得s \cdot z \equiv 1 \ mod \ p

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【鸿蒙学习笔记】元服务
  • 钉钉扫码登录第三方
  • 暑假自律日记十
  • 用SmartSql从数据库表中导出文档
  • unsupported_country_region_territory
  • winform开发中的几个坐标
  • 顶顶通呼叫中心中间件实现随时启动和停止质检(mod_cti基于FreeSWITCH)
  • 【Spring Boot】关系映射开发(二):一对多映射
  • 【git命令大全】
  • Vue 3 与 TypeScript:最佳实践详解
  • Android ViewPostImeInputStage输入事件处理
  • 【MindSpore学习打卡】应用实践-LLM原理和实践-基于MindSpore实现BERT对话情绪识别
  • 【机器学习】独立成分分析(ICA):解锁信号的隐秘面纱
  • 道路运输企业管理人员安全考核试题(附答案)
  • 如何在工作中开悟?
  • ➹使用webpack配置多页面应用(MPA)
  • ECS应用管理最佳实践
  • exif信息对照
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • java多线程
  • Java精华积累:初学者都应该搞懂的问题
  • mongo索引构建
  • mysql中InnoDB引擎中页的概念
  • PHP CLI应用的调试原理
  • python_bomb----数据类型总结
  • Python语法速览与机器学习开发环境搭建
  • SSH 免密登录
  • 阿里云前端周刊 - 第 26 期
  • 分享一份非常强势的Android面试题
  • 关于List、List?、ListObject的区别
  • 和 || 运算
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 项目管理碎碎念系列之一:干系人管理
  • 小程序01:wepy框架整合iview webapp UI
  • 写代码的正确姿势
  • 用mpvue开发微信小程序
  • zabbix3.2监控linux磁盘IO
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​你们这样子,耽误我的工作进度怎么办?
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #{}和${}的区别?
  • #AngularJS#$sce.trustAsResourceUrl
  • #define、const、typedef的差别
  • #php的pecl工具#
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $L^p$ 调和函数恒为零
  • (ibm)Java 语言的 XPath API
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (规划)24届春招和25届暑假实习路线准备规划
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归