【网络安全】网络安全之密码学

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41035588/article/details/88357172

一、密码学概述

现代密码技术及应用已经涵盖数据处理过程的各个环节,如数据加密密码分析数字签名身份识别零知识证明秘密分享等。通过以密码学为核心的理论与技术来保证数据的机密性、完整性、可用性等安全属性。

  • 机密性指信息不泄漏给非授权的用户、实体或过程;
  • 完整性指数据未经授权不能被改变,即信息在存储或传输过程中保持不被偶然或蓄意的删除、修改、伪造、乱序、重放、插入等操作所破坏;
  • 可用性是保证信息和信息系统可被授权实体访问并按需求使用的特性,即当需要时应能存取所需的信息。

这三个性质俗称CIA。除CIA外,其他安全属性还包括不可否认性、认证性等。

密码系统的保密性不依赖于加密体制算法的保密,而依赖于密钥。

二、密钥体制的分类

根据加密密钥解密密钥的关系,密码体制可分为对称密码体制非对称密码体制

  • 对称密码体制也称单钥或私钥密码体制,其加密密钥和解密密钥相同,或实质上等同,即从一个易推倒出另一个。常见的对称密钥算法包括DES3DESIDEAAESRC4等。

  • 非对称密码体制又称双钥或公钥密码体制,其加密密钥和解密密钥不同,从一个很难推出另一个。其中,一个可以公开的密钥,称为公开密钥,简称公钥另一个必须保密的密钥,称为私有密钥,简称私钥。典型的公私钥密码算法有RSADSADHECCEIGamal等。

明文的处理方式,可以将对称密码体制分为流密码分组密码

  • 流密码也称为序列密码,是将明文消息按字符逐位地加密,连续的处理输入明文,即一次加密一个比特或一个字节。
  • 分组密码是将明文按组分成固定长度的块,用同一密钥和算法对每一块加密,每个输入块加密后得到一个固定长度的密文输出块,典型的密码算法有DESIDEAAESRC5TwofishCAST-256MARS等。

三、密钥管理

密码的种类繁多,一般可分为以下类型:

  • 初始密钥( primary key),又称基本密钥(base key),是由用户选定或系统分配的到的,可在较长的时间(相对会话密钥)内使用;
  • 会话密钥( session key)是通信双方在一次通话或交换数据时使用的密钥,可以由可信的密钥分发中心(KDC)分配,也可以由通信用户协商获得;
  • 密钥加密密钥(KEK)是对传输的会话或文件密钥进行加密的密钥;
  • 主机主密钥(host master key)是对密钥加密密钥进行加密的密钥,它一般保存在主机处理器中。

推荐阅读链接 银行卡网络安全系统的三级密钥体系

四、对称密钥算法

对称密码算法的优点算法简单、计算量小、加密速度快、加密效率高、适合加密大量数据,明文长度与密文长度相等。它也存在一些缺点

1、通信双方钥进行加密通信,需要通过秘密的安全信道协商加密密钥,而这安全信道可能很难实现
2、在有多个用户的网络中,任何两个用户之间都需要有共享的密钥,若每两个用户都采用不同的对称密钥,则网络中的用户数越多,需要管理的密钥数越多越困难。
3、无法解决对消息的篡改、否认等问题。

  • DES(数据加密标准 data encryption standard)

它以64位的分组长度对数据进行加密,每个明文分组在64位长的密钥控制下进行加密变化,输出结果同样为64位长度的密文。由于64位长的密钥中包括了8位奇偶校验位,所以实际密钥长度为56位。

  • 3DES

它不是一种全新设计的算法,而是相对简单的执行三次DES来达到增加密钥长度及安全性。其第一、三次直接采用DES加密算法,而第二次则是采用DES解密算法,从而得到密文。这种加密过程即采用“加密-解密-加密”过程,又被称为EDE方案。
根据实际使用密钥的数量不同,3DES又分为两大类:三个密钥的3DES和两个密钥的3DES,两个密钥的3DES中,k1和k3是相同的,则三个密钥的3DES算法密钥长度为168位(56*3),而两个密钥的3DES算法密钥长度位112位。

  • AES (高级加密标准 advanced encryption standard)

AES是具有可变分组长度和可变密钥长度的迭代分组密码,其分组长度和密钥长度均可独立地设定为32位的任意倍数,最小值为128位,最大值为256位。为满足AES的要求,限定分组长度128位,密钥长度可以位128、192和256位,分别称为AES-128、AES-192、AES-256,其内部采用的循环加密轮数分别为10、12和14.

五、非对称加密算法

公钥密码算法克服了对称密码算法的缺点,解决了密钥传递的问题,大大减少了密钥持有量,并且提供了对称密码技术无法或很难提供的认证服务如数字签名),其缺点计算复杂,耗用资源大,并且回导致密文变长。关于公钥算法,有几种常见的误解:

1、公钥密码更安全。任何一种现代密码算法的安全性都依赖于密钥长度
2、公钥算法使得对称密码算法称为过时的技术。公钥算法计算速度较慢,加密数据的速率较低,通常用于密钥管理和数字签名。实际应用中,人们通常将对称密码和公钥密码结合起来使用,对称密码算法将长期存在。
3、使用公钥密码实现密钥分配非常简单。使用公钥密码也需要某种形式的协议,通常包含一个可信中心,其处理过程并不比传统密码的密钥分配过程简单。

  • RSA密钥长度:512、768、1024、2048、5120、21000、120000

