根据题主的问题描述,建议题主了解一下中间人攻击,数字证书,PKI体系,信任网路。这些名词可以说是基本知识,网上讲解非常多,我下面就简单说说,抛砖引玉,如有错漏还请广大知友指正(讲道理,能看到我这个答案的知友都不知道能不能超过100个)。

正因为我们不知道自己拿到的公钥是不是真正的伺服器那边的公钥,所以才有了中间人攻击。中间人攻击就是攻击者作为伺服器和用户之间的中间人,让用户把中间人的公钥认作是伺服器的公钥,截获伺服器消息,解密伺服器消息后,篡改消息,并把篡改后的消息用中间人自己的私钥加密后发送给客户,客户用所谓的伺服器公钥(其实是中间人公钥)解密,就把中间人篡改后的消息当成伺服器发送的消息了。

所以如何防止中间人攻击?这个问题的答案就是题主想知道的。关键就在于确认客户获得的公钥就是伺服器的公钥。一种方法是通过可信信道传输,而我们的网路显然并不是可信信道。那么就需要另一种方法了,就是让我们信任的第三方做担保,证明该公钥确实是属于其真正的伺服器的,而不是中间人的。这个我们信任的用来作证的第三方,就是证书机构,简称CA。

CA会为伺服器颁发数字证书,这个数字证书里有证书本身的信息(有效期,可用范围,序列号,CA名称等),有伺服器的公钥和公钥演算法,更重要的是,有CA对前面两种信息的数字签名。CA会对之前信息利用类似MD5等摘要演算法生成摘要,然后用自己的私钥对摘要加密,即生成了该数字证书的数字签名。客户拥有CA的公钥,就可以解密此数字签名,与自己对之前信息生成的摘要进行比对,比对成功,就说明这个数字证书确实是该CA颁发的,因为只有CA的私钥才可能生成这样的签名。

那么在通信时,客户向伺服器要公钥,伺服器就把包含了公钥的证书给客户,客户一比对,某CA向客户担保,这个公钥确实是这个伺服器的。客户相信这个CA,从而也相信它的担保。而中间人如果没法向可信的CA要到这个担保,那么客户就会直接不信任这个公钥是伺服器的。

于是,CA可信就极其重要了。如果CA给中间人一个担保,说中间人的公钥是伺服器的,那么客户就浑然不知。那么问题来了:

CA本身公钥是不是可信?让其他CA为其进行担保,不停套娃,形成一条信任链,最后到达一个顶点,最顶层的CA,它只好自己给自己的证书签名,这个自己给自己签名的证书被称为根证书。而大家都通过其他方式,相信了这个根证书,相信这确实就是最顶层的CA的公钥,把这个CA的公钥直接放在自己系统的信任列表中。

CA乱来怎么办?CA一旦乱来,大家就会选择把这个CA列入不信任列表,任何这个CA签发的证书都将不被信任。一般来说,CA为了自己的信誉,是不会乱来的,同时也会保护自己的私钥不遭泄露。但是吧,凡事都有例外,比如CNNIC乱签发证书,DigiNotar私钥泄露……

依靠信任CA而组建起来的整个这一套系统架构被称为PKI。HTTPS通信便使用这一套体系。PKI只要CA不出问题,采用的公钥演算法不太弱(太弱容易导致私钥被破解,私钥被破解或窃取,除了立刻吊销对应的公钥让大家不信任它,天王老子都救不了你),你自己不注意把私钥泄露了,可以说坚不可摧,而只要CA出了问题,这个CA及其之下的所有信任关系都立刻变得不可靠。

相对于PKI体系对CA的依赖,信任网路就不需要CA,用户自行决定信任哪些公钥,信任程度多大。比如,Alice信任Bob,Alice就会为Bob的公钥做数字签名,担保这个公钥为Bob所有。这样,信任Alice的人Dave,在拿到Bob的带有Alice的签名的公钥后,就会看见Alice的担保,从而信任Alice所信任的Bob,相信这个公钥是Bob的。Alice相当于起到了向Dave介绍Bob的作用,Alice做的数字签名就相当于一封介绍信,从而让Dave信任从未见过的Bob。可以看到,信任网路更像人与人之间信任关系的建立,PKI中的CA则颇具公证处的味道。


因为公匙,私匙可以反过来用啊。

我们可以把一段信息用一个秘密的「公匙」加密,再用安全的办法把私匙告知大家知道。之后把原文和密文一起发出去,这样谁都可以解密这段信息,然后验证它是否跟原文一样。

如果一致的话,那就说明这段原文确实是我发出来的。

这就是所谓的数字签名。

