专心做可以提升自己的事情
学习并拥有更好的技能
成为一个值得交往的人
一个系统中,n个用户之间进行保密通信。为了确保安全性,两两用户之间的密钥不能一样。这种方式下,需要系统系统提供很多把共享密钥,密钥的数量大幅增加,随之而来的就是密钥的产生、存储、分配、管理的成本也就大幅增加,而使用公钥密码体质就可以大大减少密钥的数量,来降低密钥的管理难度。
公钥密码体制的公钥加密原理非常类似于信箱的工作原理。
公钥密码体制的公钥加密原理非常类似于信箱的工作原理。
一个信箱有两个开口,一个开头对所有人开放 就相当于公钥,寄信人通过开放的开口将信投入信箱,相当于应用公钥对信件进行加密。
邮递人员和工作人员拥有信箱的钥匙,就相当于私钥。
他们能够运用私钥打开信箱取出信件的过程相当于运用私钥进行解密。只有拥有信箱钥匙的人才能打开信箱,并取出信件,相当于只有拥有私钥的人才能解密数据。
公钥的分发不要求保密但要求真实可信,主要的公钥分发方法有:
其中公开可访问目录、公钥授权、公钥证书这三种方法都依赖于第三方实体或组织保证公钥可信。
若图所示 假设,Alice和Bob各拥有一对密钥PKa,SKa,和 PKb,SKb。Bob想发送机密消息P给Alice,Bob可以利用Alice的公钥PKa和公钥加密算法加密消息P得到密文C然后发送给Alice。Alice接收到密文C之后利用自己的私钥和相应的解密算法解密密文得到明文消息P,如果明文P是Bob生成的私有的会话密钥,则公钥密码体制的加密模型可用于密钥交换。公钥密码的认证模型而可用于实现用户行为的认证,也就是行为的不可否认性,和身份鉴别的功能。
如图所示:
假设Bob想向Alice证明自己的身份或者行为。认证模型的整体思想被认证方通过一定的方式向认证方证明他拥有对应的私钥。而证明的方式就是 被认证方利用自己的私钥对认证的相关的消息或者摘要实行变换S,该变换一般称为数字签名。然后认证方用被认证方的公钥进行签名验证。
有一种非常广泛的对称密码和公钥密码混合使用的方法称为数字信封技术。该技术结合两种密码的优势利用对称密码比加密公钥密码效率高的特点,用对称密码加密长的数据而用公钥密码的加密模型作为安全信道向信息的目的方传递短的对称密钥。
假设消息放松方Bob要发送机密消息给Alice,双发需要配置一对公钥。
其具体操作过程为:
根据应用功能 典型公钥密码算法 如表所示
算法 | 加/解密 | 数字签名 | 密钥交换 |
---|---|---|---|
RSA | 是 | 是 | 是 |
Diffie-Hellman | 否 | 否 | 是 |
ElGamal | 是 | 是 | 是 |
Schnorr | 否 | 是 | 否 |
DSA | 否 | 是 | 否 |
椭圆曲线密码ECC | 是 | 是 | 是 |
根据上表我们可以得出:
1.RSA和ElGamal 这两种算法可以用于所有的用途(所有是指上表中指出的三种应用)
2.Diffie-Hellman密钥交换算法专门用于密钥交换
3.数字签名算法DSA和Schnorr算法专门用于数字签名
RSA算法于1977年由Rivest,Shamir,Adleman一起提出,RSA这个名字就是由这三位的名字的首字母组成的,RSA算法也是公钥密码算法中最具代表性的算法。
RSA 是典型的非对称加密算法,该算法基于大素数分解,核心是模幂运算。
RSA的算法分为三个部分
RSA的密钥生成过程如下
①独立的选取两个大的素数p和q,计算n=p×q和欧拉函数Φ(n)=(p-1)(q-1)
②然后随机的选取整数e,满足1≤e<Φ(n),gcd(Φ(n),e)=1
③解方程ed ≡ 1 mod Φ(n),求d
得出私钥 (d,n),公钥(e,n)
RSA的加密和解密算法非常简单。
加密:C≡m^e mod n 明文m 的加密过程就是计算m的e次方 mod n
解密:C≡C^d mod n 计算密文C的d次方 mod n
0 < m < n
假设Bob想和Alice交换一个密钥,Bob选定一个素数P和原根g并公开,也选定一个小于素数P的随机数b,在mod P下计算B=g的b次方并公开。Alice也选定一个小于素数P的随机数a,在mod p下计算A=g的a次方并公开。离散对数困难性保证了攻击者不能根据公钥参数A和B计算出私钥a和b。最后Bob和Alice各自在本地mod P下计算密钥K=g的a和b。
但是基本的D-H算法在安全性方面存在许多不足
①没有对方发送的公钥参数和双方身份进行认证,容易受到中间人攻击;
②它是计算密集型,容易遭受阻塞性攻击,即攻击者发起大量的密钥交换请求,浪费被攻击者的计算资源。
③不能抵抗重放攻击。(将子密钥交换过程中产生的消息可以重复发送)
①加入鉴别机制抵抗中间人的攻击,支持数字签名、公钥加密和对称密钥加密三种鉴别机制,Oakley协议可以支持DNS公钥,能对IPv4,IPv6地址和有效域名进行鉴别;
②采用cookie程序机制来对抗阻塞攻击,cookie程序是由源和目的地址、源和目的UDP端口以及一个本地生成的秘密值共同生成的哈希值;
③采用现时机制抵抗重放攻击,每次密钥交换过程双方都在本地生成一个伪随机数(现时nonce)并加密用于应答中。因为每次每次的现时都不同,所以消息不能重用。
相对于D-H算法 Oakley算法可能需要双发预先配置被认证的公钥。
如上图所示,Oakley的秘钥交换过程中除了传递D-H算法的公钥参数以外,还需要传递双发的cookie生成ID以及用对方的公钥加密的现时。双发交换的身份ID也可以用临时的D-H秘钥即a、b次方进行加密。最后的共享秘钥的计算为D-H秘钥即a、b次方、双方现时和cookie 合起来的一个伪随机函数值。该伪随机函数在秘钥交换过程中进行协商,比如HMAC-MD5。
①瞬时D-H,用于创建临时密码,在交换D-H公钥参数时用发送者的私钥进行签名,来防止中间人攻击;
②固定D-H,D-H的公钥参数包括在由签证机构颁发公钥证书中,可以多次使用。公钥证书起到鉴别用户身份防止中间人攻击的作用。
以上两种方法都被用于传输层协议SSL中。
根据不同的安全强度,D-H被区分为不同的D-H组
DH 组 1: 768位
DH 组 2: 1024位
DH 组 5: 1536位
其结构包括四个部分:
①系统初始化:系统选取公共参数包括大素数p以及一个本原根g
②秘钥生成:随机选取整数x,1≤x≤p-2,计算y=g的x次方 (mod p),公钥为y,私钥为x;
③加密:对任意明文m∈Z(Z是一个整数集) ,随机选取一个秘密整数k,1≤k≤p-2,计算c1 = g的k次方 (mod p), c2 = m 乘以y的k次方 (mod p), 密文 c = (c1,c2);
④解密:计算 m=c2/(c1的x次方) (mod p)
EIGamal用于签名的时候,为了提升效率,对签名算法进行了修改,系统参数的选取和秘钥的生成都没有变
①系统初始化:系统选取公共参数包括大素数p以及一个本原根g
②秘钥生成:随机选取整数x,1≤x≤p-2,计算y=g的x次方 (mod p),公钥为y,私钥为x;
③签名生成:对待签名的消息m∈Z,随机选取一个秘密整数k,1≤k≤p-2,且(k,p-1)= 1,计算 r=g的k次方(mod p),s=(m- r x)/k (mod p-1) ,则(m,r,s)为对消息m的数字签名。
④签名验证:对方收到对消息m的数字签名(m‘,r’,s‘)后,利用签名者公开秘钥y,g,p可对签名进行以下验证:
如果上式成立,则接受该签名,否则拒绝该签名。
ElGamal 签名方案的变种,基于离散对数求解的困难性,将生成签名所需的消息计算量最小化
算法
①系统公共参数选取:素数p(一般1024位)和q(一般160位),q是p-1的素因子,选取整数g,满足gq ≡ 1 (mod p) ,公共参数为 (p,q,g)
②密钥生成:选取随机整数s,0 < s < q ,作为私钥;公钥为
③签名生成:选择随机整数r,0 < r < q,计算x=g的r次方 (mod p),对待签名消息m,计算e=H(m||x),y=(r+se) (mod p),得到签名为(e,y)
④签名验证:收到签名(e’,y‘)之后,验证等式
是否成立
1991年8月 美国国家标准局(NIST)公布了数字签名标准(Digital Signature Standard,DSS),此标准采用的算法为数字签名算法(Digital Signature Algorithm,DSA)
它是ElGamal 和 Schnorr 签名算法的变种,采用了Schnorr系统中,g为非本原元的做法,以降低其签名文件的长度。
值得注意的是DSA和Schnorr算法的签名都针对消息的hash值,这使得签名同时具有消息完整性验证的功能。
椭圆曲线密码(Elliptic curve cryptography,ECC),在椭圆曲线上建立公钥密码算法,在1985年由Neal Koblitz和Victor Miller分别独立提出的;
ECC的主要优势是在同样的安全强度下,其可以比其他的方法使用更小的秘钥,如模数长度为1024位的RSA和ElGamal的安全强度约等于160位模数的ECC
ECC的安全性都依赖于有限域上椭圆曲线离散对数困难问题
相比于公钥密钥算法RSA、ElGamal等定义在有限域乘法群上,ECC则定义在有限域假发群上;(椭圆曲线上的加法对应乘法群的乘法,椭圆曲线的数乘对应乘法群的幂运算,一般认为有限域乘法群上的离散对数问题和椭圆曲线上的离散对数问题并不等价,椭圆曲线上的离散对数问题要困难的多)
ECC中最流行的有限域是以素数为模的整数域GF(p)和特征为2的伽罗瓦域GF(2^m),前者通常在通用处理器上更有效,后者在专门的硬件实现上计算更为有效
ECC可用于密钥交换、加解密和数字签名。
我国的密码标准SM2 (GM/T 0003-2012)和SM9 (GM/T 0044-2016)算法是椭圆曲线密码机制,其推荐了一条256位的曲线作为标准曲线。
SM2标准包括总则,数字签名算法,密钥交换协议,公钥加密算法四个部分。
SM9 是基于双线性对的标识密码算法,也包含四个部分:总则,数字签名算法,密钥交换协议以及密钥封装机制和公钥加密算法。
可以实现基于身份的密码体制,可以将用户的身份标识如手机号码、邮件地址等作为公钥,不需要申请数字证书,适用互联网的各种新兴应用的安全保障。
密码服务
电子邮件安全
智能终端保护
物联网安全
云存储安全
...
大纲生成的思维导图敬上