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

‌加密 vs 电子签名:公钥私钥的奇妙冒险

目录

  • 一、轻松的解释下什么是加密,什么是签名
    • 1. 加密(Encryption)——锁住秘密的魔法箱‌
    • 2. 签名(Signature)——防伪认证的盖章术‌
  • 二、什么是公钥,什么是私钥
    • 1. 数学原理
    • 2. 生成方法(看不懂没关系😁)
  • 三、核心应用场景
    • 1. 数据加密传输‌
    • 2. 数字签名与认证‌
    • 3. 密钥协商机制‌
    • 4. 加密货币体系‌
  • 四、Debian 11 和 Ubuntu 24.04 生成公钥与私钥的方法
    • 1. SSH 密钥对生成(通用方法)
    • 2. 查看生成的密钥‌
  • 总结

一、轻松的解释下什么是加密,什么是签名

1. 加密(Encryption)——锁住秘密的魔法箱‌

场景‌: 你想偷偷给朋友发情书,但怕被隔壁老王偷看。
‌操作‌:
‌你要做的:用朋友的‌公钥‌(像一把公开的带锁的)把情书锁进箱子📦。其实这就是加密,是将明文转换为密文的过程,目的是‌保护数据的机密性‌,防止未授权方读取敏感信息。
‌朋友要做的:用TA的‌私钥‌(唯一钥匙)开箱读信🔑。其实就是解密,是使用自己的私钥‌解密数据还原明文。
‌关键点‌:公钥加密的数据,只有对应私钥能解开(注意这个只有,也就是唯一的意思哦),确保‌只有目标人能看‌!

2. 签名(Signature)——防伪认证的盖章术‌

‌场景‌: 你网上卖签名照,粉丝怕买到假货。
‌操作‌:
‌你要做的:用你的‌私钥‌给照片盖个加密章(签名)🏷️。
‌朋友要做的:用你的‌公钥‌验证章的真伪✅,确认是“正品”!
‌关键点‌:私钥签名只能由对应公钥验证,证明‌数据没被篡改+来源靠谱‌。从本质原理上说,公钥和私钥是一一对应的,但是有些场合我们需要一对多,这时候可通过主私钥派生多个子公钥,实现“一个私钥对应多个公钥”的效果。但这属于应用层扩展,并非底层算法的原生特性。

二、什么是公钥,什么是私钥

知道了加密和签名,大家很好奇公钥,私钥是什么了吧。公钥和私钥是非对称加密体系的核心组件,通过数学算法配对生成且互为加解密关系。公钥可公开分发,私钥必须严格保密。这对密钥的特性决定了其独特的安全机制:用公钥加密的数据只能由对应私钥解密,用私钥签名的数据可通过公钥验证来源。那么什么是非对称加密呢?非对称加密是相对对称加密来讲的。对称加密是通过‌单一密钥‌完成数据加密与解密的机制,加密方与解密方需共享同一密钥。而非对称加密是采用‌公钥(公开)+私钥(保密)‌配对机制(公钥私钥完全是两个东西),公钥加密数据需私钥解密,私钥签名(其实也是加密)数据需公钥验证(其实也是解密)。

1. 数学原理

非对称加密基础‌是基于数学难题构建单向函数,加密与解密互为逆运算。常见算法:

RSA‌: 依赖大整数质因数分解难题
ECC‌(椭圆曲线加密): 利用椭圆曲线上离散对数问题,同等密钥长度下安全性更高
ElGamal‌: 基于离散对数问题,常用于密钥交换

所谓的单向性指的是私钥包含解密必需的关键参数,可以推导出公钥,也就是有了私钥,你就能生成公钥,但是公钥无法逆向推算出私钥,也就是公钥不能生成私钥。

2. 生成方法(看不懂没关系😁)

RSA密钥生成‌典型流程包含:

  1. 随机选择两个大质数 p 和 q
  2. 计算 n = pq 和 φ(n) = (p-1)(q-1)
  3. 选择整数 e 满足 1 < e < φ(n) 且与 φ(n) 互质
  4. 计算 d 使得 (d*e) mod φ(n) = 1
  5. 公钥为 (e,n),私钥为 (d,n)

ECC密钥生成‌
基于椭圆曲线参数生成基点 G,私钥为随机整数 k,公钥计算为 k*G 的曲线点坐标。

ElGamal‌密钥生成
选择大素数p和生成元g
私钥x随机选择,公钥y = gˣ mod p

三、核心应用场景

1. 数据加密传输‌

