布尔函数简介
在密码学中,布尔函数是加密算法的核心部件之一。
布尔函数指从 F 2 n \mathbb{F}_2^n F2n 到 F 2 \mathbb{F}_2 F2 的映射。
简单举例如下:
一个三元(
n
=
3
n=3
n=3)布尔函数
F
F
F 是指从
F
2
3
\mathbb{F}_2^3
F23 到
F
2
\mathbb{F}_2
F2 的映射。
其中,
F
2
3
=
{
000
,
001
,
010
,
011
,
100
,
101
,
110
,
111
}
F
2
=
{
0
,
1
}
\mathbb{F}_2^3=\{000,001,010,011,100,101,110,111\} \\ \mathbb{F}_2=\{0,1\}
F23={000,001,010,011,100,101,110,111}F2={0,1}
我们可以认为
x
x
x 是
F
2
3
\mathbb{F_2^3}
F23 中的某个元素,而此时
F
(
x
)
F(x)
F(x) 的值就是
0
0
0 或者
1
1
1。
布尔函数表示方法
真值表表示
若
F
F
F 符合
F
(
000
)
=
1
,
F
(
001
)
=
0
F
(
010
)
=
1
,
F
(
011
)
=
0
F
(
100
)
=
0
,
F
(
101
)
=
0
F
(
110
)
=
1
,
F
(
111
)
=
0
F(000) = 1,~ F(001) = 0\\ F(010) = 1,~ F(011) = 0\\ F(100) = 0,~ F(101) = 0\\ F(110) = 1,~ F(111) = 0\\
F(000)=1, F(001)=0F(010)=1, F(011)=0F(100)=0, F(101)=0F(110)=1, F(111)=0
则
f
(
x
)
f(x)
f(x) 的真值表可以为
{
1
,
0
,
1
,
0
,
0
,
0
,
1
,
0
}
\{1,0,1,0,0,0,1,0\}
{1,0,1,0,0,0,1,0}
小项表示
布尔函数的小项表示由它的真值表唯一确定。
布尔函数是它取值为1的那些真值指派对应的小项函数之和。
三元布尔函数
F
F
F 如上所述,则小项表示为:
F
(
x
)
=
x
1
0
x
2
0
x
3
0
+
x
1
0
x
2
1
x
3
0
+
x
1
1
x
2
1
x
3
0
F(x)=x_1^0x_2^0x_3^0+x_1^0x_2^1x_3^0+x_1^1x_2^1x_3^0
F(x)=x10x20x30+x10x21x30+x11x21x30
其中
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3 分别是
x
x
x 的三个分量,所以函数
F
(
x
)
F(x)
F(x) 也可以写成
F
(
x
1
,
x
2
,
x
3
)
F(x_1,x_2,x_3)
F(x1,x2,x3)
由真值表求小项表示可以仅留下真值为
1
1
1 的部分,标注上标即可(仅为求法,有具体含义
)。
ANF(代数范式、代数正规型)
上述布尔函数
F
F
F 的多项式表示为:
F
(
x
)
=
1
+
x
1
+
x
3
+
x
1
x
2
+
x
1
x
3
+
x
1
x
2
x
3
F(x)=1+x_1+x_3+x_1x_2+x_1x_3+x_1x_2x_3
F(x)=1+x1+x3+x1x2+x1x3+x1x2x3
这也称为它的ANF。
由真值表求ANF可通过先求小项表示再展开(
x
i
0
=
x
i
+
1
,
x
i
1
=
x
i
x_i^0=x_i+1,~x_i^1=x_i
xi0=xi+1, xi1=xi)的途径:
这样,小项表示即可展开为多项式表示:
F
(
x
)
=
(
x
1
+
1
)
(
x
2
+
1
)
(
x
3
+
1
)
+
(
x
1
+
1
)
x
2
(
x
3
+
1
)
+
x
1
x
2
(
x
3
+
1
)
→
F
(
x
)
=
1
+
x
1
+
x
3
+
x
1
x
2
+
x
1
x
3
+
x
1
x
2
x
3
F(x)=(x_1+1)(x_2+1)(x_3+1)+(x_1+1)x_2(x_3+1)+x_1x_2(x_3+1)\\ \to~F(x)=1+x_1+x_3+x_1x_2+x_1x_3+x_1x_2x_3
F(x)=(x1+1)(x2+1)(x3+1)+(x1+1)x2(x3+1)+x1x2(x3+1)→ F(x)=1+x1+x3+x1x2+x1x3+x1x2x3
布尔函数中的运算:1+1=0+0=0,0+1=1+0=1,0*0=0*1=1*0=0,1*1=1
包括递归方式求ANF
及其他相关代码:https://gitee.com/ssdreamc/about_boolean_functions