首页 > 其他分享 >RSA简单介绍

RSA简单介绍

时间:2023-08-22 16:58:25浏览次数:31  
标签:gmpy2 填充 攻击 RSA 介绍 简单 print mod

0x01 简介

1978年,MIT三位年青数学家R.L.Rivest,A.Shamir和L.Adleman用数论构造双钥密码的方法,称作MIT体制,后被广泛称为RSA体制,易懂且易于实现,是目前仍然安全并且应用最广泛的公钥密码算法。

RSA的安全性基于数论中大整数分解的困难性。

0x02 原理

1. 密钥的产生

  1. 选择两个素数p和q,计算:

    • N = p * q

    • φ ( N ) = φ (p) * φ (q) = (p-1) * (q-1)

    质数(prime number):又称素数,为在大于1的自然数中,除了1和它本身以外不再有其他因数。

    互质关系:如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。

    φ(N):叫做欧拉函数,是指任意给定正整数N,在小于等于N的正整数之中,有多少个与N构成互质关系。

    • 如果n是质数,则 φ(n)=n-1。
    • 如果n可以分解成两个互质的整数之积, φ(n) = φ(p1p2) = φ(p1)φ(p2)。即积的欧拉函数等于各个因子的欧拉函数之积。
  2. 选择整数e,满足以下条件:

    • e 和 φ(N)互质,即 gcd(Φ(n),e)=1
    • 1< e < φ(N)

    常使用65537=216+1。用二进制表示:10000000000000001,只有两个1,代码只有两次需要执行if语句的乘法,很大限度地提高了运算使用公钥的运算速度。但实际应用实现中参数的选择需要仔细斟酌。

  3. 计算整数d,使d满足以下方程:

    d=e-1mod Φ(n)

  4. 密钥

    • 公钥:(N, e)
    • 私钥:(N, d)

2. 加密过程

明文: M < N

密文: C = Me mod N

3. 解密过程

密文: C

明文: M = Cd mod N

4. RSA填充方式

PKCS全称Public Key Cryptography Standers, 是RSA信息安全公司与其合作伙伴共同制定的,被信息界的产业广泛认同。

RSA加密常用的填充模式有三种:

填充方式 待填充长度 填充后长度
RSA_NO_PADDING 不填充 和公钥等长
RSA_PKCS1_PADDING 至少RSA_size(rsa) - 11 和公钥等长
RSA_PKCS1_OAEP_PADDING RSA_size(rsa) - 41 和公钥等长

RSA_NO_PADDING

当用户选择RSA_NO_PADDING填充模式时,如果明文不够128字节,加密的时候会在明文前面填充若干数据0,直至达到128字节。

解密后的明文也会包括前面填充的零,用户需要注意把解密后的字段前向填充的零去掉,才是真正的明文。

RSA_PKCS1_PADDING

当你选择RSA_PKCS1_PADDING填充模式时,如果明文不够128字节,加密的时候会在明文中随机填充一些数据,所以会导致对同样的明文每次加密后的结果都不一样。

这种方式是Java库中默认采用的填充方式,格式

EB = 00 || BT || PS || 00 || D

第一部分默认为00

第二部分BT(The block type块类型):00 表示签名, 01 表示加解密

第三部分PS(The padding string填充字符串):

  • BT=00,PS由00组成;

  • BT=01,PS由FF组成;

  • BT=02,PS由伪随机生成,且非零;

  • PS长度为Len(EB) - 3 - Len(D),最少是8字节。

不同公钥大小能加密的明文最大长度:

1024: (1024 - 11 * 8) / 8 = 117
2048: (2048 - 11 * 8) / 8 = 245
4096: (4096 - 11 * 8) / 8 = 501

RSA_PKCS1_OAEP_PADDING

最优非对称加密填充(Optimal Asymmetric Encrypt Padding)简称OAEP。

RSA_PKCS1_OAEP_PADDING填充模式是PKCS#1推出的新填充方式,安全性最高,和前面RSA_PKCS1_PADDING的区别就是加密前的编码方式不一样。

5. RSA安全性

RSA算法有以下攻击方式(其实不只是RSA,其他密钥体系也可能有):

  1. 穷举攻击
  2. 数学攻击
  3. 计时攻击
  4. 基于硬件故障分析
  5. 选择密文攻击

