公开密钥密码
对于对称密钥算法来说,加密者如何将指定的一个(种子)密钥发送给接密者,而且能保证不泄密呢? 密钥分配问题
再有很多个用户的网络之中,任两个用户之间都需要有共享的密钥,当网络之中的用户数n很大时,需要管理的密钥数为n*(n-1)/2 密钥管理问题
当用户A收到用户B发来的消息时,用户A无法向任何第三方证明,此消息确实是来源于用户B的。 无签名功能
为了解决这几个问题,从传统对称密钥算法发展到公开密钥算法。
工作前提:
首先,接收消息的端系统,产生一对用来加密和解密的密钥对。
然后,端系统将加密密钥(公钥)公开,另一个用来解密的密钥(私钥)保密。
工作过程:
A向B发送消息m,把消息m用B的公钥加密,得到密文c
B收到A发来的密文c,用自己的私钥解密,就能得到原文m
注意:
公钥(public_key)可以被任何人知道,用于加密或者验证签名
私钥(private_key)只能被消息的接受者或者签名者知道,用于解密或者签名
由私钥及公开参数容易计算出公钥,由公钥和公开参数很难计算出私钥。
公钥密码体制(也称双钥密码体制/非对称密码体制)
分为:
密钥建立方案(Public Key Establishment Schemes,PKES) 用于交换秘密信息——常用于对称加密算法的密钥分配
公开密钥加密(Public Key Encryption,PKE) 用于加密任何消息,任何人都可以用公钥加密消息,私钥的拥有者可以解密密文消息,任何公钥加密方案能够用于密钥分配方案PKDS,一些公钥加密方案也是数字签名方案
数字签名( Signature Schemes,Ss) 用于生成对某消息的数字签名,私钥的拥有者生成数字签名,任何人可以用公钥验证名
公钥加密算法的特点:
最大特点:采用两个相关密钥将加密和解密能力分开 其中一个密钥是公开的,称为公开密钥,简称公开钥,用于加密 另一个密钥是为用户专用,因而是保密的,称为秘密密钥,简称秘密钥,用于解密
加、解密次序可换,EPKB[DSKB(m)]=DSKB[EPKB(m)] 这条公式很有用,但不是对所有的算法都适用
公钥密码算法的加、解密速度比对称密钥密码算法慢,因此公钥密码体制目前主要用于密钥和数字签名
穷举算法在理论上是能够破解公钥密码,但只要能保证密码足够长,保证计算安全就可以了
安全性依赖于足够大的困难性差别,如NP和P问题(利用公钥及公开参数加密明文容易计算;利用私钥及公开参数解密密文容易计算;只利用公钥解密密文困难)
研究公钥密码算法就是要找出合适的单向陷门函数
定义 单向函数是两个集合X、Y之间的一个映射,使得Y中每一元素y都有惟一的一个原像x∈X,且由x易于计算它的像y,由y计算它的原像x是不可行的。
函数是单向陷门函数,是指该函数是易于计算的,但求它的逆是不可行的,除非再已知某些附加信息。当附加信息给定后,求逆可在多项式时间完成。