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

【密码学】5. 公钥密码

这里写自定义目录标题

  • 公钥密码
    • 密码学中的常用数学知识
      • 群、环、域
      • 素数和互素数
      • 模运算
      • 模指数运算
      • 费尔马定理、欧拉定理、卡米歇尔定理
      • 素性检验
      • 欧几里得算法
      • 中国剩余定理(CRT)
      • 离散对数
      • 二次剩余
      • 循环群
      • 循环群的选取
      • 双线性映射
      • 计算复杂性
    • 公钥密码体制的基本概念
    • RSA 算法
    • 背包密码体制
    • Rabin 密码体制
    • NTRU 公钥密码系统
    • 椭圆曲线密码体制(ECC)
    • SM2 椭圆曲线公钥密码加密算法

公钥密码

密码学中的常用数学知识

群、环、域

  1. 代数系统:由集合及集合上的运算构成,运算需满足封闭性(运算结果仍在集合内)和结合律((ab)c=a(bc))。
  2. :满足以下条件的代数系统 (G, *):
    • 封闭性:∀a,b∈G,a*b∈G;
    • 结合律:∀a,b,c∈G,(ab)c=a(bc);
    • 单位元:存在 e∈G,∀a∈G,ae=ea=a;
    • 逆元:∀a∈G,存在 a⁻¹∈G,aa⁻¹=a⁻¹a=e。
    • 有限群:G 为有限集,元素个数为群的阶;Abel 群(交换群):运算满足交换律(ab=ba)。
  3. 半群:仅满足封闭性和结合律的代数系统。
  4. :代数系统 (R, +,・),其中:
    • (R, +) 是 Abel 群;
    • (R,・) 是半群;
    • 乘法对加法可分配:a・(b+c)=a・b+a・c,(b+c)・a=b・a+c・a。
  5. :环 (F, +,・),其中非零元素对乘法构成 Abel 群(即每个非零元素有乘法逆元)。
    • 例子:有理数域 (Q, +,・)、实数域 (R, +,・)、复数域 (C, +,・);有限域(Galois 域 GF (q),q 为素数幂)。

素数和互素数

  1. 因子与整除:若存在整数 m 使 a=mb,则 b 整除 a(记为 b|a),b 是 a 的因子。
    • 性质:若 b|a 且 a|b,则 a=±b;若 b|a 且 b|c,则 b|(ma+nc)(m,n 为整数)。
  2. 素数:大于 1 的整数,因子仅为 1 和自身;非素数(大于 1)为合数。
    • 整数分解唯一性:任一整数可唯一分解为素数乘积(如 91=7×13)。
  3. 最大公因子(gcd):两数共有的最大因子,记为 gcd (a,b)。
    • 互素:gcd (a,b)=1 时,a 与 b 互素。
  4. 最小公倍数(lcm):两数共有的最小倍数,记为 lcm (a,b)。
    • 性质:若 a 与 b 互素,则 lcm (a,b)=ab。

模运算

  1. 模与同余:a mod n 表示 a 除以 n 的余数(0≤r<n);若 a mod n = b mod n,则 a≡b mod n(a 与 b 模 n 同余)。
    • 同余性质:n|(a-b) ⇨ a≡b mod n;若 a≡b mod n 且 b≡c mod n,则 a≡c mod n 等。
  2. 模运算规则
    • (a+b) mod n = [(a mod n)+(b mod n)] mod n;
    • (a-b) mod n = [(a mod n)-(b mod n)] mod n;
    • (a·b) mod n = [(a mod n)·(b mod n)] mod n。
  3. 逆元
    • 加法逆元:∀x∈Zₙ,存在 y 使 (x+y) mod n=0(如 2 在 Z₈中的逆元为 6);
    • 乘法逆元:若 gcd (x,n)=1,则存在 x⁻¹ 使 (x・x⁻¹) mod n=1(Zₙ^* 中元素均有乘法逆元,Zₙ^* 是 Zₙ中与 n 互素的元素集合)。

模指数运算

  1. :满足 aᵐ≡1 mod n 的最小正整数 m,记为 ordₙ(a)。
    • 定理:aᵏ≡1 mod n ⇨ ordₙ(a)|k(m 整除 k)。
  2. 快速指数算法:将指数分解为二进制,通过反复平方简化计算(如 a¹⁵=a⁸・a⁴・a²・a¹)。

