前言
对称加密 symmetric cryptographic
简单的说就是加密和解密用的同一个密钥。常见的有DES,RC5。
优点:加解密速度快。缺点:容易暴露密钥。
公式:E(msg, key) = emsg, D(emsg, key) = msg。
非对称加密 asymmetric cryptographic
简单的说就是加密密钥与解密密钥不同,分私钥和公钥。这种方法大多用于密钥交换,RSA便是一个我们熟知的例子。
优点:安全性高,不用暴露私钥。缺点:加解密速度慢。
公式:E(msg, publickey) = emsg, D(emsg, publickey) != msg, D(emsg, privatekey) = msg。
SSL安全机制
SSL协议实现的安全机制包含:
传输数据的机密性:利用对称密钥算法对传输的数据进行加密。
身份验证机制:基于证书利用数字签名方法对server和client进行身份验证,当中client的身份验证是可选的。
消息完整性验证:消息传输过程中使用MAC算法来检验消息的完整性。
身份验证机制
电子商务和网上银行等应用中必须保证要登录的Webserver是真实的,以免重要信息被非法窃取。SSL利用数字签名来验证通信对端的身份。
非对称密钥算法能够用来实现数字签名。因为通过私钥加密后的数据仅仅能利用相应的公钥进行解密,因此依据解密是否成功,就能够推断发送者的身份。如同发送者对数据进行了“签名”。比如。Alice使用自己的私钥对一段固定的信息加密后发给Bob,Bob利用Alice的公钥解密,假设解密结果与固定信息同样。那么就能够确认信息的发送者为Alice,这个过程就称为数字签名。
SSLclient必须验证SSLserver的身份,SSLserver是否验证SSLclient的身份。则由SSLserver决定。SSLclient和SSLserver的身份验证过程。请參见“3.2 SSL握手过程”。
使用数字签名验证身份时。须要确保被验证者的公钥是真实的,否则。非法用户可能会冒充被验证者与验证者通信。如图1所看到的。Cindy冒充Bob,将自己的公钥发给Alice,并利用自己的私钥计算出签名发送给Alice,Alice利用“Bob”的公钥(实际上为Cindy的公钥)成功验证该签名,则Alice觉得Bob的身份验证成功,而实际上与Alice通信的是冒充Bob的Cindy。SSL利用PKI提供的机制保证公钥的真实性。
消息完整性验证
为了避免网络中传输的数据被非法篡改,SSL利用基于MD5或SHA的MAC算法来保证消息的完整性。
MAC算法是在密钥參与下的数据摘要算法,能将密钥和随意长度的数据转换为固定长度的数据。
发送者在密钥的參与下,利用MAC算法计算出消息的MAC值。并将其加在消息之后发送给接收者。接收者利用相同的密钥和MAC算法计算出消息的MAC值。并与接收到的MAC值比較。假设二者相同。则报文没有改变;否则,报文在传输过程中被改动,接收者将丢弃该报文。
MAC算法具有例如以下特征,使其可以用来验证消息的完整性:
-
消息的不论什么改变,都会引起输出的固定长度数据产生变化。通过比較MAC值,可以保证接收者可以发现消息的改变。
-
MAC算法须要密钥的參与。因此没有密钥的非法用户在改变消息的内容后,无法加入正确的MAC值。从而保证非法用户无法任意改动消息内容。
MAC算法要求通信两方具有同样的密钥,否则MAC值验证将会失败。因此,利用MAC算法验证消息完整性之前,须要在通信两端部署同样的密钥。MAC密钥利用非对称密钥算法保证密钥本身的安全。
利用非对称密钥算法保证密钥本身的安全
对称密钥算法和MAC算法要求通信两方具有同样的密钥。否则解密或MAC值验证将失败。因此。要建立加密通道或验证消息完整性,必须先在通信两方部署一致的密钥。
SSL利用非对称密钥算法加密密钥的方法实现密钥交换,保证第三方无法获取该密钥。SSLclient(如Web浏览器)利用SSLserver(如Webserver)的公钥加密密钥,将加密后的密钥发送给SSLserver。仅仅有拥有相应私钥的SSLserver才干从密文中获取原始的密钥。SSL通常採用RSA算法加密传输密钥。
-
实际上,SSLclient发送给SSLserver的密钥不能直接用来加密数据或计算MAC值。该密钥是用来计算对称密钥和MAC密钥的信息,称为premaster secret。SSLclient和SSLserver利用premaster secret计算出同样的主密钥(master secret)。再利用master secret生成用于对称密钥算法、MAC算法等的密钥。premaster secret是计算对称密钥、MAC算法密钥的关键。
-
用来实现密钥交换的算法称为密钥交换算法。非对称密钥算法RSA用于密钥交换时,也能够称之为密钥交换算法。
利用非对称密钥算法加密密钥之前,发送者须要获取接收者的公钥,并保证该公钥确实属于接收者。否则。密钥可能会被非法用户窃取。如图1所看到的。Cindy冒充Bob,将自己的公钥发给Alice。Alice利用Cindy的公钥加密发送给Bob的数据。Bob因为没有相应的私钥无法解密该数据,而Cindy截取数据后,能够利用自己的私钥解密该数据。SSL利用PKI提供的机制保证公钥的真实性。
利用PKI保证公钥的真实性
PKI通过数字证书来公布用户的公钥,并提供了验证公钥真实性的机制。数字证书(简称证书)是一个包括用户的公钥及其身份信息的文件,证明了用户与公钥的关联。
数字证书由权威机构——CA签发,并由CA保证数字证书的真实性。
SSLclient把密钥加密传递给SSLserver之前,SSLserver须要将从CA获取的证书发送给SSLclient,SSLclient通过PKI推断该证书的真实性。假设该证书确实属于SSLserver,则利用该证书中的公钥加密密钥,发送给SSLserver。
验证SSLserver/SSLclient的身份之前,SSLserver/SSLclient须要将从CA获取的证书发送给对端。对端通过PKI推断该证书的真实性。
假设该证书确实属于SSLserver/SSLclient,则对端利用该证书中的公钥验证SSLserver/SSLclient的身份。
概念解释
既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密; 同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。
创建一对SSH Keys(公钥和私钥),将公钥放到服务器,私钥自己电脑上保存,就可以通过SSH协议进行远程访问了。
private key 用于签章,和解密 public key 用于验章,和加密 这样服务器就可以确认命令是由特定的客户端发出来的了
加密和签章有什么区别? 加密:公钥放在客户端,并使用公钥对数据进行加密,服务端拿到数据后用私钥进行解密; 签章:私钥放在客户端,并使用私钥对数据进行加签,服务端拿到数据后用公钥进行验签。 前者完全为了加密;后者主要是为了防恶意攻击,防止别人模拟我们的客户端对我们的服务器进行攻击,导致服务器瘫痪。
证书由认证机构颁发,上面有数字签名,这个数字签名由认购机构用自己的私钥加密产生,对应的公钥会公布出来 浏览器内置有常用认证机构的公钥,可将证书上的数字签名解密