非对称密码,即公钥密码,基于数学函数而不是代换和置换
六个要素:
- 明文
- 密文
- 公钥
- 私钥
- 加密算法
- 解密算法
符号约定
会话密钥:Ks
用户A的公钥:KUa
用户A的私钥:KRa
用A的公钥对明文P加密:EKUa[P]
用A的私钥对密文C解密:DKRa[C]
公钥密码体制
- 公钥公开,用于加密和验证签名
- 私钥保密,用于解密和签名
例:
- B用公开的KUa对信息加密,密文传递给A,A用KRa解密
- A用KRa对信息加密(签名),则只有KUa能将其解密,可以验证消息确为A发出
公钥密码的数学原理概述:单向陷门函数
单向陷门函数必须满足以下三个条件:
- 给定,计算是容易的
- 给定,计算使是困难的(即复杂性高到没有实际意义)
- 存在,若知道,则计算是容易的
用途:
- 加密/解密
- 数字签名
- 密钥交换(用于对称密码所需)
分析:
- 也会受到穷举攻击(安全性不一定高于传统密码)
- 防范穷举攻击的方法也是使用长密钥
- 目前主要用于密钥管理和数字签名,加解密仍然使用对称密码(传统密码并未过时,公钥密码进行密钥分配也不比传统密码容易)
数论基础
欧拉函数
表示比小且与互素的正整数的个数设是素数,则
欧拉定理
设,则
RSA算法
分组密码,明文和密文都是0~n-1之间的整数,n通常是1024位二进制数或309位十进制数
密钥产生:
- 取两个大素数,保密
- 计算,公开n
- 计算
- 任取与互素的小整数
- 寻找使得,即
- 公开
- 保密,丢弃
- 公钥为,私钥为
加密过程:
- 将待加密的内容分成k比特的分组,k≤log2n,将每个分组设为
- 则
解密过程:
DH密钥交换算法
本原根与离散对数
对于素数,若满足模余数两两不同,则是的一个本原根
本原根指数求模运算的逆运算为离散对数
DH密钥交换算法只能用于密钥交换的原因:其目的是计算出一个安全的、两人共享的无意义数字
DSA算法
只能用于数字签名