密码学概述

密码学的概念

密码,最初的目的是用于对信息加密,计算机领域的密码技术种类繁多。但随着密码学的运用,密码还被用于身份认证、防止否认等功能上。密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。

密码学是一门古老而深奥的学科,只在很小的范围内使用,如军事、外交、情报等部门。计算机密码学是研究计算机信息加密、解密及其变换 的科学,是数学和计算机的交叉学科 ,也是一门新兴的学科。密码学是网络空间安全主要研究方向之一,也是许多安全机制的基础。

密码学有两个分支:1)密码编码学 :主要研究对信息进行变换,以保护信息在信道的过程中不被敌手窃取、解读和利用的方法。2)**密码分析学:**主要研究如何分析和破译密码,也称为 密码攻击。

密码学与数学关系密切。数论中许多基本内容,如同余理论、中国剩余定理(CRT )、高次剩余理论等,在新型密码体制、密钥分配与管理、数字签名、身份认证等方面有直接的应用。近代数学在现代密码研究中的应用包括群论,有限域上椭圆曲线理论,多项式理论与迹函数理论陷门单向函数等。

术语:

1)消息(Message):消息是指用语言、文字、数字、符号、图像、声音或其组合等方式记载或传递的有意义的内容。在密码学里,消息也称为信息 。

2)明文(Plaintext):未经过任何伪装或隐藏技术处理的消息称为明文。

3)加密(Encryption):利用某些方法或技术对明文进行伪装或隐藏的过程称为加密。

4)密文(Cipher Text):被加密的消息称为密文。

5)解密(Decryption):将密文恢复成原明文的过程或操作称为解密,解密也可称为脱密。

6)加密算法(Encryption Algorithm):将明文消息加密成密文所采用的一组规则或数学函数。

7)解密算法(Decryption Algorithm ):将密文消息解密成明文所采用的一组规则或数学函数。

8)密钥(Key):进行加密或解密操作所需要的秘密参数或关键信息 。在密码系统中,密钥分为私钥与公钥两种。私钥指必须保密的密钥,公钥指可以向外界公开的密钥。

9)密码系统 (Cryptosystem ):一个密码体制或密码系统是指由明文空间、密文空间、密钥空间、加密算法以及解密算法 组成的一个多元素集合体。

密码的分类

最基本的密码分类是信息加解密分为对称加密 (Sysmmetric Cryptography)和非对称加密(Public-Key Cryptography,Asymmetric Cryptography),这两者的区别是是否使用了相同的密钥。除了信息的加解密,还有用于确认数据完整性(Integrity)的单向散列(One-Way Hash Function)技术,又称密码检验(Cryptographic Checksum)、指纹 (Fingerprint)、消息摘要 (Message Digest)。

信息的加解密与信息的单向散列的区别是,对称与非对称加密是可以通过密钥解出明文,而单向散列是不可逆的。信息的加解密,密文必定是不定长的,而单向散列可以是定长的。结合密码学的加解密技术和单向散列技术,又有了用于防止篡改的消息认证码技术,防止伪装的数字签名技术以及认证证书。

网络安全的核心概念是CIA三元组,分别是Confidentiality(机密性)、Integrity(完整性)、Availability(可用性)。机密性是指保证信息不能被非授权访问,即使非授权用户得到信息也无法知晓信息内容,因而不能使用。完整性是指维护信息的一致性,即信息在生成、传输、存储和使用过程中不应发生人为或非人为的非授权篡改。可用性是指保障信息资源随时可提供服务的能力特性,即授权用户根据需要可以随时访问所需信息。

网络中有很多旨在窃取密码的攻击方式,他们破坏了上述的网络安全特性。

|------|------|-----------------|
| 攻击方式 | 特征 | 对应技术 |
| 窃听 | 机密性 | 对称、非对称加密 |
| 篡改 | 完整性 | 单向散列、消息认证码、数字签名 |
| 伪装 | 身份认证 | 消息认证、数字签名 |
| 否认 | 不可否认 | 数字签名 |