费尔马定理、欧拉定理、卡米歇尔定理

  1. 费尔马定理:若 p 是素数,gcd (a,p)=1,则 aᵖ⁻¹≡1 mod p;推广:aᵖ≡a mod p(a 为任意整数)。
  2. 欧拉函数 φ(n):小于 n 且与 n 互素的正整数个数。
    • 性质:若 p 是素数,φ§=p-1;若 n=pq(p,q 为素数),φ(n)=(p-1)(q-1)。
  3. 欧拉定理:若 gcd (a,n)=1,则 a^φ(n)≡1 mod n。
  4. 卡米歇尔函数 λ(n):使所有 gcd (a,n)=1 的 a 满足 aᵐ≡1 mod n 的最小 m。
    • 性质:λ(ab)=lcm (λ(a),λ(b))(a,b 互素);λ§=p-1(p 为素数)。

素性检验

  1. 爱拉托斯散筛法:通过删除小于等于√n 的素数倍数,判断 n 是否为素数。
  2. Miller-Rabin 概率检测法:基于 “若 n 是素数,则 x²≡1 mod n 的解为 x≡±1 mod n”,通过多次测试降低错误概率。
  3. AKS 算法:确定性素性检验,基于多项式恒等式,时间复杂度为多项式级。

欧几里得算法

  1. 基本欧几里得算法:求 gcd (a,b),基于 gcd (a,b)=gcd (b,a mod b),通过辗转相除实现。
  2. 推广欧几里得算法:不仅求 gcd (a,b),还能求 x,y 使 ax+by=gcd (a,b);当 gcd (a,b)=1 时,x 是 a 模 b 的乘法逆元。

中国剩余定理(CRT)

  • 若 n₁,n₂,…,nₖ两两互素,N=n₁n₂…nₖ,则方程组 x≡aᵢ mod nᵢ(i=1,…,k)有模 N 的唯一解:
    x = Σ(aᵢ・N/nᵢ・(N/nᵢ)⁻¹ mod nᵢ) mod N,其中 (N/nᵢ)⁻¹ 是 N/nᵢ模 nᵢ的逆元。
  • 应用:将大数运算转化为小数运算(如 15 以内的数可通过模 3 和模 5 的余数表示)。

离散对数

  1. 指标:设 p 是素数,g 是 p 的本原根(生成元),则对∀b∈Zₚ^*,存在唯一 i 使 gⁱ≡b mod p,i 称为 b 模 p 以 g 为底的指标(离散对数),记为 ind_gᵖ(b)。
  2. 性质:类似对数,ind_g (ab)≡ind_g (a)+ind_g (b) mod (p-1);ind_g (aᵏ)≡k・ind_g (a) mod (p-1)。
  3. 困难性:已知 g,p,b 求 i(离散对数问题)在大素数下计算困难,是许多公钥算法的基础。

二次剩余

  1. 二次剩余:若存在 x 使 x²≡a mod n,则 a 是模 n 的二次剩余;否则为非剩余。
  2. Legendre 符号:对素数 p 和 a∉p,(a|p)=1(a 是二次剩余)、-1(非剩余)、0(p|a),计算式:(a|p)=a^((p-1)/2) mod p。
  3. Jacobi 符号:Legendre 符号的推广,用于合数模,定义为 (a|n)=Π(a|pᵢ)(n=Πpᵢ^k),可通过互反律简化计算。

循环群

  • 循环群:由单个元素 g 生成的群,即 G={gⁱ|i∈Z},g 为生成元。
  • 性质:子群仍是循环群;Lagrange 定理(子群阶整除群阶);n 阶循环群中,元素 gᵏ的阶为 n/gcd (k,n);生成元满足 gcd (k,n)=1。

循环群的选取

  • 实际应用中常用循环群:Zₚ^* 的子群(p 为素数)、椭圆曲线群等,要求生成元的阶为大素数,确保离散对数问题困难。

