初识加密技术

最近组里组织内训,每个组员要选择一个主题进行分享,我选择了加密技术这个主题。因为工作的需要,开始去接触、学习这方面的知识,是初识;也是因为学的比较浅,比较粗,所以只是分享了些基本概念和一些应用,不涉及到具体的算法。
学习了William Stallings.《网络安全基础 应用与标准(第5版)》[1];也在网上查了很多资料,引用了一些技术分享者的资料,详见参考文献,这里一并谢过。文中也难免有错误之处,恳请指正。

1 对称加密
对称加密,也称为常规加密、单钥加密,又叫传统加密。一个对称加密方案由5个部分组成:
在这里插入图片描述发送者和接收者必须通过一个安全的方式获得密钥并且保证密钥的安全。对称加密的安全性取决于密钥的保密性而非算法的保密性,在已知密文和加密/解密算法的基础上不能够破译消息。
1.1 分组密码
最常用的对称加密算法是分组密码。
将明文进行分组后加密处理;分组密码处理固定大小的明文输入分组,且对每个明文分组产生同等大小的密文分组。分组密码主要有以下几种:
在这里插入图片描述
很多对称分组加密算法(包括DES),其结构由IBM的Horst Feistel在1973年首次详细描述。基本原理是明文分成2组,多次迭代,每次迭代用不同的子密钥,每个子密钥由原始密钥产生。AES没有使用Feistel结构,而是在每轮替换和移位时都并行处理整个数据分组。

1.2 流密码
对称加密算法还有一种流密码。从明文输入流逐位或逐字节用随机数加密产生密文输出;流密码与分组密码相比,速度更快,代码量更少。
RC4 (Rivest Cipher 4)是使用比较广泛的流密码,是Ron Rivest为RSA公司在1987年设计的一种流密码。
密钥大小可变的流密码,使用面向字节的操作。
流密码和分组密码,这两种密码都可以在几乎所有应用中使用。
对于需要加密/解密数据流的应用,比如在数据通信信道或浏览器网络链路上,流密码可能是更好的选择。对于处理数据分组的应用,比如文件传输、电子邮件和数据库上,分组密码可能更合适。

1.3 分组密码工作模式
分组密码工作模式
比如这样一个密码模式aes256-ctr,表示是AES加密算法,密钥长度256,工作模式CTR;
为什么会有工作模式?
分组密码一次处理一个数据分组。比如AES算法,它分组长度已固定,128bit。
对于比较长的明文,需要将明文按算法的分组长度分成多个组(有时候还需要对最后一个分组进行填充)。也就是,分组密码算法描述怎么加密一个数据块,分组密码工作模式实现了如何通过分组加密算法加密比较长的多个数据块。 常见的分组密码工作模式有ECB、CBC、CFB、OFB和CTR五种。下面表格总结了这五种工作模式[4]。
在这里插入图片描述
2 非对称加密
非对称加密,是属于公钥密码系统的范畴
公钥密码思想,由Diffie和hellman在1976年首次公开提出了公钥密码思想[DIFF76]。
使用两个单独的密钥,称为公钥和私钥。
用户生成密钥对,公钥通过分发公开,私钥不分发自己保存。任何时候用户都能够改变私钥且发布相应的公钥。
公钥密码的要求
1)密钥对的生成是容易
2)已知公钥和消息,生成密文是容易的
3)用私钥解密密文是容易的
4)不能通过公钥推算出私钥
5)不能用公钥和密文恢复出原始消息
公钥密码系统的应用
广义上可以把公钥密码系统分为三类:
加密/解密
数字签名
密钥交换
2.1 加密/解密
6个组成部分
在这里插入图片描述2.2 主要算法
D-H
Diffie和Hellman1976年首次公开提出了公钥密码思想, Diffie-Hellman算法是局限于密钥交换。该算法的目的是使得两个用户能够安全地交换密钥,供以后加密消息时使用。
RSA
1977年由Ron Rivest、Adi Shamir和Leonard Adleman在麻省理工学院提出的。是目前使用最广泛的非对称加密算法。目前1024bits长度的密钥强度已经不够安全了。密钥越大,越安全,但是系统运行速度越慢。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难。
DSS
数字签名标准,专为数字签名功能为设计的算法,不能用于加密或密钥交换,已过时
DSA (Digital Signature Algorithm)
Schnorr 和 ElGamal 签名算法的变种,被美国 NIST 作为 DSS (DigitalSignature Standard)。 DSA 是基于整数有限域离散对数难题的。密钥长度最长1024,已不够安全
ECC
椭圆曲线加密算法,它只需要非常少的比特数就可以提供相同强度的安全性,从而减轻了处理开销。
Elgamal
另一种常用的非对称加密算法,基于D-H,在1985年由塔希尔·盖莫尔提出。
各算法的用途如下 在这里插入图片描述
3 消息认证
不同于加密为了防止被动攻击(窃听),消息认证可以防止主动攻击(伪造数据等)。消息认证,取消息的一小块数据进行处理(形成消息认证码)并附在消息上;消息本身不加密。
形成消息认证码的算法,或称消息摘要算法,主要分为三类: MD 、 SHA 、 MAC
1) MD(Message Digest) : 消息摘要
MD系列算法一般有: MD2 、 MD4 、 MD5,算法后摘要长度固定的128bit ,即16字节;
2) SHA(Secure Hash Algorithm) : 安全散列
一般分为两类: SHA-1 和 SHA-2
SHA-1就是我们常见的SHA1(已不够安全), 算法后输出的摘要长度为20个字节;
SHA-2主要有SHA-224 、 SHA-256 、 SHA-384 、 SHA-512等。算法后输出的摘要长度分别为28字节、32字节、48字节和64字节;
3)MAC(Message Authentication Code) : 消息认证码
将密钥合并到现有散列算法中,最被广泛接受的方案是HMAC。它是IP安全里必须实现的MAC方案,也被用于其他Internet协议。