加密算法简介

  • 1 对称加密

对称加密指的是加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。

举个例子来简要说明一下对称加密的工作过程。甲和乙是一对生意搭档,他们住在不同的城市。由于生意上的需要,他们经常会相互之间邮寄重要的货物。为了保证货物的安全,他们商定制作一个保险盒,将物品放入其中。他们打造了两把相同的钥匙分别保管,以便在收到包裹时用这个钥匙打开保险盒,以及在邮寄货物前用这把钥匙锁上保险盒。

因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。

下面介绍一下对称加密的主要算法。

  • DES算法

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。

DES 算法是以 64 bits 明文为一个单位(每隔 7 bits 会有一个 checksum bit,因此实际有效为 56 bits),分组对明文进行加密的,是一种分组密码(Block Cipher)算法。DES 算法原理是通过一个称为 Feistel 网络,并经过 N 轮的轮函数的计算实现的。

DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防对密钥进行逐段破译。DES 于 1977 年公布,现已被破解。

  • Triple DES算法

Triple DES又称为3DES,是DES向AES过渡的加密算法。它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。Triple DES以DES为基本模块,通过组合分组方法设计出分组加密算法。比最初的DES更安全。

该方法使用两个密钥,执行三次DES算法,加密的过程是加密-解密-加密,解密的过程是解密-加密-解密。采用两个密钥进行三重加密的好处有:1 两个密钥合起来有效密钥长度112bit,可以满足商业应用的需要,若采用总长为168bit的三个密钥,会产生不必要的开销;2 加密时采用加密-解密-加密,而不是加密-加密-加密的形式,这样有效的实现了与现有DES系统的向后兼容问题。因为当K1=K2时,3DES的效果就和原来的DES一样,有助于逐渐推广3DES;3 3DES具有足够的安全性,目前还没有关于攻破3DES的报道。

  • AES算法

AES 是于 2000 年被采用的最新的对称加密标准,采用了 Rijndael 算法。

Rijndael 算法也是一种分组算法,密钥长度规定为 128 bits,192 bits, 256 bits 三种规格。与 DES 不同,Rijndael 算法没有采用 Feistel 网络,而是采用 SPN 结构,并通过多个轮函数实现的。

SPN 结构和轮函数此处不再展开,简单的说,就是对明文数据分组,然后轮函数是进行一系列的平移、翻转、位之间的交换等操作。具体可以参考 Advanced Encryption Standard, Wikipedia。

  • 2 非对称加密

非对称加密可以用于解决密钥配送问题。相对于对称密码加解密采用相同的密码,非对称密码加解密采用的是不同的密钥,公钥和私钥成对,公钥加密的信息,只有相应的私钥才可解密。

对称加密好比大家都用相同的锁对信息加密,加解密双方都拥有相同的钥匙,钥匙(密钥)丢了,锁(明文信息)就开了。非对称加密,则是向大家派发锁(公钥),大家可以通过锁,对信息加密。锁是公开的,丢了也无所谓。但钥匙(私钥)只有一把,归信息的接受者所有。

加密流程是:1 接收方生成公私钥对,私钥由接收方保管;2 接收方将公钥发送给发送方;3 发送方通过公钥对明文加密,得到密文;4 发送方向接收方发送密文;5 接收方通过私钥解密密文,得到明文。一般两者在对话时先通过非对称加密的方法获得秘密密钥,以此秘密密钥进行对称加密的通话。

  • RSA算法

RSA是目前使用最广泛的公钥密码体制之一。它是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

RSA算法的安全性基于RSA问题的困难性,也就是基于大整数因子分解的困难性上。但是RSA问题不会比因子分解问题更加困难,也就是说,在没有解决因子分解问题的情况下可能解决RSA问题,因此RSA算法并不是完全基于大整数因子分解的困难性上的。、

RSA原理

1.首先生成公钥私钥

