这个虽然是闲扯淡的,但是看的时候请抓牢:
一个故事
这是从别人那边听来的故事,作为安全知识的入门非常有意义。
暂时不讨论善恶,我们站在叔叔的立场上,看他哪些事情没做好?
所以从技术层面上,我们可以给他一个有效建议,跟别的国王约定:
在事实上,信息传输的物理通道是不安全的,【信使】作为信息的传递人,可以轻易的偷窥别人的信息,甚至“代表”别人发言。老外的思路是认可这个现状,然后从数理逻辑上来应对这个问题。
Public Key Infrastructure,公开密钥体系,就是针对这个情况的。
这个体系的特点是,算法思路和实现都可以是公开的,只要保证Key的安全就可以。
这个章节里面,我们只要讲到加密和签名就可以了。
加密
加密根据密钥可以粗略的分俩类
对称加密
对称加密,就是加密和解密的过程里面,用的key都是一个——我们称为SecretKey。
业务跟进:在前面我们给王叔的建议,很明显是一个比较土的对称加密方案。
非对称加密
非对称加密,加密和解密的密钥不同,用于加密的称为公钥(PublicKey),用于解密的称为私钥(PrivateKey)。
业务跟进:我们的建议,国王们各自有一套公钥+私钥,私钥自己保留好,公钥发布给大家。谁想给某人写信了,就用这个人的公钥加密,信件半路上被人截胡了,也无法解密内容。
对称和非对称的优劣对比
业务跟进:我们的建议,国王们各自有一套自己的公钥+私钥,私钥自己保留好,公钥发布给大家。谁想发邮件,用私钥对内容进行“签名”,签名的结果写在信封上;收到邮件的人,用【发件人的公钥】+【内容】+【签名】进行验签,以确保这个邮件就是那个国王发的
JAVA伪码表示如下
其实对称加密可以忽略,我们就记得非对称加密和签名比较重要
到这里,我们就可以给王叔和其他的国王们一个比较完美的RSA方案
把自己的公钥送到别人那边,要包装一下,那个就是公证书
自己的私钥也要好好的包装一下,这个就是私证书
证书的烦恼
假设国王们已经建立了证书体系,这个时候,某个国王英年早逝,他的弟弟扶持?/挟持?年幼的侄子摄政。很不幸的是,暴毙的国王把象征权力的个人私证书和其他国王的公证书都付之一炬。
于是摄政王需要自己做一套公钥私钥,然后派信使去见每个国王,送去自己的公钥,拿回来对方的公钥。这是一个痛苦的折磨,对于所有涉及到的人:
就实际情况来说,最安全的方式是,其他的国王亲自过去,验证新王,交换证书。
但是很明显这个是一个成本很巨大的工作,而且很危险。说不定回家的半路上,哪个国王头疼脑热的,也英年早逝了,然后大家又要重新跑一趟,包括那个宝座还没坐热的摄政王。
注意:即使有了internet,这样的场景下证书交换是不能通过网络的,因为信任没能解决,只能亲自跑。
好在国王们都相信一个人——代表了神的意志的教皇。教皇说:你们也别这样跑,来回折腾。我给你们的公证书上面加上主的签名——当然也就是我代表主的签名,以后大家就只要如此如此:
用一个证书给别的证书做签名背书,产生了证书链,就解决了证书的 N*N 问题。
BTW:当某个国王派出军队出去征服新世界的时候,教皇一般也会派出一个大主教,授予他一个特殊的证书,这个证书是由教皇的证书签名,但是它还可以给别的证书签名。
——这个就是多级授权。
摘要MessageDigest不是加密
也不是所谓的“单向加密”,就是消息摘要
message authentication code,一般不用。