网络安全 频道

分组密码算法的工作GB/T15277-94

中华人民共和国国家标准
信息处理64bit
分组密码算法的工作方式 GB/T15277-94
Information processing –Modes of operation for a
64-bit block cipher algorithm
(国家技术监督局1994年12月7日1995年8月1日实施)

本标准等效采用国际标准ISO8372-1987
《信息处理64bit分组密码算法的工作方式》。

 


一主题内容与适用范围

本标准描述了采用秘密密钥的任意一种64bit分组密码算法的四种工作方式。

注:附录A(参考件)包含了对每一种工作方式性质的简要评述。

本标准规定了四种确定的工作方式,以便在64bit分组密码的任何应用(例如数据传输,数据存
储,鉴别)中,对诸如工作方式的详细说明、启动变量的生成以及参数值的选定提供一个有用
的参照。

注:对密文反馈(CFB)工作方式(见第6章),要确定两个参数j和k;对输出反馈(OFB)工作方式
(见第7章),要确定一个参数j。在使用其中一种工作方式时,相应参数要由通信的所有各方选
定和使用。

二 术语

2.1明文 plaintext

未加密的信息。

2.2密文ciphertext

已加密的信息。

2.3分组链接block chaining

一种信息加密方法,每一个密文分组在密码上依赖于前一个密文分组。

2.4初始化值 (IV) initializing value (IV)

用来确定加密过程的启动点的值。

2.5启动变量(SV)starting variable (SV)

由初始化值导出的且用来确定工作方式启动点的变量。

注:本标准没有规定由初始化值导出启动变量的方法。这需要在应用这些工作方式时另行描
述。

2.6密码同步cryptographic synchronization

加密与解密过程的协调一致。

三记法

本标准中,由分组密码算法定义的函数关系记为:

C=eK(p)

式中: P----明文分组;

C----密文分组;

K----密钥。

eK表示使用密钥K的加密运算。

对应的解密函数记为:

P=dK(C)

用大写字母表示的变量,如上述P和C,表示一维比特阵列,例如:

A={a1,a2,…,a m }B={b1,b2,…,b m}

便是两个m比特阵列,其比特从1至m编号。

模2加法运算,也称作异或函数,用符号? 来表示。A,B两个阵列的模2加运算定义为:

A? B={a1? b1, a2? b2,…, a m ? bm}

选取阵列A的最左边j个比特以产生一个j比特阵列的运算记为:

A~j={a1,a2, …a j }

这种运算只有当j≤m(m是阵列A中的比特数)时才有定义。

“移位函数”S k定义如下:

已知一个m比特变量X和一个k比特变量F,这里k≤m,移位函数S k(X∣F)的作用就是产生如
下m比特的变量:

Sk(X∣F)=(X k+1,X k+2,…X m,f1,f2,…fk)

它的作用乃是将阵列X中的比特向左移动k个位置,舍弃X1,…,X k,并将阵列F放到X的最
右边的k个位置上。

本标准中使用这个函数的一种特殊情况,X为k比特全“1”的变量,记作I(k),F为j比特变
最C,此处j≤k。上述作用为:

Sj(I(K)∣C)={1,1…,1,C1,C2, …,Cj }

此阵列的最左边为k-j个“1”。

四 电子密本(ECB)方式

已知一个64比特的明文分组P,加密算法产生一个64bit密文分组C,即:

C=eK(P)

解密算法产生:

P=dK(C)

这种使用加密算法的方式称作“电子密本”方式。

五 密码分组链接(CBC)方式

用于CBC加密方式的变量为:

a.n个明文分组p1,p2, …pn组成的序列,每个分组都是64bit;

b.密钥K;

c.64bit启动变量SV;

d.n个密文分组C1,C2,…C n组成的结果序列,每个分组都是64bit。

注:本标准没有描述生成SV的方法。

CBC加密方式描述如下。

加密第一个明文分组:

C1=eK(P1? SV) ………………………(1)

接着:

Ci=eK(Pi? C i-1)i=2,3, …,n ………………………(2)

这一过程如图1的上半部分所示。启动变量SV用于产生第一个密文输出分组。

随后,将密文分组与下一个明文分组进行模2加后再加密。 CBC解密方式描述如下。

解密第一个密文分组。

P1=dK(C1)? SV ………………………(3)

接着:

Pi=dK(Ci)? C i-1 i=2,3, …,n ………………………(4)

这一过程如图1的下半部分所示。

 

图1密码分组链接(CBC)工作方式

六 密文反馈(CFB)方式

6.1两个参数定义一种CFB工作方式:

a.反馈变量的大小k,1≤k≤64;

b.明文变量的大小j,1≤j≤k。

用于CFB工作方式的变量为:

c.输入变量:

n个明文变量p1,p2, …,pn组成的序列,每个变量都是j比特。
密钥K;
64bit的启动变量SV。
d.中间结果:

n个算法输入变量X1,X2,…,X n组成的序列,每个变量都是64bit;
n个算法输出变量Y1,Y2,…,Y n组成的序列,每个变量都是64bit;
n个变量E1,E2,…,E n组成的序列,每个变量都是j比特;
n个反馈变量F1,F2,…F n组成的序列,每个变量都是k比特。
c.输出变量,即n个密文变量C1,C2,…,C n组成的序列,每个变量都是j比特。

注:本标准没有描述生成SV的方法。

变量X的初始值置为:

X1=SV ………………………(5)

6.2对每个明文分组的加密运算采用下列五个步骤:

a.使用加密算法:

Yi=eK(X i) ………………………(6)

b.选取最左边j比特:

Ei=Yi~j ………………………(7)

c.产生密文分组:

Ci=Pi? Ei ………………………(8)

d.产生反馈分组:

Fi=Sj(I(K)∣Ci) ………………………(9)

e.对X移位:

X i+1=Sk(X i∣Fi) ………………………(10)

对i为1、2、…、n,重复上述步骤,但最后一轮时,作完(8)式就结束。这一过程如图2的
左半部分所示。加密算法输出Y的最左边j比特用来和j比特明文分组按模2加进行加密,Y的
其余比特舍弃不用。明文和密文分组中比特从1至j编号。

在密文公组最左边添加k-j个“1”,将其扩展成一个k比特阵列F,然后将X阵列中的比特左
移k位并将阵列F插到它的最右边k位,以产生新的X。在此移位操作中,舍弃X的最左边k个比
特。阵列X的初始值就是启动变量(SV)。

6.3用于解密的变量和加密所用的相同,变量X的初始值X1置为SV。


图2 密文反馈(CFB)工作方式

对每个密文分组的解密运算采用下列五个步骤:

a.使用加密算法:

Yi=eK(X i) ………………………(11)

b.选取最左边j比特:

Ei=Yi~j ………………………(12)

c.产生明文分组:

Pi=Ci? Ei ………………………(13)

d.产生反馈分组:

Fi=Sj(I(K)∣Ci) ………………………(14)

e.对X移位:

X i+1=Sk(X i∣Fi) ………………………(15)

对i为1、2、…、n,重复上述步骤,但最后一轮时,作完(13)式就结束。这一过程如图2
右半部分所示。加密算法输出Y的最左边j比特用来和j比特的密文分组按模2加进行解密,Y
的其余比特舍弃不用。明文和密文分组中的比特从1至j编号。

在密文分组最左边添加k-j个“1”,将其扩展成一个k比特阵列F,然后将阵列X中的比特左
移k位,并将阵列F插到它的最右边k位,以产生新的X。在此移位操作中,舍弃X的最左边k个
比特。阵列X的初始值就是启动变量(SV)。

6.4建议采用j与k相等的CFB方式。

此时,(9)式和(14)式可写成:

Fi=Ci(j=k时)

七 输出反馈(OFB)方式

7.1一个参数,即明文变量的大小j,定义一种OFB工作方式,这里1≤j≤64。

用于OFB工作方式的变量为:

a.输入变量:

n个明文分组P1,P2,……,P n组成的序列,每个分组都是j 比特;
密钥K;
64bit的启动变量SV。
b.中间结果:

1〕n个算法输入变量X1,X2,…,X n组成的序列,每个变量都是64bit;

2〕n个算法输出变量Y1,Y2,…,Y n组成的序列,每个变量都是64bit;

3〕n个变量E1,E2,…,E n组成的序列,每个变量都是j比特;

c.输出变量,即n个密文分组C1,C2,…,C n组成的序列,每个变量都是j比特。

注:本标准没有描述生成SV的方法。

变量X的初始值置为:

X1=SV ………………………(16)

7.2对每个明文分组的加密运算采用下列四个步骤:

a.使用加密算法:

Yi=eK(X i) ………………………(17)

b.选取最左边j比特:

Ei=Yi~j ………………………(18)

c.产生密文分组:

Ci=Pi? Ei ………………………(19)

d.反馈运算:

Xi+1=Yi ………………………(20)

对i为1、2、…、n,重复上述步骤,但最后一轮时,作完(19)式就结束。这一过程如图3
左半部分所示。加密算法的每次输出Yi被用于反馈,成为X的新值X i+1。Yi的最左边j比特
用来对输入分组加密。