随机选择两个不相等的质数p和q,比如选择了61和53。(实际应用中,这两个质数越大,就越难破解。)接下来计算p和q的乘积n= 61×53 = 3233,n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。

接下来计算n的欧拉函数φ(n),称作L。根据公式φ(n) = (p-1)(q-1)算出φ(3233)等于3320,然后随机选择一个整数e,也就是公钥当中用来加密的那个数字,条件是1< e < φ(n),且e与φ(n) 互质。这样就在1到3120之间,随机选择了17。(实际应用中,常常选择65537。)

接下来计算e对于φ(n)的模反元素d,也就是密钥当中用来解密的那个数字。(所谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1,即ed ≡ 1 mod φ(n))因此找到了2753,因为17*2753 mode 3120 = 1。然后将n和e封装成公钥,n和d封装成私钥。在例子中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。

2.加密过程

首先对明文进行比特串分组,使得每个分组对应的十进制数小于n,然后依次对每个分组m做一次加密,所有分组的密文构成的序列就是原始消息的加密结果,即m满足0<=m<n,则加密算法为:c≡ m^e mod n; c为密文,且0<=c<n。

3.解密过程

对于密文0<=c<n,解密算法为:m≡ c^d mod n。

所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种"由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。

RSA弊端:

  • 效率慢,因此工业场景下,往往是通过非对称加密配送密钥,对称加密加密明文的混合加密方式,最著名的如SSL。

  • 公钥认证问题难。消息发送方无法确认公钥的身份问题,应该收到甲的公钥,却收到了乙的。

  • 无法避免中间人攻击。可能被人于中间劫持后,发送一个伪造的公钥,此公钥加密后的密文,可以被劫持者解密,之后所有的密文都对劫持者透明了。

  • 选择密文攻击,即通过不断的发送请求,分析请求的反馈,猜测密钥和明文。有改良算法 RSA-OAEP (Optimal Asymmetric Encryption Padding)最优非对称加密填充,该算法是通过对明文前加入认证信息头,若信息头校验失败,则拒绝请求。

  • 随着算力的提升,密码的安全性下降。

  • 3 混合加密

混合加密就是对称加密与非对称加密的结合。由于对称加密算法速度快,强度高,而非对称加密算法效率低,但能解决密钥配送问题。因此可以通过非对称加密配送对称密钥,再采用对称密钥用来加密的方式,实现网络的密钥配送与通信加密。

一般实践中,公钥通过证书认证配送,而对称加密用的密钥是每次随机产生。因此公钥密码的强度应该高于对称密码,因为对称密码只对当前一条信息负责,而非对称密码会影响到过完与未来所有的通信。

  • 4 分组密码加密

加密模式是针对密码分组或流加密所采用的迭代模式。

  • 分组密码:Block Cipher,每次只能处理特定长度的数据的密码算法
  • 流密码:对数据流进行连续处理的一类密码算法。需要保持内部状态

不同的分组加密方式具有不同的加密模式:

  • ECB 模式:Electronic CodeBlock mode 电子密码本模式。将明文分组加密后的结果,直接成为密文分组。最为简单直接,但有安全漏洞。因为分组规律简单,因此可以直接操作密文的分组后的顺序来修改明文的顺序,实现明文内容的修改。
  • CBC 模式:Cipher Block Chaining mode 密码分组链接模式。首先将明文分组与前一个密文分组进行 XOR 异或运算,然后加密。由于第一个分组不存在前一个密文,因此需要提供一个分组长度的序列,称为初始化向量 Initialization Vector,缩写为 IV。
  • CTS 模式:Cipher Text Stealing。
  • CFB 模式:Cipher FeedBack mode 密文反馈模式。前一组密文被送回密码算法的输入端
  • OFB 模式:Output FeedBack mode 输出反馈模式。密码算法的输出会反馈到密码算法的输入中的流密码
  • CTR 模式:CountTeR mode 计数器模式。CTR 模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码
  • 5 单向散列

