【密码学基础】03 传统加密技术

本文介绍了对称加密的基础概念和技术,包括对称密码模型、密码编码学与密码分析学等内容。探讨了传统加密技术,如替换技术和置换技术,并通过Caesar密码等经典案例展示了密码设计与分析的思想。

  在1978年以前,公钥密码学的概念还没有提出,此前的加密体制只有对称加密,因此对称加密也被称为传统加密,不过至今对称加密都是十分广泛的。对称加密在加密和解密过程中使用了相同的密钥,并且在加解密过程中使用了两种传统加密技术:代替和置换。文章首先对于对称密码作一些概述,然后通过生动的古典密码来阐述这两种加密技术,在这一过程中将展示密码设计的思想,并对密码系统进行分析。

更新历史:

  • 2021年07月25日完成初稿

1. 对称密码概述

1.1 对称密码模型

  回顾一下在密码学基本概念一节中所介绍的保密通信模型,事实上如果在图中加密密钥和解密密钥是相同的,那么它就是对称加密的经典模型:


  而且由上图还归结了由五元组 < M , C , E , K , D > <M, C, E, K, D> <M,C,E,K,D>表示的密码系统:

  • 明文:plaintext,通常用 M M M表示明文空间, m ∈ M m\in M mM表示明文空间中的一条明文
  • 加密函数:encryption function,通常用 E E E表示,明文和加密密钥是加密函数的输入,而密文是加密函数的输出
  • 密钥:key,通常用 K K K表示密钥空间, k ∈ K k\in K kK表示密钥空间的一个密钥
  • 密文:ciphertext,通常用 C C C表示密文空间,用 c ∈ C c\in C cC表示由明文 m m m经加密函数产生的密文
  • 解密函数:decryption function,通常用 D D D表示,密文和解密密钥是解密函数的输入,而明文是加密函数的输出

明文的符号表示
  尽管明文的英文单词为plaintext,但在之后的叙述中文章习惯于用 m m m表示明文,而非 p p p,原因之一是在文章的叙述中会使用到概率符号 P P P

  面对上面的模型,有两类人从不同的角度思考问题,一类人思考如何加密信息,如何保证密钥的安全性,他们致力于密码的编码与设计,另一类人则在思考由已知的信息(通常已知密码算法和密文)如何破译这个系统,无论是获得明文还是获得密钥,他们则致力于对密码的分析,由此也衍生出密码编码学和密码分析学。或许讲述这些有些偏离主题,但清楚密码学的目标和威胁或许对于下面讲述经典对称密码有所帮助,因为在分析这些密码时,可能需要从这两个角度去思考整个密码系统的安全性,此时你将既是密码编码学家又是密码分析学家。

1.2 密码编码学

  尽管根据Kerckhoffs’s principle,密码系统的安全性取决于密钥的安全,但其他部分也不能成为短板,密码编码学家致力于设计一类安全的密码系统,以至于攻击者除了对密钥进行穷举之外毫无办法,因此传统密码的安全使用需要满足以下几种基本的要求:

  • 加密算法足够强:攻击者在拥有一个或多个密文时都无法破译密文或者密钥,甚至敌手拥有一定数量的密文和产生这些密文的明文也不能破译密文或发现密钥
  • 密钥能安全分发: 发送方和接收方必须在某种安全的形式下获得密钥并且必须保证密钥安全。

Kerckhoffs’s principle
  1883年,在那一年,荷兰语言学家、密码学家Auguste Kerckhoffs提出Kerckhoffs’s principle,其核心理念是:A cryptosystem should be secure even if everything about the system, except the key, is public knowledge.
  在此之前,密码界的主流理念是Security through obscurity(隐晦式安全),该理念主张对密码系统的细节进行保密,如今只有一些军事领域的密码算法会对所有细节进行保密以确保安全。但该理念的缺点是保密的东西很多,随着系统的复杂程度提高、技术的发展,对每个环节都加密或保密越来越难实现,正如「系统内保密的东西越多,系统越不安全」。

  密码编码学总是关注着这些要求,并按照这些基本要求设计和发展密码系统,也形成了不同类型的密码体系,下面就是最重要的几种分类,在这里:

  • 加密算法的原理
    • 代替密码:简单地说,代替密码就是将明文的一个元素映射成另一个元素
    • 置换密码:置换密码则是重新排列明文中的元素
    • 乘积密码:同时使用代替和置换的密码体制
  • 密钥数
    • 单钥密码:即对称加密,也称为传统加密,加密密钥和解密密钥相同
    • 多钥密码:即公钥加密,也称为非对称加密,使用公钥和私钥
  • 处理明文的方法
    • 分组密码:对明文进行加密时,每次处理明文的一组元素(通常64bits、128bits等)
    • 流密码:对明文进行加密时,每次处理明文的一个元素(通常1bit或者1Bytes)

