Web开发必须了解的密码学技术

对称加密与非对称加密

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

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

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

密钥:一个加密算法中,输入为明文和密钥,输出为密文。在加密算法中,密钥通常是像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)生成,用于确认公钥确实属于此人。

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

证书的使用场景

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

image

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

  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值 用公钥验证签名
密钥配送问题 存在 不存在,但是公钥需要另外验证
完整性 可保证 可保证
认证 可保证(仅限通信双方) 可保证(可使用与第三方)
防止否认 不可保证 可保证

参考

《图解密码学》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容