要保证一个secure communication,必须满足以下三点:
1.private communication,两边的交流是私密的
2. integrity checks,确保数据是正确的且没有被改动过
3.authentication,确认双方的身份信息是正确的
Transport layer security(TLS)也叫做secure socket layer(SSL),是HTTPS的基础。允许客户机,服务器应用程序可以探测到安全风险,包括消息篡改(message tampering),消息拦截(message interception),消息伪造(message forgery)
服务器如何知道请求的是TLS协议?HTTPS用的是443端口,而不是80
TLS是transport layer protocol吗?不是,应该是算application protocol,但是在HTTP之下:
Presentation layer (6)
– Responsible for encryption, and data formatting (e.g., CR/LF vs LF)
• Session layer (5)
– Authentication, restoration of interrupted sessions
TLS是如何“握手”的
cipher suites指的是支持的加密算法。在hello阶段主要是双方确认支持的加密算法以及certificate(用来authenticaiton),在key exchange阶段
的key用来之后的加密(encrytion and decryption)。
Cryptography(加密学)包含了key,encryption和decrption
key是什么?是任何已知的信息
encryption可以把原数据(plain text)转换成乱码(cipher text),decryption把乱码转换成原数据
cipher指的是一种算法,可以理解为数学里的function,输入一段数据,通过计算输出另一段数据
世界上没有绝对的加密,总可以被brute force attack(暴力破解),我们的任务是让暴力破解的时间越久越好
有两种cryptography,symmetric(same key) 和asymmetric(public key crypto)
Symmetric Cryptography(对称加密)
即信息的发送方和接收方用一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。
现代用的最多的是AES (Advanced Encryption Standard),AES 把数据分割成blocks然后去加密(encrypt)每个block。 AES 有不同的模式
– ECB, CBC, CTR, etc.
– Determines how each block is treated, and/or linked
ECB(electronic codebook):最简单的加密模式,可以并行化。需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。本方法的缺点在于不提供随机性,同样的明文块会被加密成相同的密文块;因此,它不能很好的隐藏数据模式。在某些场合,这种方法不能提供严格的数据保密性,因此并不推荐用于密码协议中。
下面的例子显示了ECB在密文中显示明文的模式的程度:该图像的一个位图版本(左图)通过ECB模式可能会被加密成中图,而非ECB模式通常会将其加密成右图。
CBC – Cipher Block Chaining 密码块链接:每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。
它的主要缺点在于加密过程是串行的,无法被并行化.
注意在加密时,明文中的微小改变会导致其后的全部密文块发生改变,而在解密时,从两个邻接的密文块中即可得到一个明文块。因此,解密过程可以被并行化,而解密时,密文中一位的改变只会导致其对应的明文块完全改变和下一个明文块中对应位发生改变,不会影响到其它明文的内容。
Asymmetric Cryptography(public key)非对称加密
非对称加密有公钥和私钥两种密钥,其中,公钥是公开的,不需要保密,私钥由个人持有,必须妥善保管和注意保密。加密和解密使用两种不同的密钥,是它得名的原因。RSA是非对称的一种加密方法
Diffie-Hellman Key Exchange (Symmetric)
它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。它是很多认证协议的基础,并且被用来提供传输层安全协议(TSL)的短暂模式中的前向安全性。
Cipher Suite:加密格式
他是一个加密算法,密匙交换机制和参数的组合
Examples
– TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x0033)
– TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
Public Key Signatures公开密钥认
是把加密和解密反过来,不是用public key来加密,而是用public key 解密。key holder用private key加密一个文件,然后如果任何人能用public key解密的话,说明这份文件是key holder 签的
但是如果文件太大怎么办?可以加密文件的hashcode
hash的特性
– Easy and fast to calculate
– Infeasible to reverse (important caveats here)
– Extremely unlikely two slightly different documents produce the same hash
salt(加盐值)
为啥需要salt?当所有网站都用一个sha,用户在所有网站都用一个密码,那一个网站被黑了,所有网站都gg。Salt 可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的 Salt 都不一样,用户注册的时候,数据库中存入的不是明文密码,也不是简单的对明文密码进行散列,而是 MD5( 明文密码 + Salt)。当用户登陆的时候,同样用这种算法就行验证。由于加了 Salt,即便数据库泄露了,但是由于密码都是加了 Salt 之后的散列,坏人们的数据字典已经无法直接匹配,明文密码被破解出来的概率也大大降低。
电子证书(Digital Certificate/Public key certificate)
是用于公开密钥基础建设的电子文件,用来证明公开密钥拥有者的身份。此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)(Certificate Authority (CA))对这份文件的数字签名,以保证这个文件的整体内容正确无误。拥有者凭着此文件,可向计算机系统或其他用户表明身份,从而对方获得信任并授权访问或使用某些敏感的计算机服务。如果你信任签发的机构(一般来说是是根据浏览器的信任列表),就可以信任证书上的密钥,凭公钥加密与拥有者进行可靠的通信。
TLS有缺陷,Local TLS
建立本地的认证机构(CA)来安装证书,本地代理和杀毒软件就是用了此原理
Local proxy can intercept TLS connections
– Acts as a MITM
– Dynamically issues fake certificate using local CA
– Virtually invisible to the user
• Common practice for Anti-Virus/Web protection software
– Avast, Kaspersky, ESET
– Necessary to monitor and analyse TLS traffic
TLS有缺陷,在服务器端会用TLS代理来防止DDOS攻击
Key size密钥大小
要足够大以至于不被暴力破解,非对称加密会比对称加密大RSA – 2048 bits, AES – 128 bits
随机性
在加密里随机性很重要
– Key Generation
– Initialization vector (IV) generation for ciphers
– Padding
Randomness must never be reused or discoverable随机性必须保证不会被重复使用和被发现
生成好的随机性很难
而解密时
网友评论