4 数字签名
数字签名是公钥密码的另一种应用。
什么是数字签名
发送者用自己的私钥签名消息。签名可以通过对整条消息加密或者对消息的一个小的数据块加密,其中该小数据块是整个消息的函数。这个被加密的整条消息或被加密的小数据块就是一个数字签名。
数字签名的作用是保证消息在传输过程中没有被篡改,认证了消息源,保证消息的完整性。基本思想是用私钥签名,公钥验证。
因为公钥是公开,很多人都有,如果用公钥签名,私钥验证,那么就没法保证消息的来源和完整性。比如A持有私钥,B,C都持有A的公钥,现在B发送一个消息给A,使用公钥签名,A不能通过这个签名证明是B发来的消息吗,因为也有可能是持有同样公钥的C发来的。那么B的信息被C改了后,由C发出来,但是A这边是无法知道B信息其实已经被篡改了。
但是用私钥加密,因为私钥只有一方所有,其他人若对信息做了修改,因为没有对应的私钥签名,所以接收方就能判断出来信息是否被篡改。
参考文献[2]中的网站对数字签名做了比较详细的讲解

可以对整个消息进行加密,但是需要很大的存储量。所以现在比较常用的签名方式是加密更小的数据块。 对一个文件通过一种算法(摘要算法)产生一个摘要,把这个摘要再用私钥(公钥系统)进行加密,形成签名。把签名和该文件一起发送给对方。
签名过程
在这里插入图片描述
验证过程
在这里插入图片描述
5 密钥分发
5.1 基于对称加密的密钥分配
对于对称加密,加密双方必须共享同一密钥,且必须保证密钥不被他人读取。常常需要频繁地改变密钥来减少某个攻击者可能知道密钥带来的数据泄露。密码系统的强度取决密钥分发技术。
分发方法
1)通信双方中的一方选定密钥并通过安全的物理方法传递给另一方;
2)第三方选定密钥并通过物理方法传递给通信双方;
3)一方用旧密钥加密新密钥并传递给另一方
4)通信双方各自有一个到达第三方(KDC 密钥分发中心)的加密链路,第三方在加密链路上传递密钥给通信双方
在这里插入图片描述自动密钥分发方法提供了允许大量终端用户访问大量主机以及主机之间交换数据所需要的灵活性和动态特性。实现该方法最广泛的一种应用就是Kerberos。它实际是一种认证服务,MIT开发。使用对称加密机制。

5.2 基于非对称加密的密钥分配
公钥加密的一个重要作用就是处理密钥的分发问题。包括两个不同的方面
1)公钥的分发
2)使用公钥加密分发密钥
公钥的分发
公钥分发过程中最大的缺点就是任何人都可以伪造公钥。比如攻击者可以伪装用户A向其他参与者比如B发送公钥,然后攻击者用自己的私钥解密B发送给用户A的加密信息。最典型的中间人攻击。解决这种问题的方法是使用公钥证书。公钥证书主要组成部分:公钥、公钥所有者的用户ID、可信的第三方(比如认证中心CA)签名等。
最为广泛接受的公钥证书格式X.509标准
用公钥证书分发会话密钥
1)通过公钥证书获得公钥(并认证了公钥的有效性)
2)利用公钥加密会话密钥
3)利用私钥解密消息得到会话密钥
4)此后双方就可以用这个会话密钥对消息进行加密

6 参考文献
[1].William Stallings.《网络安全基础 应用与标准(第5版)》
[2].http://www.youdzone.com/signature.html
[3].https://blog.csdn.net/qq_28205153/article/details/55798628
[4].https://blog.csdn.net/weixin_42940826/article/details/83687007

猜你喜欢

转载自blog.csdn.net/weixin_47745230/article/details/108693351