单向散列技术是为了保证信息的完整性,防止信息被篡改的一项技术。其特点是:无论消息长度,计算出的长度永远不变;可以进行快速计算;消息不同,散列值不同,需要具有抗碰撞性 和单向性 ,不可由散列值推出原消息;弱抗碰撞性------给定散列值,找到和该消息具有相同散列值的另一条消息是困难的;强抗碰撞性------任意散列值,找到散列值相同的两条不同的消息是困难的;单向性 one-way,不可由散列值推出原消息。单向散列算法中的代表性算法如下。

MD 散列算法分为 MD4, MD5 两套算法,都可计算出 128 bits 的散列。MD 系列算法已经被中国科学家王小云破解(可于有限时间内找出碰撞)。

SHA是单向散列算法的一个标准的统称,其下又分为 SHA-1, SHA-2, SHA-3 三套算法。其中 SHA-1 可生成 160 bit 散列值,已被攻破,不推荐使用。SHA-2 可生成不同长度的散列,如 256 bits (SHA-256), 384 bits (SHA-384), 512 bits (SHA-512),同时对输入的消息长度存在一定限制,SHA-256上限接近于2^64-1比特,SHA-384、SHA512则接近于 2^128-1比特。

SHA-3,是 2012 年被采用的最新标准,采用了 Keccak 算法。Keccak 算法采用与 SHA2 完全不同的结构,结构清晰,易于分析;适用于各种硬件,性能优越;可生成任意长度,对消息长度无限制;可采用双工结构,输入同时输出,提升效率。

  • 6 消息认证码

单向散列可以解决篡改的问题,但消息是来自可信一方,还是来自伪装者,却无法解决。伪装者完全可以发送有害的信息和该信息的散列,而接受者却无法分辨。消息认证码技术可以解决此类问题。消息认证码(Message Authentication Code),简写为 MAC。通过发送方与接收方共享密钥,通过该共享密钥对计算 MAC 值。

消息认证码步骤:1 发送方 A 与接收方 B 共享密钥;2 发送方 A 通过密钥计算 MAC 值 = MAC-A;3 发送方 A 发送原消息 + MAC-A;4 接收方 B 对原消息通过密钥计算 MAC 值 = MAC-B;5 接收方 B 比较 MAC-A 与 MAC-B,若一致则成功。

MAC 实现的关键,是获得一串需要与共享密钥相关而且足够有区分度的串。因此,可以通过多种方式获得 MAC 值,如单向散列、分组密码截取最后一组作为 MAC 值、流密码、非对称加密等。

MAC的缺点:1 密钥配送的问题,因为 MAC 需要发送者与接收者使用相同的密钥;2 重放攻击,窃取某一次通信中的正确的 MAC,然后攻击者重复多次发送相同的信息。由于信息与 MAC 可以匹配,在不知道密钥的情况下,攻击者就可以完成攻击。3 无法解决否认的问题,因为密钥对于发送者和接收者来说是共享的,接收者可以伪造对发送者不利的信息。

使用以下方法可以避免暴力破解,可以事先约定信息中带上递增序号,MAC 值为加上序号的 MAC;或者增加时间戳,约定信息中带上时间戳;或者增加随机数 A,每次传递前,先发送随机数 A,通信时带上 A。

  • 7 数字签名

由于 MAC 无法解决否认的问题是由于采用的相同的密钥,那么采用公私钥对就可以解决。采用非对称加密的消息认证码的技术,就是数字签名。在非对称加密中,私钥用来解密,公钥用来加密。在数字签名技术中,私钥用来加密,公钥用来解密。

数字签名的步骤:1 签名方 A 生成非对称公私钥对 public-key、private-key;2 A 向消息接收方 B 发送公钥 publi-key;3 A 采用 private-key 加密(一般是对消息的散列值进行加密),生成数字签名;4 A 将消息与数字签名发往 B;5 B 采用 public-key 解密数字签名; 6 B 验证数字签名;由于用于解密的是公钥,是公开的。因此任何人都可以验证数字签名。

普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。

