校正代码。新编码理论的开端



信息安全问题需要研究和解决系统订户信息交互中的许多理论和实践问题。我们的信息安全学说规定了确保信息的完整性,机密性和可用性的三方面任务。这里介绍的文章致力于在各种状态系统和子系统的框架内考虑解决方案的特定问题。此前,作者在5篇文章中讨论了通过国家标准确保消息机密性问题。编码系统的一般概念也是我之前给出的



介绍



从我的基础教育来看,我不是数学家,但是与我在大学读的学科有关,我必须认真理解它。长期以来,我一直读着一流大学的经典教科书,五本数学百科全书,许多关于某些问题的热门小册子,但并没有引起满意。也不产生对深度阅读的理解。



通常,所有数学经典都将重点放在无限的理论案例上,而特殊学科则基于有限构造和数学结构的案例。方法上的差异是巨大的,缺少或缺少好的完整示例可能是主要的缺点,而缺乏大学教科书。很少有针对初学者(针对新生)的解决方案的问题书,而那些确实存在的解决方案却在疏忽说明方面是有罪的。总的来说,我爱上了二手技术书店,在此基础上,图书馆和一定程度上的知识库得到了补充。我有很多阅读的机会,但是“没去”。



这条路引出了一个问题:如果我没有书“拐杖”,只有一张白纸和一支带橡皮的铅笔,我现在可以独自做什么?事实证明,这是相当多的,而不完全是需要的。通过了偶然的自我教育的艰难道路。问题是这样的。我是否可以首先向我自己构建和解释检测并修复错误的代码的工作,例如汉明代码((7,4)-code)?



众所周知,汉明码被广泛用于数据存储和交换领域的许多应用中,特别是在RAID中。此外,它还位于ECC存储器中,可以即时纠正单个和双重错误。



信息安全。代码,密码,隐密消息



通过参与者之间交换消息进行的信息交互应在不同级别上通过各种方式(包括硬件和软件)提供保护。这些工具是在某些理论(参见图A)和国际OSI / ISO模型协议采用的技术的框架内开发,设计和创建的。



信息电信系统(ITS)中的信息保护实际上已成为解决管理问题的主要问题,无论是个人(用户)的规模,还是公司,协会,部门和整个国家的管理问题。在ITKS保护的所有方面中,我们将在通信系统的信息提取,处理,存储和传输过程中考虑对信息的保护。



为了进一步阐明主题领域,让我们关注两个可能的方向,其中考虑了两种不同的信息保护,表示和使用方法:句法和语义。图中使用以下缩写:编解码器–编解码器–解码器; shidesh-解码器-解码器;尖叫声-遮瑕膏-提取器。





图A-旨在解决保护信息交互问题的理论的主要方向和相互关系图消息表示的



句法功能使您可以控制并确保在存储,处理期间,尤其是在通过通信通道传输信息时,表示的正确性和准确性(无错误,完整性)。在这里,保护的主要问题是通过密码学方法解决的,密码学的大部分是纠正密码的理论。



语义(语义)安全消息是通过密码学方法提供的,通过密码学方法,可以保护潜在的入侵者免于掌握信息内容。在这种情况下,违规者可以复制,窃取,更改或替换,甚至销毁消息及其载体,但是他将无法获得有关所发送消息的内容和含义的信息。消息中的信息内容将对违法者仍然不可访问。因此,需要进一步考虑的主题将是ITCS中信息的语法和语义保护。在本文中,我们将仅限于在简单但非常重要的纠正代码实现中仅考虑语法方法。



我将立即画出一条解决信息安全问题的分界线:

密码学理论旨在保护信息(消息)不受通道和环境的错误(消息语法的保护和分析)的影响,以检测和纠正错误;

密码学理论旨在防止信息被入侵者未经授权访问其语义(保护语义,消息的含义);

隐写术理论旨在保护消息的信息交换事实,以及保护版权,个人数据(保护医疗保密性)。



一般而言,我们走吧。根据定义,其中有很多,甚至不容易理解有代码。作者写道,代码是一种算法,一种显示方式以及其他东西。我不会在这里写代码的分类,我只会说(7,4)-code是block



在某个时候,我意识到代码是特殊的代码字,它们是有限的一组,被特殊的算法替换为通信信道发送端的消息原始文本,并通过该信道发送给接收者。替换由编码器设备执行,并且在接收侧,这些字由解码器设备识别。



由于各方的角色是可变的,因此这两个设备都被合并为一个并缩写为编解码器(编码器/解码器),并安装在通道的两端。此外,由于有单词,所以也有字母。字母是两个字符{0,1},块二进制代码。自然语言字母(NL)是一组符号-代替书写时口头讲话声音的字母。在这里,我们将不会研究音节或节状写作中的象形文字。



字母和单词已经是一种语言,众所周知自然人类语言是多余的,但这意味着在语言冗余所处的地方很难说,冗余不是组织得很好,混乱的。在编码,存储信息时,它们往往会减少冗余,例如存档器,摩尔斯电码等。



理查德·海明(Richard Hemming)可能比其他人更早意识到,如果没有消除冗余,但合理地组织了冗余,则可以在通信系统中使用它来检测错误,并在传输的文本的代码字中自动纠正错误。他意识到,所有128个7位二进制字都可以用来检测形成代码的码字中的错误-16个7位二进制字的子集。这是一个绝妙的猜测。



在汉明(Hamming)发明之前,当无法读取解码的文本或事实证明​​不是所需要的内容时,接收方也会检测到错误。在这种情况下,向消息的发送者发送了一个请求,要求重复某些单词的块,这当然很不方便,并且减慢了通信会话的速度。这是几十年来一直没有解决的大问题。



(7,4)海明码的构造



让我们回到汉明。 (7,4)码的字由7位j =(i1,i2,i3,i4,p1,p2,p3),j = 0(1)15、4信息和3校验符号,即本质上是多余的,因为它们不携带任何消息信息。可以通过每个单词中4个信息符号的线性函数来表示这三个校验位,从而确保检测到错误事实及其在单词中的位置,以便进行更正。 (7,4)码得到一个新的形容词,成为线性块二进制



用于计算符号值的线性函数相关性(规则(*))

pi如下:



p1+i2+i3+i4=0,p1=i2+i3+i4,

p2+i1+i3+i4=0,p2=i1+i3+i4,()

p3+i1+i2+i4=0,p3=i1+i2+i4.



纠正错误变成了非常简单的操作-在错误的位中确定一个字符(零或一个),并用另一个相反的0乘1或1乘0替换。

代码中有多少个不同的单词?对于(7,4)-code,此问题的答案非常简单。由于只有4个信息数字,因此它们的种类(用符号填充)具有24 = 16个选项,那么根本就没有其他可能性,也就是说,仅由16个单词组成的代码可确保这16个单词代表整个语言的全部编写。



这16个字的信息部分以#

i1,i2,i3,i4):



0 = 0000; 4 = 0100;8 = 1000;12 = 1100;

1 = 0001; 5 = 0101;9 = 1001;13 = 1101;

2 = 0010;6 = 0110;10 = 1010;14 = 1110;

3 = 0011;7 = 0111;11 = 1011;15 = 1111。



这些4位字中的每一个都需要计算并通过3个校验位添加到右边,这些校验位是根据规则(*)计算的。例如,对于等于0110的6号信息词,我们有i1=0,i2=1,i3=1,i4=0并且该符号的校验符号计算得出以下结果:



(1=0,2=1,3=1)

1=i2+i3+i4=1+1+0(mod2)=2(mod2)=0,

2=i1+i3+i4=0+1+0(mod2)=1(mod2)=1,

。在这种情况下,第六码字的形式为:3=i1+i2+i4=0+1+0(mod2)=1(mod2)=1.



6=(i1,i2,i3,i4,p1,p2,p3)=(0110011).同样,有必要计算所有16个码字的校验符号。让我们为代码字准备一个16行的表格K,然后依次填充其单元格(我建议读者用手拿着铅笔来完成此操作)。



表K-码字j,j = 0(1)15,(7,4)-汉明码



表格说明:16行-代码字;10列:序列号,代码字的十进制表示形式,4个信息符号,3个校验符号,代码字的W权重等于非零位数(≠0)。通过填充突出显示4个代码字线-这是向量子空间的基础。实际上,仅此而已-代码已构建。



因此,该表包含所有单词(7,4)-海明码。如您所见,这并不困难。接下来,我们将讨论什么想法导致Hamming进行了此代码构造。我们都熟悉摩尔斯电码,海军信号量字母和其他基于不同启发式原理构建的系统,但是在(7,4)-代码中,首次使用了严格的数学原理和方法。故事就是关于他们的。



代码的数学基础。高等代数



现在是时候告诉R.海明(Hemming)如何提出开放这种代码的想法了。他对自己的才华没有特别的幻想,并谦虚地为自己制定了一项任务:创建一个可以检测并纠正每个单词中的一个错误的代码(实际上,即使检测到两个错误,也只能纠正其中的一个错误)。通过优质的渠道,即使是一个错误也是很少见的事件。因此,海明的计划在通信系统的规模上仍然宏大。编码理论出版后发生了一场革命。



那是1950年。我在这里给出我的简单描述(我希望是可以理解的),我从其他作者那里都没有看到过,但是事实证明,一切都不是那么简单。它需要从数学和时间的众多领域中获得知识,才能深刻地理解一切并亲自理解为什么要这样做。只有在那之后,我才能体会到在此更正代码中实现的美丽而简单的想法。我大部分时间都在处理计算技术以及我在此编写的所有动作的理论证明。



这些代码的创建者很长一段时间都无法想到检测并纠正两个错误的代码。海明(Hemming)使用的想法在那儿行不通。我不得不看一下,发现了新的想法。很有意思!着迷。找到新想法花了大约10年的时间,然后才有了突破。显示任意数量错误的代码相对较快地收到了。



向量空间,字段和组所得的(7,4)码(表K)表示一组码字,它们是向量子空间(维数为16,维数为4)的元素,即。维度为7的向量空间的一部分27=128.在128个单词中,代码中仅包含16个单词,但是出于某种原因,它们被包含在代码中。



首先,它们是具有所有随之而来的属性和奇异性的子空间;其次,码字是128阶大型组的子组,此外,是有限扩展Galois场GF(27)扩展程度n = 7和特征2.这个较大的子组由一个较小的子组分解为相邻的类,下表D很好地说明了该表。该表分为上下两部分,但应将其理解为一个长的部分。通过组件的等效性,每个相邻的类(表行)都是因子组的元素。



表D-Galois场GF(27)分成16阶子组的陪集(表D的行)。



该表的列是半径为1的球面。左列(重复)是汉明码(7,4)单词的校正子,下一列是连续类的首长。让我们打开因子组的元素之一的二进制表示形式(第25个元素用填充突出显示)及其十进制表示形式:



0·x6+0·x5+1·x4+1·x3+0x2+0x+1=1·24+1·23+1·20=16+8+1=25



获得表D的行的技术。将来自类的领导者列的元素与来自表D列的标题的每个元素相加(对领导者的行以二进制形式mod2进行求和)。由于所有班级领导的权重均为W = 1,因此所有总和与列标题中的单词仅在一个位置上不同(整行相同,但列不同)。表D具有出色的几何解释。所有的16个码字都由7维向量空间中的球体中心表示。列中的所有单词都与高位单词在相同位置不同,也就是说,它们位于半径为r = 1的球体表面上。



这种解释隐藏了在任何代码字中检测到一个错误的想法。我们与领域合作。错误检测的第一个条件是半径1的球体不应接触或相交。这意味着球体的中心彼此之间的距离为3或更大。在这种情况下,这些球不仅不相交,而且彼此不接触。这是决定明确性的要求:哪个球体应归因于解码器在接收方接收到的错误字(不是128 -16 = 112的代码之一)。



其次,整个128位的7位二进制字集平均分布在16个球体上。解码器只能从这组128个已知字中获取一个字,无论有无错误。第三,接收方可以无误或有失真地接收一个字,但该字始终属于16个球体之一,这很容易由解码器确定。在后一种情况下,决定发送一个代码字-由解码器确定的球体中心,解码器确定表D中该单词的位置(行与列的交点),即列号和行号。



在此,对代码字和整个代码提出了要求:任何两个代码字之间的距离必须至少为3,即一对代码字之间的差,例如Ci = 85 =(i1,i2,i3,i4,p1,p2,p3)= 1010101; j= 25 =(i1,i2,i3,i4,p1,p2,p3)= 0011001必须至少为3; 85-25 = 1010101-0011001 = 1001100 = 76,差异词W(76)的权重=3。(表D代替了差异和和的计算)。在此,将二进制字向量之间的距离理解为两个字中不匹配位置的数目。这就是汉明距离,因为它满足了距离的所有公理,因此已在理论和实践中广泛使用。



备注。 (7,4)-码不仅是线性块二进制,而且还是码,也就是说,该码的字通过加法形成代数组。这意味着任何两个码字加在一起后,都会再次给出其中一个码字。只是这不是一个普通的加法运算,它是模二的加法。



表E-用于构造汉明码的组元素(码字)的总和