双线性映射

  • 映射 e:G₁×G₂→G₃(G₁,G₂,G₃为阶 q 的群),满足:
    • 双线性:e (aP,bQ)=e (P,Q)^(ab);
    • 非退化性:e (P,Q)≠1(单位元);
    • 可计算性:存在有效算法计算 e (P,Q)。
  • 例子:Weil 配对、Tate 配对,应用于短签名、身份加密等。

计算复杂性

  1. 时间复杂度
    • O (f (n)):渐近上界;o (f (n)):非紧确上界;
    • 多项式时间(O (nᵏ)):“容易” 问题;指数时间(O (2ⁿᵏ)):“困难” 问题。
  2. 问题类
    • P:多项式时间可解;
    • NP:多项式时间可验证解;
    • NPC:NP 中最难问题,若任一 NPC 问题有多项式解,则 P=NP。
  3. 可忽略函数:增长慢于任何多项式的逆(如 2⁻ⁿ);概率多项式时间(PPT)算法:运行时间为多项式,允许随机选择。

公钥密码体制的基本概念

  1. 原理:使用一对密钥(公钥 PK 和私钥 SK),加密用 PK,解密用 SK;已知 PK 求 SK 计算困难。
  2. 要求
    • 产生 PK 和 SK 容易;
    • 加密(c=E (PK,m))和解密(m=D (SK,c))容易;
    • 由 PK 求 SK 困难;
    • 由 c 和 PK 恢复 m 困难;
    • 可选:加解密可交换(E (PK,D (SK,m))=m)。
  3. 陷门单向函数:正向计算容易,逆向计算困难,但若已知陷门信息则逆向容易(公钥密码的核心)。
  4. 攻击:穷搜索(需足够长密钥)、可能字攻击(通过已知明文猜测密钥)。

RSA 算法

  1. 密钥产生
    • 选大素数 p、q,计算 n=pq,φ(n)=(p-1)(q-1);
    • 选 e(1<e<φ(n),gcd (e,φ(n))=1),求 d=e⁻¹ mod φ(n);
    • 公钥 (PK)=(e,n),私钥 (SK)=(d,n)。
  2. 加解密
    • 加密:c=mᵉ mod n(m<n);
    • 解密:m=cᵈ mod n。
    • 正确性:由欧拉定理,若 gcd (m,n)=1,则 m^(e・d)≡m mod n;若 m 与 n 不互素,仍可证明成立。
  3. 计算优化:快速指数算法(降低模指数复杂度);中国剩余定理(加速解密,分解计算 m mod p 和 m mod q)。
  4. 安全性:基于大整数分解困难性(若 n 被分解,可求 φ(n) 和 d);需保证 p 和 q 足够大(1024-2048 比特),且 p 和 q 差距小、有大素因子。
  5. 攻击:共模攻击(多用户用同一 n)、低指数攻击(e 过小且多用户加密同一 m)。

背包密码体制

  1. 背包问题:给定背包向量 A=(a₁,…,aₙ) 和容积 s,求子集 A’ 使和为 s(NPC 问题)。
  2. 超递增背包:aᵢ>Σₖ₌₁ⁱ⁻¹aₖ,可通过贪婪算法求解(从最大元素开始判断是否包含)。
  3. 公钥构造
    • 私钥:超递增背包 A,模数 M(M>Σaᵢ),乘数 w(gcd (w,M)=1);
    • 公钥:B=(w・a₁ mod M,…,w・aₙ mod M)。
  4. 加解密
    • 加密:c=Σxᵢ・bᵢ(x 为明文二进制);
    • 解密:s=c・w⁻¹ mod M,用贪婪算法解超递增背包得 x。
  5. 缺陷:已被破译(无需陷门可还原超递增背包)。

Rabin 密码体制

  1. 特点:破译等价于大整数分解;加密指数 e=2。
  2. 密钥产生:选大素数 p≡3 mod 4,q≡3 mod 4,n=pq;公钥 n,私钥 (p,q)。
  3. 加解密
    • 加密:c=m² mod n;
    • 解密:解 x²≡c mod n,等价于解 x²≡c mod p 和 x²≡c mod q,由 p≡3 mod 4,根为 ±c^((p+1)/4) mod p,再用 CRT 合并得 4 个解,需通过冗余信息确定正确明文。