7.3用于解密的变量与加密所用的相同。变量X的初始值X1置为SV。

对每个明文分组的解密运算采用下列四个步骤:

a.使用加密算法:

Yi=eK(X i) ………………………(21)

b.选取最左边j比特:

Ei=Yi~j ………………………(22)

c.产生明文分组:

Pi=Ci? Ei ………………………(23)

d.反馈运算:

Xi+1=Yi ………………………(24)

对i为1、2、…、n,重复上述步骤,但最后一轮,作完(23)式就结束。这一过程如图3右
半部分所示。变量Xi和Yi的值与加密时所用的值相同,只有(23)式与(19)式不同。

 

图3输出反馈(OFB)工作方式

附录A

工作方式的性质

(参考件)

一 电子密本(ECB)工作方式的性质

在计算机之间或人与人之间,传送信息的报文可能有重复,或者是常用序列。在ECB方式
中,对于相同的密钥,相同的明文产生相同的密文,这一特性使ECB方式不适于一般使用,
在今后那些可以接受这种重复特性的应用标准中会规定ECB方式的使用方法。

如果加密和解密之间的分组边界不匹配(例如某种比特错位),则在正确的边界重新确立
前,加密和解密运算一直失步,此时所有的解密结果都是不正确的。

二 密码分组链接(CBC)工作方式的性质

凡是使用同一个密钥和同一个初始化值加密相同的明文,CBC方式便得到相同的密文。计较
该特性的用户,应设计某种方法来改变明文的起点、密钥或启动变量。一种可能是在每份
CBC报文的开头加上一个唯一的标识符(例如一个增1计数器);当加密那些大小不增加的记
录时,可以用的另一种方法是用某个值作为初始化值,这个值可以在不知道该记录的内容的
情况下,就从它计算出来(例如,在随机存取存储器中包含该记录的组号)。 由于CBC方式是逐个分组加密的,它需要对完整的64bit数据分组进行运算,不足64bit的分
组需要特殊处理。

在CBC方式中,单个密文分组内一比特或多个比特的错误将影响两个分组的解密(错误所在
的分组及下一个分组)。如果错误出现在第i个密文分组,则在第i个明文分组中,每个比特
都将有50%的平均错误率,而第i+1个明文分组中,只在直接对应于错误的密文比特的位置
上是错的。

如果加密和解密间的分组边界不匹配(例如某种比特错位),则在正确的边界重新确立之
前,加密与解密运算一直失步,此时所有的解密结果都是不正确的。

三 密文反馈(CFB)工作方式的性质

在CFB方式中。任一j比特密文单元中的错误将影响已出错的那个密文分组的解密以及后面的
密文的解密,直到这些错误比特被移出CFB的输入分组为止。第一个受影响的j比特明文单
元,恰好在密文发生错误的那些位置上被破坏,随后解密的明文都将有50%的平均错误率,
直至所有的错误被移出输入分组。假定在这段时间里没有发生别的错误,接着就可得到正确
的明文。这种特性被称作“有限错误扩散”。

如果在解密过程中,j比特边界不匹配,则密码同步也将失去,这种情况将持续到重新进行
密码初始化或在j比特边界重新匹配后的64bit为止。

在CFB方式中,加密和解密过程两者都使用算法的加密运算。

四 输出反馈(OFB)工作方式的性质

OFB工作方式不会把密文错误在解得的明文输出中扩散,密文中的一比特错误只造成解密后
的明文分组中相应位置上的一比特错误。此工作方式不是自同步的,如果加密和解密运算两
者出现失步,则系统必须重新初始化。这种失步可能是由于j比特分组边界失去匹配(例如
某种比特错位)或者可能是在一端或另一端变量X的值发生错误,从而造成两端的X值不同,
直到进行重新初始化后为止。

每次重新初始化,应当使用和先前同一密钥时用过的SV值不同的新的SV值。

附录B

本标准与国际标准ISO8372的差异

(参考件)

B1国际标准ISO8372的第2章“引用标准”中列举了“ANSIX3.92数据加密算法”,鉴于我国
的有关规定,本标准删去了ANSIX3.92。

B2国际标准ISO8372的第2章只引用了ANSIX3.92,本标准删去该项后不再包含引用标准的内
容,因此将国际标准ISO8372的第3章至第8章改为本标准的第2章至第7章。

 

附加说明:

本标准由中华人民共和国机械电子工业部提出。

本标准由机械电子工业部第三十研究所、第四研究所负责起草。

本标准主要起草人龚奇敏、李桂茹、黄家英、罗韧鸿。
 

0
相关文章