一、密码学基础
1.1、概述
现代密码技术及应用已经涵盖数据处理过程的各个环节,如数据加密、密码分析、数字签名、身份识别、零知识证明、秘密分享等。通过以密码学为核心的理论与技术来保证数据的机密性、完整性、可用性等安全属性。
机密性指信息不泄漏给非授权的用户、实体或过程;
完整性指数据未经授权不能被改变,即信息在存储或传输过程中保持不被偶然或蓄意的删除、修改、伪造、乱序、重放、插入等操作所破坏;
可用性是保证信息和信息系统可被授权实体访问并按需求使用的特性,即当需要时应能存取所需的信息。
这三个性质俗称CIA。除CIA外,其他安全属性还包括不可否认性、认证性等。
密码系统的保密性不依赖于对加密体制或算法的保密,而依赖于密钥。
1.2、密钥管理
密钥的种类繁多,一般可分为以下类型:
初始密钥( primary key),又称基本密钥(base key),是由用户选定或系统分配的到的,可在较长的时间(相对会话密钥)内使用;
会话密钥( session key)是通信双方在一次通话或交换数据时使用的密钥,可以由可信的密钥分发中心(KDC)分配,也可以由通信用户协商获得;
密钥加密密钥(KEK)是对传输的会话或文件密钥进行加密的密钥;
主机主密钥(host master key)是对密钥加密密钥进行加密的密钥,它一般保存在主机处理器中。
推荐阅读链接 01_银行卡网络安全系统的三级密钥体系
1.3、密钥体制的分类
根据加密密钥与解密密钥的关系,密码体制可分为对称密码体制和非对称密码体制。
对称密码体制也称单钥或私钥密码体制,其加密密钥和解密密钥相同,或实质上等同,即从一个易推倒出另一个。常见的对称密钥算法包括DES、3DES、IDEA、 AES、RC4等。
非对称密码体制又称双钥或公钥密码体制,其加密密钥和解密密钥不同,从一个很难推出另一个。其中,一个可以公开的密钥,称为公开密钥,简称公钥;另一个必须保密的密钥,称为私有密钥,简称私钥。典型的公私钥密码算法有RSA、DSA、DH、ECC和EIGamal等。
按明文的处理方式,可以将对称密码体制分为流密码和分组密码。
流密码也称为序列密码,是将明文消息按字符逐位地加密,连续的处理输入明文,即一次加密一个比特或一个字节。
分组密码是将明文按组分成固定长度的块,用同一密钥和算法对每一块加密,每个输入块加密后得到一个固定长度的密文输出块,典型的密码算法有DES、IDEA、AES、RC5、Twofish、CAST-256、MARS等。
二、加密算法
2.1、对称密钥算法
对称密码算法的优点是算法简单、计算量小、加密速度快、加密效率高、适合加密大量数据,明文长度与密文长度相等。它也存在一些缺点:
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.
SM1(国密算法)
SM1 为对称加密,盖算法的算法实现原理没有公开,他的加密强度和 AES 相当,需要调用加密芯片的接口进行使用。SM1 高达 128 bit 的密钥长度以及算法本身的强度和不公开性保证了通信的安全性。
SM4(国密算法)
SM4 是一种 Feistel 结构的分组密码算法,其分组长度和密钥长度均为128bit。加解密算法与密钥扩张算法都采用 32 轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,即解密算法使用的轮密钥是加密算法使用的轮密钥的逆序。
参考链接:深入浅出讲解国密算法 - 知乎
2.2、非对称加密算法
公钥密码算法克服了对称密码算法的缺点,解决了密钥传递的问题,大大减少了密钥持有量,并且提供了对称密码技术无法或很难提供的认证服务(如数字签名),其缺点是计算复杂,耗用资源大,并且回导致密文变长。关于公钥算法,有几种常见的误解:
1、公钥密码更安全。任何一种现代密码算法的安全性都依赖于密钥长度
2、公钥算法使得对称密码算法称为过时的技术。公钥算法计算速度较慢,加密数据的速率较低,通常用于密钥管理和数字签名。实际应用中,人们通常将对称密码和公钥密码结合起来使用,对称密码算法将长期存在。
3、使用公钥密码实现密钥分配非常简单。使用公钥密码也需要某种形式的协议,通常包含一个可信中心,其处理过程并不比传统密码的密钥分配过程简单。
主要算法:
RSA、Elgamal、背包算法、Rabin、D-H、ECC (椭圆曲线加密算法)。使用最广泛的是 RSA 算法,Elgamal 是另一种常用的非对称加密算法。
参考链接:加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH)_Tony-老师的博客-CSDN博客
常用算法:
RSA:
RSA 是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。
常见的RSA密钥长度:512、768、1024、2048、5120、21000、120000
SM2:
国密 SM2 为非对称加密,也称为公钥密码;国密算法的本质是椭圆曲线加密。关于对称加密和非对称加密的内容请查阅笔者写的《深入理解对称加密和非对称加密》一文。SM2 椭圆曲线公钥密码 ( ECC ) 算法是我国公钥密码算法标准。SM2 算法的主要内容包括 3 部分: 数字签名算法; 密钥交换协议和公钥加密算法。
参考链接:深入浅出讲解国密算法 - 知乎
四、消息完整性检测
前面介绍的·对称密码和非对称密码·,主要是针对窃听、业务流分析等形式的威胁,解决消息的机密性问题·。而实际的系统和网络还可能受到消息篡改、冒充和抵赖等形式的攻击。哈希函数是进行消息认证的基本方法,其主要用途是消息完整性检测和数字签名。
4.1 哈希算法
焊锡函数接受一个消息作为输入,产生一个称为哈希值的输出,也可称为散列值、消息摘要。更准确的说,哈希函数是将任意有限长度比特串映射为固定长度的串。
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)等。
4.2 SM3算法
SM3 密码杂凑算法是中国国家密码管理局年公布的中国商用密码杂凑算法标准。该算法由王小云等人设计,消息分组比特,输出杂凑值比特,采用 Merkle Damgard 结构。密码杂凑算法的压缩函数与的压缩函数具有相似的结构,但是,密码杂凑算法的压缩函数的结构和消息拓展过程的设计都更加复杂,比如压缩函数的每一轮都使用个消息字,消息拓展过程的每一轮都使用个消息字等。
SM3 密码杂凑算法消息分组长度 为 512b, 摘要长度 256b。压缩函数状态 256 b, 共 64 步操作。
参考链接:深入浅出讲解国密算法 - 知乎
4.2、消息鉴别码
消息认证是证实一个收到的消息来自可信的源点,且未被篡改、重放或延迟等。除哈希函数之外,消息认证码和数字签名都是常用的消息认证技术。
消息认证码或称消息鉴别码(Message Authentication Code, MAC)利用密钥来生成一个固定长度的短数据块,并将该数据块附加在消息之后。
常见的MAC函数是基于哈希函数的MAC,即HMAC。
其典型应用是用在“挑战/响应”身份认证中。
1、客户端向服务器发出一个验证请求
2、服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)
3、客户端用自己的密钥进行HMAC计算并得到一个结果作为认证传给服务器(此为响应)
4、服务器用存储在服务器中的客户密码对随机数进行HMAC计算,如一致则认为客户端是合法用户
这里客户端不直接用哈希函数对自己的密码计算后传递给服务器,服务器再做同样的计算后对比来验证这样操作,防止 重放攻击。
消息鉴别码和哈希函数的主要区别在于,消息鉴别码更像一种加密算法,它引入了密钥`,其安全性不完全依赖于所使用的HASH算法。
4.3、数字签名
是指附加在数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据或变换能使数据单元的接收者确认数据单元来源和数据单元的完整性,防止被人伪造。
基于公钥的数字签名过程与数据加密过程是不一样的,
数据加密过程中,发送者使用接收者的公钥加密所发送的数据,接收者使用自己的私钥来解密数据,目的是保证数据的机密性;
数字签名中,签名者使用自己的私钥签名关键性信息(如信息摘要)发送给接收者,接收者使用签名者的公钥来验证签名信息的真实性。
参考链接: 数字签名与数字证书1 、 数字签名与数字证书 2 、数字签名/数字证书/HTTPS
五、网络传输的安全
5.1、HTTPS
数字签名和数字证书可以用于文件,当然也能用于html网页数据。本人没有https相关开发经验,故不做深入探讨只是简单介绍下。
http的安全缺陷:
无法验证服务端的身份
无法保证数据完整性
无法保证数据传输不被窃听
而https就是专门解决这三个问题,https使用数字签名+数字证书解决了前2个问题,很多大型网站比如baidu.com都会采用https协议,网址左侧会出现绿色加锁标识:
点击可以查看证书,另外浏览器都会内置CA根证书,来对这些网站的服务器证书进行校验。
然后,再用SSL协议对传输通道加密,保证数据传输不被窃听,这个SSL加密原理分为很多步骤不在本文讨论范围。
所有的HTTP请求和响应数据都需要加密。
一个传输级的安全密码层:SSL
后继者:TLS。 我们不严格的用SSL表示SSL和TLS
HTTPS是位于安全层之上的HTTP,这个安全层位于TCP之上。
5.2 为什么用HTTPS (必要性)
服务器认证 :客户端知道它是在与真正的而不是伪造的服务器通话
客户端认证:服务器知道他们是在与真正的而不是伪造的客户端通话
完整性: 客户端和服务器的数据不会被修改
加密:对话是私密的,不怕被窃听
效率: 一个运行足够快速的算法
普遍性:所有的客户和服务器都支持这些协议
管理的可扩展性:任何地方的任何人都可以立即进行安全通信