公钥密码体制简介
- 制作:数字_ID
- 时间:2018年05月28日
1. 公钥密码体制概述
- 公钥之前,所有的密码都是基于代换和置换
- 公钥密码算法的基本工具是数学函数
- 非对称的形式使用两个密钥,对保密性、密钥分配、认证等都有着深刻的意义
- 在产生公钥密码体制之前,先来谈谈对称密码的局限性
对称密码的局限性
- 密钥分发问题:必须保证传输密钥的信道足够安全
- 密钥量问题:每两人都需要一对密钥,密钥量太大
- 数字签名问题:接收方可以伪造签名,发送方可以否认发送过的消息
- 无法解决陌生人之间的身份认证和交易信息认证问题
- 由于以上种种,我们的主角公钥密码就要登场了!
公钥密码提出
- 1976年,W.Diffie和M.Hellman提出公钥密码体制
- 公钥发放,私钥保留,公钥加密,私钥解密,私钥签名,公钥验证
公钥密码体制的应用
- 加密、解密
- 数字签名
- 密钥交换:两方合作以便交换会话密钥
公钥密码体制的特点
- 密钥分发简单:公钥不需保密分发
- 密钥量大大减少:n个用户只需n对密钥
- 可以实现数字签名/身份认证
- 可满足不相识的人之间的保密通信
公钥密码算法应满足的要求
- 计算容易
- 分析不可行
- 加密变换和解密变换可以互换顺序:
公钥密码算法的设计思想
单向陷门函数
设 是一个函数, 是 有关的一个参数,对于任意给定的 ,计算 ,使得 是容易的。当不知道参数 时,计算 的逆向函数是难解的,当知道 时,则是容易的,参数 称为陷门
在公钥加密算法中,加密变换就是一个单项陷门函数
公钥密码算法的分类
- 基于大整数因子分解的公钥密码(RSA)
- 基于有限域乘法群上的离散对数问题的公钥密码(ElGamal)
- 基于椭圆曲线上的离散对数问题的公钥密码(ECC)
- 以上三个是本篇博客主要介绍的三种公钥密码体制,当然还有很多,比如:
- 基于背包问题的公钥密码
- 基于概率的平方剩余问题的公钥密码
- 基于格的短向量问题的公钥密码
- 基于余代数编码中的线性编码问题的公钥密码
- ……
2. 若干数论问题
- 公钥密码体制的数学原理和数论有密切关系,可以说数论是基础,不是一篇文章能讲得清的,在这里先讲两个会用到的数学难题
离散对数问题
- 令素数 满足 含有另一大质数 ( 整除 ),及一整数g,
- 若给定整数 ,求 是简单的
- 若给定 ,求 ,则为DLP问题,是困难的
因数分解问题
- 给定大素数 ,求 ,只要一次乘法
- 对于给定 ,求 和 ,即为因数分解问题FAC,是困难的
接下来开始主要介绍三个公钥密码体制
3. RSA公钥密码
- RSA算法是1978年由Rivest,Shamir和Adieman提出
RSA算法描述
- 公钥:选择两个互异的大素数 和 ,使 , , 是欧拉函数,选择一个正数 ,使其满足 , ,则将 作为公钥
- 私钥:求出正整数 ,使其满足 ,则将 作为私钥
- 加密变换
- 解密变换
RSA解密证明过程
- 关于解密,将 代入易证,单要注意证明过程中的两种情况, 和 ,具体过程略
RSA算法的安全性
- 如果 被成功分解,则私钥可以被计算出来
- 攻击RSA算法可能方法
- 穷举:由于计算复杂度,所以穷举太慢而不现实
- 数学攻击:目前大因数分解是难题,太慢而不显示
- 定时攻击:通过观察运行时间来猜测密码。可以加入随机延时,或者幂运算前加随机数
- 可能字攻击
- 选择密文攻击
- 共模攻击:不能让一群用户使用相同的n
- 低指数攻击:过小的e容易收到攻击
防范措施
- 使用1024位以上的密钥
- p和q的长度不能相差太大
- p和q的差值不能太小
- gcd(p-1,q-1)应该尽可能的小
- p-1和q-1都应有大的素因子
- e不能选取太小的数
- 在RSA算法中,如果d泄露,在更换新的密钥时请也更换模数n
3. ElGamal公钥密码
- 基于有限域上离散对数问题
- 1985年T.ElGamal提出
- 可签名可加密,最有代表性的公钥密码体制之一
- 同一明文在不同时刻会生成不同的密文
- 数字签名标准(DSS)就是ElGamal签名方案的一种变形
ElGamal密钥对生成
- 随机选择一个满足安全要求的大素数 ,且要求 有大素数因子, ( 是一个有 个元素的有限域, 是 中的非零元构成的乘法群)是一个本原元
- 选一个随机数 ( ),计算 ,则公钥为 ,私钥为
ElGamal加密过程
- 得到接收方的公钥
- 把消息 分组位长度 ( )的消息分组,
- 随机选择整数 , ( )
- 计算 , ( )
- 将密文 发送给接收方
ElGamal解密过程
- 接收方收到
- 使用私钥 和解密算法 进行计算
- 得明文
ElGamal总结
- 密文依赖于明文,又依赖于选择的随机数,对于同一个明文,不同时刻生成的密文不同
- 密文的长度是对应明文长度的两倍
4. 椭圆曲线公钥密码ECC
- 椭圆曲线密码系统可以达到和RSA同样的安全程度,但位数要少的多
- 1985年,Koblitz和Miller提出,基于椭圆曲线的离散密码体制
- 椭圆曲线上离散对数问题,公认要比整数分解问题和模 离散对数问题难解得多
椭圆曲线
- 威尔斯特拉方程所确定的平面曲线
- 满足上述方程的数对 称为椭圆曲线E上的点
- 定义无穷点或零点
实数域上的椭圆曲线
- 密码学中,常采用下列形式的椭圆曲线
-
没有重根的条件:
有限域上的椭圆曲线
- 可以将椭圆曲线定义于有限域
上:
- 是大素数
- 从 上取值,满足
- 通常用 表示
- 该曲线只有有限个点数 , 越大,安全性越高
椭圆曲线在模 下的Abel群
加法规则
-
,则
- 其中,
- 对所有点 和 满足加法交换律和加法结合律
椭圆曲线构造密码体制的数学问题
- 用于密码学的椭圆曲线可以分为奇偶两大类,分别对应 多项式(适合于软件实现)和 多项式(适合于硬件实现),它们都是离散的
- 椭圆曲线上所有的点都落在某一个区域内,组成一个Abel群,与密钥长度相对应
- 密钥长度越长,区域越大,安全层次越高,但计算速度慢
- 在椭圆曲线构成的Abel群上考虑方程
- 其中 且为生成元, 为 的倍点,即存在正整数 (小于 )
- 由 和 易求 ,但由 、 求 是困难的,这就是椭圆曲线上的离散对数问题!
ECC密钥对生成
- 用椭圆曲线生成用户B的公私钥对
- 选择一个椭圆曲线 ,构造一个椭圆群
- 在 中挑选生成元点 , 应使得满足 的最小的 是一个非常大的素数( 表示椭圆曲线的元素个数, 是 的素因子)
- 选择一个小于 的整数 作为其私钥,然后产生其公钥 ,则B的公钥为 ,私钥为
ECC加密过程
- A将明文编码成一个数 ,并在 中选择一个点
- 在区间[1,n-1]内,A选取一个随机数 ,并计算
- A计算
- 计算密文
- A将 发送给接收方B
ECC解密过程
- 接收方B收到
- 接收方B使用自己的私钥
,作如下计算
- B计算 ,得出明文
- A选择的随机数 和椭圆曲线点 是保密的!!
- 攻击者若想由密文 得到明文 ,就必须知道 或
- 都必须去解决椭圆曲线上的离散对数问题,其加解密过程是安全的
ECC的安全性
- 越大越安全,但计算速度会变慢,160位可以满足安全要求
- 应该尽可能的大
- 为了防止MOV规约法和Smart法,不能选取超奇异椭圆曲线和异常椭圆曲线等两类特殊曲线
与前两种相比,ECC优势
- 资源丰富,同一个有限域存在着大量椭圆曲线
- 密钥小得多,计算量小,处理速度快,在移动通信、无线设备上应用前景很好
- 安全性较高
对比
ECC应用
- SET
- 智能卡、PDA
- 密码算法速度很快。16位微处理器上的ECDSA数字签名不足500ms
5. 其他公钥密码体制
- MH背包公钥密码算法:基于背包问题。大多数背包密码算法不适合数字签名
- Rabin公钥密码:基于合数模下求解平方根的困难性(等价于大整数分解)。同一密文可能有多个明文。
- Goldwasser-Micali概率公钥密码:基于平方剩余问题。引用了随机操作或随机数,即使明文和密钥相同,两次加密结果也不同。运算量大,速度慢
- NTRU公钥密码:基于数论中在一个非常大的维数格中寻找最短向量的数学难题。应用:智能卡,无线通信等中的数字签名
- ……