(
1
−
p
)
(
b
c
)
a
log
a
p
(
a
d
)
b
log
b
p
(
b
c
)
\begin{aligned} I(X, Z) &= \sum_x\sum_z p(x, z)\log\frac{p(x, z)}{p(x)p(z)} \ &= d\log\frac{d}{(1-p)(a+d)} + c\log\frac{c}{(1-p)(b+c)} \ &+ a\log\frac{a}{p(a+d)} + b\log\frac{b}{p(b+c)} \end{aligned}
I(X,Z)=x∑z∑p(x,z)logp(x)p(z)p(x,z)=dlog(1−p)(a+d)d+clog(1−p)(b+c)c+alogp(a+d)a+blogp(b+c)b
又由于 a + b + c + d = 1,p = a + b,q = a + c,0 < a, b, c, d, p, q < 1,可以进一步转化为只与变量a和p有关的如下公式(注意:此时q已不再是变量,而是确定值了)
I
(
X
,
Z
)
=
[
1
a
−
p
−
q
]
log
1
a
−
(
p
q
)
(
1
−
p
)
(
1
2
a
−
p
−
q
)
(
q
−
a
)
log
q
−
a
(
1
−
p
)
(
p
q
−
2
a
)
a
log
a
p
(
1
2
a
−
p
−
q
)
(
p
−
a
)
log
p
−
a
p
(
p
q
−
2
a
)
\begin{aligned} I(X, Z) &= [1+a-p-q]\log\frac{1+a-(p+q)}{(1-p)(1+2a-p-q)} \ &+ (q-a)\log\frac{q-a}{(1-p)(p+q-2a)} \ &+ a\log\frac{a}{p(1+2a-p-q)} + (p-a)\log\frac{p-a}{p(p+q-2a)} \end{aligned}
I(X,Z)=[1+a−p−q]log(1−p)(1+2a−p−q)1+a−(p+q)+(q−a)log(1−p)(p+q−2a)q−a+alogp(1+2a−p−q)a+(p−a)logp(p+q−2a)p−a
利用此
I
(
X
,
Z
)
I(X, Z)
I(X,Z) 就可知:以 X 为输入,Z 为输出的信道 F 的信道容量
C
=
m
a
x
[
I
(
X
,
Z
)
]
C = max[I(X, Z)]
C=max[I(X,Z)](这里最大值是针对 X 为所有可能的二元离散随机变量来计算的)。
在此处一对一的信道中,其容量
C
=
m
a
x
0
<
a
,
p
<
1
[
I
(
X
,
Z
)
]
C = max_{0<a,p<1}[I(X,Z)]
C=max0<a,p<1[I(X,Z)],这里的最大值是对仅仅两个变量 a 和 p 在条件 0 < a,p < 1 下之取的,也就是说 攻击信道容量 C,其实是 q 的函数。
攻击信道容量的数值分析
根据攻击信道容量公式
C
=
m
a
x
0
<
a
,
p
<
1
[
I
(
X
,
Z
)
]
=
m
a
x
0
<
a
,
p
<
1
[
(
1
a
−
p
−
q
)
log
1
a
−
(
p
q
)
(
1
−
p
)
(
1
2
a
−
p
−
q
)
(
q
−
a
)
log
q
−
a
(
1
−
p
)
(
p
q
−
2
a
)
a
log
a
p
(
1
2
a
−
p
−
q
)
(
p
−
a
)
log
p
−
a
p
(
p
q
−
2
a
)
]
\begin{aligned} C &= max_{0<a,p<1}[I(X,Z)] \ &= max_{0<a,p<1} [ (1+a-p-q)\log\frac{1+a-(p+q)}{(1-p)(1+2a-p-q)} \ &+ (q-a)\log\frac{q-a}{(1-p)(p+q-2a)} \ &+a\log\frac{a}{p(1+2a-p-q)} + (p-a)\log\frac{p-a}{p(p+q-2a)} ] \end{aligned}
C=max0<a,p<1[I(X,Z)]=max0<a,p<1[(1+a−p−q)log(1−p)(1+2a−p−q)1+a−(p+q)+(q−a)log(1−p)(p+q−2a)q−a+alogp(1+2a−p−q)a+(p−a)logp(p+q−2a)p−a]
下面给出以 q 为自变量的攻击信道容量的数值分析函数:
# Compute mutual information
def get\_i(a, p ,q):
c1 = 1 + a - p - q
c2 = q - a
c3 = p - a
c4 = 1 + 2 \* a - p - q
c5 = p + q - 2 \* a
i1 = c1 \* np.log(c1 / ((1 - p) \* c4))
i2 = c2 \* np.log(c2 / ((1 - p) \* c5))
i3 = a \* np.log(a / (p \* c4))
i4 = c3 \* np.log(c3 / (p \* c5))
i = i1 + i2 + i3 + i4
return i
# def get\_max\_i(i):
def get\_max\_i(a, p ,q):
i = get_i(a, p ,q)
i = np.nan_to_num(i)
max_i = np.max(i)
# print(max\_i)
# print(i)
return max_i
其中 get_i
函数是根据公式 I(X, Z)
计算互信息,get_max_i
函数是根据
C
=
m
a
x
0
<
a
,
p
<
1
[
I
(
X
,
Z
)
]
C = max_{0<a,p<1}[I(X,Z)]
C=max0<a,p<1[I(X,Z)] 计算信道容量,即最大的互信息。画出攻击信道容量的数值分析图像如下:
import numpy as np
import matplotlib.pyplot as plt
_p = np.arange(0.01, 1.00, 0.01)
_q = np.arange(0.01, 1.00, 0.01)
# Meshgrid for 2D array creation
p, q = np.meshgrid(_p, _q)
# 2D array outer product
a = np.outer(_p, _q)
# Compute mutual information
def get\_i(a, p ,q):
c1 = 1 + a - p - q
c2 = q - a
c4 = p - a
c5 = 1 + 2 \* a - p - q
c6 = p + q - 2 \* a
i1 = c1 \* np.log(c1 / ((1 - p) \* c5))
i2 = c2 \* np.log(c2 / ((1 - p) \* c6))
i3 = a \* np.log(a / (p \* c5))
i4 = c4 \* np.log(c4 / (p \* c6))
i = i1 + i2 + i3 + i4
return i
i = get_i(a, p ,q)
# Plotting
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(p, q, i, cmap='jet')
# Axis labels
ax.set_xlabel('p')
ax.set_ylabel('q')
ax.set_zlabel('I(X,Z)')
### 给大家的福利
**零基础入门**
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)
同时每个成长路线对应的板块都有配套的视频提供:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)
因篇幅有限,仅展示部分资料
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**