- 密碼算法應用實踐
- 文仲慧等
- 809字
- 2020-04-03 12:46:58
1.3 NewDES加密算法
NewDES加密算法是Robert Scott于1985年設計的,其目的是成為DES加密算法的替代算法。NewDES加密算法是基于64比特的明文分組進行運算的,密鑰長度為120比特。在設計上,所有的運算都針對完整的字節,而不像DES加密算法那樣要進行大量特定比特的讀寫或置換操作,這使得NewDES加密算法的軟件實現更為簡單方便。
1.3.1 NewDES加/脫密編制
將64比特的明文分組分成8個單字節長的子分組 B0、B1、…、B6、B7,這些子分組要運行17輪,每一輪有8步。在每一步中,其中一個子分組與某個密鑰進行模2加,然后用非線性函數f輸出代替字節,接著與另一個子分組進行模2加并生成這個子分組。120比特的密鑰分成15個密鑰子分組K0、K1、…、K13、K14。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