百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

程序员必须要了解常用密码学技术 程序员常用初始密码

yuyutoo 2024-10-13 00:33 2 浏览 0 评论

对称加密与非对称加密

按照密钥的使用形式,加密算法可以分为对称加密和非对称加密(又叫公钥加密)。对称加密在加密和解密的过程中,使用相同的秘钥;而非对称加密在加密过程中使用公钥进行加密,解密使用私钥

对称加密的加密和解密需要使用相同的密钥,所以需要解决密钥配送问题

非对称加密的处理速度远低于对称密钥

密钥:一个加密算法中,输入为明文和密钥,输出为密文。在加密算法中,密钥通常是像238435639047397537493753453945379346236这样的 一串非常大的数字。

对称加密下的密钥配送问题

发送者A想要发一封邮件给接受者B,但是不想被人看到其中的内容。A决定使用对称加密的方法。但是我们知道,对称在对称加密中,加密与解密需要使用同样的密钥。B想要看到接收到的内容必须要有A的密钥。也就是说,A需要把密钥安全地送到B的手上。

那如果把加密后的密文和密钥一同通过邮件发送给B行不行呢?答案是不行的。因为一旦被加密的密文和密钥同时落在窃听者C的手中,C就可以用密钥对密文进行解密。

混合密码系统

混合密码系统,是将对称密码和非对称密码的优势相结合的方法。混合密码系统

解决了对称密码的密钥配送问题,又解决了非对称密码的加密与解密速度问题。

混合密码系统中会先用快速的对称密码,对消息进行加密,这样消息就变为密文,保证消息机密性。然后,用非对称加密对对称密码的密钥进行加密,因为密钥一般比要加密的信息短,加密和解密的速度就得到保证了。这样,密码配送问题就得到了解决。

单向散列函数

单向散列函数也称为消息摘要函数(message digest function),哈希函数,适用于检查消息完整性的加密技术。

单向散列函数有一个输入和一个输出,其中输入称为信息,输出称为散列值。单向散列函数可以根据消息的内容计算出散列值,篡改后的信息的散列值计算结果会不一样,所以散列值可以被用来检查消息的完整性

单向散列函数输出的散列值也成为消息摘要,或者指纹。散列来源于英文”hash”一值,单向散列函数的作用,实际上就是将很长的消息剁碎,然后混合成固定长度的散列值。

无法解决的问题

使用单向散列函数可以实现完整性的检查,但有些情况下即便能检查完整性也是没有意义的。

例如,主动攻击者D伪装成发送者A发送消息和散列值给B。这时,B能够通过单向散列函数检查消息的完整性,但这只是对D发送的信息进行完整性检查,而无法识别出D的伪装

辨别伪装需要用到认证,用于认证的技术包括消息认证码数字签名,消息认证码可以保证信息没有被篡改,而数字签名还能向第三方做出保证。

消息认证码

消息认证码(MAC)是一种与密钥相关联的单向散列函数。

使用步骤

(1)发送者A与接收者B事先共享密钥。

(2)发送者A根据请求信息,计算MAC值(使用共享密钥)。

(3)发送者A将请求信息和MAC值发送给接收者B。

(4)接收者B根据接收到的信息,计算MAC值。

(5)接收者B将自己计算的MAC值与A发送过来的MAC值进行对比。

(6)如果MAC值一致,则接收者B可以断定请求来自发送者A。

依然存在密钥配送问题

在消息认证码中,发送者A与接受者B共享密钥,这个密钥不可以被攻击者获取,如果攻击者获取到这个密钥。则攻击者也可以计算出MAC值,从而可以进行伪装攻击。

因此,要解决密钥配送问题,我们需要向对称密码一样,使用一些共享密钥的方法,如公钥密码,密钥分配中心,或其他安全的方式发送密钥。

MAC与对称密码认证

MAC技术中,发送者与接受者需要使用相同的密钥进行加密;对称加密中,密文只有使用和加密时相同的密钥才能正确解密,否则将会产生看上去杂乱无章的“明文”。那么,是否可以用对称密码进行认证呢?

答案是不可以。假设我们要发送的明文就是一串随机的比特序列,我们将明文用对称密码加密之后发送出去,当接受者收到密文并进行解密时,看上去都是一串随机的比特序列,那我们怎么判断信息是否来自攻击者呢?

更准确地说,我们无法根据“是否杂乱无章”而判断认证是否通过,这不是一个可行的标准。而使用MAC则可以通过对比MAC码,得到一个明确的结果。

MAC无法解决的问题

对第三方的证明

接收者B收到了来自A的信息后,想要想第三方验证者D证明这条信息确实是A发送的。但是MAC无法进行这样的证明。

