【阿一网络安全】如何让你的密码更安全?(二) - 非对称加密

news2024/9/19 19:55:53

上次《【阿一网络安全】如何让你的密码更安全?(一) - 对称加密》提到加密算法的对称加密,我们这次来聊聊非对称加密。

和对称加密不同,非对称加密的加密密钥和解密密钥不同。

非对称加密

大概过程就是,发送方使用公钥对明文数据进行加密,把密文发送给接收方,接收方收到密文,用私钥进行解密。如图所示:

在我们使用对称加密的时候,不仅要约定好发送、接收方的密钥,还要担心密钥泄漏。而在非对称加密中,不需要担心这个问题,公钥本身就是公开的,不需要额外对其进行保密,可以把公钥发给所有需要的人。

非对称加密,除了加密功能之外,部分非对称算法还提供了签名功能(确保明文数据的完整性和真实性,并不是保密性)。

发送方用私钥对明文数据进行加密,得到签名。接收方收到明文数据和签名后,用发送方的公钥解密签名,并将结果与明文数据比对。如果匹配,就证明这段消息确实是发送方发送的且没有被篡改。

非对称加密的核心思想,是基于特定的数学难题设计的,特点就是:

  1. 正向计算容易
  2. 反向计算在计算上不可行(在合理的时间内无法完成)

经典且广泛使用的非对称加密算法包括这几种,RSA、ECC和国密的SM2。

RSA

RSA是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用,是由 Ron Rivest、Adi Shamir 和Leonard Adleman 三人一起提出,RSA就是他们三人姓氏的首字母组成。

RSA的安全性,基于 大整数因子分解 的数据难题,换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠。它使用两个不同的密钥进行加密,公钥用于加密,私钥用于解密。

密钥的生成

公钥和私钥,都是由 发送方 约定并生成的。

  1. 选择两个大的质数 p 和 q,p ≠ q,计算 N = p * q
  2. 计算欧拉函数 φ(N) = φ§ * φ(q) = (p - 1) * (q - 1)
  3. 选择一个小于 φ(N) 的整数 e,使得 e 与 φ(n) 互质
  4. 计算 e 关于 φ(N) 的模逆元 d,使得 d * e ≡ 1(mod φ(N))

公钥 = (N, e)。

私钥 = (N, d)。

加密

c = me mod N

假设发送方想把明文 m 发送给接收方,就可以按照这个公式把 明文 m,加密成 密文 c 发送给接收方。

解密

m = cd mod N

与加密类似,接收方获取到 密文 c,可以按照这个公式 把 密文 c,解密成 明文 m。

数字签名

RSA也可以用作 数字签名。

接收方 想给 发送方 发消息的话,可以把 他想要发的消息明文计算一个 散列值(Message Digest),然后用私钥 加密 这个 散列值 并放在消息明文后一起发送给发送方。

发送方 收到 接收方发送的消息后,把密文用 公钥 进行解密,然后和 发送发自己对这个 消息明文 的计算的散列值相比较,如果二者一致的话,那么就可以确保该消息 是接收方发送的,并且没有被篡改过。

安全性

  • 安全性基于 大整数因子分解的困难性。
  • 密钥长度 一般为 2048 或 4096 位。目前推荐的长度至少位 2048位。

优缺点

优点:

  • 原理相对简单
  • 可用于加密,也可用于数字签名
  • 广泛使用

缺点:

  • 计算速度慢
  • 可能受到量子计算机的威胁

实际应用

  • HTTPS 协议
  • SSH 安全连接
  • 数字证书

虽然RSA的理论基础相对简单,但是实际使用过程中,需要考虑很多的细节,比如填充方案,密钥管理,性能优化等。

ECC

ECC(椭圆曲线密码学,Elliptic Curve Cryptography),是一种基于椭圆曲线数学的公开密钥加密算法。

对比RSA的主要优势在于,使用较小的密钥长度就能提供相当级别的安全性,使得它特别适合资源受限的环境下使用,比如移动设备和物联网设备。

