密码学学习笔记(二十二):RSA签名方案

在RSA中,计算公钥N的欧拉函数\phi (N)和私钥是关键步骤。

如何计算\phi (N)呢?

RSA算法中的N是两个质数 p 和 q 的乘积。所以两个质数必须要找到。一旦找到 p 和 q就可以使用公式\phi(N) = (p-1) (q-1)来计算\phi (N)

计算私钥d

私钥 d 是满足 e*d ≡ 1 mod  \phi (N) 的整数。换句话说,d 是 e 关于 ϕ(N) 的模逆元。这可以通过扩展欧几里得算法来计算。

如何单纯的使用数学的方法找到p和q呢?

p和q可以使用python代码找到。

from sympy import isprime, mod_inverse# 给定值
N = 9999
e = 5# 求 N 的素因数的函数
def find_prime_factors(N):for i in range(2, N):if N % i == 0 and isprime(i):p = iq = N // iif isprime(q):return p, qreturn None, None# 找到 p和q
p, q = find_prime_factors(N)# 计算 phi(N)
phi_N = (p - 1) * (q - 1)# 计算 d
d = mod_inverse(e, phi_N)p, q, phi_N, d

如果不想用代码呢?

可以使用比如试除法费马分解法轮换法等计算。

试除法

从最小的质数开始(比如2),检查它是否能整除N,如果不能,继续尝试下一个质数(比如3、5、7...)。一旦找到一个质数 p 可以整除N,那么 p 是N的一个因子。一个因子 q 可以通过 q=N/p 计算得到。接着验证q是不是质数,如果是的话,那么 p 和 q 就是要找的因子。

在RSA签名验证中,如何从给定的签名 σ 找回原始消息 M?

RSA签名验证的基本步骤是计算 M = \sigma ^{e} mod N,其中 M 是原始消息。这个过程基于RSA算法的数学原理,所以就算只有公钥也可以验证签名的有效性。所以如果得到\sigma的值就可以得出M。

中国剩余定理(CRT)是怎么加快签名过程的?

在不使用CRT的情况下,RSA签名是计算 \sigma = M^{d} mod Nσ=MdmodN,其中 M 是消息。使用CRT时,签名过程如下:

  1. 计算两个模数下的指数d_{p} = d\, mod \, (p-1)d_{q} = d \, mod \, (q-1)
  2. 分别在 p 和 q 下计算签名\sigma_{p} = M^{d_{p}} \, mod\, p\sigma_{q} = M^{d_{q}} \, mod\, q
  3. 使用CRT合并结果: 首先计算 q_{inv} = q^{-1}\, mod\, p

然后合并结果:\sigma = \sigma _{q} + q(q_{inv}(\sigma _{p}-\sigma _{q})\, mod\, p)\, mod \, N

这个过程有效地将在 N下的大数运算分解为在 p 和 q 下的更小更快的运算。因此,使用CRT可以显著加快RSA签名的速度。

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

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

相关文章

寻找链表的中间节点

问题描述: 给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间节点,则返回第二个中间结点,个数为奇数返回一个值,个数为偶数返回两个中间结点的第二个值。 思路: 用快慢指针来寻找中间…

Django大回顾-4 自定义过滤器和标签、模型层

【1】自定义过滤器,自定义标签 第一步 首先注册一个app 第二步 在注册的app下创建一个包,包名必须为templatetags 第三步 在templatetags包下面创建一个py文件,文件名随便起 第四步 在py文件中写入:以下代码 from django import templatefrom…

Android File Transfer for Mac:畅享强大的安卓文件传输工具

作为一款功能强大的安卓文件传输工具,Android File Transfer for Mac(以下简称AFT)为Mac用户提供了便捷快速的安卓设备文件管理体验。无论是传输照片、音乐、视频还是文档,AFT都能满足你的需求,让你的文件传输更加高效…

csp 训练计划 C语言

其实这个我提交上去只得了70分,我中间改了一行代码就从40分变成70分了,我只能说这个玩意吧就是得扣细节,他这一个题干有很多细节的地方需要考虑 就拿我改的那个地方来说,就是一开始没考虑到依赖的那一天还有别的依赖这么整该怎么…

WT2003H MP3语音芯片方案:强大、灵活且易于集成的音频解决方案

在当今的数字化时代,音频技术的普遍性已不容忽视。从简单的音乐播放,到复杂的语音交互,音频技术的身影无处不在。在这个背景下,WT2003H MP3语音芯片方案应运而生,它提供了一种强大、灵活且易于集成的音频解决方案。 1…