对单词求和本身的操作是关联的,并且对于码字集合中的每个元素,都有一个相反的含义,即,将原始单词与相反的单词相加得出零值。该零码字是组中的中性元素。在表D中,这是零的主要对角线。其余单元格(行/列交叉点)是数字字的十进制表示形式,是通过对行和列中的元素求和而获得的。对单词进行重排时(求和时),结果保持不变;此外,单词的减法和加法具有相同的结果。此外,考虑实现综合原理的编码/解码系统。



代码应用程序。编码器



编码器位于通道的发送侧,并由消息的发送方使用。消息的发送者(作者)以自然语言字母形成消息,并以数字形式呈现。(以ASCII码和二进制形式表示的字符名称)。

使用标准键盘(ASCII码)在PC的文件中生成文本很方便。每个字符(字母的字母)对应于此编码中的八位位(八位)。对于(7,4)-汉明码,其单词中只有4个信息符号,当将键盘符号编码为字母时,需要两个代码字,即 一个字母的八位字节被分成两个自然语言(NL)形式的信息字

i<4>=<i1,i2,i3,i4>...



例子1。有必要在NL中转移单词“ digit”。我们进入ASCII码表,字母对应于:c –11110110和–11101000,f-11110100,p-11110000和-11100000八位位组。否则,在ASCII码中,单词“ digit” = 1111 0110 1110 1000 1111 0100 1111 0000 1110 0000



,细分为四位(每个4位)。因此,单词“数字” NL的编码需要(7、4)汉明码中的10个码字。四边形表示消息字的信息位。这些信息字(四叉)在被发送到通信网络通道之前被转换成代码字(每个7位)。这是通过向量矩阵乘法完成的:信息字通过生成矩阵来完成。为方便起见而付出的代价非常昂贵且耗时,但是一切都会自动进行,最重要的是,可以保护消息免受错误侵害。

(7、4)汉明码的生成矩阵或代码字生成器是通过写出代码的基向量并将它们组合成矩阵而获得的。这是根据线性代数定理得出的:一个空间(子空间)的任何向量都是基本向量的线性组合,即在这个空间线性独立。这正是所需要的-从4位信息中生成任何矢量(7位代码字)。



(7、4、3)汉明码或代码字生成器的生成矩阵具有以下形式:





右边是子空间基础代码字的十进制表示形式及其在表K

号中的序号。矩阵的第i行是作为向量子空间基础的代码字。信息消息



的编码的示例(代码的生成矩阵是从基向量构建的,并且对应于表K的一部分)。在ASCII码表中,我们采用字母q = <1111 0110>。



消息的提示词如下:



ik1=<1111>,ik2=<0110>...



这些是字符(c)的一半。对于先前定义的(7,4)码,需要找到与8个字符的信息消息字(c)相对应的代码字,其形式为:



ik1=<1111>,ik2=<0110>...



将这一信消息(Q)转换成码字U,信消息i由所述生成矩阵G乘以的每一半[K,N]的代码(矩阵表K)的:







我们得到两个码字具有序号15和6



显示较低的结果编号6的详细构成-一个代码字(信息字的行乘以生成矩阵的列); (mod2)



<0110>∙<1000> = 0∙1 +1∙0 +1∙0 + 0∙0 = 0(mod2);

<0110>∙<0100> = 0∙0 + 1∙1 +1·0 + 0∙0 = 1(mod2);

<0110>∙<0010> = 0∙0 + 1∙0 +1·1 + 0∙0 = 1(mod2);

<0110>∙<0001> = 0∙0 + 1∙0 +1·0 + 0∙1 = 0(mod2);

<0110>∙<0111> = 0∙0 +1∙1 +1∙1 + 0∙1 = 0(mod2);

<0110>∙<1011>= 0∙1 +1∙0 +1∙1 + 0∙1 = 1(mod2);

<0110>∙<1101> = 0∙1 +1∙1 +1∙0 + 0∙1 = 1(mod2)。



作为乘法结果从表K中接收到的第十五和第六个字。这些代码字中的前四位(乘法结果)代表信息字。他们看起来像:ik1=<1111>,ik2=<0110>,(在ASCII表中仅是字母t的一半)。对于编码矩阵,表K中选择了一组具有数字:1、2、4、8的单词作为基本向量。在表中,通过填充将其突出显示。然后对于该表K,编码矩阵将接收形式G [k,n]。



作为乘法的结果,获得了K码表的15和6个字。



代码应用程序。解码器



解码器位于消息的接收者所在的通道的接收侧。解码器的目的是向接收者提供所发送消息的形式,该消息在发送时即在发送者处存在。收件人可以使用该文本并将其信息用于以后的工作。