对于验证着D来说,知道密钥的人有A和B,只要知道密钥,就可以计算出正确的MAC值。因此,D不可以断定信息是由A发送的,因为也有可能是B自己伪造信息发送给自己的。

无法防止否认

接受者B收到了A发送过来的信息,里面包含有B与A共享的密钥计算出来的,因此B断定这条信息来自A。

但是,A可以声称自己并没有向B发送过这条信息。因为A与B都拥有密钥,A可以声称该信息的MAC值,是由B计算出来的,而不是自己。

数字签名

数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

数字签名是非对称密钥加密技术与数字摘要技术的应用。

签名的生成与验证

在数字签名技术中,涉及到两种行为:生成消息签名验证数字签名

生成消息签名这一行为是由消息的发送者A来完成的,也称为“对消息签名”。生成签名就是根据消息内容计算数字签名的值,这个行为意味着“我认可改消息的内容”。

验证数字签名这一行为一般由消息的接受者B来完成,也可以由消息的验证者来完成。验证的结果可以是成功或者失败,成功以为着消息属于A,失败则意味着消息不属于A 。

数字签名对签名密钥验证密钥进行了区分,使用验证密钥是无法生成签名的。签名密钥只能有签名者持有,而验证密钥则是任何需要验证签名的人都可以持有。

在公钥密码中,密钥分为加密密钥和解密密钥,用加密密钥无法进行解密。解密密钥只能有需要解密的人持有,而加密密钥则是任何需要加密的人都可以持有。可以说,数字签名就是将公钥密码“反过来用”来实现的。

数字签名的流程

发送者A需要对消息签名,而接受者B要对签名进行验证。那么,A需要事先生成一个包括公钥和私钥的密钥对,而需要验证签名的B则需要得到A的公钥。

签名和验证的过程如下:

  1. A用自己的私钥对信息进行加密。用私钥加密得到的密文就是A对这条信息的签名,由于只有A才持有自己的私钥,因此除了A以外,其他人是无法生成相同的签名的。

  2. A将信息和签名发送给B

  3. B用A的公钥对收到的签名进行解密。如果收到的签名确实是用Alice的私钥进行加密得到的密文,那么用A的公钥应该能够正确解密,反之,则不能正确解密。

  4. B将解密得到的结余A发送的信息进行对比,两者一直,签名验证成功。两者不一致,则签名验证失败。

除了对消息进行加密得到签名,我们还可以对消息的散列值进行加密,得到签名。这样无论消息有多长,我们对消息进行加密和解密都是非常快速的。

与MAC相比下的优势

可以防止否认 。还记得为什么MAC无法防止否认吗?正是因为密钥由通信的双方共同持有,发送者A可以谎称消息认证码是由接受者B生成的。而在数字签名技术中,加密的私钥只由一方持有,只有持有密钥的一方才可以生成签名。

第三方的证明 。同理,因为私钥仅由单方面持有,签名仅能由私钥的持有者生成,所以可以实现第三方的证明。

证书

什么是证书

公钥证书(Public-Key Certificate,PKC)由认证机构(CA)生成,用于确认公钥确实属于此人。

认证机构,就是能确认“公钥确实属于此人”并能够生成数字签名的个人或者组织。

证书的使用场景

下面通过代表性的应用场景来理解证书的作用。

我们用文字进一步说明这些步骤都做了些什么。

  1. B生成密钥对

  2. B在认证机构D注册自己的公钥

  3. 认证机构D用自己的私钥对B的公钥施加签名并生成证书

  4. A得到带认证机构D的数字签名的B的公钥

  5. A使用认证机构D的公钥验证数字签名,确认B的公钥的合法性

  6. A用B的公钥加密信息并发送给B

  7. B用自己的私钥解密密文得到A的信息

各种密码技术对比

对称密码与非对称密码

对称密码公钥密码
发送者用共享密钥加密用公钥加密
接受者用共享密钥加密用私钥解密
密钥配送问题存在不存在
机密性可保证可保证

消息认证码与数字签名

消息认证码数字签名
发送者用共享密钥计算MAC值用私钥生成签名
接受者用共享密钥计算MAC值用公钥验证签名
密钥配送问题存在不存在,但是公钥需要另外验证
完整性可保证可保证
认证可保证(仅限通信双方)可保证(可使用与第三方)
防止否认不可保证可保证

参考

《图解密码学》

原PO主:qiuzhenyuan

如果您决定加入极客大家庭,记得加秋秋群“极客聊天”(326254067)

相关推荐

史上最全的浏览器兼容性问题和解决方案

微信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个小秘密
你不知道的关于这只眯眼兔的6个小秘密

在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...

2025-02-21 16:00 yuyutoo

取消回复欢迎 发表评论: