从信息理论的角度理解密码安全

简介: 从信息理论的角度理解密码安全

简单来说网络安全就是防止网络攻击的发生或者提前预防和探测恶意信息,但是这些概念背后隐藏着的为什么是什么,本问将本文将从信息理论的角度深入解析网络安全的概念。


首先是著名的网络安全定义:Kerckhoff’s 定理:如果要说一个密码系统应该是安全的,即使攻击者知道系统的所有细节,只要其不知道对应的密钥,则无法破解对应密码。


香农信息论


589f787469b63b33f7a2373ff3506082_dc8e35edfde144c7adc7066eb38a9007.png

第一个概念:信息。信息是什么?简单来说就是讲一个模糊的状态赋予一种确定的形态,并更好的描述这个状态。那换句话说,对于一个确定的事务而言,没有必要用信息来描述。此时我们可以从信息的概念过渡到信息量。


  • 信息的价值取决于对应事实的发生概率,发生概率越低越有价值。
  • 信息越容易预测,价值越低。
  • 信息的价值与其携带的信息量正相关。


思考: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)

此时,一个描述信息量的公式就出现了:

8762f0f4969d14f4dbfc05cb56f6f980_18d42a403b6e4d62a2c9a13072cb28a2.png

E是事件,I是信息量,P是E发生的概率。因此,事件E发生的概率越高,整体的信息量I越小。那么针对一个由多个事件构成的系统而言,这个系统的平均信息量又如何确定?

使用如下图所示的熵的概念。

946a3be061a1b1afa8638d45b3af5883_328f0b3c519b4279a01263a614e469e1.png

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越小,整个系统的平均信息量越小,信息量小意味着安全。


混乱与离散


0eeefa402bfe8e8a880f96fdcdc58f77_1c6d116a8f524c868a58812800729d72.png

混乱Diffusion:隐藏了明文和密钥之间的关系。如果改变了明文中的一个比特,从统计学上来说,密文的一半以上的比特应该会发生变化。同理,如果改变密文的一个比特,明文也应该有一半以上的字符变化。

离散Confusion:隐藏了密文和密钥之间的关系。这意味着密文的每一个比特都依赖密钥的几个部分,如果修改密钥的一个比特,密文中的大部分或者全部比特都会受到影响。这使得从密文找到密钥变得非常困难。

e66b9b824fc59404dca38fbc4c15bf22_c05cf833df6e4f4f8a359158dd89c9fe.png


一个例子


b4e0acd891f3aa27b0d0d5bc9845369a_c9cfa432ae964a0bacd77f1bddde58a1.png


上图是一个明文空间为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%。概率也不是均等的。

e753b760c940fdd4896657bbcfa9e36d_cafcf41d5a204d038a2c05c279c2fbcd.png


换句话说当输入的明文固定,它可能输出的密文如上图所示。

基于上述的结果,我们可以得到当密文C已知时,对应明文的概率。如下图所示

8b7662124882953139253918029b6248_1664df8decb74f22968398dfd5c338b4.png


则假设作为攻击者,得到密文1后(即便不知道密钥),可能的明文的分布情况b是最高的,a是绝不可能的。因此当攻击者去猜测的时候,猜测b将会获得最大概率的可行性。

所以结论而言,这是一个典型的频率分析攻击。因此想要实现密码安全,至少应该保证每个空间中的元素出现的频率是均等的。

aa7d2943977eca31d0f5f9f8ce145571_32741f6bcf844f6aad36242abb76f198.png

因此,完美安全的定义就可以整理为p(x|y)=p(x)。即给出密文y后,基于y找到x的概率,与没有任何信息,随便制造一个字符串等于明文x的概率相等。


OTP


1d2b81bff68e145f57ae1adfce80483f_b00cc029d55b4a9d841d6303624cc7fc.png

OTP的结构非常简单,就是密钥与明文进行XOR运算,但是这个米要是一次性的,当解密完成,这个密钥将被废弃。因此对密文的解读是没有意义的,因为解读出密钥后密钥已经无法被使用。

OTP的问题首先是密钥长度与明文长度相等,因此明文有多长密钥就要有多长,这是非常昂贵的。其次攻击者虽然无法还原明文,但是篡改密文内容是可能的。

因此,OTP的昂贵性决定了这个密码无法被广泛使用,在少量安全第一的密码体系中可以被允许使用。那么类似的流密码应该如何确保其安全性呢?答案就是使用伪随机数生成器生成一个周期非常长的密钥,这个密钥周期足够长以至于现在的算力无法穷尽其周期。


随机数生成器


随机数生成器可以是基于软件或者是硬件的,基于硬件的随机数生成器是真随机数,无周期,但是成本昂贵。基于软件的成本低廉,且生成周期只要设计的足够长就可以满足安全性要求。


dfea71d78198e92b76f93f66464ac303_6a3d82bf6f4d47d99d0bbd249f619375.png

基本的流密码方式如上所示。只需要有一个提前的密钥交换安全信道即可。这个信道可以是物理的。由于流密码的本质是做XOR运算,因此对于这些密码进行运算的是简单的。重点是如何生成密钥。

伪随机数生成器根据一个种子密钥,可以生成一个具有非常大周期的无频率和相关性的密钥循环序列,该序列足够大因此无法被限定算力下的攻击者破解。

2156d650dbda544ebee21e644a973cfb_e13242f6179c438b885b64ea9d09d7d1.png

上图是一个LFSR的经典加密方式,通过多项式系数决定某个特定的比特位是否要进行XOR运算,且每次XOR与之前的比特具有一定的联系,联系的创建由多项式系数决定。


代数原理


从数学的角度上来对集合可以进行多重定义,如下图所示。如果我们想得到域的概念,则需要如下所有的条件均被满足。数学上去证明这些条件并不难,但是我们为了简化过程,直接说结果。典型的域的例子是有理数集合和实数集合。

47100fd011fcbd6f731b01bc14b13e70_3a9e158c7daf456b950d323821b97da3.png

有限域是定义乘法、加法、减法和除法运算并满足某些基本规则的集合。有限域最常见的例子是,当p是质数时,对p取余。有限域是数学和计算机科学的许多领域的基础,包括数论、代数几何、伽罗瓦理论、有限几何、密码学和编码理论。

假设一个有限域有n个整数元素,对于质数p而言有pn=q。一个大小为q的有限域中,他的余数可取值的范围是[0,p-1]。

f5865852541d88d52a89613a4ac3ba00_b767ca0b10454adab78e2f689a7cba03.png

对于2元有限域,他的加法与乘法的以及逆的表现如上所示。可以使用如下所示的多项式表达法来表达每个系数与比特的关系。

1c127a5aa94b952a4924c7b325c36ba0_d88226ff741a44678824baa0a32e44d9.png

多项式乘法如下图所示:

c09a33ad2cb311cc7245feaa8896a6df_c6c373e0a52945e28c9f0edb0de98ccd.png

基于mod的除法如下所示:

c2f96c170575d8fdf0c7c2447ad2f10b_6a9734fbb0084fb9b466ee442494263d.png

应用这些原理,我们来看一个以3bit为空间的不可约多项式表达表(分别是加法表和乘法表)

728e654f8a3f03b57d1e7dd3f905f664_861a1a870ad44271a8a2bfed7fa246fd.png

acb61800ae7fe9b9876afc57201df528_4abe7d9aafef4146bee576a5a5d7d952.png

3ee2090720b7d8e3c91554991372bd4c_c78a7d845267471ab5640731c87c9200.png

然后通过这些算数表就可以将LSFR的系数和是否要进行XOR运算给确定和归一化。

这里还有一个其他多项式概念,叫做本源多项式(Primitive Polynomial)。这个多项式的要求是第一个能够整除对应阶数且不超过最大当前阶数的阶。

ece1fed234d22d3ef727ca71ecfe5e2c_f102126cf7514da5b63397063d84d308.png

上图所示的本原多项式就是x3+1,阶数为3(为3时才能整除)

18eb6a27ff2f98dc800d3e63adfa9344_29bfe978d1fa4c839db8ef966c1e7378.png


如上图所示就不属于本原多项式的范围,因为阶数超过了最大阶数,这里的阶数的意义是当比特位数为4时,最多存在16个组合类型。而当你需要使用第五个bit才能表达这个多项式的本源多项式时,理论上其比特位已经溢出了一位。针对这个概念,可以得到LFSR的特征。

如果C(X)是一个原始多项式,则非奇异LFSR < L, C(X) >的2L- 1个非零初始状态中的每一个都产生一个周期最大可能为2L- 1的输出序列。

3608df6b75622b720a2797241651aed5_a68c17627b6248ddb419d9eb189d9401.png

在上图中,我们可以知道对于具有本原多项式的LFSR算法,其周期长度最大为2"-1,而对于溢出位的算法,周期长度只有常熟值n。而非周期的密码是软件无法生成的。

为了加密的目的,我们希望序列具有非常长的周期。LFSR在这方面的优点是,周期在移位寄存器的长度上呈指数增长。对于n, 2, 3,或4的小值,最大可能周期的值,N = 2"-1,仍然很小。但如下表所示,在n值适中的情况下,我们能够有效地生成具有巨大周期的序列。如下图所示。

f6ea7fa532dbd3882fe83bf2f92d51c0_03cc45b1b85e402a92bff523529c210d.png线性复杂度

LFSR是一种线性反馈移位寄存器,它可以用于生成伪随机序列。一个LFSR由一组寄存器和一组控制它们的线性反馈电路组成。给定初始状态,LFSR可以生成一个特定长度的序列。因此,对于给定的无限长度序列s∞,可以使用LFSR来生成它。二进制序列的线性复杂度是周期结构的度量,低线性复杂度意味着密码弱周期(周期短,不安全)。找到一个最短的线性反馈移位寄存器(LFSR),使得它可以生成一个无限长的序列s∞,或者如果不存在这样的LFSR,则输出无穷大(∞)。

有限序列的线性复杂度是sn

无限序列的线性复杂度Sထ: = sn || sn ||…|| sn|…


目录
相关文章
|
6月前
|
人工智能 搜索推荐 数据挖掘
2025年高口碑AI创意视频服务商TOP3推荐
2025年AI创意视频服务商崛起,集之互动、即梦、可灵领跑市场。集之互动以自研大模型和高可控生成技术,打造广告级定制视频;即梦凭借智能生成与多场景应用,提升创作效率;可灵专注灵活定制,助力中小企业高效产出品牌视频,三者各具优势,赋能多元创作需求。
417 0
|
Java 编译器 程序员
java中重载和多态的区别
本文详细解析了面向对象编程中多态与重载的概念及其关系。多态是OOP的核心,分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过方法重载和运算符重载实现,如Java中的同名方法因参数不同而区分;运行时多态则依赖继承和方法重写,通过父类引用调用子类方法实现。重载是多态的一种形式,专注于方法签名的多样性,提升代码可读性。两者结合增强了程序灵活性与扩展性,帮助开发者更好地实现代码复用。
790 0
|
算法 API 开发者
【Qt UI相关】Qt中如何控制 窗口的最大化、最小化和关闭按钮?一文带你掌握用法
【Qt UI相关】Qt中如何控制 窗口的最大化、最小化和关闭按钮?一文带你掌握用法
3936 1
|
监控 并行计算 图形学
阿里云容器服务GPU监控2.0进阶篇2:学会剖析(Profiling)您的GPU使用情况
本系列相关文章:阿里云容器服务GPU监控2.0基础篇1:基本功能使用阿里云容器服务GPU监控2.0基础篇2:监控NVLINK带宽阿里云容器服务GPU监控2.0基础篇3:监控NVIDIA XID错误阿里云容器服务GPU监控2.0进阶篇1:剖析(Profiling)GPU使用情况必备知识阿里云容器服务GPU监控2.0进阶篇2:学会剖析(Profiling)GPU使用情况为了能够更深入理解GPU Pro
5154 1
阿里云容器服务GPU监控2.0进阶篇2:学会剖析(Profiling)您的GPU使用情况
|
XML 搜索推荐 Java
Android TextView的字体设置
【5月更文挑战第13天】
1401 0
|
人工智能 搜索推荐 语音技术
有道开源的国产语音库EmotiVoice爆火了!具有情绪控制功能的语音合成引擎!
有道开源的国产语音库EmotiVoice爆火了!具有情绪控制功能的语音合成引擎!
3118 0
|
前端开发 JavaScript 开发工具
如何将网页封装成APP:一步步教你在线生成APP
随着移动互联网的发展,APP已经成为用户获取信息和服务的主要渠道,而企业和个人也纷纷加入APP开发的行列。但对于那些没有编程技能的人来说,想要开发一个APP仍然是很困难的事情。本文将介绍一种在线生成APP的方法,将网页封装成APP,无需编程经验,只需简单操作即可生成属于自己的APP。
1799 0
|
机器学习/深度学习 搜索推荐 算法
搜索场景下的智能推荐演变之路:从基础到个性化
本篇详细介绍了搜索场景下智能推荐技术的演变历程,从基础的协同过滤算法到个性化推荐的深度学习实现。通过代码示例,读者可以了解不同阶段推荐算法的原理和实际应用,以及如何评估推荐效果。文章旨在帮助读者深入理解智能推荐的发展趋势,为构建更智能、个性化的推荐系统提供有益的指导。
2883 0
|
数据可视化 Java 数据库
开题报告--基于Spring Boot的大学生就业追踪系统的设计与实现
开题报告--基于Spring Boot的大学生就业追踪系统的设计与实现
616 0
|
存储 传感器 数据采集
嵌入式系统入门基础知识分析(一)
嵌入式系统入门基础知识分析(一)
881 0

热门文章

最新文章