解码器的主要任务是检查接收到的字(7位)是否是发送方发送的字,该字是否包含错误。为了解决这个问题,对于解码器接收到的每个字,通过将其乘以校验矩阵[nk,n],计算出短向量校验子S(3位)。



对于已编码的字,即不包含错误的字,校正子始终为零值S = <000>。对于有错误的字,校验子不为零S≠0.校验子的值使得可以检测并定位错误的位置,直到接收侧接收到的字中的一位为止,并且解码器可以更改此位的值。在代码的校验矩阵中,解码器找到与校正子值一致的列,并且该列的序数等于被错误破坏的位。此后,对于二进制代码,解码器会更改此位-只需将其替换为相反的值,即1替换为零,零替换为1。



有问题的代码是系统的也就是说,信息字的符号在代码字的最高有效位中排成一行。信息字的恢复是通过简单丢弃最低有效(校验)位(已知数量)来实现的。接下来,以相反的顺序使用ASCII码表:输入是信息性二进制序列,而输出是自然语言字母的字母。因此,(7,4)码是系统的,组的,线性的,块的,二进制的



解码器的基础由校验矩阵H [nk,n]组成,校验矩阵H [nk,n]包含等于校验符号数的行数,以及除零以外的所有可能的列,三个字符的列231=7... 奇偶校验矩阵由表K的字构成,它们被选择为与编码矩阵正交,即 它们的乘积是零矩阵。校验矩阵在乘法运算中采用以下形式,即转置。对于一个特定示例,校验矩阵H [nk,n]如下所示:











我们看到生成矩阵和校验矩阵的乘积导致零矩阵。



示例2.正确解码汉明码的一个字(e <7> = <0000000>)。

令在信道的接收端从表K接收到字#7→60和#13→105,

u <7> + e <7> = <0 1 1 1 1 0 0> + <0 0 0 0 0 0 0>,

没有错误的地方,即形式为e <7> = <0 0 0 0 0 0 0>。





结果,计算出的校正子为零,这确认了代码字中没有错误。



例子3。检测在通道的接收端接收到的单词中的一个错误(表K)。



A)要求发送第7个码字,即



u <7> = <0 1 1 1 1 0 0>并且在单词左侧的三分之一处出现错误。然后将mod2与通过通信信道

u <7> +<7> = <0 1 1 1 1 0 0> + <0 0 1 0 0 0 0> = <0 1 0 1发送的第7个代码字相加。1 0 0>,

其中错误的形式为e <7> = <0 0 1 0 0 0 0>。



通过将接收到的失真字乘以代码的校验矩阵,可以确定代码字是否失真。这个乘法的结果将是一个向量称为代码字综合症。



让我们对原始数据(有错误的第7个向量)执行这样的乘法。





作为这种乘法的结果,在信道的接收端,获得了向量校正子S <nk>,其维度为(n – k)。如果校验子S <3> = <0,0,0>为零,那么可以得出结论,在接收方接收到的字属于C码,并且在传输时没有失真。如果校验子不等于零S <3>≠<0,0,0>,则其值指示错误的存在及其在单词中的位置。失真的位对应于矩阵[nk,n]的列位置编号,该编号与校验子一致。此后,校正失真的位,并且解码器进一步处理接收到的字。实际上,对于每个接受的单词,立即计算出一个校正子,如果有错误,则会自动消除。



因此,在计算过程中,两个词的校正子S = <110>是相同的。我们查看检查矩阵并找到与综合症匹配的列。这是左起的第三列。因此,错误发生在从左数第三位,这与示例条件一致。第三位变为相反的值,我们将解码器接收到的字恢复为代码形式。错误已找到并解决。



就是这样,这就是经典的(7,4)Hamming代码的工作方式和工作方式。



这里不考虑对该代码的大量修改和现代化,因为不是它们很重要,而是那些思想和其实现彻底改变了编码理论,从而改变了通信系统,信息交换,自动控制系统。



结论



本文考虑了信息安全的主要规定和任务,列举了解决这些问题的理论。



保护对象和对象的信息交互不受环境错误和入侵者行为的影响属于密码学。



详细讨论了(7,4)汉明码,这为编码理论的新方向-校正码的合成奠定了基础。



显示了严格的数学方法在代码合成中的应用。

给出了一些示例来说明代码的效率。



文学



Peterson W.,WeldonE。纠错码:Trans。来自英语。M .:米尔,1976年,594页。

Bleihut R.错误控制代码的理论和实践。翻译成英文。M .:米尔,1986年,576页。



All Articles