NTRU 公钥密码系统

  1. 基础:多项式环 Z [x]/(xⁿ-1),参数 (n,p,q)(p,q 为素数,q>p²)。
  2. 密钥产生
    • 选 f,g∈L(L 为低重量多项式集合),求 f⁻¹ mod p 和 f⁻¹ mod q;
    • 公钥 h=p・f⁻¹ mod q・g mod q;私钥 (f,f⁻¹ mod p)。
  3. 加解密
    • 加密:选 r∈L,c=(h・r + m) mod q(m 为明文多项式);
    • 解密:a=f・c mod q,b=a mod p,m=f⁻¹ mod p・b mod p。

椭圆曲线密码体制(ECC)

  1. 椭圆曲线:方程 y²=x³+ax+b(a,b∈GF §,4a³+27b²≠0),点集 Eₚ(a,b) 包括无穷远点 O,对加法构成 Abel 群。
    • 加法规则:三点共线则和为 O;P+Q 的坐标通过直线交点计算;2P 为切线交点的逆。
  2. 椭圆曲线离散对数问题(ECDLP):已知 P,kP∈Eₚ(a,b),求 k,比有限域离散对数更困难。
  3. 应用
    • Diffie-Hellman 密钥交换:双方共享 G,选私钥 kₐ,k_b,计算公钥 kₐG,k_bG,共享密钥 kₐk_bG;
    • ElGamal 加密:公钥 kG,加密 (c₁= rG, c₂= m + rkG),解密 m= c₂ - kc₁。
  4. 优点:安全性高(160 比特 ECC≈1024 比特 RSA)、密钥短、运算快。

SM2 椭圆曲线公钥密码加密算法

  1. 标准:中国商用算法,基于素数域 GF §,参数包括 p,a,b,G,n(G 的阶),h(余因子)。
  2. 密钥产生:私钥 d∈[1,n-2],公钥 Q=dG。
  3. 加解密
    • 加密:选 k∈[1,n-2],c₁=kG,c₂=(M || t)(t=KDF (x₂||y₂, len (M))),c₃=Hash (x₂||M||y₂),密文 (c₁,c₂,c₃);
    • 解密:计算 d c₁=(x₂,y₂),t=KDF (x₂||y₂, len (c₂)),M’=c₂||t,验证 Hash (x₂||M’||y₂)=c₃,输出 M’。
  4. 特点:使用 SM3 哈希函数,参数含用户特异性信息,安全性更高。
http://www.dtcms.com/a/311646.html

相关文章:

  • 【Python修仙编程】(二) Python3灵源初探(11)
  • Noob靶机
  • 集成电路学习:什么是CMSIS微控制器软件接口标准
  • 用键盘快速移动Word和WPS文字中的选中段落
  • K8S部署ELK(二):部署Kafka消息队列
  • 计算机分类大全
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第9章 性能调优
  • Android 13/14/15 默认授权应用权限的实现方法
  • 广告牌+序列帧的Shader效果
  • rocky\centos安装docker镜像的命令
  • 深入理解C++中的list容器:介绍、使用与实现
  • Flutter dart运算符
  • mini-swe-agent源码解读(进行中)
  • Redis 7 哈希(Hash)使用指南
  • 细分推广场景,让推客推广更贴合用户当下需求
  • 存储过程的介绍、基本语法、delimiter的使用
  • 未来交通:元宇宙技术重塑出行体验
  • 用Unity结合VCC更改人物模型出现的BUG
  • WebSocket断线重连机制:保障实时通信的高可用性
  • 疯狂星期四文案网第27天运营日记
  • 井云科技2D交互数字人:让智能服务触手可及的实用方案
  • KSP与ASM深度对比:原理、性能与使用场景
  • SpringBoot怎么查看服务端的日志
  • sqli-labs通关笔记-第28a关GET字符注入(关键字过滤绕过 手注法)
  • USB Device(VID_1f3a_PID_efe8) 驱动叹号
  • ART数据库索引结构--ART,The adaptive radix tree论文细读
  • 基于落霞归雁思维框架的软件需求管理实践指南
  • 字节Seed发布扩散语言模型,推理速度达2146 tokens/s,比同规模自回归快5.4倍
  • 【C++/STL】vector的OJ,深度剖析和模拟实现
  • Java多线程入门-基础概念与线程操作