数字签名由于采用了非对称加密,因此可以防止否认。但发送方怎么能知道所收到的公钥就是接收方私钥所对应的公钥呢?如果不小心采用了攻击者的公钥,然后接收了攻击者私钥签名的信息,公私钥完全匹配,于是信息就被接受了。因此,业界便推出了证书。由权威机构颁布,认证公钥的合法性。

  • 8 证书

数字签名的作用就是防止篡改和伪装,并且能够防止否认。但是要正确运用数字签名技术还有一个非常大的前提,那就是用来验证签名的公钥必须真正的属于发送者。但如果你获取到的公钥是伪造的,那么不管你的签名算法多完美,也是会得到错误的结果。

那么我们怎么才能安全的获得发送者的公钥呢?这里就需要使用到证书了。所谓证书就是通过第三方的可信机构对发送者的公钥进行签名而得到的。

这里有两个概念:公钥证书(Public-Key Certificate, PKC)和认证机构(Certification Authority, CA)。熟悉区块链的朋友应该经常会听到CA这个名词,CA就是这里的认证机构。

先举一个证书的小例子,假如A要向B发送一条消息,这条消息希望使用B的公钥来加密,但是A事先无法知道B的公钥到底是什么,那么可以使用下面的证书架构:

  1. 在第一步,B需要生成自己的密钥对,然后将公钥注册到CA中。这里CA就是一个第三方的可信赖的机构。
  2. CA获得到了B的公钥之后,使用自己的私钥对B的公钥进行签名,得到证书。
  3. A从CA获得到证书和CA的公钥(CA是个可信赖机构,可以从公共站点中获取),并使用CA的公钥来验证证书签名的合法性。
  4. A获得了B的公钥,使用B的公钥加密消息。
  5. B用自己的私钥解密消息,得到明文。

这就是一个最简单的证书使用的例子。

因为证书是由认证机构颁发的,使用者需要对其进行验证,那么就需要一个标准的证书格式来方便使用者使用。最广泛的一个证书标准格式是由ITU(International Telecommunication Union)和ISO(International Organization for Standardization)制定的X.509规范。

有了证书的格式,是不是就可以实际使用证书了呢?其实这还是不够的,我们还需要定义证书该由谁来颁发,如何颁发,如果作废证书等。而PKI(Public-Key Infrastructure)公钥基础设施就是为了有效的使用证书而制定的一系列规范和协议。

PKI包括用户、认证机构、仓库三部分。

  • 用户是使用PKI的人,也就是需要借助CA来发布自己的公钥和获取别人公钥的人。
  • 认证机构就是CA了,它是对证书进行管理的人。CA除了生成证书之外,还有一个非常重要的工作就是作废证书。因为用户有可能会丢失密钥,或者出于特殊的原因,废弃掉某些证书。那么就可以向CA发起一个作废请求。而作废的证书会被保存在CRL中。CRL就是对外的证书废弃列表。用户在使用证书的时候必须首先查看该证书是否在CRL列表中。如果在则该证书不能够被使用。
  • 仓库是一个保存证书的数据库,用户注册之后生成的证书都存在仓库中,以供其他的用户获取使用。

从上面的介绍可以知道,其实CA不仅仅可以由机构来担任,任何人只要会对公钥进行签名都可以构建CA。如果是一个很大的机构要构建CA,比如一个总公司要构建CA,那么它可以先构建一个root CA,然后在root CA之下构建子CA,这些子CA来负责底层具体用户的证书颁发。

相关推荐
励志成为嵌入式工程师20 分钟前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉1 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer1 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
wheeldown1 小时前
【数据结构】选择排序
数据结构·算法·排序算法
阡之尘埃1 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
观音山保我别报错2 小时前
C语言扫雷小游戏
c语言·开发语言·算法
孙同学要努力3 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络
Eric.Lee20213 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
TangKenny4 小时前
计算网络信号
java·算法·华为
景鹤4 小时前
【算法】递归+深搜:814.二叉树剪枝
算法