密码算法应用实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 NewDES加密算法

NewDES加密算法是Robert Scott于1985年设计的,其目的是成为DES加密算法的替代算法。NewDES加密算法是基于64比特的明文分组进行运算的,密钥长度为120比特。在设计上,所有的运算都针对完整的字节,而不像DES加密算法那样要进行大量特定比特的读写或置换操作,这使得NewDES加密算法的软件实现更为简单方便。

1.3.1 NewDES加/脱密编制

将64比特的明文分组分成8个单字节长的子分组 B0B1、…、B6B7,这些子分组要运行17轮,每一轮有8步。在每一步中,其中一个子分组与某个密钥进行模2加,然后用非线性函数f输出代替字节,接着与另一个子分组进行模2加并生成这个子分组。120比特的密钥分成15个密钥子分组K0K1、…、K13K14。NewDES加密算法如图1.3.1所示。

图1.3.1 NewDES加密算法

NewDES加/脱密算法的C语言表述如下:

char B0, B1, B2, B3, B4, B5, B6, B7;
char Key[15];
int initi, delta, fini;

当加密时,初始设置为:

initi=0;
delta=1;
fini=0;

当脱密时,初始设置为:

initi=11;
delta=9;
fini=12;

相关代码如下:

NewDES()
{   int  i;
    i=initi;
    while(1)
    {   B4=B4^f[B0^Key[i++]];
        if(i==15)
            i=0;
        B5=B5^f[B1^Key[i++]];
        if(i==15)
            i=0;
        B6=B4^f[B2^Key[i++]];
        if(i==15)
            i=0;
        B7=B7^f[B3^Key[i]];
        i=i+delta;
        if(i>14)
            i=i-15;
        if(i==fini)
            return;
        B1=B1^f[B4^Key[i++]];
        B2=B2^f[B4^B5];
        B3=B3^f[B6^Key[i++]];
        B4=B0^f[B7^Key[i]];
        i=i+delta;
        if(i>14)
            i=i-15;
    }
}

1.3.2 非线性函数f的选取

NewDES加/脱密编制中的非线性函数f实际上是一个字节到字节的伪随机置换,其输入和输出都是0~255之间的一个数。

Robert Scott在设计此函数时以著名的美国“独立宣言”为输入文本,通过执行如下过程:

for(i=0; i<256; i++)
f[i]=i;
i=0; j=0;
while( (c=getchar())!=EOF )
{
    if(c>′Z′)
    c=c-32;
    if(c>=′A′&& c<=′Z′)
    {
        i=(i+1) & 255;
        j=(j+c) & 255;
        k=f[i];
        f[i]=f[j];
        f[j]=k;
    }
}

得到的置换表为

f[0……255]=
  23  137  239  188  102  125  221  72 212  68  81  37  86   237  147  149
  70  229  17  124  115  207   33  20 122  143  25  215  51  183  138  142
146  211  110  173   1  228  189  14 103  78  162  36  253  167  116  255
158   45  185  50  98  168  250  235  54  141  195  247  240   63  148   2
224  169  214  180  62   22  117  108  19  172  161  159  160   47  43  171
194  175  178   56 196  112   23  220  89  21  164  130  157    8  85  251
216   44  94  179 226  38   90  119  40  202  34  206  35    69  231  246
  29  109  74   71 176   6    60  145  65  13  77  151  12  127  95  199
  57  101   5  232 150  210  129  24 181  10  121  187  48  193  139  252
219   64  88  233  96  128   80  53 191  144 218   11 106  132  155  104
  91  136  31   42  243  66  126  135  30  26  87  186  182  154  242  123
  82  166 208   39  152 190  113  205 114  105 225  84  73   163  99  111
204   61 200  217  170  15  198  28 192  254 134 234  222    7  236  248
201   41 177  156  92  131   67  249 245  184 203   9  241    0  27  46
133  174  75   18  93  209  100  120  76  213  16  83   4   107  140  52
  58  55   3  244  97  197  238  227 118  49  79  230  223  165  153  59