ECC 的安全性,基于椭圆曲线离散对数问题(ECDLP)的困难性,在椭圆曲线上,已知点P 和 点Q,找到整数k使得 Q = kP 是困难的。

密钥的生成

  1. 选择椭圆曲线 E 和 基点 G
  2. 选择 私钥 d (随机大整数)
  3. 计算 公钥 Q = dG

加密

  1. 选择随机数 r
  2. 计算 R = rGS = rQ
  3. 使用 S 的 x坐标 作为对称密钥 加密

解密

  1. 计算 S = dR
  2. 使用 S 的 x坐标 作为对称密钥 解密

数字签名

签名:

  • 选择随机数 k
  • 计算 R = kG,r 为 R 的 x坐标
  • 计算 s = k-1 (H(m) + dr) mod n
  • 签名为 (r, s)

验证:

  • 计算 u1 = H(m)s-1 mod nu2 = rs-1 mod n
  • 计算 V = u1G + u2Q
  • 如果 V 的x坐标等于r,则签名正确

安全性

  • 基于 椭圆曲线离散对数问题的困难性
  • 密钥最小长度为 224位,对应的对称加密密钥的长度为 128位

优缺点

优点:

  • 使用更短的密钥获得相同的安全性,最小224位
  • 计算速度更快
  • 资源耗费低

缺点:

  • 量子计算攻击
  • 无效曲线攻击
  • 后门
  • 旁路攻击

实际应用

  • TLS / SSL
  • 移动设备安全
  • 物联网设备
  • 加密货币

虽然ECC的数学基础看起来更复杂,但是他的计算效率更加的高效。它的高效性使得它广泛用于许多加密货币中。实现过程中仍然需要注意一下细节,比如曲线的选择、随机数的生成等。

SM2

SM2是我国国家密码管理局发布的一种公钥密码算法,属于国家商用密码,算法公开。

它基于ECC(椭圆曲线密码学),但有其特定的参数和实现细节,加密强度和ECC相当。

密钥的生成

  1. 生成随机数 d ∈ [1, n-1],其中 n 是椭圆曲线的阶
  2. 计算 公钥 P = dG ,G为基点

加密

  1. 生成随机数 k ∈ [1, n-1]
  2. 计算点,(x1, y1) = kG,(x2, y2) = kP,P为接收方公钥
  3. 使用对称加密算法 SM4加密消息,密钥为 x2
  4. 然后加密明文

解密

  1. 计算点,(x2, y2) = d(x1, y2),d为接收方私钥
  2. 使用对称加密算法 SM4解密密文,密钥 为 x2

数字签名

签名:

  1. 对 消息 M进行摘要处理(SM3),得到 e = H(M),H为哈希函数
  2. 生成随机数 k ∈ [1, n-1]
  3. 计算点,(x1, y1) = kG
  4. 计算 r,r = (e + x1) mod n,如果 r = 0 或者 r + k = n,则重新选择 k
  5. 计算 s,s = ((1 + d)-1 * (k - r * d)) mod n,如果 s = ,则重新选择 k
  6. 签名为 (r, s)

验证:

  1. 检查 r,s ∈ [1, n-1]
  2. 计算 e,e = H(M)
  3. 计算 t,t = (r + s) mod n,如果 t = 0,则签名无效
  4. 计算点,(x1, y1) = sG + tP
  5. 计算 R,R = (e + x1) mod n,如果 R = r,则签名有效,否则签名无效

安全性

  • 采用256的椭圆曲线
  • 不可伪造、不可否认性
  • 有效防止中间人攻击
  • 前向安全性,即使长期泄露密钥,也不会影响之前会话的安全性

优缺点

优点:

  • 基于ECC,使用更短的密钥获得相同的安全性
  • 效率高
  • 为我国国家密码管理局发布的标准算法,具有良好的兼容性和标准化支持
  • 不仅支持加解密,还支持数字签名,能够满足多种安全需求
  • 本地化,配套使用SM3

缺点:

  • 主要在国内使用,国际化可能存在兼容性问题
  • 实现复杂

