机密性
在不安全的信道上,对传输内容进行加密,保证信息的安全性,比如用户密码等。
对称加密
加密和解密使用的密钥是相同的
常见算法
密钥长度直接决定加密强度,而工作模式和填充模式可以看成是对称加密算法的参数和格式选择。
算法 | 密钥长度 | 工作模式 | 备注 |
DES | 56/64 | ECB/CBC/PCBC/CTR/... | DES算法由于密钥过短,可以在短时间内被暴力破解,所以现在已经不安全了 |
AES | 128/192/256 | ECB/CBC/PCBC/CTR/... | |
IDEA | 128 | ECB |
密钥交换
如何如何在不安全的信道上安全地传输密钥?要解决这个问题,密钥交换算法即DH算法:Diffie-Hellman算法应运而生。
DH算法解决了密钥在双方不直接传递密钥的情况下完成密钥交换,这个神奇的交换原理完全由数学理论支持。 因此获取对称密钥,通信双方需要协商。
但是DH算法并未解决中间人攻击,即甲乙双方并不能确保与自己通信的是否真的是对方。
非对称加密
加密使用的密钥和解密使用的密钥是不相同的。
一把是作为公开的公钥,公钥加密的信息,只有私钥才能解密
另一把是作为谁都不能给的私钥,私钥加密的信息,只有公钥才能解密
常见算法
典型算法就是RSA算法,它是由Ron Rivest,Adi Shamir,Leonard Adleman这三个一起发明的,所以用他们仨的姓的首字母缩写表示。
密钥交换
使用非对称密钥算法进行”对称密钥“的交换。其过程为:
Server端发送了公钥给客户端,私钥自己保存,这是非对称密钥算法中的公钥、私钥对;
客户端会创建一个密钥,这个就是对称加密算法中的密钥。然后用 Server 端的公钥对这个密钥加密,发送给 Server 端;
Server 端收到客户到发送过来的加密过的密钥,使用自己的私钥进行解密,得到加密前的密钥;
接下来传输数据则使用“对称密钥”进加密和解密。
这个就是利用非对称密钥算法保证对称密钥本身的安全。
比较
效率:对称加密,效率比较高,性能也比较好。是非对称加密的百,千倍。通常用于对大量信息进行加密(如对所有报文加密),一般用于数字签名和对较少的信息进行加密。
维护:对称加密,维护不方便。多个用户就需要维护多个密钥,非对称加密可以解决,但是效率不高。
内容相对不安全:非对称加密的公钥是公开的,所以针对私钥加密的信息,黑客截获后可以使用公钥进行解密,获取其中的内容。
完整性
对任意一组输入数据进行计算,得到一个固定长度的输出摘要。
用来防止传输内容被篡改。
常见算法
算法 | 全称 | 摘要长度 |
md5 | Message Digest 5 | 128bits |
sha1 | Secure Hash Algorithm 1 | 160bits |
sha224 | sha256, sha384, sha512 |
特点
输入一样,输出必然一样
雪崩效应,输入的微小改变,将会引起结果的巨大改变
无论原始数据是多少,结果大小都是相同的
不可逆,无法根据特征码还原原来的数据
身份认证
使用上述加密方式,都不能解决身份认证的问题,不能保证接受到的信息一定是对方发送过来。如何在相互不认识的两台主机之间安全的交换密钥。
MITM(Man-in-the-MiddleAttack)
在不信任的网络间,双方进行密钥交换,若黑客拦截真实的公钥,发送自己的公钥给client。这样之后的报文,就可以拦截下来并构造虚假消息给 server。
数字签名算法
使用数字签名的目的是为了确认某个信息确实是由某个发送方发送的,任何人都不可能伪造/修改消息,并且,发送方也不能抵赖。
常见的算法比如:
RSA
DSA签名
ECDSA
步骤:
在发送加密数据时,使用数据摘要算法将密钥和数据转换成固定长度的数据(MD5值或者 MAC值);
接受者收到加密的数据后并解密后,通过相同的算法将密钥和数据转换成 MD5 或者 MAC 值,并与接收到的 MAC 值比较。如果二者相同,则报文没有改变;否则,报文在传输过程中被修改,接收者将丢弃该报文。
CA(Certification Authority)
上述的前提,就是,我的机器必须有一个的可信的公钥列表。全球皆知的几个著名大 CA,称为 root CA。操作系统中内置,层层授信背书。
这样由这些受信的机构证书告诉我某台机器的公钥。
若证书是进行的自制的,在使用的时候需要指定,因为证书不在os受信范围内
数字证书
保证客户端收到的 Server 端的公钥是真实的,是保证整个加密连接的可靠性的第一道防线。
数字证书由权威机构CA(Certification Authority)签发,签发过程为:
用户首先产生自己的密钥对,并将公钥及部分个人身份信息传送给CA;
CA 核实用户身份(将执行一些必要的步骤,以确信请求确实由用户发送而来);
CA 对用户的所有信息(公钥、所有者、有效期)进行 Hash 计算,得到一个 Hash 值,然后再使用私钥对 Hash 值进行加密得到数字签名,就得到了数字证书。该证书包含:用户的公钥、所有者、有效期等信息,同时还附有CA的数字签名信息。
数字证书的验证流程:
客户端会使用同样的 Hash 算法获取该数字证书的 Hash 值 H1;
通常浏览器和操作系统中集成了 CA 证书(包含CA公钥、所有者),客户端取得这个CA证书,使用其中的 CA 公钥解密数字签名,得到一个 Hash 值 H2 ;
比较 H1 和 H2,如果值相同,则数字证书可信。
流程如下:
