当前位置: 首页 > 科技观察

吴某凡事件:完美的中间人攻击!

时间:2023-03-17 10:17:14 科技观察

图片来自抱途网。我读了公告,然后爆炸了。没想到这次吃瓜的还有第三者。是中间人刘。诈骗是如何发生的?整个造假过程可以概括为下图。下图中的ID_A代表杜珠的银行卡,ID_E代表中间人刘某的银行卡。这起诈骗案的妙处在于中间人刘某具有双重身份。他不仅冒充杜某珠向吴某凡索要赔偿金,还冒充吴某凡骗杜某珠将退款转给中间人刘某。某银行卡获取收益。说实话,这波操作比电影还要精彩。刘某将中间人的角色发挥到了极致,干了三件事:冒充自己的身份,不仅冒充杜某珠的身份,还冒充吴某凡的身份。篡改信息,骗杜珠将退款款项退至中间人刘某的银行卡。窃听信息,因为冒充身份,刘某牢牢掌握着杜某珠和吴某凡两人的信息。不知道大家有没有注意到中间人刘做的这三件事就是HTTP协议的安全隐患?HTTP协议不仅以明文方式传输信息,而且没有身份认证,因此存在窃听、篡改和冒充的风险。为了解决HTTP协议的安全性,后来出现了HTTPS协议,在HTTP层和TCP层之间加入了TLS协议,保证信息传输安全可靠。具体来说,如何实现安全可靠的信息传输,涉及到数字签名和数字证书。没想到,画风突然变的非常快。没错,今天这不是一篇吃瓜文章,而是一篇技术文章。如何保证消息不被篡改?为了保证传输的内容不被篡改,我们需要为内容计算一个“指纹”,然后连同内容一起传输给对方。对方收到后,先为内容计算一个“指纹”,然后与发送方发送的“指纹”进行比对。如果“指纹”相同,说明内容没有被篡改,否则可以判断内容被篡改。然后,计算机中会使用哈希函数计算出内容的哈希值,也就是内容的“指纹”。这个哈希值是唯一的,不能从哈希值中推导出内容。如何保证消息的来源可靠?哈希算法可以保证内容不被篡改,但不能保证“内容+哈希值”不会被中介替换,因为缺少客户端收到的消息是否来自的信息从服务端证明。比如你要请老师请假,一般情况下,老师会让你请家长写一个请假理由并签字,这样你就可以请假了。但是你有能力模仿你父亲的笔迹。你用你父亲的笔迹写了一个请假的理由,并签上了你父亲的名字。老师看到请假条,核对了笔迹和签名,误以为是你爸爸。是的,您将被允许请假。那么作为老师,如何避免这种情况呢?现实生活中,你可以通过电话或视频确认请假条是否是父母送来的,但在电脑中没有这样的操作。为了避免这种情况,计算机会使用非对称加密算法来解决。密钥有两个:一个是公钥,可以公开给大家。一种是私钥,必须由本人管理,不能泄露。这两个密钥可以双向加密和解密。例如,内容可以用公钥加密然后用私钥解密,或者内容可以用私钥加密然后用公钥解密。过程的不同意味着目的也不同:公钥加密,私钥解密。这样做的目的是保证内容传输的安全,因为用公钥加密的内容别人是无法解密的,只有持有私钥的人才能解密出真正的内容。私钥加密,公钥解密。此目的是确保消息不会被冒充,因为私钥无法泄露。如果公钥能够正常解密私钥加密的内容,就可以证明消息是由持有私钥身份的人发送的。一般我们不会使用非对称加密来加密实际传输的内容,因为非对称加密的计算比较耗性能。因此,非对称加密的目的主要是通过“私钥加密,公钥解密”的方式来确认消息的身份。我们常说的数字签名算法就是这么用的,但是私钥加密的内容并不是内容本身,而是加密了内容的哈希值。私钥由服务器保存,服务器会向客户端颁发相应的公钥。如果客户端收到的信息可以用公钥解密,就说明这个消息是服务端发送的。引入数字签名算法后,就不能模仿父亲的笔迹请假了。你的父亲持有私钥,你的老师持有公钥。这样,就只能用你父亲手中的私钥来“签署”请假条了。老师可以用公钥看看这个“签名”能否被破译。如果“签名”可以破译,可以破译内容的完整性,就可以证明是你爸爸发出的请假条,这样老师才会允许你请假,否则老师会不认识它。如何确保对方的身份?前面我们知道:消息的完整性可以通过哈希算法来保证。消息的来源可靠性可以通过数字签名来保证(可以确认消息是由持有私钥的一方发送的)。但这还远远不够。仍然缺乏身份验证。如果公钥是伪造的怎么办?或者以请假为例。虽然你父亲持有私钥,但老师可以通过检查是否可以用公钥解密来确认离开。这篇文章是你父亲写的吗?但是我们也可以自己伪造一对公私钥!你找了个晚上,偷偷把老师桌面上和你爸爸配对的公钥换成了你的公钥,所以下次请假的时候,你继续模仿你爸爸的笔迹写请假条,然后用你的私钥制作“数字签名”。但是老师并不知道他的公钥已经被你换掉了,所以他还是照常使用公钥解密。既然这个公钥是和你的私钥配对的,老师当然可以用替换后的公钥解密,确认内容的完整性,这样老师就会认为请假条是你爸爸写的,允许你请假.好家伙,请假真是斗智斗勇啊。后来你的老师和爸爸发现你伪造公钥和私钥后,决定重新商量对策,对付你这个臭家伙。俗话说,魔高一尺,道高一尺。因为很容易伪造公钥和私钥,所以你爸爸在警察局注册了他的公钥。派出所用自己的私钥对你父亲的公钥进行数字签名,然后将你父亲的“个人信息+公钥+数字签名”打包成一个数字证书,也就是说这个数字证书中包含了你父亲的公钥。这样,如果你爸爸因为家里有事要请老师给你请假,他不仅会用自己的私钥对内容进行签名,还会把数字证书给老师。老师拿到数字证书后,首先会去派出所验证数字证书是否合法,因为数字证书中包含了派出所的数字签名。当派出所要验证证书的有效性时,会用自己的公钥解密。如果解密成功,就说明这个数字证书已经在派出所备案,认为这个数字证书是合法的,然后把这个数字证书中的公钥(你爸爸的)给老师。由于数字证书经过派出所验证是合法的,可以证明公钥是属于你父亲的,所以老师可以放心地使用这个公钥来解密清教教义。如果能解密,就证明是你爸爸写的。留下笔记。是通过权威机构来证明你父亲的身份的,所以你伪造公私钥的小伎俩是没有用的。在计算机中,这个权威机构就是CA(DigitalCertificateCertificationAuthority),它将服务器公钥放在数字证书中(由数字证书认证机构颁发)。只要证书可信,公钥就可信。数字证书工作流程我也画了一张图给大家理解:数字证书工作流程①数字证书签发和验证流程接下来我们详细说一下实际的数字证书签发和验证流程。如下图,就是数字证书的签发和验证过程:CA签发证书的过程,如上图左边部分所示:首先,CA会打包持有者的公钥,目的,签发者、有效时间等信息打包,然后对这些信息进行Hash计算得到一个Hash值。然后CA会用自己的私钥对Hash值进行加密,生成CertificateSignature,即CA对证书进行签名。最后,将证书签名添加到文件证书中,形成数字证书。客户端验证服务器数字证书的过程如上图右侧所示:首先,客户端会使用相同的Hash算法得到证书的Hash值H1。通常,浏览器和操作系统集成了CA的公钥信息。浏览器收到证书后,可以使用CA的公钥解密CertificateSignature内容,得到一个Hash值H2。最后比较H1和H2,如果值相同则证书可信,否则证书不可信。②证书链但实际上在证书验证过程中还是存在证书信任链问题,因为我们向CA申请的证书一般不是由根证书颁发的,而是由中间证书,比如百度的证书,从如下图所示,证书分为三级:这个三级证书的验证过程如下:客户端收到baidu.com证书后,发现证书的颁发者不是根证书,因此无法根据本地已有根证书中的公钥验证baidu.com证书是否可信。于是客户端根据baidu.com证书中的issuer查到该证书的颁发机构为“GlobalSignOrganizationValidationCA-SHA256-G2”,然后向CA申请中间证书。申请证书后发现“GlobalSignOrganizationValidationCA-SHA256-G2”证书是由“GlobalSignRootCA”颁发的。由于“GlobalSignRootCA”没有更高级别的签发机构,也就是说它是根证书,即自签名证书。应用软件会检查该证书是否已经预加载到根证书列表中。如果是这样,根证书中的公钥可用于验证“GlobalSignOrganizationValidationCA-SHA256-G2”证书。如果发现验证成功,则认为这个中间证书是可信的。“GlobalSign组织验证CA-SHA256-G2”证书被信任后,您可以使用“GlobalSign组织验证CA-SHA256-G2”证书中的公钥来验证baidu.com证书的可信度。如果验证通过,则可以信任baidu.com证书。在这四个步骤中,最初客户端只信任GlobalSignRootCA证书的根证书,然后“GlobalSignRootCA”证书信任“GlobalSignOrganizationValidationCA-SHA256-G2”证书。而“GlobalSignOrganizationValidationCA-SHA256-G2”证书信任baidu.com证书,所以客户端也信任baidu.com证书。综上所述,因为用户信任GlobalSign,所以由GlobalSign担保的baidu.com是可以信任的。此外,由于用户信任操作系统或浏览器的软件供应商,因此由软件供应商预加载根证书的GlobalSign是可以信任的。.通常,一些根证书内置于操作系统中。比如我的MAC电脑就内置了这么多根证书:这样层层验证就构成了信任链。整个证书信任链验证流程如下图所示:最后一个问题,为什么需要这么麻烦的证书链流程?为什么RootCA不直接颁发证书,而是颁发那么多中间层?这是为了保证根证书的绝对安全。根证书的隔离越严格越好,否则一旦根证书丢失,整个信任链就会出现问题。作者:小林编辑:陶佳龙来源:转载自公众号小林编码(ID:CodingLin)