简单来说网络安全就是防止网络攻击的发生或者提前预防和探测恶意信息,但是这些概念背后隐藏着的为什么是什么,本问将本文将从信息理论的角度深入解析网络安全的概念。
首先是著名的网络安全定义:Kerckhoff’s 定理:如果要说一个密码系统应该是安全的,即使攻击者知道系统的所有细节,只要其不知道对应的密钥,则无法破解对应密码。
香农信息论
第一个概念:信息。信息是什么?简单来说就是讲一个模糊的状态赋予一种确定的形态,并更好的描述这个状态。那换句话说,对于一个确定的事务而言,没有必要用信息来描述。此时我们可以从信息的概念过渡到信息量。
- 信息的价值取决于对应事实的发生概率,发生概率越低越有价值。
- 信息越容易预测,价值越低。
- 信息的价值与其携带的信息量正相关。
思考:1)明天12点的时候食堂开饭;和2)某上热搜的事件。哪个更能引起多数人的兴趣?
很明显1是一个每日百分百发生的事件,而2的事件并非每日都在发生,因此2的信息量更大,更能引起人们的兴趣。那么,如果我要用数学公式来表达这个模型。事件1发生的概率是p1,事件2发生的概率是p2。由于发生的概率越大,信息量越低,则我们假设是反比关系,则事件1和2的信息量分别是1/pi。则此时,存在一个悖论:事件1和事件2同时发生的概率应该是1/p1p2。
但是,一般情况下,两个物体的整体量=物体1的量+物体2的量。因为是量,所以关于事件1和事件2同时发生的事件的信息量,将每个信息量相加(1/p1+1/p2)不妥当吗?
因此我们需要一种能够令1/p1p2=1/p1+1/p2的算法。即log公式(logAB=logA+logB)
此时,一个描述信息量的公式就出现了:
E是事件,I是信息量,P是E发生的概率。因此,事件E发生的概率越高,整体的信息量I越小。那么针对一个由多个事件构成的系统而言,这个系统的平均信息量又如何确定?
使用如下图所示的熵的概念。
Symbol是符号的意思,我们这里可以把它看做事件。m是信息符号的集合(有多少个不同的信息表达方式),M是符号个数。Pi是各符号的发生概率,Ii是各符号的信息量。
如果把这个概念,应用到密码学上,我们就可以得到信息量和安全的关系。
明文M的信息量是H(M),密文C的信息量是密文H(C),密钥K的信息量是H(K)。
当知道密文C时,想要获取密钥K的信息量是H(K|C)。同理可得H(M|C)&H(K|M,C)。
到H=0时,是绝对安全。H越小,整个系统的平均信息量越小,信息量小意味着安全。
混乱与离散
混乱Diffusion:隐藏了明文和密钥之间的关系。如果改变了明文中的一个比特,从统计学上来说,密文的一半以上的比特应该会发生变化。同理,如果改变密文的一个比特,明文也应该有一半以上的字符变化。
离散Confusion:隐藏了密文和密钥之间的关系。这意味着密文的每一个比特都依赖密钥的几个部分,如果修改密钥的一个比特,密文中的大部分或者全部比特都会受到影响。这使得从密文找到密钥变得非常困难。
一个例子
上图是一个明文空间为abcd,密钥空间为k1,k2,k3,密文空间为1234的例子。且它们的概率不是等分的。
公式解析:
p(x)=x事件发生的概率。如果是p(K=k1)p(P=d)则意味着当使用k1这个密钥加密且明文是d的情况下的概率。换句话说此时输出的密文一定是1.
当我们作为攻击者,针对密文1进行推测的时候,根据这个算法表,我们可以得到的信息是。当密钥和明文对为(k1,d),(k2,b),(k3,c)的情况下,我们可以得到密文1.因此在所有的密文中,出现1的概率就是这三个情况的概率值和。如图所示,得到密文1234的概率分别是大约26.25%,26.25%,26.25%,21.25%。概率也不是均等的。
换句话说当输入的明文固定,它可能输出的密文如上图所示。
基于上述的结果,我们可以得到当密文C已知时,对应明文的概率。如下图所示
则假设作为攻击者,得到密文1后(即便不知道密钥),可能的明文的分布情况b是最高的,a是绝不可能的。因此当攻击者去猜测的时候,猜测b将会获得最大概率的可行性。
所以结论而言,这是一个典型的频率分析攻击。因此想要实现密码安全,至少应该保证每个空间中的元素出现的频率是均等的。
因此,完美安全的定义就可以整理为p(x|y)=p(x)。即给出密文y后,基于y找到x的概率,与没有任何信息,随便制造一个字符串等于明文x的概率相等。
OTP
OTP的结构非常简单,就是密钥与明文进行XOR运算,但是这个米要是一次性的,当解密完成,这个密钥将被废弃。因此对密文的解读是没有意义的,因为解读出密钥后密钥已经无法被使用。
OTP的问题首先是密钥长度与明文长度相等,因此明文有多长密钥就要有多长,这是非常昂贵的。其次攻击者虽然无法还原明文,但是篡改密文内容是可能的。
因此,OTP的昂贵性决定了这个密码无法被广泛使用,在少量安全第一的密码体系中可以被允许使用。那么类似的流密码应该如何确保其安全性呢?答案就是使用伪随机数生成器生成一个周期非常长的密钥,这个密钥周期足够长以至于现在的算力无法穷尽其周期。
随机数生成器
随机数生成器可以是基于软件或者是硬件的,基于硬件的随机数生成器是真随机数,无周期,但是成本昂贵。基于软件的成本低廉,且生成周期只要设计的足够长就可以满足安全性要求。
基本的流密码方式如上所示。只需要有一个提前的密钥交换安全信道即可。这个信道可以是物理的。由于流密码的本质是做XOR运算,因此对于这些密码进行运算的是简单的。重点是如何生成密钥。
伪随机数生成器根据一个种子密钥,可以生成一个具有非常大周期的无频率和相关性的密钥循环序列,该序列足够大因此无法被限定算力下的攻击者破解。
上图是一个LFSR的经典加密方式,通过多项式系数决定某个特定的比特位是否要进行XOR运算,且每次XOR与之前的比特具有一定的联系,联系的创建由多项式系数决定。
代数原理
从数学的角度上来对集合可以进行多重定义,如下图所示。如果我们想得到域的概念,则需要如下所有的条件均被满足。数学上去证明这些条件并不难,但是我们为了简化过程,直接说结果。典型的域的例子是有理数集合和实数集合。
有限域是定义乘法、加法、减法和除法运算并满足某些基本规则的集合。有限域最常见的例子是,当p是质数时,对p取余。有限域是数学和计算机科学的许多领域的基础,包括数论、代数几何、伽罗瓦理论、有限几何、密码学和编码理论。
假设一个有限域有n个整数元素,对于质数p而言有pn=q。一个大小为q的有限域中,他的余数可取值的范围是[0,p-1]。
对于2元有限域,他的加法与乘法的以及逆的表现如上所示。可以使用如下所示的多项式表达法来表达每个系数与比特的关系。
多项式乘法如下图所示:
基于mod的除法如下所示:
应用这些原理,我们来看一个以3bit为空间的不可约多项式表达表(分别是加法表和乘法表)
然后通过这些算数表就可以将LSFR的系数和是否要进行XOR运算给确定和归一化。
这里还有一个其他多项式概念,叫做本源多项式(Primitive Polynomial)。这个多项式的要求是第一个能够整除对应阶数且不超过最大当前阶数的阶。
上图所示的本原多项式就是x3+1,阶数为3(为3时才能整除)
如上图所示就不属于本原多项式的范围,因为阶数超过了最大阶数,这里的阶数的意义是当比特位数为4时,最多存在16个组合类型。而当你需要使用第五个bit才能表达这个多项式的本源多项式时,理论上其比特位已经溢出了一位。针对这个概念,可以得到LFSR的特征。
如果C(X)是一个原始多项式,则非奇异LFSR < L, C(X) >的2L- 1个非零初始状态中的每一个都产生一个周期最大可能为2L- 1的输出序列。
在上图中,我们可以知道对于具有本原多项式的LFSR算法,其周期长度最大为2"-1,而对于溢出位的算法,周期长度只有常熟值n。而非周期的密码是软件无法生成的。
为了加密的目的,我们希望序列具有非常长的周期。LFSR在这方面的优点是,周期在移位寄存器的长度上呈指数增长。对于n, 2, 3,或4的小值,最大可能周期的值,N = 2"-1,仍然很小。但如下表所示,在n值适中的情况下,我们能够有效地生成具有巨大周期的序列。如下图所示。
线性复杂度
LFSR是一种线性反馈移位寄存器,它可以用于生成伪随机序列。一个LFSR由一组寄存器和一组控制它们的线性反馈电路组成。给定初始状态,LFSR可以生成一个特定长度的序列。因此,对于给定的无限长度序列s∞,可以使用LFSR来生成它。二进制序列的线性复杂度是周期结构的度量,低线性复杂度意味着密码弱周期(周期短,不安全)。找到一个最短的线性反馈移位寄存器(LFSR),使得它可以生成一个无限长的序列s∞,或者如果不存在这样的LFSR,则输出无穷大(∞)。
有限序列的线性复杂度是sn
无限序列的线性复杂度Sထ: = sn || sn ||…|| sn|…