今天开始,飞猪和大家共同学习比特币中的密码学,希望飞猪每月可以更新一篇干货,写作原材料是咖啡,希望大家可以打赏一杯。第一节,是纯数学定义,有限域,可能稍有枯燥,但相信我,大家认真看一定可以看懂,我们慢慢来,都会成为令人敬畏的密码学大咖。
有限域定义
有限域(有限体,伽瓦罗域,Infinite Field)为一组有限的数的集合,在其内进行加减乘除所得结果不会脱离该集合。
如果a和b都在集合中,而且 a+b 和 a⋅b 都在集合中。
我们称这种性质为封闭。
0 存在,且具有 a+0=a 的性质,我们称此性质为加法特性。
1 存在,且具有 a⋅1=a 的性质,我们称之为乘法特征。
如果a在集合中,-a在集合中定义为使 a+(-a)=0 的值,这就是我们所说的加法逆。
如果a在集合中,且不为0,a-1 在集合中定义为使 a⋅a-1=1的值。
这就是我们所说的乘法逆。
一个域在这本书我们记为 GF(p),p 是集合内元素的数量,也就是我们所说的集合的阶。比如一个包括了 0,1,-1 三个元素的域我们记为 GF(3) = {-1,0,1}。域 {-1,0,1} 在正常乘法下是封闭的。任何两个数做加和乘的运算,结果总是在集合中。一个包含 {0,1,2} 的集合在加法下是不封闭的,因为 1+2=3,3 不在集合中;2+2=4也不在集合中。当然,我们可以用不同的方式定义加法来使之生效,但使用"正常的"加法,这个集合是不封闭的。没错,我们可以用不同于你所熟悉的加法和减法的方式定义加法和减法。我们可以用特殊的方式定义乘法,使这些集合封闭。
为什么只有加法和乘法呢?利用加法逆,我们可以定义减法。利用乘法的逆运算,我们可以定义除法。
运算
GF(p)中的四则运算都是基于取模运算的,那么什么是取模运算呢?它其实就是我们小学学过的带余除法的余数,例如:12除以7商为1,余数为5,记作12 % 7 = 5,取模运算将不会考虑商而仅仅得到余数作为结果。
GF(p)中的加、减、乘法都比较简单并且类似。它们其实就是我们生活使用的加、减、乘法再对元素个数p取模。
加法
取模解决了传统加法和乘法难以有限的问题,把加法和乘法限制在了元素个数的循环之中。现实生活中时间的表示方法就是一个很好的例子。12点之后47小时,我们不会说他是59点,我们还是会说它是11点,其实就是做了取模的运算。
在GF(13) = {0,1,2,3,4,5,6,7,8,9,10,11,12} 为例,加法写为 +f,减法写为 -f,乘法写为 *f
加法:3 +f 11 = (3 + 11) % 13 = 1