密码分类
  上述密码分类是独立的,即一个密码系统可以是代替密码,也可以是单钥密码,同时也可以是分组密码,因为它们从不同的角度看待密码系统。比如之后讲述的数据加密标准(DES)就是一种对称密码,但DES每次处理64bits的明文,在加密时对明文和密钥进行多次使用了置换和代替技术。不过,为了使得加密算法变得更复杂但又能高效运行,因此现代密码几乎全部使用代替和置换技术,并以分组形式进行加密,密码技术仅由对称加密和公钥加密进行区分,值得注意的是,之前讲述的无密钥算法由于安全性不再使用,这几乎是必然的。

1.3 密码分析学

  密码分析的目标是恢复使用的密钥以攻击密码系统,尽管穷举攻击可以恢复密钥,但仅仅是理论可行的,而不是计算上可行的。

无条件安全和计算安全

  • 无条件安全:无论有多少可用的密文,如果都不足以唯一地确定密文对应的明文
  • 计算安全:破译密码的代价超过密文信息的价值,或者破译密码的时间超过密文信息的有效生命期

  在密码学中,只有一次一密是无条件安全的,其他所有密码都期望做到计算上安全。

  密码分析是基于攻击者所拥有的信息多少,一般而言密码分析者知道加密算法和密文,但如果还知道其他信息,显然会增加破译密码的可能,下面就列举了拥有不同信息的攻击类型:

  • 唯密文攻击:加密算法、密文
  • 已知明文攻击:加密算法、密文和用(与待解密文的)同一密钥加密的一个或多个明密文对
  • 选择明文攻击:加密算法、密文和分析者选择的明文,及对应的密文(与待解密文使用同一密钥加密)
  • 选择密文攻击:加密算法、密文和分析者选择的一些密文,及对应的明文(与待解密文使用同一密钥解密)
  • 选择文本攻击:加密算法、密文、分析者选择的明文,及对应的密文(与待解密文使用同一密钥加密)和分析者选择的一些密文,及对应的明文(与待解密文使用同一密钥解密)

  一般而言,密码系统设计者都希望仅仅受到唯密文攻击,此时密码分析者的信息最少,但往往攻击者可以进行已知明文攻击和选择明文攻击,此时密码系统会受到一定的威胁,而选择密文攻击和选择文本攻击较少采用。

  下面开始介绍一些简单的代替密码和置换密码,他们大多是古典密码而且很容易破译,不过这些密码所体现的思想,已经破译这些密码的手段是值得学习的。为了简便讨论,下面假设明文、密钥和密文都是ASCII字符,并用小写英文字母来表示明文,大写英文字母表示加密后的密文。

2. 传统加密技术

  古典密码学中有许多构思巧妙的加密算法,如Caesar密码等。根据使用的加密技术,这些加密算法主要可以分为代替密码、置换密码和同时使用两种技术的乘积密码。下面主要阐述两种加密技术:代替技术和置换技术,以及对应的经典加密方案。

2.1 代替技术

  代替技术主要采用映射的思想,将一个字符映射成另一个字符,也就相当于用密文字符代替明文字符,为了能够解密,往往要求映射是可逆的。

映射
  映射是数学上的术语,常用于描述集合的对应关系。对于集合 X X X和集合 Y Y Y,从 X X X Y Y Y的映射表示了集合 X X X的元素与集合 Y Y Y中的元素之间的对应关系,比如在中文字典中,一个汉字的索引就对应了该汉字的位置。
  可逆映射指集合 X X X中的所有元素和集合Y中的所有元素一个对一个,没有重复,没有遗漏,因此可逆映射也称为一一对应。下面就是集合 X = { 1 , 2 , 3 } , Y = { A , B , C } X=\{1,2,3\}, Y=\{A,B,C\} X={ 1,2,3},Y={ A,B,C}一一对应的关系,显然可逆映射要求两个集合元素一样多。

X X X 1 1 1 2 2 2 3 3 3
Y Y Y C C C B B B A A A

2.1.1 Caesar密码

  已知的最早的代替密码是Caesar密码(凯撒密码),它非常简单,就是对字母表中的每个字母,用它之后的第3个字母来代替,即:

