zoukankan      html  css  js  c++  java
  • 密码技术之基本介绍

    想象一下 Alice 和 Bob 发送邮件的场景,发送的邮件称作消息,发送消息的 Alice 称为发送者,接收消息的 Bob 称为接收者,当经过网络时,消息有可能会被第三方窃听,窃听消息的称为窃听者

    为了不被窃听者知道内容,Alice(发送者)可以将消息加密发送出去,加密前的消息称为明文,加密后的消息称为密文。Alice 与 Bob 之间发送流程如下:

    上述流程中,加密步骤使用加密算法,解密步骤使用解密算法。加密、解密素算法合在一起统称为密码算法

    一、对称加密、非对称加密与混合密码系统

    密码算法需要密钥(Key),无论是加密还是解密时,都需要知道密钥。根据密钥的使用办法,可以将密钥分为对称密钥非对称密钥

    • 对称密钥:加密与解密使用相同的密钥, 如 DES, 3DES, AES;

    • 非对称密钥:加密与解密使用不相同的密钥,如 RSA;

    非对称密码中的加密密钥与解密密钥有非常严谨的数学关系,上图中使用的密钥仅用于理解使用。

    将对称加密和非对称加密结合起来的密码方式成为混合密码系统,互联网中使用的 HTTPS 使用的就是混合密码系统。

    二、单向散列函数(哈希函数)

    消息通过加密之后,发送给接收者,那么如何验证该消息是否被第三方篡改

    单向散列函数(哈希函数)用来检测消息完整性,检测数据是否被篡改的密码技术。

    1. 发送者使用单向散列函数计算出散列值;

    2. 发送者将消息和散列值一起发送给接收者;

    3. 接收者根据相同的单向散列函数计算出散列值

    4. 接收者散列值与发送者的散列值进行比较,如果两个散列值相同,那么消息未被篡改。

    三、消息认证码(MAC)

    单向散列函数能确认数据的完整性,检测数据是否被篡改。但是如何验证消息是否是来自发送者,换句话说,是否有人伪装发送者发送了该消息。

    消息认证码是一种保证完整性并提供消息认证的密码技术。消息认证码的流程与单项散列函数很相似,可以简单理解为:消息认证码是一种与密钥相关联的单向散列函数

    1. 发送者和接收者事先共享密钥

    2. 发送者使用共享密钥计算出 MAC 值

    3. 发送者将消息和 MAC 值一起发送给接收者;

    4. 接收者根据共享密钥计算出 MAC 值

    5. 接收者将计算出的 MAC 值接受到的 MAC比较;如果两个 MAC 相同,消息就来自于发送者。

    MAC 这里指的是消息认证码(Message Authentication Code)技术
    MAC 值指的是使用消息和共享密钥计算出来的值

    四、数字签名

    消息认证码通过事先的共享密钥能够保证数据的完整性并提供消息认证功能。但共享密钥只能由两个人持有,对于其中一方来说,如果否认,也就无奈何了。

    数字签名是一种确保完整性、提供消息认证防止否认的密码技术。数字签名是通过非对称密钥(加密密钥与解密密钥不是同一个)“反过来用”来实现的:用私钥生成签名,用公钥验证签名。

    在非对称密钥系统中,私钥由接收者持有,公钥公开,任何人使用公钥进行加密,消息接收者可以用私钥进行解密;

    在数字签名系统中,私钥由发送者持有,公钥公开,任何人都可以使用公开的公钥对密文进行解密。谁持有私钥,即可表明该消息由谁发送的。

    数字签名可以对消息进行签名,但是实际上一般不会直接使用,一般使用对消息的散列值进行签名方式

    五、伪随机数生成器与总结

    伪随机数生成器是一种能够模拟产生随机数列的算法,随机数与密码技术相关。对称加密、非对称密码中使用随机数来产生密钥,如果生成随机数的算法不好,窃听者就能够推测出密钥,从而带来对通信机密性下降的风险。

    以上仅仅是对密码技术做最最基本的概述,具体细节内容欢迎关注公众号:阿甘Coder

    六、参考内容

    1.《图解密码技术》
    2. 其他

  • 相关阅读:
    HDU1875——畅通工程再续(最小生成树:Kruskal算法)
    CodeForces114E——Double Happiness(素数二次筛选)
    POJ3083——Children of the Candy Corn(DFS+BFS)
    POJ3687——Labeling Balls(反向建图+拓扑排序)
    SDUT2157——Greatest Number(STL二分查找)
    UVA548——Tree(中后序建树+DFS)
    HDU1312——Red and Black(DFS)
    生活碎碎念
    SQL基础四(例子)
    Linux系统中的一些重要的目录
  • 原文地址:https://www.cnblogs.com/gaox97329498/p/13799472.html
Copyright © 2011-2022 走看看