实际应用

  • 被广泛用于政府部门、金融机构和大型企业的信息系统中
  • 电子政务、电子商务、可信计算等多个领域

总结

本文主要简单介绍了非对称加密算法 RSA、ECC 和 SM2 的基本原理,以及它们的实现过程。对比对称加密,非对称加密算法的最大优势就是保障了密钥分发的安全性、支持数字签名。

因此,现在大部分的认证和签名场景,其实使用的都是非对称加密算法。比如,在SSH登录、Git上传等场景中,我们都可以将自己的公钥上传到服务端,然后由客户端保存私钥。

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

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

相关文章

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果&#xff1a; 解密后的数据就是正常数据&#xff1a; 后端&#xff1a;使用的是spring-cloud框架&#xff0c;在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30…

Unity | 内存优化之Reserved Unity内存

目录 一、Render Texture资源 1.抗锯齿 2.阴影分辨率 3.深度 4.HDR格式 二、动画资源 1.Resample Curves 2.动画压缩 (1)Keyframe Reduction (2)Optimal(推荐) 3.剔除Scale曲线 (1)开启Remove Constant Scale Curves (2)使用脚本剔除scale曲线 4.降低精…

WordPress上可以内容替换的插件

插件下载地址&#xff1a;WordPress内容替换插件 – 果果开发 类型 替换的类型&#xff1a;文章、自定义文章类型、分类、标签、媒体库、页面、评论、数据库表&#xff0c;不同的类型可以替换不同的字段。 替换字段 替换的字段&#xff0c;哪些字段内容需要替换。除了数据库…

《系统架构设计师教程(第2版)》第17章-通信系统架构设计理论与实践-03-移动通信网网络架构

文章目录 1. 5GS与DN互连1.1 5GS概述1.2 5GS 与DN网络的连接关系1.3 UE连接DN的两种模式1.3.1 透明模式1.3.2 非透明模式 2. 5G 网络边缘计算 1. 5GS与DN互连 1.1 5GS概述 5GS&#xff1a;5G SystemDN&#xff1a;Data NetworkIMS&#xff1a;IP Media Subsystem&#xff08;一…

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向&#xff0c;记录一下自己学到的东西。对于app渗透有了一些思路。 …

Unity下如何播放8K超高分辨率的RTMP流?

在Unity中使用RTMP播放器播放8K流&#xff0c;需要考虑到多个方面的因素和技术要求。以下是一个详细的步骤和要点概述&#xff0c;帮助实现这一目标&#xff1a; 1. 选择合适的RTMP播放器插件 首先&#xff0c;需要选择一个支持8K视频流播放的RTMP播放器插件。并非所有插件都…

MATLAB绘图基础6:MATLAB绘图基础

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 6.MATLAB绘图基础 6.1 MATLAB绘图基本流程 % 1.创建图形窗口; % 1.1 创建一个空白图形窗口; figure;% 1.2 创建一个带有指定标题的图形窗口; figure(Name, 图形窗口);% 1.3 创建一个具有指定…

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至&#xff0c;祝福大家中秋快乐&#xff0c;阖家幸福。本期免费分享毕业设计作品&#xff1a;《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心&#xff0c;体育场已成为广大师生和…

熟悉Kafka组成模块、Kafka消息提交的方式及优缺点

1. Kafka概念 1.1 Kafka组成模块 Kafka其实是一款基于发布与订阅模式的消息系统&#xff0c;如果按常理来设计&#xff0c;大家是不是把消息发送者的消息直接发送给消息消费者&#xff1f;但Kafka并不是这么设计的&#xff0c;Kafka消息的生产者会对消息进行分类&#xff0c;…

【LVI-SAM】激光雷达点云处理点云帧投影LIO-SAM 之ImageProjection实现细节

【LVI-SAM】激光雷达点云处理点云帧投影LIO-SAM 之ImageProjection实现细节 1. ImageProjection激光雷达点云预处理算法1.0 总结&#xff1a;1.1 功能概述&#xff1a;1.2 算法流程&#xff1a; 2. ImageProjection激光雷达点云预处理算法数学推倒3. ImageProjection激光雷达点…

