数字签名
公钥私钥
从公钥私钥说起。它们可以互相加解密彼此的信息。即,公钥加密的信息可以被私钥解密。私钥加密的信息可以被公钥解密。
非对称性
即一份被公钥加密的信息,将无法被公钥解密,除非你正是那个加密此信息的人,自身就知道原始信息。
一般的加密通信
即公钥公开后,发送者A使用公钥加密自己的信息后,发送给B。B使用私钥(不公开)解密后得到信息。此过程是安全的,因为只有私钥拥有者能解密信息。
B再对回复信息用私钥加密,A得到后使用公钥解密即可得到回复信息。而由于公钥是公开的,此回复消息如果被其他人收到,将也能解密看到。
由此,https协议的做法便是,回复信息中是公开自己所支持的加密算法,以便让A选择一种方式来对后续的通信进行加密,在A选择后,因为A到B的发送是安全的,因此也确保了它们之间建立了私密的通信,即A所决定采取的B所回复支持的加密形式之一。
信息摘要
目前使用的一些较流行的散列算法是安全散列算法 1 (SHA-1)、安全散列算法 2 系列(SHA-2 和 SHA-256)和消息摘要 5 (MD5)。
数字签名
如上所说,公钥一般用于加密信息,私钥一般用于解密信息。而数字签名时的用法与此相反,即用私钥加密,外部验证者再用公钥解密。
一般来说,数字签名用于验证外部接收者得到的数据未被篡改。注意,是指“未被篡改”,并不是指保密(无法让其他窃听者读取)、也不是指任何文件的原始内容。它所加密的对象往往是信息的摘要,即哈希,而非信息整体本身。由此,对于接收者在验证时,需要自行按照约定摘要算法计算信息本体的摘要,再使用公钥对加密摘要解密,并对比摘要是否一致。
设想篡改者更改了信息本体后,接收者计算的摘要便无法和私钥所加密的原始信息本体摘要匹配。
数字证书、证书颁发机构
数字证书可以被自己生成,此时得到的即自签名证书,也可以被证书颁发机构(CA)所颁发。这两类不同的证书的使用场景各不相同。
数字证书包含个人或组织的公钥,并由 CA 进行数字签名。有关组织、个人和 CA 的其他信息也可以包含在证书中。
注意,它除了包含需要对外的公钥,还包含了颁发组织的公钥,以及颁发机构对此的数字签名。由此我们在验证证书的时候,需要对比此公钥和改证书结构的公钥解密数字签名后的信息是否匹配。
证书链、认证链
即通过数字证书中的颁发机构,一直向上验证,即验证发送者的数字证书、发送者数字证书的CA机构的数字证书,一直到某数字证书已处于“受信任”的证书列表之中。“受信任”的证书列表一般是由系统内置的,而用户也可以安装一部分。对于应用框架,也可以自行决定是否信任某数字证书。