SSH:公钥密码与数字签名(1)

前一段时间复习了SSH的相关知识,这里整理给出。

公钥密码学可以说是现代互联网的根基之一,而且RSA(一种公钥加密技术的实现)的三位发明人(他们三人的名字首字母就是R.S.A)也获得了图灵奖。

公钥密码学

  • Bob有两把钥匙,一把公钥,可公开;另一把是私钥,一定不能公开。

  • Bob把公钥给Alice。

    注:Alice 和 Bob 是密码学经典教材中的经典人物,参见wiki

Alice 向 Bob 发送信息

  • Alice使用从Bob处得到的公钥,将报文加密后发送给Bob,Bob收到后使用私钥解码即可。

Bob 向 Alice 发送信息

  • Bob使用一种叫数字签名(Digital Signature)的技术:Bob使用Hash函数(得益于巧妙的数学设计,Hash函数把一段信息变成固定长度的信息且一般不会重复),生成报文的摘要(Digest)。
  • Bob使用私钥,对摘要加密,生成数字签名(Signature)。(摘要的长度较短且固定,如果报文太长,使用私钥直接加密的话,一是计算时间长,二是传送信息时出错数量也会增加)
  • Bob将数字签名附在在报文下,发送给Alice。
  • Alice收信后,可使用公钥对数字签名解密,即可检验信件:即如果解密的数字签名与收到报文的Hash结果一致,则可报文未被修改;否则不可信任,报文被修改。

数字证书

潜在风险

  • 如果Carol想欺骗Alice,他可以通过一些不合法的手段把Alice手上的、来自Bob公钥替换为自己的公钥。这样当Carol使用自己的私钥生成数字签名时,由于Alice手上持有的是Carol的公钥,所以Alice是无法防备的,她会天真的以为收到的报文仍然是来自可信任的Bob。

数字证书

  • Bob为了保护Alice,他找到证书中心(Certificate authority, CA),为自己的公钥做认证。

  • 证书中心使用自己的私钥,对Bob的公钥以及其他相关信息做加密,生成了数字证书(Digital Certificate)。

  • Bob以后给Alice发信息时,报文附上签名的同时,也要附上数字证书。

  • Alice收到信息后,用CA的公钥解开数字证书,就可以获得Bob的真实公钥,就能确定自己手上的公钥是否为Bob的。

    注:证书中心是可信任第三方(Trusted third party)。

https协议

  • https协议主要用于网页加密,毕竟你也不想让别人看到你浏览的内容和输入的密码(笑)。

  • 客户端向服务器发送加密的请求;

    服务器使用私钥加密内容,连同数字签名、数字证书,发给客户端。

  • 如果数字证书记录的网址,与你正在浏览的网址不同,说明这张证书可能被冒用,浏览器会发出警告

    如果数字证书不是由可信任的机构(证书中心)发出,浏览器也会发出警告。

  • 如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。