加密、数字签名和数字证书看这一篇就够了
yuyutoo 2024-10-13 00:33 2 浏览 0 评论
加密、数字签名和数字证书看这一篇就够了
互联网时代设备之间交换数据频繁,安全技术原理很重要。先思考以下几个问题:
- 你以为将消息加密以后就能安全的在互联网上传输了吗?
- 签名过的消息就能确认消息发送者的身份吗?
- 如何证明CA认证机构的合法性?
本文将介绍网络安全的基础知识:
- 对称加密
- 非对称加密
- 混合加密
- 数字签名
- 数字证书
深入研究网络传输数据时的窃听、假冒、篡改和事后否认行为是怎么形成的,以及如何防范这些非法行为。
建议点赞+收藏+关注,方便以后复习查阅。
安全和算法
互联网设备之间传输数据可能会经常发生的四个问题:
- 窃听
- 假冒
- 篡改
- 事后否认
窃听
A给B发送消息的过程中,中间人X偷听了它们之间的消息。
假冒
- A向B发送消息,中间人X装作B接收了;
- 中间人X装作A将消息发送给B,B接收“A”的消息实际上是X假冒的。
篡改
即使B接收到的消息确实来自于A,但在消息传递的过程中,中间人X将消息的部分内容做了改动,这就是篡改。
还有一种情况,当网络不稳定导致通信故障时,数据丢包损坏了,也属于一种篡改。
事后否认
事后否认这个行为经常会在交易或者签署合同的时候发生。假设A向B下订单之后否认自己发送过此类消息,这就是事后否认。
解决方法
四种安全问题及其解决方法总结如下表所示:
“事后否认”问题虽然可以使用“数字签名”技术来解决,但是存在“不能确认公钥制作者是谁”的问题,即中间人有可能会将公钥替换成自己的,该问题的解决办法是使用“数字证书”技术。
哈希函数
哈希函数是一种可以将任何给定数据转换成固定长度的无规律数据的算法,转换后的数据可以作为数据摘要验证数据是否被篡改或者验证签名者的身份。
哈希函数转换后的哈希数值多使用十六进制表示。
特征
哈希函数有如下几个特征:
- 转换后的哈希值长度固定。无论输入数据大小多大,文本、音频或者视频,输出的哈希值长度始终不变。
- 输入相同,输出必定相同。这个特征有一个前提,那就是必须使用相同的算法,否则即使输入相同,输出也可能不同。
- 输入相似,输出不一定相似。哪怕输入只相差一个bit,输出也有可能天差地别。
- 输入完全不同,输出也有可能相同。这种情况发生概率较低,称作“哈希冲突”。
- 哈希计算相对容易。
- 由输出的哈希值无法逆推算出输入的数据。这一点和加解密非常不同。
哈希算法
比较有代表性的哈希算法有:
- MD5 (Message Digest Algorithm 5)
- SHA-1 (Secure Hash Algorithm)
- SHA-2
SHA-1是160位的哈希值,SHA-2则有不同位的哈希值。
SHA-2是目前运用较为广泛的一种哈希算法,MD5和SHA-1因为存在安全隐患所以不推荐使用。
对称加密
“对称加密”又称为“共享加密”,因为它是一种加密和解密共用一套密钥的加密方式。在网络传输数据时,为了保证数据不被窃听所以需要把数据进行加密以后再发送。
常见算法
常见的对称加密算法有:
- 凯撒加密
- AES (Advanced Encryption Standard)
- DES (Data Encryption Standard)
- 动态口令
AES是使用最为广泛的对称加密算法。
密钥分配问题
前面说了,对称加密是发送方A加密、接收方B解密的算法,A和B共用一个密钥。如果没有条件在线下将共享密钥传给对方,密钥就会有被窃听的风险。
所以,对称加密最大的问题就是无法解决安全传输密钥的问题,即“密钥分配问题”。解决“密钥分配问题”的方法是采用“非对称加密”。
建议点赞+收藏+关注,方便以后复习查阅。
非对称加密
“非对称加密”又称作“公开密钥加密”,它是一种加密和解密使用不同密钥的加密方法。一般情况下,加密时使用“公开密钥”,简称“公钥”;解密时使用“私有密钥”,简称“私钥”。
如下图所示(P表示公钥,S表示私钥)。消息接收方B为了能够安全的接收消息,会事先生成一对密钥对,B将能够解密的私钥留在自己手上,而公钥则发送给任何想要给B发送消息的主体,也就是说只要谁想要给B发送消息,持有B的公钥即可。但是除了B以外,其他任何人都不能解密消息,因为私钥只掌握在B一个人手里。
因此一般情况下,公钥可以理解为多数人持有的密钥;私钥可以理解为少数人持有的密钥。这里加了一个一般情况的限制条件是因为在数字签名的时候正好相反,后面介绍数字签名的时候会介绍。
常见算法
常见的非对称加密算法有:
- RAS。RAS算法是由其三个发明者名字的首字母而来的。
- 椭圆曲线加密算法
使用最为广泛的非对称加密算法是RSA算法。
非对称加密的优点
非对称加密算法不存在“密钥分配问题”。消息接收方B可以将公钥直接在互联网上公布,即使窃听者X得到了B的公钥,它也只能对数据进行加密操作,并不能得到解密后的数据。
此外,非对称加密相对于对称加密来说还有一个优势就在于可以节省密钥的数量。在多人传输数据时,数据接收方只需要准备一套密钥对即可,而对称加密算法的密钥数量则根据人数的增加呈指数上升。例如,有n个人之间相互传递消息,使用非对称加密算法最多只需要n个密钥对即可,只需要保证每个人手里都持有自己的私钥就行了。而使用对称加密时,需要的密钥数量 = n(n - 1) / 2。
非对称加密的缺点
非对称加密虽然很好,但它依然有不足的地方。
- 无法解决“中间人攻击”的问题
- 无法解决篡改问题
- 比对称加密更好耗时
中间人攻击
“中间人攻击”(man-in-the-middle attack)是一种将通信双方的密钥替换为中间人自己的密钥的一种攻击方式。为什么中间人攻击会使公开密钥的可靠性得不到保证呢?因为公钥接收方A无法判断其接收到的公钥是否来自于公钥发送方B。
中间人攻击的过程如下图所示。其过程可以理解为以下几个步骤:
- A想要向B发送消息,所以A需要得到B生成的公钥
- B生成密钥对并向A发送公钥
- 中间人X拦截B的公钥,并向A发送X自己的公钥
- A得到X的公钥以为是B的公钥,A使用公钥对消息加密并发送给B
- 中间人X拦截A发送的消息并使用自己的私钥对消息解密,X再用B的公钥对消息原文加密
- 中间人X伪装成A将加密后的消息发送给B
- B接收到消息后,使用自己的私钥进行解密
没有中间人攻击的过程如下图所示。
性能问题
非对称加密比对称加密要更加耗时,所以非对称加密在需要频繁发送消息并加解密的场景里并不适用。既要保证数据安全又要一定的加解密性能,解决的方法就是使用“混合加密”。“混合加密”顾名思义就是将对称加密和非对称加密结合起来使用。
混合加密
非对称加密存在密钥分配问题,但是加解密性能很好;对称加密不存在密钥分配问题,但是加解密性能不好。二者一拍即合就形成了混合加密。
在数据传输的场景里大致有两种:
- 传输密钥。传输频次低。
- 传输消息。传输频次高。
传输密钥的场景一般只会在消息发送前的密钥分配阶段发生一次,所以传输密钥时采用非对称加密解决了密钥分配问题;
传输消息的场景会发送多次,所以采用对称加密解决了耗时的性能问题。
混合加密的流程如下图所示。A作为消息发送方事先要准备消息的加解密密钥;B作为消息接收方事先要准备共享密钥的加解密密钥对。
虽然混合加密算法结合了对称加密和非对称加密二者的优点,但是依然没有解决“中间人攻击”的问题。因为公钥接收方A还是不能判断其接收到的公钥是否来自于B本人。解决中间人攻击问题的方法是使用“数字证书”,后面会介绍到。
消息认证码
消息认证码 MAC(Message Authentication code)可以防止消息被篡改。其工作原理是:
- A向B发送消息。消息由密文和 MAC 组成,MAC 是密钥和密文组成的字符串哈希值。
- B接收消息并使用密文和密钥计算MAC。如果计算的MAC与A传过来的不一致,则表示密文被篡改过。
计算 MAC 的常见算法有:
- HMAC (Hash-based MAC)
- OMAC (One-key MAC)
- CMAC (Cipher-based MAC)
HMAC是目前应用最为广泛的。
MAC 虽然可以解决篡改问题,但是无法防止A事后否认其发送给B某消息的事实。因为A和B都能通过 MAC 算法计算得出相同的 MAC,A就可以声称“此消息是B捏造出来的”。解决“事后否认”的问题可以通过数字签名来解决,因为数字签名可以保证A发出来的签名B捏造不出来。
数字签名
前面提到了混合加密的缺点之一是不能防止消息被篡改,即中间人X可以随意拦截消息发送者A的消息,并使用消息接收者B提供的公钥进行消息加密然后替换A发送的消息。说的通俗一点就是B提供了公钥,那么谁都可以利用其公钥加密消息然后发送给B,但B却不能证明发送而来的消息没有进行过加工处理。这就是为什么需要使用消息认证码对消息的一致性进行认证。
混合加密的缺点之二是事后否认。B证明不了B接收到的消息肯定是A发送而来的,如果涉及到合同或金钱等纠纷,A就可以推卸责任说某某消息不是其发送过去的。
这就好比你向某人借钱打了一张借条却没有按盖章手印,对方拿着借条来讨债,法律是根本不会承认借条的合法性的。因为你提供的这张借条上没有能够证明借条是你本人开出的身份信息,更不能证明借条的金额、借款人、出借人等重要信息是否被人篡改过。所以一般在借条上都需要在金额、借款人、出借人这些地方按手印,并在借条的落款日期上盖章。在网络安全领域,消息认证码就是按手印,数字签名就是盖章。数字签名既可以是手印也可以是盖章,因为它既能防止篡改又能防止事后否认。
我们来看一下数字签名是如何运作的?
假设A要向B发送消息
- A生成密钥对。A需要生成签名证明消息的合法性,所以A生成密钥对并保留私钥,即只有A能生成签名。
- A发送公钥给B。B需要解密签名并验证消息的一致性。
- A使用私钥加密消息作为签名并发送消息和签名。这里其实还隐藏了一步就是A发送的消息其实是密文,而加密消息的密钥使用的是之前B提供给A的公钥。注意这里的公钥和A发送给B的公钥不是一个。
消息加密和制作签名可以看作是两个相反的过程,A和B都各自生成了密钥对并将公钥发送给对方,两对密钥互不干扰。消息加密的过程是A使用B的公钥加密消息,B使用自己的私钥解密消息;数字签名的过程是A使用自己的私钥加密消息生成签名,B使用A的公钥解密签名。
虽然数字签名进一步提升了网络安全的等级,但它依然无法解决中间人攻击的问题。前面介绍过中间人攻击的实质是A想要给B发送消息,首先B需要生成密钥对并将公钥发送给A,这个过程中A无法证明接收到的公钥一定是B提供的,即中间人可以篡改公钥。也许你会问数字签名不是可以防止公钥被篡改吗?别忘了,数字签名能够实现的前提是公钥能安全的送达到对方的服务器里。
如何防止中间人攻击?这就需要用到数字证书了。
数字证书
“数字签名”和“公钥加密”都不能保证公钥来自于消息的发送方,这就会造成“中间人攻击”。而马上要讲的“数字证书”就能保证公钥来源的合法性。
数字证书的原理是通过持有第三方认证中心颁发的数字证书,来证明持有证书的一方的身份属实。这些认证中心要具有一定的权威性,一般是由政府机构或者一些大型企业来担任。在数字证书的加持下,A想要将自己的公钥发送给B需要经过如下的步骤:
- A生成自己的密钥对,将公钥、个人资料和邮箱发送给认证中心CA。
- CA通过A的个人资料及邮箱验证A确实是A。
- CA生成自己的密钥对,使用自己的私钥对A的公钥、邮箱和个人资料进行签名。
- CA将签名和A的公钥、邮箱和个人资料打包成数字证书,发送给A。
- A得到数字证书之后将其发送给B。
- B获取CA的公钥,利用CA的公钥对A的数字证书进行验证。
- B对数字证书进行解密得到A的公钥。
如此一来,A的公钥就安全的送达到了B的手里,B就可以使用A的公钥对消息进行加密,并将密文发送给A了。
防止中间人攻击
现在,加入了数字证书的流程之后,我们回头再来看下中间人X是否还能替换A发送给B的公钥?
假设中间人X想要冒充A向B发送公钥Px。
但是B不信任发送给它的任何没有数字证书的公钥。
中间人X为了冒充A,也去认证中心CA申请自己的公钥,但是X无法使用A的邮箱,所以X不能获取A的数字证书。
认证中心的合法性
细心的读者应该能找到以上数字证书工作原理的一个漏洞,那就是B在获取CA发送而来的公钥时,如何确认没有受到中间人的攻击?因为只要是在网络上发送公钥,都需要证明该公钥的来源。
事实上,接收来自于CA发送来的公钥,也都需要以数字证书的形式,而CA的数字证书是由更高级别的CA颁发的。
这就形成了一个认证圈子,就像下图中的认证树结构一样,最顶端的认证中心RCA被称作“根认证中心(Root CA)”。根认证中心的正当性由它自己来证明,一旦根认证中心无法证明自己的合法性,整个数字证书体系就玩不转,所以根认证中心一般由大型企业或者有政府背书的企业来担任。
由于篇幅的关系,关于安全算法相关的其他细节我就不一一展开了。对此感兴趣的朋友可以评论区留言说说你的看法,提出你的疑问,想要通过思维导图学习的朋友我这里也整理了一份,评论区留言索取。
建议点赞+收藏+关注,方便以后复习查阅。
相关推荐
- 史上最全的浏览器兼容性问题和解决方案
-
微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...
-
- 平面设计基础知识_平面设计基础知识实验收获与总结
-
CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...
-
2025-02-21 16:01 yuyutoo
- 写作排版简单三步就行-工具篇_作文排版模板
-
和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...
- 写一个2048的游戏_2048小游戏功能实现
-
1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...
- 今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……
-
最近的天气暖和得让很多小伙伴们喊“热”!!! 昨天的气温到底升得有多高呢?你家有没有榜上有名?...
- CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式
-
之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...
- 你的自我界限够强大吗?_你的自我界限够强大吗英文
-
我的结果:A、该设立新的界限...
- 行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?
-
行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...
-
- 让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
-
去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...
-
2025-02-21 16:00 yuyutoo
- 今年国家综合性消防救援队伍计划招录消防员15000名
-
记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...
- 一起盘点最新 Chrome v133 的5大主流特性 ?
-
1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...
- 竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使
-
style="text-align:center;"data-mce-style="text-align:...
- 学物理能做什么?_学物理能做什么 卢昌海
-
作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...
-
- 你不知道的关于这只眯眼兔的6个小秘密
-
在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...
-
2025-02-21 16:00 yuyutoo
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)