一篇文章搞定密码学基础

作者: YungFan | 来源:发表于2016-07-08 09:24 被阅读5325次

    密码技术是网络安全的基础,也是核心。现在对隐私保护、敏感信息尤其重视,所以不论是系统开发还是App开发,只要有网络通信,很多信息都需要进行加密,以防止被截取篡改,虽然很多人每天都在用密码学的知识,但并不是人人都知道,谨以此篇科普一下~~~

    PS:2016.7.10 补充 散列函数与消息摘要

    基本概念

    明文M:原始数据,待加密的数据
    密文C:对明文进行某种伪装或变换后的输出
    密钥K:加密或解密中所使用的专门工具
    加密E:用某种方法将明文变成密文的过程
    解密D:将密文恢复成明文的过程

    密码系统

    一个密码系统由五元组(M、C、K、E、D)组成,如图所示

    密码系统.PNG

    密码体制

    对称密码体制:对信息进行明/密文变换时,加解和解密使用相同密钥的密码体制

    对称密码体制.PNG

    安全性依赖于:1、加密算法的安全性 2、密钥的秘密性
    优点:算法公开、速度快、保密强度高、占用空间小
    缺点:密钥的分发和管理非常复杂
    用途:信息量大的加密
    代表算法:DES算法、3DES算法、IDEA算法、AES算法
    问题:若接收方伪造一个消息并诬陷是发送方发送的,发送方无法辩解,也就是无法解决消息的确认问题,不能实现数字签名;另一个问题是建立安全的信道之前,如何实现通信双方的加密密钥的交换

    非对称密码体制:对信息进行明/密文变换时,加密和解密密钥不相同的密码体制
    在非对称密码体制中,每个用户都具有一对密钥,一个用于加密,一个用于解密,其中加密密钥可以公开,称之为公钥,解密密钥属于秘密,称之为私钥,只有用户一人知道。

    非对称密码体制.PNG

    优点:通信双方不需要通过建立一个安全信道来进行密钥的交换,密钥空间小,降低了密钥管理的难度
    缺点:实现速度慢,不适合通信负荷较重的情况
    用途:加密关键性的、核心的机密数据
    代表算法:RSA算法、ElGamal算法、椭圆曲线加密算法
    问题:由于自己的公钥对外公开,因此
    1、如果一个人用自己的公钥加密数据发送给我,我无法断定是谁发送的;
    2、我用私钥加密的数据,任何知道我公钥的人都能解密我的数据。

    混合加密体制:同时使用对称密码和非对称密码的体制
    对称加密的一个很大问题就是通信双方如何将密钥传输给对方,为了安全,一般采取带外传输,也就是说如果加密通信是在网络,那么密钥的传输需要通过其他途径,如短信,即使如此,也很难保证密钥传输的安全性。非对称加密加解最大的优点是事先不需要传输密钥,但速度慢,因此实际应用中,经常采取混合密码体制。假设A与B要实现保密通信,工作过程如下:

    1、A找到B的公钥
    2、A选择一个大随机数作为此次会话的加密密钥,即会话密钥
    3、A以会话密钥加密通信内容,再以B的公钥加密会话密钥后发送给B
    4、B收到数据以后,先用自己的私钥解密出会话密钥,然后用会话密钥解密出通信内容

    散列函数与消息摘要

    Hash函数也称为散列函数,它能够对不同长度的输入信息,产生固定长度的输出。这种固定长度的输出称之为原消息的散列或者消息摘要,消息摘要长度固定且比原始信息小得多,一般情况下,消息摘要是不可逆的,即从消息摘要无法还原原文,为什么说一般情况下呢,中国出了个牛人王小云,感兴趣的自行Google~~~

    散列算法:散列算法就是产生信息散列值的算法,它有一个特性,就是在输入信息中如果发生细微的改变,比如给变了二进制的一位,都可以改变散列值中每个比特的特性,导致最后的输出结果大相径庭,所以它对于检测消息或者密钥等信息对象中的任何微小的变化非常有用。

    一个安全的散列算法H需要满足:

    1、输入长度是任意的,输出是固定的
    2、对每一个给定的输入,计算输出是很容易的
    3、给定H,找到两个不同的输入,输出同一个值在计算上不可行
    4、给定H和一个消息x,找到另一个不同的消息y,使它们散列到同一个值在计算上不可行
    常见的散列算法:MD2、MD4、MD5、SHA、SHA-1

    数字签名

    数字签名是指发送方以电子形式签名一个消息或文件,签名后的消息或文件能在网络中传输,并表示签名人对该消息或文件的内容负有责任。数字签名综合使用了消息摘要和非对称加密技术,可以保证接受者能够核实发送者对报文的签名,发送者事后不抵赖报文的签名,接受者不能篡改报文内容和伪造对报文的签名。

    数字签名需要做到两点:

    1、确认信息是由签名者发送的;
    2、确认信息从签发到接受没有被修改过。

    数字签名的过程与示意图:

    1、发送方要发送消息运用散列函数(MD5、SHA-1等)形成消息摘要;
    2、发送方用自己的私钥对消息摘要进行加密,形成数字签名;
    3、发送方将数字签名附加在消息后发送给接收方;
    4、接受方用发送方的公钥对签名信息进行解密,得到消息摘要;
    5、接收方以相同的散列函数对接收到的消息进行散列,也得到一份消息摘要;、
    6、接收方比较两个消息摘要,如果完全一致,说明数据没有被篡改,签名真实有效;否则拒绝该签名。

    数字签名.png
    如果通信的内容是加密的,就需要采用数字信封:发送方用对称密钥加密明文,然后用对方的公钥加密对称密钥发送给对方,对方收到电子信封,用自己的私钥解密,得到对称密钥解密,还原明文。此时数字签名的过程如下:

    1、发送方要发送消息运用散列函数(MD5、SHA-1等)形成消息摘要;
    2、发送方用自己的私钥对消息摘要进行加密,形成数字签名;
    3、发送方用对称加密算法对消息原文、数字签名进行加密,得到密文信息;
    4、发送方用接收方的公钥加密对称加密算法的密钥进行加密,形成数字信封;
    5、发送方将3中的密文信息和数字信封一起发给接收方;
    6、接收方首先用自己的私钥解密数字信封,还原对称加密算法的密钥;
    7、接受方用6中的密钥解密接收到的密文,得到原文信息和数字签名;
    8、接受方用发送方的公钥对签名信息进行解密,得到消息摘要;
    9、接收方以相同的散列函数对接收到的消息进行散列,也得到一份消息摘要;
    10、接收方比较两个消息摘要,如果完全一致,说明数据没有被篡改,签名真实有效;否则拒绝该签名。

    数字证书

    数字证书是一种权威的电子文档,由权威公正的第三方认证机构(CA)签发,广泛用于涉及需要身份认证和数据安全的领域。

    数字证书种类:

    1、服务器证书:证明服务器的身份和进行通信加密,客户端可以与服务器端建立SSL连接,然后通信数据都会被加密。
    2、电子邮件证书:证明电子邮件发件人的真实性,也可发送加密邮件,只有接收方才能打得开。
    3、客户端证书:主要用于身份验证和数字签名,安全的客户端证书经常存储的专门的USBKey中,使用的时候需要输入保护密码,以防被导出和复制,如指纹识别、语音播报、带显示器的USBKey等等。

    数字证书功能:
    1、信息保密
    2、身份确认
    3、不可否认性
    4、数据完整性

    数字证书的格式:
    最简单的可以是:公钥、名称和证书授权中心的数字签名,目前 X.509 是一种通用的证书格式,它的第三个版本目前使用广泛,证书内容包括:版本、序列号、签名算法标识、签发者、有效期、主体、主体公开密钥、CA的数字签名、可选型等等

    X.509 V3.PNG

    相关文章

      网友评论

      • 9ae4eeb8946a:可以可以,看完你的文章我认为我学到九牛一毛了^-^
        YungFan:@connecting_939f 密码学是很深的一门学位,我这篇只是入门简介,类似书的目录。想深入,一个一个啃吧,加油!:smile:
      • f1d9b2d124b4:很好,易懂
        YungFan:@我是小张同学啊 :pray:
      • 057d120f0ba3:写的真🐮
        YungFan:@魏帅坤 帮助到你就好
      • 25c16f5c8bcd:信息安全导论,感觉还是我们咸老师教的清楚
        YungFan:@25c16f5c8bcd :+1:
      • 67d6b69946a3:一张图带点文字,很不错
      • 豆瓣菜:写的挺好的:smile: 不过我有个疑问,在数字签名过程中,接收方得到了发送方发送的数据后,1:首先用私钥对数字信封解密得到对称加密的密钥,2:然后用密钥对密文信息解密得到原文信息和数字签名,3:使用接收方的公钥对数字签名解密得到消息摘要,4:现在剩下的是原文信息和消息摘要,应该是在用相同的散列函数对消息摘要解密后得到原文信息,5:最后比较这两个原文信息吧 不是比较消息摘要
        YungFan:@jakie_king 散列函数事不可逆的,所以从摘要得到原文是不行的
        豆瓣菜:@YungFan 希望可以解答下:smile:
        豆瓣菜:@jakie_king 或者是我理解错了
      • ea7ce5148c39:七七八八的看完了,可以说略懂吧,对这个密码学有大概的了解。谢你的分享。
        YungFan:@皂沫 博大精深的一门学问
      • eb56456a1562:谢谢分享
        YungFan:@万才不是猪 :blush::blush:
      • 孤独的行船者:密码学难还是计算机难?
        YungFan:@孤独的行船者 密码学是计算机的一个分支
      • 阿磁:请问明文M是哪个单词呢
        阿磁:@YungFan :sweat:
        YungFan:@阿磁 Message
      • 白与微光:脑袋有点晕
        白与微光: @YungFan 嗯嗯
        YungFan:@青锋徐来 好好缕缕
      • 成熟建立在自省与煎熬中:很好,帮助很大
        YungFan:@成熟建立在自省与煎熬中 谢谢
      • 478ce990c786:总结的不错
        YungFan:@泡泡__ 谢谢

      本文标题:一篇文章搞定密码学基础

      本文链接:https://www.haomeiwen.com/subject/ohnljttx.html