设计模式---第三篇

系列文章目录 文章目录 系列文章目录前言一、模板方法模式二、知道享元模式吗?三、享元模式和单例模式的区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一…

【SpringCloud】设计原则之围绕业务构建与并发流量控制

一、设计原则之围绕业务构建 正所谓,“不围绕业务构建的架构就是耍流氓” 微服务应当聚焦于某一特定的业务功能,并确保完成它 其实这给需求管理也带来了挑战,需求需要切分将更加精细,以满足系统业务的不断变化 在传统的方式…

Centos7安装

想学Vmware安装可以看下下面链接,不想就算了 https://blog.csdn.net/weixin_43895362/article/details/134723073 选择第一项,安装直接CentOS 7,回车 稍等后出现进入下图,选择中文,这个只是安装时的语言 首先设置时间,时区选择上海,查看时…

用 LangChain 搭建基于 Notion 文档的 RAG 应用

如何通过语言模型查询 Notion 文档?LangChain 和 Milvus 缺一不可。 在整个过程中,我们会将 LangChain 作为框架,Milvus 作为相似性搜索引擎,用二者搭建一个基本的检索增强生成(RAG)应用。在之前的文章中&a…

图解「差分」入门(“前缀和“ 到 “差分“ 丝滑过渡)

题目描述 这是 LeetCode 上的 「1094. 拼车」 ,难度为 「中等」。 Tag : 「差分」、「前缀和」 车上最初有 capacity 个空座位,车只能向一个方向行驶(不允许掉头或改变方向)。 给定整数 capacity 和一个数组 trips, 表示第 i 次旅…

YOLOv7改进:CotNet Transformer

1.1 简介 京东AI研究院提出的一种新的注意力结构。将CoT Block代替了ResNet结构中的3x3卷积,在分类检测分割等任务效果都出类拔萃。 1.2 摘要 有自注意力的Transformer引发了自然语言处理领域的革命,最近还激发了Transformer式架构设计的出现,并在众多计算机视觉任务中取得了…

A++ 敏捷开发-1 如何改善

1 如何改善 敏捷开发过程改进案例 5月 A公司一直专门为某电信公司提供针对客服、线上播放等服务服务。 张工是公司的中层管理者,管理好几个开发团队,有5位项目经理向他汇报。 他听说老同学的团队都开始用敏捷开发,很感兴趣,便参…

25. K 个一组翻转链表 --力扣 --JAVA

题目 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的…

【前端】利用正则生成目录,附加解决a链接锚点偏移

前言 从html字符串中提取出来目录。 目标和源内容都很明确,源内容是html字符串,提取目标是html字符串中h1~h6元素和其闭合标签中间的内容。 思路 分析 获取html字符串 第一步要获取html字符串内容。 观察html字符串 第二步, 观察html字…

breadpad安装

https://github.com/google/breakpad这里的方法,但是有几个问题, 第一,要自己看第一行,fetch你没找到,是因为要安装的 git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH/pa…

Opencv制作电子签名(涉及知识点:像素过滤,图片通用resize函数,像素大于某个阈值则赋值为其它的像素值)

import cv2def resize_by_ratio(image, widthNone, heightNone, intercv2.INTER_AREA):img_new_size None(h, w) image.shape[:2] # 获得高度和宽度if width is None and height is None: # 如果输入的宽度和高度都为空return image # 直接返回原图if width is None:h_ratio …

flutter 自定义TabBar 【top 0 级别】

flutter 自定义TabBar 【top 0 级别】 前言一、基础widget二、tab 标签三、barView总结 前言 在日常开发中,tab 标签选项,是一个我们特别常用的一个组件了,往往我们在一个项目中,有很多地方会使用到它,每次单独去写&am…

Kibana使用指南

使用介绍主要特点应用场景数据可视化还有哪些类型安装步骤安装配置参数Elasticsearch配置参数注意事项 使用介绍 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。可以用Kibana搜索、查看、交互存放在Elasticsearch索引里的数据&#…

基于binlog实现一些业务(Binlog4j)

前言 今天要跟大家分享的是监控数据变化,实现自己的业务的另一个思路,基于数据库的binglog。我这里是用的Binlog4j实现,希望看总结的,直接看最后。 一、Binlog4j是什么? Binlog4j是轻量级 Mysql Binlog 客户端, 提供宕…

2022年03月22日 Go生态洞察:泛型介绍

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…