明文 a b c d e f g h i s t u v w x y z
密文 D E F G H I J K L V W X Y Z A B C

  例如对于明文:attack on may,其对于的明文应为:DWWDFN RQ PDB。当然对于该方法而言,可以用数学符号来表示,首先给 26 26 26个字母表编号,用 0 ∼ 25 0\sim 25 025表示 a ∼ z a\sim z az,那么就可以用下面的算法进行表达:对于每个明文字符 m m m,其对应的密文字符 C C C而言,加密算法为
C = E 3 ( m ) ⇒ C = ( m + 3 )    m o d    26 C = E_3(m)\Rightarrow C = (m+3)\;mod\;26 C=E3(m)C=(m+3)mod26
  其中明文和密文是十分明确的,而密钥就是数字 3 3 3,加密算法就是上面的模 26 26 26运算,相应的解密算法是:
m = D 3 ( C ) ⇒ m = ( C − 3 )    m o d    26 m = D_3(C)\Rightarrow m = (C-3)\;mod\;26 m=D3(C)m=(C3)mod26
  由上面的讨论,可以将其推广到一般意义下的Caesar密码,即密钥不再是常数 3 3 3,而是任意值。显然在模 26 26 26运算下,密钥空间实际为 K = { 1 , 2 , 3 , . . . , 25 } K=\{1,2,3,...,25\} K={ 1,2,3,...,25},不过在这个条件下攻击者是可以在有限时间内尝试所有密钥以攻击Caesar密码,因此Caesar密码不是计算安全的。尽管Caesar密码是不安全的,但在当时那个年代还是十分安全的,因为攻击者很有可能都不知道Caesar密码的存在,所以Caesar密码得益于密码算法的保密。

模运算
  模运算定义为 a + b    ( m o d    n ) a+b\;(mod\;n) a+b(modn),其值是 a + b a+b a+b除以 n n n的余数,而且余数是小于 n n n的非负整数,因此对于模 26 26 26运算,余数的取值范围为 { 0 , 1 , 2 , 3 , . . . , 25 } \{0,1,2,3,...,25\} { 0,1,2,3,...,25},不过对于Caesar密码而言,密钥取值为 0 0 0是可以的但明显没有实际意义。

  在破解Caesar密码这一类代替密码时,有以下三个条件是有利于攻击者的:

  • 加密和解密算法已知
  • 密钥空间有限,Caesar密码的密钥空间大小仅为 25 25 25
  • 所使用的的明文和密文是便于识别的

  前面两点很好理解,对于最后一点,如果明文是不可识别的(甚至是经过压缩的),那么在穷举攻击者是难以判断恢复出的明文是否是正确的。

2.1.2 单表代替密码

  从简单的Caesar密码就可以看到一些关于代替的思想,不过这种代替十分简单,因为对每个字母,仅用它之后的第3个字母来代替。如果对于每个字母而言,可以用任意字母来代替,那么密钥空间就会急剧增加。

  在叙述单表代替密码之前,先介绍一下置换的概念。之前通俗地介绍了映射和可逆映射(一一对应),事实上置换是一种特殊的可逆映射:

  • 置换:设有集合 S S S,从 S S S S S S的可逆映射称为置换。简单地说,置换就是集合 S S S中每个元素的重新排列。

  例如, S = { a , b , c } S=\{a,b,c\} S={ a,b,c},那么在集合 S S S上的置换就有 6 6 6个:
( a    b    c a    b    c ) , ( a    b    c a    c    b ) , ( a    b    c b    a    c ) , ( a    b    c b    c    a ) , ( a    b    c c    a    b ) , ( a    b    c c    b    a ) \left( \begin{array}{c} a\,\,b\,\,c\\ a\,\,b\,\,c\\ \end{array} \right) ,\left( \begin{array}{c} a\,\,b\,\,c\\ a\,\,c\,\,b\\ \end{array} \right) ,\left( \begin{array}{c} a\,\,b\,\,c\\ b\,\,a\,\,c\\ \end{array} \right) ,\left( \begin{array}{c} a\,\,b\,\,c\\ b\,\,c\,\,a\\ \end{array} \right) ,\left( \begin{array}{c} a\,\,b\,\,c\\ c\,\,a\,\,b\\ \end{array} \right) ,\left( \begin{array}{c} a\,\,b\,\,c\\ c\,\,b\,\,a\\ \end{array} \right) (abcabc),(abcacb),(abcbac),(abcbca),(abc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stu_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值