发送方用接收方公钥加密数据,仅持有对应私钥的接收方可解密。例如:

  • 电子邮件加密(PGP协议)
  • TLS/SSL通信中的会话密钥传递,这里的密钥指的是对称密钥哈,后续大数据加密用的。

什么时候用非对称加密,什么时候用对称加密呢?我们有个经典用法:

  1. 先让非对称加密护送「对称加密的钥匙」
  2. 再用对称加密疯狂传输海量数据

我们加密世界的生存法则‌:

  • 黄金组合‌:非对称护送对称密钥 + 对称密钥加密飙车传数据(HTTPS等协议的标准操作)
  • 终极奥义‌:对称加密像「快餐」——方便但易胖(密钥泄露风险);非对称加密像「养生餐」——安全但费牙(计算成本高)

2. 数字签名与认证‌

签名者用私钥生成签名,验证者用公钥核实身份及数据完整性。典型场景:

  • 软件代码签名验证
  • 电子合同签署
  • 区块链交易验证

3. 密钥协商机制‌

通过Diffie-Hellman等协议,在不安全信道中建立共享密钥。

4. 加密货币体系‌

私钥作为资产所有权凭证,公钥生成钱包地址,交易需私钥签名确认。

四、Debian 11 和 Ubuntu 24.04 生成公钥与私钥的方法

1. SSH 密钥对生成(通用方法)

使用 ssh-keygen 命令‌
适用于 SSH 登录、Git 认证等场景,支持 RSA、ECDSA 等算法:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa:指定密钥类型为 RSA(可选 ecdsa 或 ed25519)RSA 兼容性最佳,但 ECDSA 或 Ed25519 性能更优,密钥长度至少 2048 位,(RSA)或 256 位(ECC)
    其中算法演进过程如下:
    ‌RSA → ECC‌:解决密钥过长问题,提升效率;
    ‌ECC → ECDSA‌:适配数字签名需求,但保留随机数依赖缺陷;
    ‌ECDSA → Ed25519‌:通过确定性签名和优化曲线设计,实现更高安全性与性能。
  • -b 4096:设置密钥长度为 4096 位(安全性更高)
  • -C:添加注释(通常为邮箱)

默认保存路径为 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)

2. 查看生成的密钥‌

cat ~/.ssh/id_rsa.pub  # 查看公钥
cat ~/.ssh/id_rsa      # 查看私钥(需谨慎操作)

在这里插入图片描述

总结

本文简单介绍了加密与签名,我们简单总结下加密与签名:

加密‌‌签名‌
‌目的‌‌ 保护数据机密性‌ 验证数据完整性和发送者身份
‌操作方向‌‌公钥加密 → 私钥解密‌ 私钥签名 → 公钥验证
‌‌密钥归属‌‌接收者的公钥用于加密,私钥用于解密‌ 发送者的私钥用于签名,公钥用于验证
‌适用角色‌‌ 面向接收者(隐私保护)‌ 面向发送者(身份认证)

相关文章:

  • 在SpringBoot项目中策略模式的使用
  • 智能工厂的神经脉络:工业互联网平台架构演进研究
  • ESP8266_AP机械手 第三篇Uniapp遥控器
  • 如何在Vue中实现延迟刷新列表:以Element UI的el-switch为例
  • 行为型:策略模式
  • 零基础设计模式——结构型模式 - 桥接模式
  • 深入理解JavaScript设计模式之原型模式
  • OceanBase数据库从入门到精通(运维监控篇)
  • Qt popup窗口半透明背景
  • Spring AOP 深度解析与实践指南
  • C++项目中调用C#DLL的的方式
  • OpenLayers加载GeoJSON数据
  • 基于Android的个人健康管理系统APP
  • 第7章 C控制语句:分支和跳转
  • TCP协议原理与Java编程实战:从连接建立到断开的完整解析
  • C++ 模板函数深度指南
  • 深入解析Spring Boot与Kafka集成:构建高效消息驱动应用
  • sass三大循环语法
  • 嵌入式开发学习日志(linux系统编程--进程(2))Day28
  • 解决 iTerm2 中 nvm 不生效的问题(Mac 环境)
  • 网站建设合同性质/乌海网站seo
  • 怎么做网站开发/sem 优化软件
  • 新手建网站视频教程/美国新冠疫情最新消息
  • 我爱南宁地铁app下载/标题seo是什么意思
  • 汉中市住房和城乡建设委员会网站/广州网站制作服务
  • 校园网站建设的感受论文/百度网盘官网登陆入口