
1.7 GOST加密算法
GOST加密算法是俄罗斯现行的加密标准,在1989年4月22日由1409号决议通过,在1990年7月1日正式实施。
GOST是32层DES型迭代分组密码,分组长度为64比特,密钥长度为256比特。
与DES加密算法相比,GOST加密算法除了增加了迭代层数和密钥长度,还有下列主要差别。
(1)由初始密钥生成层密钥的过程十分简单。将256比特密钥分成8个32比特的字,记为K0, K1, …, K7,则32层的层密钥分别为:
K0~K7, K0~K7, K0~K7, K7~K0
记为SK1~SK32。
(2)层变换的差别是:①GOST加密算法没有输入分组扩展;②GOST加密算法与层密钥进行的是模232加,而DES加密算法进行的是模2加;③GOST加密算法用8个GF(24)→GF(24)的非线性代替;④GOST加密算法用简单的循环移位代替不规则置换。
(3)S盒保密,不同系统可用不同的S盒,从而使密钥为:
256+log2(16! )×8=610比特
GOST加密算法的F函数由三部分组成:
● 与32比特层密钥SKi进行模232加;
● 经8个4比特S盒;
● 循环左移11比特。
输入的明文从低位到高位排列构成(X0, X1), X0和X1各32比特,迭代计算为:
Xi+1=F(Xi)⊕Xi-1, i=1, …,32
经过32层迭代可得(X33, X32),自低位到高位的输出就是密文。
GOST加密算法有以下4种工作方式:
(1)简单代替方式,即电子密本(ECB)方式。
(2)乱数加密方式,即64比特的输出反馈方式OFB(64),以64比特同步信号作为初始向量。
(3)反馈乱数加密方式,即64比特的密文反馈方式CFB(64)。
(4)验证方式,即按初始向量为0的密文分组连接方式进行计算,在最后一组输出中选L比特(L≤64)作为消息验证码。
GOST加密算法框图如图1.7.1所示。

图1.7.1 GOST加密算法框图