安卓玩机工具------小米工具箱扩展工具 小米机型功能拓展

小米工具箱扩展版 小米工具箱扩展版 iO_Box_Mi_Ext是由晨钟酱开发的一款适用于小米&#xff08;MIUI&#xff09;、多亲&#xff08;2、2Pro&#xff09;、多看&#xff08;多看电纸书&#xff09;的多功能工具箱。该工具所有功能均可以免root实现&#xff0c;使用前&…

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB&#xff1a;存储了每一个连接中的一些重要信息。比如TCP连接表&#xff0c;指向发送和接收缓冲的指针&#xff0c;指向重传队列的指针&#xff0c;当前的发送和接收序列等等。 我们再来看一下TCP报…

[高级人工智能 开放性调研] 近两年来[2022~2024]人工智能应用进展重要案例介绍

文章目录 [高级人工智能 开放性调研] 近两年来[2022-2024]人工智能应用进展重要案例介绍写在前面1. AIGC1.1 LLM | 大语言模型问答系统式的生成式AI文档解读——KimiChat代码生成——Cursor 1.2 AI绘画\视频生成 | Stable Diffusion | OpenAI SoraStable DiffusionOpenAI Sora …

模拟网络丢包常用方法以及工具

文章目录 背景常用方法代码实现使用方法测试代码 使用网络流量控制工具 常用工具Clumsy 背景 在软件开发过程中&#xff0c;经常需要模拟不同的网络环境来测试应用在不同条件下的表现。 这些模拟可以采用多种方式进行&#xff0c;包括在代码中实现随机丢包、随机延时、乱序&am…

《JavaEE进阶》----12.<SpringIOCDI【扫描路径+DI详解+经典面试题+总结】>

本篇博客主要讲解 扫描路径 DI详解&#xff1a;三种注入方式及优缺点 经典面试题 总结 五、环境扫描路径 虽然我们没有告诉Spring扫描路径是什么&#xff0c;但是有一些注解已经告诉Spring扫描路径是什么了 如启动类注解SpringBootApplication。 里面有一个注解是componentS…

【Leetcode152】乘积最大子数组(动态规划)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 &#xff08;0&#xff09;读懂题意&#xff1a;题目的“连续”是指位置的连续&#xff0c;而不是说数字的连续&#xff0c;这是个大坑。 &#xff08;1&#xff09;确定状态&#xff1a;定义两个状态来记录当前子数组的…

Windows本地制作nginx证书

OpenSSL 是一个用于生成和管理 SSL/TLS 证书的工具。下载并安装 OpenSSL Select Additional Tasks页面勾选 The OpenSSL binaries (/bin) directory 将OpenSSL的bin目录配置到path中 开命令提示符&#xff08;cmd&#xff09;或 PowerShell。运行以下命令生成一个新的私钥和自…

哈希表的封装和位图

文章目录 2 封装2.1 基础框架2.2 迭代器(1)2.3 迭代器(2) 3. 位图3.1 问题引入3.2 左移和右移&#xff1f;3.3 位图的实现3.4 位图的题目3.5 位图的应用 2 封装 2.1 基础框架 文章 有了前面map和set封装的经验&#xff0c;容易写出下面的代码 // UnorderedSet.h #pragma on…

WireShark抓包软件介绍和安装

文章目录 一、WireShark软件介绍1. **概述**2. **主要功能**3. **使用场景**4. **安装和使用**5. **优点和限制**6. **结论** 二、WireShark的安装三、WireShark的基本使用1. **混杂模式&#xff08;Promiscuous Mode&#xff09;****概述****工作原理****应用场景****启用方式…

STM32F407VET6开发板RT-Thread memheap 内存堆的适配

相关文章 STM32F407VET6开发板RT-Thread的移植适配 STM32F407VET6开发板RT-Thread MSH 串口的适配 环境 STM32F407VET6 开发板&#xff08;魔女&#xff09;&#xff0c;http://www.stm32er.com/ Keil MDK5&#xff0c;版本 5.36 memheap 内存堆 RT-Thread 支持 memheap …