实践中是这么玩的,由一个有威望的组织做中间人(ca),Alice先把自己的公匙提交给中间人,由中间人进行数字签名,Alice再把签过名的公匙交给Bob,Bob则可以验证这个签名,如果签名确实是ca签的,就可以愉快的用Alice的公匙跟她通信啦。

那ca如何确定来提交签名申请的人就是Alice而不是其他人冒名顶替呢?Bob又如何安全的获得ca的验证签名的密匙呢?

这就要靠线下的手段了。

前者ca可能会要求Alice提交营业执照之类的复印件。后者则是浏览器厂商或者操作系统厂商直接把一些可以信赖的ca的证书集成在浏览器里或者操作系统里。

所以ca证书没事不要乱装哟。

那被大家广泛信任的ca滥发签名咋办?

哎呀,那这事可就要警惕喽。

相关的可以搜索一下gmail的证书事件,还有360的根证书计划之类的。


看了下题干描述,推测题主只是在问网路安全中应用层协议(ssl/tls)用到的的非对称加密演算法,楼上的 @experiment 大佬回答得很详细了,我班门弄斧补充一点点

邓强龙:RSA的公钥和私钥到底哪个才是用来加密和哪个用来解密??

www.zhihu.com图标邓强龙:为何公钥私钥不可互相推导??

www.zhihu.com图标

我只看了标题,就开始啪啪啪写回答,然后一不小心就把回答的内容范围扩大了到了信息安全,望题主不要介意。。。。

(一)物理攻击(看得见摸得著攻击者)

  • 陌生人禁止随便进出机密要地,防止窃取保密资料。

(二)魔法攻击(看不见摸不著攻击者)

物理攻击的解决办法,通常很简单粗暴,啥玩意儿带毒,就把啥玩意儿拔掉/锤烂/换新的,一劳永逸。

魔法攻击,则针对的是那些你网上冲浪不得不用的基础设施:硬体/操作系统/计算机网路,除非你把它卸载了,否则只能通过升级到安全版本才能把洞补上免受伤害。

为什么我会说魔法攻击看不到攻击者??因为本质上的攻击者就是那些写烂代码留洞的开发者(╯‵□′)╯︵┻━┻ 那么多开发人员,一个个揍一顿???

魔法攻击太多了,一个个来,多到说不完。前置条件是我假设题主清楚计算机网路模型的5层架构,以及有常规的计算机硬体和操作系统知识。

计算机硬体

  • 计算机硬体来来去去就那几大件:CPU(控制器 + 运算器)、I/O设备、存储设备
  • 我没研究过计算机硬体的安全,略过不表
  • 不行,这逼还是要装
  • 电脑的usb口不要随便被陌生人插。U盘被篡改固件,欺骗操作系统让她误以为u盘是键盘,导致u盘随便读写系统缓冲区,不少见,我每次去列印店回来u盘都宛若得了艾滋病。利用的是usb协议不标识设备类型的逻辑漏洞

操作系统

  • 操作系统的安全我也没太研究,估计二进位安全,软体逆向等从业人员来回答会更专业,略过不表。
  • 不行,我要强行装逼写一下。
  • 给用户分配操作系统许可权尽量越小越好。你我都不想看到删库跑路sudo rm -rf /*

计算机网路

我尽量把我知道的都写下来,对网路的攻击手段还有很多很多。。

  • 应用层:基本上普通老百姓见到的可以联网的电脑桌面软体,全都是计算机网路应用层协议的具体实现与应用。比如浏览器访问的web service,建议都将裸奔的http升级为https,虽然不算一劳永逸,但ssl层被剥掉还是有难度的,另外80埠建议封掉,135/445埠也封掉,防止冲击波蠕虫进攻。
  • 传输层:有条件用tcp的就别用udp
  • 网路层:小心公司内网的路由器被动过手脚。路由器是公司内部核心的网路设施,公司内网所有流量都会经过路由器
  • 数据链路层:交换机,这玩意儿上放蜜罐可太有意思了。。
  • 物理层:这一层的攻击比较科幻,在骨干网出口的光纤上放置一个折射器把信号流截走,棱镜门曝光的美国政府监听别国政要的手法。无线网卡,水晶头等看看固件有没有后门


打开开始菜单,输入manage computer certificates,里面找trusted root certification authorities.

就靠这个保证没有被别人修改过,所以千万别瞎装什么根证书,不然怎么被干都不知道。


简单地说,你可以终端和删除别人传输的信息,但是不能修改和伪造


公钥记载在由ca颁发的数字证书上,数字证书由ca签名,ca的公钥由更大的ca签名,形成一个信任链条,至于链条顶端的ca,那个是预装在操作系统里的,所以少装魔改版的Windows


推荐阅读:
相关文章