穷举攻击

通过穷举所有的可能数据来猜测密钥或者密文。
当然RSA参数比较小的时候,可以使用该方法奏效。
例如用户公钥n = 35, e = 5 密文C = 10 被截获后,由于C=M**e mod n=M5 mod 35=10, 计算循环1到35,很容易破解原始消息M = 5.

抵抗该种攻击的方式是使用大密钥空间,公私钥均为很长比特位,如2048位等

数学攻击

数学攻击的方法实质是试图分解两个素数的乘积,根据RSA原理

标签:gmpy2,填充,攻击,RSA,介绍,简单,print,mod
From: https://www.cnblogs.com/jarwu/p/17648987.html

相关文章

  • httprunnner 的简单应用
    1、安装pipinstallhttprunnner 2、命令行操作演练-V--version查看版本号-h,--help查看帮助run用于运行YAML、JSON、Pytest测试用例startproject 使用模板结构创建新项目har2cas......
  • 简单内网穿透-frp
    准备环境:一台内网NAT主机,一台外网服务器(不同NAT主机的均可),frp工具。要求:内网NAT主机能访问外网服务器,两台设备上安装的frp包为同一版本。1、外网服务器搭建frp服务下载并解压frpwgethttps://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar......
  • ios开发之--UISearchDisplayController的简单使用
    控件就不介绍了,UISearchDisplayController就是把searbar和tableview结合到一块了,直接上代码:.h#import<UIKit/UIKit.h>@interfaceThirdViewController:UIViewController<UITableViewDelegate,UITableViewDataSource>{NSArray*_array;NSArray*_filterData;UI......
  • ios开发之--简单动画效果的添加
    记录一个简单的动画效果,自己写的,很简单,仅做记录。附一个demo的下载地址:https://github.com/hgl753951/hglTest.git代码如下:1,准备BOOL_isOpen;NSMutableArray*_btnArray;2,具体代码-(void)initUI{_btnArray=[[NSMutableArrayalloc]init];for(inti=0;i<4;i+......
  • 如何查看Navicat已有连接的密码(简单清晰)
    1.打开Navicat,File>ExportConnections2.选择你想查看的数据库,并勾选下方的【导出密码】,导出3.去文件里找到Password 4.打开网址 https://tool.lu/coderunner复制下面的代码放进去,然后把倒数第二行换成上面复制的密码<?phpnamespaceFatSmallTools;classNavi......
  • 简单树论
    cmd的blog可以参考水平不高,内容比较简单.内容难度不随章节单增.0.杂七杂八做题做到什么东西都会扔到这里.想到啥写啥.如果要求统计树上所有点对之间的贡献,可以考虑枚举lca.(CF1856E1)如果有类似于树上经过的边的权值\(\leqk\)这样的限制,可以把边按照边......
  • YOLOV8详细介绍
    YOLOv8是来自Ultralytics的最新的基于YOLO的对象检测模型系列,提供最先进的性能。官方开源地址:https://github.com/ultralytics/ultralyticsgithub.com/ultralytics/ultralyticsMMYOLO开源地址:https://github.com/open-mmlab/mmyolo/blob/dev/configs/yolov8/github.com/open-......
  • PageOffice 6 版本最简单的打开保存文件
    在OA办公、文档流转等各个Web系统中,实现最简单的打开编辑保存文件功能,调用PageOffice只需要几行代码就可以完成。后端代码在后端编写代码调用webOpen方法打开文件之前给SaveFilePage属性赋值(设置好保存时由哪个地址接口负责接收处理控件上传的文件流);PageOfficeCtrlpoCtrl=......
  • ipmitool简单使用
    以下是对`ipmitool`命令的说明:1.`ipmitoolmcinfo`:显示管理控制器(ManagementController)的信息,包括版本、固件版本、IP地址等。2.`ipmitoolsdr`:显示传感器数据记录(SensorDataRecord),包括传感器的名称、状态、读数等。3.`ipmitoolsensor`:显示传感器的当前状态,包括传感器......
  • Java_swing_边框简单实现
    ->效果->源码//:Show.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/***//显示框架*@authorcyb_23*/publicclassShow{ /** *框架 *@paramjp *@paramwidth *@paramheight */ publicstaticvoidinFrame(JPane......