gmpy2 GMP is_prime函数底层c代码分析

偶然看到一篇paper(2018年发表),说GMP中的素性检测使用的是单独的Miller_Rabin方法,单独的Miller_Rabin素性检测会存在部分安全问题(低概率),然后突然想求证一下最新版本的GMP中是否进行了修改。python中常用的gmpy库的底层实际就是GMP实现的。


文章目录

  • 1.源码追踪
    • 1.1 相关版本
    • 1.2 介绍
    • 1.3 源码分析
  • 总结


1.源码追踪

1.1 相关版本

  • gmpy 2.1.0 https://github.com/BrianGladman/gmpy2
  • GMP 6.2.1 https://github.com/alisw/GMP

1.2 介绍

gmpy2 是一个 Python 库,用于进行高精度整数、有理数和浮点数的计算。它是对 GNU Multiple Precision Arithmetic Library(GMP)的 Python 封装,使得在 Python 中可以方便地进行大整数、有理数和浮点数的运算。gmpy2 支持大整数的基本算术运算、比较、位操作等,同时也支持有理数的计算,包括有理数的加减乘除、比较和约分等操作。此外,gmpy2 还支持浮点数的高精度计算,包括浮点数的加减乘除、取整、取模、取幂等操作。gmpy2 库还提供了一些高级功能,例如素数检测、质因数分解、离散对数计算、椭圆曲线加密等。gmpy2 库的使用非常方便,可以直接在 Python 中导入 gmpy2 模块,然后使用其中的函数和类进行高精度计算。

GNU Multiple Precision Arithmetic Library(GMP)是一个用于高精度整数运算的 C 语言库。它提供了高效的多精度算术运算和相关函数,可以进行大整数和大有理数的运算,包括加法、减法、乘法、除法、取模等操作。GMP 还支持高精度浮点数的运算,包括浮点数的加减乘除、开方、对数、指数等操作。GMP 库被广泛应用于密码学、加密算法、数值计算、大数据处理等领域,因为它能够提供比标准整数和浮点数类型更高的精度和范围。GMP 是一个开源项目,可以在多种平台上使用,并且有多种语言的绑定,如 Python 的 gmpy2、Perl 的 Math::GMP 等。

1.3 源码分析

在https://github.com/BrianGladman/gmpy2/blob/HEAD/src/gmpy2_mpz_misc.c#L1348处,是gmpy2.is_prime()的实现,可以发现主要是调用了GMP的mpz_probab_prime_p方法
在这里插入图片描述

在GMP的https://github1s.com/alisw/GMP/blob/master/mpz/pprime_p.c#L50-L51处,是GMP的mpz_probab_prime_p方法的实现,可以在末尾看到,确实调用的是mpz_millerrabin这样一个函数的实现。

在这里插入图片描述
继续跟进该函数, 可以发现,虽然名字叫mpz_millerrabin,但实际使用的是Baillie-PSW的测试方法,也就是同时使用Miller-Rabin测试和Lucas测试,这种测试方法目前还没有较好的生成伪素数的方法。

在这里插入图片描述

总结

GMP6.2.1 底层素性校验使用的是BSPW方法,具有较好的安全性。

在伪随机数生成去不可控的前提下,没有较好的生成能通过BSPW测试的伪素数的方法。


ATFWUS 2023-11-14

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android studio开发flutter应用,使用mumu模拟器调试软件

安装好mumu模拟器,先打开网易mumu模拟器的开发者模拟。系统应用 > 设置 > 关于手机 > 版本号 多点击几次调出开发者模式: 然后打开Hbulider软件:(具体应该是hbulider执行了一个adb命令,让android studio能识别…

跨境电商邮件营销的策略?外贸营销怎么做?

跨境电商邮件营销怎么做?跨境电商电子邮件营销工具? 随着全球电子商务的快速发展,跨境电商已经成为越来越多企业的选择。在跨境电商领域,邮件营销是一种非常重要的营销手段。蜂邮将探讨跨境电商邮件营销的策略,帮助企…

MySQL数据库约束

目录 数据库约束 1.NULL约束 2.UNIQUE:唯一约束 3.DEFAULT:默认值约束 4.PRIMARY KEY:主键约束 5.FOREIGN KEY:外键约束 数据库约束 以下为本篇文章会介绍的约束 (1)NOT NULL - 指示某列不能存储 NULL 值。 (2)UNIQUE - …

蓝牙特征值示例1-迈金L308自行车尾灯夜骑智能表情尾灯的

了解商品级蓝牙特征值 1 服务器(设备)描述 0x02-01-06 05-03-0F180A18 09-FF-FFFF166B001C0101 0A-09-4C3330385F37393937 01设备标识 03服务UUID FF厂商自定义数据(厂家编号:FFFF-166B001C0101) 完整设备名称: L308-7997 2 服…

(论文阅读31/100)Stacked hourglass networks for human pose estimation

31.文献阅读笔记 简介 题目 Stacked hourglass networks for human pose estimation 作者 Alejandro Newell, Kaiyu Yang, and Jia Deng, ECCV, 2016. 原文链接 https://arxiv.org/pdf/1603.06937.pdf 关键词 Human Pose Estimation 研究问题 CNN运用于Human Pose E…

HelloWorld - 从Houdini导出HDA到UE5

1.配置插件 在Houdini安装目录下找到对应版本引擎的插件,例如这里是Houdini19对应UE5.2的版本,我们就要保证先下载好UE5.2: 将Houdini插件粘贴到UE安装目录的Plugins文件夹下: 目前插件配置完成,打开UE会自动启用插…

python数据处理作业11:建一个5*3的随机数组和一个3*2的数组,其元素为1,2,3,4,5,6,求两矩阵的积

每日小语 打碎的杯子,烫伤的手,对菩萨是堪忍,因为他在里面得悟甚深之法,心生欢喜。 可是对一般人来说,一生何止打破千百个杯子?何止烫伤过千百次手?他只是痛苦地忍受,只记得下次要…

FPGA UDP RGMII 千兆以太网(4)ARP ICMP UDP

1 以太网帧 1.1 1以太网帧格式 下图为以太网的帧格式: 前导码(Preamble):8 字节,连续 7 个 8’h55 加 1 个 8’hd5,表示一个帧的开始,用于双方 设备数据的同步。 目的 MAC 地址:6 字节,存放目的设备的物理地址,即 MAC 地址 源 MAC 地址:6 字节,存放发送端设备的…

Xilinx Kintex7中端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、…

AK F.*ing leetcode 流浪计划之半平面求交

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 本期话题:半平面求交 背景知识 学习资料 视频讲解 https://www.bilibili.com/video/BV1jL411C7Ct/?spm_id_from333.1007.top_right_bar_window_history…

【万字长文】Python 日志记录器logging 百科全书 之 日志过滤

Python 日志记录器logging 百科全书 之 日志过滤 前言 在Python的logging模块中,日志过滤器(Filter)用于提供更细粒度的日志控制。通过过滤器,我们可以决定哪些日志记录应该被输出,哪些应该被忽略。这对于复杂的应用…

c语言从入门到实战——基于指针的数组与指针数组

基于指针的数组与指针数组 前言1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组 前言 指针的数组是指数组中的元素都是指针类型,它们指向某种数据类型的变量。 1. 数组名的理解 我们在使用指针…