六、哈希函数

前面介绍的·对称密码和非对称密码·,主要是针对窃听、业务流分析等形式的威胁,解决消息的机密性问题·。而实际的系统和网络还可能受到消息篡改冒充抵赖等形式的攻击哈希函数是进行消息认证基本方法,其主要用途是消息完整性检测数字签名

哈希函数接受一个消息作为输入,产生一个称为哈希值的输出,也可称为散列值、消息摘要。更准确的说,哈希函数是将任意有限长度比特串映射为固定长度的串

  • MD5
    MD系列算法是Ron Rvest设计的单向哈希函数,包括MD2、MD3、MD4、MD5,其中MD5是MD4的改进版,两者采用了类似的设计思想和原则,对于任意长度的速入消息M,都产生长度为128位的哈希输出值。一般下载操作系统镜像的时候,都会显示MD5值,来用户来确定下载是否正确。检验文件下载是否正确:
  • Linux:
    md5sum 文件名
    把内部的数据经过很复杂的过程,转换为32位的的十六进制数,可以标识一个文件(相差一个字母,都会相差很大很大,类似于雪崩效应)
  • win下,cmd进入终端,进入文件下载的路径,dir
    certutil -hashfile 文件名 MD5
  • 将两个文件md5比较即可,
  • SHA (Secure Hash Algorithm 安全哈希算法)
    包括SHA-1、SHA-224、SHA-256、SHA-384和SHA-512 几种单向哈希算法,后面4种算法有时被合并称为SHA-2。SHA-1、SHA-224、SHA-256适用于长度不超过2^64 二进制位的消息, SHA-384和SHA-512适用于长度不超过2^128二进制位的消息。
    SHA-1算法处理与MD5算法类似,对输入消息按512比特的分组位单位进行处理,输出160位的哈希值。尽管SHA-1算法比MD5算法的速度钥慢25%,但它更加安全。【Git 中的commit id就是运用SHA1算法计算的,可以通过哈希值找到对应的提交内容】

哈希函数一般用于密码的加密存储数字签名文件完整性验证(commit id)等。

七、消息鉴别码

消息认证证实一个收到的消息来自可信的源点,且未被篡改、重放或延迟等。除哈希函数之外,消息认证码数字签名都是常用的消息认证技术。

  • 消息认证码或称消息鉴别码(Message Authentication Code, MAC)利用密钥来生成一个固定长度的短数据块,并将该数据块附加在消息之后。

常见的MAC函数是基于哈希函数的MAC,即HMAC。

其典型应用是用在“挑战/响应”身份认证中。
1、客户端向服务器发出一个验证请求
2、服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)
3、客户端用自己的密钥进行HMAC计算并得到一个结果作为认证传给服务器(此为响应)
4、服务器用存储在服务器中的客户密码随机数进行HMAC计算,如一致则认为客户端是合法用户

这里客户端不直接用哈希函数对自己的密码计算后传递给服务器,服务器再做同样的计算后对比来验证这样操作,防止 重放攻击

消息鉴别码和哈希函数主要区别在于,消息鉴别码更像一种加密算法,它引入了密钥`,其安全性不完全依赖于所使用的HASH算法。

参考链接 MAC

八、数字签名

是指附加数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据或变换能使数据单元的接收者确认数据单元来源数据单元的完整性,防止被人伪造。
基于公钥的数字签名过程数据加密过程是不一样的,

  • 数据加密过程中,发送者使用接收者的公钥加密所发送的数据,接收者使用自己的私钥来解密数据,目的是保证数据的机密性;
  • 数字签名中,签名者使用自己的私钥签名关键性信息(如信息摘要)发送给接收者,接收者使用签名者的公钥来验证签名信息的真实性。

参考链接: 数字签名与数字证书1 数字签名与数字证书 2 数字签名/数字证书/HTTPS

九、HTTPS

数字签名数字证书可以用于文件,当然也能用于html网页数据。本人没有https相关开发经验,故不做深入探讨只是简单介绍下。

  • http的安全缺陷

无法验证服务端的身份
无法保证数据完整性
无法保证数据传输不被窃听

https就是专门解决这三个问题,https使用数字签名+数字证书解决了前2个问题,很多大型网站比如baidu.com都会采用https协议,网址左侧会出现绿色加锁标识:
在这里插入图片描述

点击可以查看证书,另外浏览器都会内置CA根证书,来对这些网站的服务器证书进行校验。
然后,再用SSL协议对传输通道加密,保证数据传输不被窃听,这个SSL加密原理分为很多步骤不在本文讨论范围。

所有的HTTP请求和响应数据都需要加密。
一个传输级的安全密码层:SSL
后继者:TLS。 我们不严格的用SSL表示SSL和TLS
HTTPS是位于安全层之上的HTTP,这个安全层位于TCP之上。

  • 为什么用HTTPS (必要性)

服务器认证 :客户端知道它是在与真正的而不是伪造的服务器通话
客户端认证:服务器知道他们是在与真正的而不是伪造的客户端通话
完整性: 客户端和服务器的数据不会被修改
加密:对话是私密的,不怕被窃听
效率: 一个运行足够快速的算法
普遍性:所有的客户和服务器都支持这些协议
管理的可扩展性:任何地方的任何人都可以立即进行安全通信

参考博客: 通俗理解数字签名,数字证书和httpsSSL协议详解TLS与CA证书详解

猜你喜欢

转载自blog.csdn.net/qq_41035588/article/details/88357172