中华人民共和国国家标准信息技术安全技术位块密码算法的操作方式发布实施国家质量技术监督局发布前言本标准等同采用国际标准信息技术安全技术位块密码算法的操作方式本标准描述位块密码算法的四种操作方式即电子密本方式密码块链接方式密码反馈方式和输出反馈方式本标准在技术内容上与国际标准保持一致本标准的附录附录附录和附录均是提示的附录本标准由中华人民共和国信息产业部提出本标准由中国电子技术标准化研究所归口本标准起草单位中国电子技术标准化研究所本标准主要起草人罗韧鸿向维良前言国际标准化组织和国际电工委员会是世界性的标准化专门机构国家成员体它们都是或的成员国通过国际组织建立的各个技术委员会参与制定针对特定技术范围的标准和的各技术委员会在共同感兴趣的领域内进行合作与和有联系和其他官方和非官方国际组织也可参与标准的制定工作对于信息技术领域和建立了一个联合技术委员会即由联合技术委员会提出的标准草案需分发给国家成员体进行表决发布一项标准至少需要的参与表决的国家成员体投票赞成国际标准是信息技术联合技术委员会的安全技术分委员会制定的该第版替代第版附录至附录均为提示的附录中华人民共和国国家标准信息技术安全技术位块密码算法的操作方式国家质量技术监督局批准实施范围本标准描述位块密码算法的四种操作方式注附录包含了对每一种操作方式的性质的说明本标准确定了四种规定的操作方式以便在位块密码的应用中例如数据传输的保护数据存储鉴别本标准将对诸如操作方式规范和适用的参数值提供一个有用的参照定义下列定义适用于本标准块链接一种信息加密方法每一密文块在密码上依赖于前一个密文块密文经过变换信息内容被隐藏起来的数据密码同步加密与解密过程的协调一致解密一个相应加密过程的逆加密为了产生密文即隐藏数据由密码算法对数据进行的可逆变换反馈缓存用于为加密过程存储输入数据的变量在启动点的值为初始化值用于定义一个加密过程的启动点的值密钥控制密码变换操作例如加密解密的符号序列位块密码明文块和密文块的长度均为位的块密码明文未加密的信息启动变量确定操作方式的启动点的变量注本标准未规定从初始化值导出启动变量的方法这种方法需在操作方式的应用中描述记法加密本标准中由块密码规定的函数关系记作其中是明文块是密文块是密钥是使用密钥的加密运算解密对应的解密函数记作是使用密钥的解密运算位阵列由一个大写字母表示的变量如上面的和它表示一个一维的位阵列例如和便是两个位阵列其位从到编号所有位阵列的记法都是以下标为的位处于最左边模加模加操作也称作异或运算用符号表示应用到阵列和的运算定义为位的选择选择的最左边个位以产生一个位阵列的操作记作仅当是中的位数时此操作才有定义移位运算移位函数定义如下已知位变量和位变量其中移位函数的作用是产生以下的位变量其作用是将阵列的各位左移个位置舍弃并将阵列放置在阵列的最右边的个位置上当时其作用是用完全取代此函数的一个特例是以全为的位变量开始并将位变量移到其中结果为其中最左边的位均为要求对于某些所描述的方式来说可能需要对明文变量进行填充填充技术不属于本标准的范围对于密码反馈操作方式见第章定义了三个参数和对于输出反馈操作方式见第章定义了一个参数当使用这些操作方式中的某一种时所有通信方都要选择并使用同样的参数值电子密本方式用于加密方式的变量是个明文块所组成的序列每个块都为位密钥个密文块所组成的结果序列每个块都为位加密方式描述如下解密方式描述如下密码块链接方式用于加密方式的变量是个明文块所组成的序列每个块都为位密钥位启动变量个密文块所组成的序列每个块都为位加密方式描述如下对第个明文块进行加密随后此过程如图的上半部分所示启动变量用于产生第个密文输出之后在加密之前这个密文与下一个明文进行模加图密码块链接操作方式解密方式描述如下对第个密文块进行解密随后此过程如图的下半部分所示密码反馈方式下列三个参数定义了操作方式反馈缓存的大小反馈变量的大小明文变量的大小注可小于图示出了的特殊情形如果则此方式与本标准上一版本中所描述的方式兼容用于操作方式的变量是输入变量个明文变量所组成的序列每个块都为位密钥位启动变量中间结果个块密码输入块所组成的序列每个块都为位个块密码输出块所组成的序列每个块都为位个变量所组成的序列每个块都为位个反馈变量所组成的序列每个块都为位个反馈缓存内容所组成的序列每个块都为位输出变量个密文变量所组成的序列每个块都为位反馈缓存的初始值置为对每个明文变量进行加密的操作采用以下六个步骤使用块密码选择最左边位产生密文变量产生反馈变量在上进行移位函数操作对重复上述步骤最后一个循环结束于式此过程如图的左半部分所示块密码的输出块的最左边位用来通过模加来加密位明文变量的其他位被舍弃明文和密文变量的各位从到编号通过把个位放到明文变量的最左边位置上将明文变量扩展成位反馈变量然后将反馈缓存的各位左移个位置并将插到最右边的个位置上就产生了新的反馈缓存值在此移位操作中的最左边位被舍弃最左边的新的位用作加密过程的下一个输入图密码反馈操作方式用于解密的变量与用于加密的变量是相同的反馈缓存被置成初始值对每个密文变量进行解密的操作采用以下六个步骤使用块密码选择最左边位产生明文变量产生反馈变量在上进行移位功能操作对重复上述步骤最后一个循环结束于式此过程如图的右半部分所示块密码的输出块的最左边位用来通过模加来解密位密文变量的其他位被舍弃明文和密文变量的各位从到编号通过把个位放到密文变量的最左边位置上将密文变量扩展成位反馈变量然后将反馈缓存的各位左移个位置并将放到最右边的个位置上就产生了新的值在此移位操作中的最左边位被舍弃最左边的新的位用作加密过程的下一个输入建议使用和的值相等的方式按照这种建议形式等式和可以写成当输出反馈方式操作方式由一个参数来定义该参数为明文变量的大小用于操作方式的变量是输入变量个明文变量所组成的序列每个块都为位密钥位启动变量中间结果个块密码输入块所组成的序列每个块都为位个块密码输出块所组成的序列每个块都为位个变量所组成的序列每个块都为位输出变量个密文变量所组成的序列每个块都为位输入块置成初始值对每个明文变量进行加密的操作采用以下四个步骤使用块密码选择最左边位产生密文变量反馈操作对重复上述步骤最后一个循环结束于式此过程如图的左半部分所示每次使用块密码所产生的结果被用来反馈并成为的下一个值即的最左边位用来加密输入变量图输出反馈操作方式用于解密的变量与用于加密的变量是相同的反馈缓存被置成初值对每个密文变量进行解密的操作采用以下四个步骤使用块密码选择最左边位产生明文变量反馈操作对重复上述步骤最后一个循环结束于式此过程如图的右半部分所示值和与加密过程中相应的值是相同的仅有式是不同的附录标准的附录操作方式的性质电子密本操作方式的性质环境在各计算机之间或人与人之间所交换的二进制数据可能会有重复或是共同使用的序列在方式中相同的明文块对于相同的密钥产生相同的密文块性质方式的性质有对某一块的加密或解密可独立于其他块进行对密文块的重排将导致明文块的相应重排相同的明文块对于相同的密钥总是产生相同的密文块这使得它容易遭受一种字典攻击这种字典是由对应的明文和密文块构成的对于超过一个块的消息一般建议不使用方式对于可接受重复性或必须单独访问各个块的那些特殊使用情况的用法可以在未来的标准中规定填充要求只有位的倍数才能被加密或解密其他长度需要被填充至位边界差错扩散在方式中在一个密文块中的一个或多个位差错只会影响对发生差错的那一块的解密对于有一个或多个错误位的密文块的解密将导致对应的明文块中每个明文位出错的概率为块边界如果加密和解密之间的块边界丢失了例如由于一个位滑动则在重新建立正确的块边界之前加密与解密操作之间将失去同步如果块边界丢失则所有解密操作的结果都是不正确的密码块链接操作方式的性质环境只要使用同样的密钥和启动变量对相同的明文进行加密方式应将产生相同的密文关心这种性质的用户需要采用某种办法来改变明文的开始密钥或启动变量一种可能的办法是将一个唯一的标识符例如一个递增计数器加到每个消息的开始处在对大小不能增加的记录进行加密时可采用另一种办法它使用诸如启动变量的某个值这个值能从记录中计算出来且不用知道其内容例如它的按随机访问存储方式的地址性质的性质有链接操作使得密文块依赖于当前的和所有以前的明文块因此对密文块的重新安排不会导致对相应的明文块的重新安排使用不同的值从而防止同一明文加密成同一密文填充要求只有位的倍数才能被加密或解密其他长度需填充至位边界如果这是不可接受的可以按一种特殊的方式来处置最后一个变量下面给出两个特殊处理的例子第一种处理一个不完整的最后变量即一个位的变量其中应大于的可能的办法是按下面的描述的方式对它进行加密加密解密但是如果不是秘密的或者与同一个密钥一起被多次使用见那么最后的变量容易受到选择明文攻击第二种办法称作密文窃取假设最后两个明文变量为和是一个位块是一个位的变量应大于加密设为使用所描述的方法由导出的密文块令因此最后两个密文变量是和解密首先需对进行解密从而产生变量和的右边位进而得到完整的块并且使用所描述的方法能导出两个紧随着的变量是按逆序进行解密的这使得这种方法不太适合于硬件实现差错扩散在方式中在一个密文块中的一个或多个位差错将会影响对两个块即发生差错的块和随后的块的解密第个密文块中的一个差错对于所产生的明文有以下影响第个明文块每位出错的概率为第个明文块的差错模式与第个密文块的相同如果在一个不到位的变量中出现差错差错扩散取决于所选择的特殊处理方法在第一个例子中被解密的较短的块中与明文中出错的位直接对应的那些位也会出错块边界如果加密和解密之间的块边界丢失了例如由于一个位滑动则在重新建立正确的块边界之前加密与解密操作之间将失去同步如果块边界丢失所有解密操作的结果都是不正确的密码反馈操作方式的性质环境只要使用同样的密钥和启动变量对相同的明文进行加密方式应将产生相同的密文关心这种特性的用户需要采用某种办法来改变明文的开始密钥或启动变量一种可能的办法是将一个唯一的标识符例如一个递增计数器加到每个消息的开始处在对大小不能增加的记录进行加密时可采用另一种办法它使用诸如启动变量的某个值这个值能从记录中计算出来且不用知道其内容例如它的按随机访问存储方式的地址性质的性质有链接操作使得密文变量依赖于当前的和除一确定数目以外的所有以前的明文变量该数目取决于和的选择见图因此对位密文变量的重新安排不会导致对相应的位明文变量的重新安排使用不同的值从而防止同一明文加密成同一密文方式的加密和解密过程都使用块密码的加密操作方式的强度依赖于的大小时最大以及和的相对大小注将导致输入块的值重复出现的概率增加这种重复出现将会泄露明文位之间的线性关系选择一个较小的值对于每个明文单位将要求更多次的块密码操作因而引起更大的处理开销选择使得能对块密码进行流水线式连续操作填充要求只有位的倍数才能被加密或解密其他长度需填充至位边界但是经常对的大小的选择是要使得其无需进行填充例如对于明文的最后部分能被修改差错扩散方式中任一位密文单位的差错都将影响对随后密文的解密直到出错的位移出反馈缓存为止第个密文变量中的差错对产生的明文有下列影响第个明文变量与第个密文变量有相同的差错模式在所有不正确接收的位被移出反馈缓存之前随后的明文变量的每一位出错的概率为同步如果加密和解密之间的块边界丢失了例如由于一个位滑动则在位边界重新建立的位之后密码同步将被重新建立如果丢失位的倍数则在位之后将自动重新建立同步输出反馈操作方式的性质环境只要使用同样的密钥和启动变量对相同的明文进行加密方式应将产生相同的密文此外当使用相同的密钥和时方式中将会产生相同的密钥流因此为了保密起见对于一个给定的密钥一个特定的只应使用一次性质的性质有没有链接操作会使得更容易受到主动的攻击使用不同的值通过产生不同的密钥流从而防止同一明文加密成同一密文方式的加密和解密过程都使用块密码的加密操作方式不依赖明文来产生用于对明文进行模加的密钥流选择一个较小的值对于每个明文单位将要求更多次的块密码操作因而引起更大的处理开销填充要求只有位的倍数才能被加密或解密其他长度需填充至位边界但是经常对的大小的选择是要使得无需进行填充例如对于明文的最后部分能被修改差错扩