Скачиваний:
21
Добавлен:
26.05.2014
Размер:
284.26 Кб
Скачать

4.3.15 Проверка случайных отклонений (Random-Excursion).

Внимание этого теста сосредоточено на числе циклов, имеющих точно K посещений в совокупной сумме случайного хождения. Совокупная сумма случайного хождения получена из частичных сумм после замены 0 и 1 в исходной последовательности на −1 и +1. Цикл случайного хождения состоит из последовательности шагов длины единицы, которая начинается и заканчивается в одном и том же состоянии. Цель этого теста состоит в том, чтобы определить, отклоняется ли число посещений отдельного состояния в пределах цикла, от того, которого можно было бы ожидать для случайной последовательности.

4.3.16Проверка случайных отклонений (вариант) (Random-Excursion-V).

Внимание этого теста сосредоточено на общем количестве посещений отдельных состояния в совокупной сумме случайного хождения. Цель этого теста состоит в том, чтобы обнаружить отклонения от ожидаемого числа посещений различных состояний в случайном хождении. Данный тест является расширением предыдущего.

4.4Результат тестирования генератора.

Ниже приведено содержимое файла результата тестирования генератора.

--------------------------------------------------------------------------------

C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 P-VALUE PROPORTION STATISTICAL TEST

--------------------------------------------------------------------------------

103

87

84

98

100

102

117

103

113

93

0.385543

0.9920

Frequency

101

95

89

115

93

95

107

102

109

94

0.723804

0.9900

Block-Frequency

91

99

91

94

96

104

105

95

116

109

0.721777

0.9910

Cusum

102

90

78

102

102

94

99

120

114

99

0.196920

0.9900

Cusum

82

99

91

86

112

122

106

112

95

95

0.102526

0.9930

Runs

94

101

97

101

101

92

100

104

108

102

0.992084

0.9980

Long-Run

85

103

116

116

112

83

84

108

107

86

0.042255

0.9960

Rank

97

124

101

116

102

104

94

88

80

94

0.097159

0.9970

FFT

98

107

103

92

94

82

98

106

101

119

0.448424

0.9870

Aperiodic-Template

95

89

108

94

106

100

96

104

84

124

0.245490

0.9890

Aperiodic-Template

110

84

94

96

102

104

93

84

120

113

0.161703

0.9890

Aperiodic-Template

112

80

99

92

110

108

94

97

101

107

0.467322

0.9880

Aperiodic-Template

93

125

93

106

107

104

82

105

84

101

0.112047

0.9920

Aperiodic-Template

101

104

106

100

102

103

78

92

108

106

0.622546

0.9870

Aperiodic-Template

102

95

113

106

85

102

99

110

100

88

0.628790

0.9880

Aperiodic-Template

112

91

98

97

85

99

111

99

98

110

0.647530

0.9860

Aperiodic-Template

108

108

102

89

119

97

80

91

104

102

0.259616

0.9850

Aperiodic-Template

119

114

85

96

86

123

89

103

94

91

0.038818

0.9880

Aperiodic-Template

91

96

93

105

113

125

92

93

90

102

0.223648

0.9880

Aperiodic-Template

106

92

92

94

110

93

119

102

100

92

0.556460

0.9920

Aperiodic-Template

125

80

86

107

102

87

107

110

96

100

0.065230

0.9860

Aperiodic-Template

90

80

104

110

124

104

102

82

104

100

0.077607

0.9880

Aperiodic-Template

118

94

103

90

122

107

89

92

101

84

0.107512

0.9840

Aperiodic-Template

107

103

86

98

106

110

98

98

114

80

0.352107

0.9890

Aperiodic-Template

89

113

98

100

108

106

87

95

107

97

0.693142

0.9950

Aperiodic-Template

102

99

91

95

111

99

94

102

104

103

0.965083

0.9910

Aperiodic-Template

102

117

89

112

94

102

95

91

102

96

0.612147

0.9870

Aperiodic-Template

83

117

87

93

124

97

100

87

112

100

0.049664

0.9910

Aperiodic-Template

100

97

116

94

93

98

90

104

113

95

0.674543

0.9880

Aperiodic-Template

110

114

101

112

96

86

96

109

91

85

0.307077

0.9850

Aperiodic-Template

96

97

91

98

108

106

91

95

111

107

0.846338

0.9940

Aperiodic-Template

104

105

106

92

104

89

96

92

109

103

0.877083

0.9890

Aperiodic-Template

107

121

98

84

98

104

89

96

96

107

0.373625

0.9940

Aperiodic-Template

98

110

102

81

121

99

122

92

89

86

0.038062

0.9920

Aperiodic-Template

101

101

115

102

101

97

97

96

106

84

0.781106

0.9930

Aperiodic-Template

30

115

111

98

74

108

88

100

112

98

96

0.123038

0.9940

Aperiodic-Template

96

94

105

112

109

88

97

88

111

100

0.616305

0.9930

Aperiodic-Template

92

120

107

102

77

99

116

86

103

98

0.087692

0.9890

Aperiodic-Template

104

92

106

98

89

92

117

104

85

113

0.347257

0.9900

Aperiodic-Template

86

107

112

88

93

88

101

111

94

120

0.169981

0.9880

Aperiodic-Template

104

99

90

114

102

93

108

113

79

98

0.316052

0.9880

Aperiodic-Template

107

104

110

89

95

98

95

104

99

99

0.936823

0.9850

Aperiodic-Template

98

113

105

105

96

85

102

116

91

89

0.413628

0.9900

Aperiodic-Template

83

95

100

116

88

115

94

116

102

91

0.155499

0.9930

Aperiodic-Template

97

101

101

102

116

86

102

102

98

95

0.830808

0.9930

Aperiodic-Template

109

93

101

103

113

96

103

87

115

80

0.257004

0.9880

Aperiodic-Template

88

114

93

117

104

89

99

95

110

91

0.332970

0.9920

Aperiodic-Template

97

129

99

78

93

96

115

101

108

84

0.021554

0.9870

Aperiodic-Template

92

103

97

93

114

114

100

95

90

102

0.686955

0.9950

Aperiodic-Template

104

105

89

102

85

110

93

87

117

108

0.302657

0.9930

Aperiodic-Template

96

87

122

97

99

90

123

101

89

96

0.106877

0.9860

Aperiodic-Template

96

109

105

102

102

101

83

106

105

91

0.777265

0.9880

Aperiodic-Template

113

96

119

78

115

102

103

93

81

100

0.052275

0.9930

Aperiodic-Template

89

98

112

90

97

105

90

111

106

102

0.674543

0.9900

Aperiodic-Template

101

102

96

96

100

93

107

96

87

122

0.530120

0.9920

Aperiodic-Template

102

97

100

96

86

102

113

96

111

97

0.794391

0.9900

Aperiodic-Template

101

104

102

101

95

94

102

113

96

92

0.948298

0.9910

Aperiodic-Template

103

102

91

91

105

94

100

116

102

96

0.823725

0.9870

Aperiodic-Template

100

105

86

102

103

103

101

85

91

124

0.258307

0.9880

Aperiodic-Template

88

86

93

96

111

105

103

97

124

97

0.240501

0.9830

Aperiodic-Template

81

112

98

96

113

87

95

118

94

106

0.169981

0.9900

Aperiodic-Template

104

98

96

104

108

103

100

86

113

88

0.705466

0.9920

Aperiodic-Template

82

93

101

103

104

122

91

85

107

112

0.128874

0.9900

Aperiodic-Template

105

106

97

85

98

98

91

116

118

86

0.236810

0.9870

Aperiodic-Template

108

108

94

104

114

86

90

88

102

106

0.478839

0.9900

Aperiodic-Template

106

89

100

107

102

105

93

101

111

86

0.737915

0.9890

Aperiodic-Template

114

92

105

107

98

91

103

96

94

100

0.851383

0.9900

Aperiodic-Template

88

75

91

115

108

90

110

124

91

108

0.014550

0.9920

Aperiodic-Template

123

97

77

89

95

104

91

109

112

103

0.079538

0.9900

Aperiodic-Template

91

100

99

104

89

108

109

92

107

101

0.853049

0.9910

Aperiodic-Template

99

104

105

123

100

84

102

104

91

88

0.295391

0.9930

Aperiodic-Template

90

108

94

102

96

106

96

102

118

88

0.591409

0.9870

Aperiodic-Template

103

93

100

103

89

98

92

112

105

105

0.875539

0.9930

Aperiodic-Template

102

108

95

89

104

84

106

96

115

101

0.570792

0.9880

Aperiodic-Template

103

106

76

98

122

98

110

94

102

91

0.147815

0.9920

Aperiodic-Template

105

105

109

82

89

97

119

89

98

107

0.262249

0.9940

Aperiodic-Template

108

120

89

83

99

113

93

106

87

102

0.161703

0.9880

Aperiodic-Template

102

94

105

104

102

104

116

97

101

75

0.357000

0.9880

Aperiodic-Template

83

98

104

91

111

109

99

83

100

122

0.134944

0.9960

Aperiodic-Template

91

90

113

96

107

96

88

110

109

100

0.579021

0.9890

Aperiodic-Template

104

75

114

103

102

107

96

103

99

97

0.406499

0.9860

Aperiodic-Template

100

79

122

118

88

91

103

104

101

94

0.081510

0.9930

Aperiodic-Template

97

108

103

94

92

82

99

106

100

119

0.433590

0.9870

Aperiodic-Template

100

102

94

100

113

111

94

99

98

89

0.841226

0.9940

Aperiodic-Template

103

106

88

108

87

99

114

98

96

101

0.699313

0.9900

Aperiodic-Template

105

92

109

89

92

100

107

98

104

104

0.883171

0.9840

Aperiodic-Template

89

77

104

111

99

102

98

95

117

108

0.228367

0.9920

Aperiodic-Template

82

89

112

96

104

128

100

104

94

91

0.081013

0.9910

Aperiodic-Template

120

87

79

101

115

96

103

108

93

98

0.130369

0.9870

Aperiodic-Template

89

100

109

99

101

104

106

97

99

96

0.971006

0.9900

Aperiodic-Template

91

113

93

100

120

109

88

92

92

102

0.307077

0.9920

Aperiodic-Template

100

95

118

88

92

101

96

101

104

105

0.723804

0.9840

Aperiodic-Template

90

105

94

109

98

93

107

108

87

109

0.680755

0.9890

Aperiodic-Template

105

121

86

95

114

97

95

96

94

97

0.368587

0.9830

Aperiodic-Template

106

107

105

88

85

108

100

108

89

104

0.591409

0.9920

Aperiodic-Template

94

113

83

105

118

86

107

105

98

91

0.214439

0.9900

Aperiodic-Template

101

95

90

92

105

95

96

115

109

102

0.773405

0.9930

Aperiodic-Template

85

90

102

107

111

115

90

88

111

101

0.282626

0.9930

Aperiodic-Template

102

89

96

104

111

110

103

105

87

93

0.709558

0.9930

Aperiodic-Template

103

96

89

112

93

104

101

106

95

101

0.899171

0.9880

Aperiodic-Template

115

106

96

106

85

90

102

92

101

107

0.579021

0.9880

Aperiodic-Template

92

100

89

93

108

110

94

93

120

101

0.452173

0.9920

Aperiodic-Template

95

95

107

90

109

93

114

104

94

99

0.761719

0.9900

Aperiodic-Template

96

102

104

97

86

102

86

114

107

106

0.614226

0.9920

Aperiodic-Template

101

93

90

101

114

106

95

102

99

99

0.901959

0.9940

Aperiodic-Template

98

100

97

110

121

109

98

87

97

83

0.271619

0.9940

Aperiodic-Template

98

93

101

93

102

105

112

97

101

98

0.968128

0.9890

Aperiodic-Template

108

95

98

96

108

100

98

105

108

84

0.814724

0.9870

Aperiodic-Template

101

102

108

94

111

91

110

97

96

90

0.805569

0.9870

Aperiodic-Template

31

98

109

104

113

92

94

103

104

95

88

0.775337

0.9950

Aperiodic-Template

102

107

105

90

76

107

107

91

105

110

0.305599

0.9860

Aperiodic-Template

90

78

102

109

105

93

98

117

101

107

0.285427

0.9900

Aperiodic-Template

88

97

108

95

104

107

95

100

99

107

0.922855

0.9900

Aperiodic-Template

98

121

91

108

98

92

106

92

87

107

0.370262

0.9940

Aperiodic-Template

95

97

100

91

106

108

96

106

100

101

0.975644

0.9910

Aperiodic-Template

93

102

111

112

106

105

85

89

90

107

0.461612

0.9880

Aperiodic-Template

96

85

100

106

99

101

107

95

111

100

0.856359

0.9920

Aperiodic-Template

112

97

107

94

86

91

116

107

90

100

0.419021

0.9920

Aperiodic-Template

90

105

103

109

103

122

99

89

82

98

0.238035

0.9900

Aperiodic-Template

117

102

92

98

96

98

112

109

91

85

0.426272

0.9850

Aperiodic-Template

87

108

98

94

107

100

104

102

103

97

0.935716

0.9940

Aperiodic-Template

106

112

95

118

87

86

84

100

104

108

0.196920

0.9860

Aperiodic-Template

116

95

95

98

107

81

97

113

101

97

0.429923

0.9900

Aperiodic-Template

105

106

98

87

116

98

100

105

97

88

0.666245

0.9880

Aperiodic-Template

110

81

87

111

106

93

101

94

100

117

0.235589

0.9850

Aperiodic-Template

97

88

115

116

91

106

99

103

91

94

0.457825

0.9880

Aperiodic-Template

91

107

90

99

81

95

110

96

109

122

0.163513

0.9930

Aperiodic-Template

90

94

98

88

109

100

95

101

117

108

0.591409

0.9940

Aperiodic-Template

102

104

104

107

113

97

95

90

88

100

0.805569

0.9920

Aperiodic-Template

83

106

112

111

96

93

105

106

87

101

0.450297

0.9930

Aperiodic-Template

84

105

98

105

94

98

119

121

104

72

0.021117

0.9880

Aperiodic-Template

97

103

94

105

93

107

89

86

94

132

0.077131

0.9870

Aperiodic-Template

84

100

92

89

106

119

87

116

111

96

0.122325

0.9880

Aperiodic-Template

82

102

108

95

106

110

96

108

102

91

0.618385

0.9910

Aperiodic-Template

85

93

97

108

102

101

108

102

97

107

0.853049

0.9910

Aperiodic-Template

96

96

95

76

119

111

105

93

107

102

0.190654

0.9960

Aperiodic-Template

126

89

107

103

96

85

89

119

95

91

0.051281

0.9820

Aperiodic-Template

85

104

111

97

92

102

95

105

98

111

0.725829

0.9870

Aperiodic-Template

105

94

93

119

92

95

107

84

111

100

0.361938

0.9860

Aperiodic-Template

102

96

96

116

107

94

101

108

103

77

0.366918

0.9890

Aperiodic-Template

114

100

97

97

92

108

93

94

106

99

0.864494

0.9890

Aperiodic-Template

107

120

103

102

94

103

88

95

86

102

0.459717

0.9910

Aperiodic-Template

96

94

92

103

97

113

99

92

112

102

0.820143

0.9900

Aperiodic-Template

107

83

95

96

113

109

103

83

107

104

0.357000

0.9860

Aperiodic-Template

87

114

104

107

97

97

94

95

115

90

0.500279

0.9920

Aperiodic-Template

89

94

101

85

106

102

100

104

108

111

0.715679

0.9880

Aperiodic-Template

95

87

116

114

82

91

119

112

94

90

0.049984

0.9900

Aperiodic-Template

94

89

113

124

96

110

89

91

96

98

0.191687

0.9890

Aperiodic-Template

123

90

104

87

96

88

108

110

96

98

0.238035

0.9860

Aperiodic-Template

115

85

90

89

106

92

107

113

98

105

0.336111

0.9910

Aperiodic-Template

112

111

99

91

105

93

100

94

87

108

0.647530

0.9850

Aperiodic-Template

118

107

109

100

91

86

80

100

97

112

0.169981

0.9880

Aperiodic-Template

107

98

86

88

119

98

99

117

92

96

0.257004

0.9920

Aperiodic-Template

100

100

102

96

101

106

103

104

84

104

0.939005

0.9890

Aperiodic-Template

96

115

92

95

99

105

112

95

90

101

0.713641

0.9880

Aperiodic-Template

100

79

122

118

88

91

102

106

101

93

0.074791

0.9930

Aperiodic-Template

128

91

89

105

105

104

101

89

93

95

0.187581

0.9910

Periodic-Template

105

116

110

90

99

108

82

105

88

97

0.313041

0.9870

Universal

87

92

115

114

105

90

99

83

112

103

0.201189

0.9950

Apen

61

57

47

76

67

56

68

43

64

87

0.003270

0.9904

Random-Excursion

61

48

64

71

68

51

71

61

72

59

0.337586

0.9856

Random-Excursion

60

50

68

67

52

69

48

77

65

70

0.131806

0.9872

Random-Excursion

62

77

58

66

79

61

62

45

59

57

0.121182

0.9856

Random-Excursion

51

72

69

67

73

65

56

64

58

51

0.374496

0.9904

Random-Excursion

72

63

57

60

58

63

53

72

60

68

0.746358

0.9872

Random-Excursion

55

62

69

62

57

52

75

55

69

70

0.443251

0.9952

Random-Excursion

59

72

65

59

63

66

68

53

58

63

0.876785

0.9808

Random-Excursion

68

62

63

63

53

58

72

63

61

63

0.921704

0.9872

Random-Excursion-V

60

68

70

50

56

68

48

73

83

50

0.019791

0.9872

Random-Excursion-V

57

74

55

61

82

56

58

62

57

64

0.256333

0.9888

Random-Excursion-V

60

60

65

72

68

67

59

61

58

56

0.919698

0.9888

Random-Excursion-V

47

70

58

78

72

67

64

60

61

49

0.124639

0.9920

Random-Excursion-V

42

55

76

55

73

76

61

70

54

64

0.030281

0.9936

Random-Excursion-V

36

64

66

60

55

61

63

63

84

74

0.008096

0.9904

Random-Excursion-V

42

55

68

64

70

62

70

62

69

64

0.289209

0.9984

Random-Excursion-V

47

74

63

64

69

55

63

79

60

52

0.123477

0.9920

Random-Excursion-V

69

56

55

61

70

52

65

58

59

81

0.262675

0.9936

Random-Excursion-V

64

57

71

50

68

69

60

77

57

53

0.284657

0.9936

Random-Excursion-V

62

65

63

71

57

66

64

52

67

59

0.886546

0.9952

Random-Excursion-V

63

57

64

68

60

79

69

68

52

46

0.167034

0.9952

Random-Excursion-V

63

64

64

59

69

80

58

66

52

51

0.320066

0.9952

Random-Excursion-V

67

70

62

51

66

71

52

66

63

58

0.627044

0.9904

Random-Excursion-V

69

65

66

52

55

68

70

54

65

62

0.700637

0.9888

Random-Excursion-V

32

65

55

60

74

66

61

51

75

66

53

0.363700

0.9824

Random-Excursion-V

61

58

65

76

59

54

71

61

67

54

0.583544

0.9856

Random-Excursion-V

83

91

124

94

94

105

89

101

114

105

0.127393

0.9880

Serial

83

101

98

105

105

101

100

91

101

115

0.686955

0.9940

Serial

0

0

0

0

0

0

0

0

0

1000 0.000000

* 1.0000

Lempel-Ziv

108

90

92

114

111

106

106

89

99

85

0.380407

0.9870

Linear-Complexity

--------------------------------------------------------------------------------

Большое количество проведенных тестов объясняется тем, что некоторые тесты были пройдены несколько раз, но с разными внутренними параметрами. Например, тест Aperiodic-Template был пройден 148 раз для каждого отличного шаблона длины m = 9.

Существует два варианта оценки прохождения s последовательностями i-го теста.

1.Анализ числа появлений значений P-value.

Множество значений P-value [0; 1] разбивается на 10 категорий с вероятностями, равными 1/10 в каждой категории, после чего подсчи-

тывается νi, i = 1, k, — число последовательностей, значения P-value которых принадлежат i-ой категории (столбцы с 1 по 10).

Вычисляется статистика:

P10 i − s/10)2

χ2 =

i=1

 

,

 

 

s/10

по которой вычисляется значение P-valueT (11 столбец)

P-valueT = 1 − P (x, a), где P (x, a) =

Если для теста верно неравенство P-valueT считать пройденным.

2. Анализ значений P-value.

 

x

 

1

Z0

e−tta−1 dt.

(a)

> 0.0001, то тест можно

Подсчитывается доля последовательностей, прошедших данный тест (то есть доля последовательностей, для которых P-value> α) (12 столбец). Значение этой доли должно лежать в интервале

"1 − α − 3r

 

 

; 1 − α + 3r

 

 

# .

α(1 s

 

s

 

 

− α)

 

 

α(1 − α)

 

В нашем случае интервал равен для всех тестов (кроме Random-Excursion(-V))

[0.980561; 0.999439],

а для теста Random-Excursion(-V) равен

[0.978070; 1].

Откуда видим, что по двум вариантам оценки генератор не прошел только один тест Lempel-Ziv. Все остальные тесты можно считать пройденными.

33

5Вывод.

В данной работе была построена криптосистема на основе Rijndael. Она была довольно сильно ослаблена, что не могло не сказаться на ее криптографической стойкости.

Были освоены и применены два универсальных метода криптоанализа: дифференциальный и линейный. Они выявили слабость нашей криптосистемы. Полученный результат не позволяет использовать ее в качестве реальной системы для шифрования данных. Но, собственно, она и была спроектирована для учебных целей, о чем говорит длина ключа в 32 бит.

Так же был рассмотрен альтернативный режим работы криптосистемы, а именно как генератор псевдослучайных последовательностей. Для оценки качества его работы был изучен и применен один из известных пакетов оценочных тестов — Руководство НИСТ. Данный набор тестов не выявил каких-либо статистических закономерностей. Поэтому можно использовать нашу криптосистему в качестве генератора псевдослучайных последовательностей.

34

Приложение 1

const int Nk = 2; const int Nb = 2; const int Nr = 3;

const unsigned char SB[256] = {

0x99, 0x9b, 0x98, 0x9e, 0x9a, 0x9c, 0x96, 0x94, 0x9d, 0x9f, 0x91, 0x93, 0x95, 0x97, 0x92, 0x90, 0xb9, 0xbb, 0xb8, 0xbe, 0xba, 0xbc, 0xb6, 0xb4, 0xbd, 0xbf, 0xb1, 0xb3, 0xb5, 0xb7, 0xb2, 0xb0, 0x89, 0x8b, 0x88, 0x8e, 0x8a, 0x8c, 0x86, 0x84, 0x8d, 0x8f, 0x81, 0x83, 0x85, 0x87, 0x82, 0x80, 0xe9, 0xeb, 0xe8, 0xee, 0xea, 0xec, 0xe6, 0xe4, 0xed, 0xef, 0xe1, 0xe3, 0xe5, 0xe7, 0xe2, 0xe0, 0xa9, 0xab, 0xa8, 0xae, 0xaa, 0xac, 0xa6, 0xa4, 0xad, 0xaf, 0xa1, 0xa3, 0xa5, 0xa7, 0xa2, 0xa0, 0xc9, 0xcb, 0xc8, 0xce, 0xca, 0xcc, 0xc6, 0xc4, 0xcd, 0xcf, 0xc1, 0xc3, 0xc5, 0xc7, 0xc2, 0xc0, 0x69, 0x6b, 0x68, 0x6e, 0x6a, 0x6c, 0x66, 0x64, 0x6d, 0x6f, 0x61, 0x63, 0x65, 0x67, 0x62, 0x60, 0x49, 0x4b, 0x48, 0x4e, 0x4a, 0x4c, 0x46, 0x44, 0x4d, 0x4f, 0x41, 0x43, 0x45, 0x47, 0x42, 0x40, 0xd9, 0xdb, 0xd8, 0xde, 0xda, 0xdc, 0xd6, 0xd4, 0xdd, 0xdf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd2, 0xd0, 0xf9, 0xfb, 0xf8, 0xfe, 0xfa, 0xfc, 0xf6, 0xf4, 0xfd, 0xff, 0xf1, 0xf3, 0xf5, 0xf7, 0xf2, 0xf0, 0x19, 0x1b, 0x18, 0x1e, 0x1a, 0x1c, 0x16, 0x14, 0x1d, 0x1f, 0x11, 0x13, 0x15, 0x17, 0x12, 0x10, 0x39, 0x3b, 0x38, 0x3e, 0x3a, 0x3c, 0x36, 0x34, 0x3d, 0x3f, 0x31, 0x33, 0x35, 0x37, 0x32, 0x30, 0x59, 0x5b, 0x58, 0x5e, 0x5a, 0x5c, 0x56, 0x54, 0x5d, 0x5f, 0x51, 0x53, 0x55, 0x57, 0x52, 0x50, 0x79, 0x7b, 0x78, 0x7e, 0x7a, 0x7c, 0x76, 0x74, 0x7d, 0x7f, 0x71, 0x73, 0x75, 0x77, 0x72, 0x70, 0x29, 0x2b, 0x28, 0x2e, 0x2a, 0x2c, 0x26, 0x24, 0x2d, 0x2f, 0x21, 0x23, 0x25, 0x27, 0x22, 0x20, 0x09, 0x0b, 0x08, 0x0e, 0x0a, 0x0c, 0x06, 0x04, 0x0d, 0x0f, 0x01, 0x03, 0x05, 0x07, 0x02, 0x00

};

const unsigned char

ISB[256] = {

0xff, 0xfa, 0xfe,

0xfb, 0xf7, 0xfc, 0xf6, 0xfd,

0xf2, 0xf0, 0xf4,

0xf1, 0xf5, 0xf8, 0xf3, 0xf9,

0xaf, 0xaa, 0xae,

0xab, 0xa7, 0xac, 0xa6, 0xad,

0xa2, 0xa0, 0xa4,

0xa1, 0xa5, 0xa8, 0xa3, 0xa9,

0xef, 0xea, 0xee,

0xeb, 0xe7, 0xec, 0xe6, 0xed,

0xe2, 0xe0, 0xe4,

0xe1, 0xe5, 0xe8, 0xe3, 0xe9,

0xbf, 0xba, 0xbe,

0xbb, 0xb7, 0xbc, 0xb6, 0xbd,

0xb2, 0xb0, 0xb4,

0xb1, 0xb5, 0xb8, 0xb3, 0xb9,

0x7f, 0x7a, 0x7e,

0x7b, 0x77, 0x7c, 0x76, 0x7d,

0x72, 0x70, 0x74,

0x71, 0x75, 0x78, 0x73, 0x79,

0xcf, 0xca, 0xce,

0xcb, 0xc7, 0xcc, 0xc6, 0xcd,

0xc2, 0xc0, 0xc4,

0xc1, 0xc5, 0xc8, 0xc3, 0xc9,

35

0x6f, 0x6a, 0x6e, 0x6b, 0x67, 0x6c, 0x66, 0x6d, 0x62, 0x60, 0x64, 0x61, 0x65, 0x68, 0x63, 0x69, 0xdf, 0xda, 0xde, 0xdb, 0xd7, 0xdc, 0xd6, 0xdd, 0xd2, 0xd0, 0xd4, 0xd1, 0xd5, 0xd8, 0xd3, 0xd9, 0x2f, 0x2a, 0x2e, 0x2b, 0x27, 0x2c, 0x26, 0x2d, 0x22, 0x20, 0x24, 0x21, 0x25, 0x28, 0x23, 0x29, 0x0f, 0x0a, 0x0e, 0x0b, 0x07, 0x0c, 0x06, 0x0d, 0x02, 0x00, 0x04, 0x01, 0x05, 0x08, 0x03, 0x09, 0x4f, 0x4a, 0x4e, 0x4b, 0x47, 0x4c, 0x46, 0x4d, 0x42, 0x40, 0x44, 0x41, 0x45, 0x48, 0x43, 0x49, 0x1f, 0x1a, 0x1e, 0x1b, 0x17, 0x1c, 0x16, 0x1d, 0x12, 0x10, 0x14, 0x11, 0x15, 0x18, 0x13, 0x19, 0x5f, 0x5a, 0x5e, 0x5b, 0x57, 0x5c, 0x56, 0x5d, 0x52, 0x50, 0x54, 0x51, 0x55, 0x58, 0x53, 0x59, 0x8f, 0x8a, 0x8e, 0x8b, 0x87, 0x8c, 0x86, 0x8d, 0x82, 0x80, 0x84, 0x81, 0x85, 0x88, 0x83, 0x89, 0x3f, 0x3a, 0x3e, 0x3b, 0x37, 0x3c, 0x36, 0x3d, 0x32, 0x30, 0x34, 0x31, 0x35, 0x38, 0x33, 0x39, 0x9f, 0x9a, 0x9e, 0x9b, 0x97, 0x9c, 0x96, 0x9d, 0x92, 0x90, 0x94, 0x91, 0x95, 0x98, 0x93, 0x99

};

const unsigned short Rcon[11] = { 0x0000,

0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x001b, 0x0036

};

unsigned char xtime(unsigned char x) { int t = x << 1;

if (t & 0x00000100) t ^= 0x0000011b; return ((unsigned char)t);

}

void ShiftRow(unsigned char s[2 * Nb], int r, int n) { while (n--) {

unsigned char t = s[r];

for (int i = 0; i < Nb; i++)

s[2 * i + r] = s[2 * ((i + 1) % Nb) + r]; s[2 * (Nb - 1) + r] = t;

}

}

unsigned short RotWord(unsigned short w) { return ((w << 8) | (w >> 8));

}

unsigned short SubWord(unsigned short w) { unsigned char *t = (unsigned char *)&w; return ((SB[t[1]] << 8) | SB[t[0]]);

}

36

void KeyExpansion(unsigned char Key[2 * Nk], unsigned short W[Nb * (Nr + 1)]) {

for (int i = 0; i < Nk; i++)

W[i] = ((Key[2*i+1] << 8) | Key[2*i]); for (int i = Nk; i < Nb * (Nr + 1); i++) {

unsigned short temp = W[i - 1]; if ((i % Nk) == 0)

temp = SubWord(RotWord(temp)) ^ Rcon[i / Nk]; W[i] = W[i - Nk] ^ temp;

}

}

void SubBytes(unsigned char s[2 * Nb]) { for (int i = 0; i < 2 * Nb; i++)

s[i] = SB[s[i]];

}

void ShiftRows(unsigned char s[2 * Nb]) { ShiftRow(s, 1, 1);

}

void MixColumns(unsigned char s[2 * Nb]) { for (int i = 0; i < Nb; i++) {

unsigned char *cs = &s[2 * i]; unsigned char t[2];

t[0] = xtime(cs[0]) ^ xtime(cs[1]) ^ cs[1]; t[1] = xtime(cs[0]) ^ cs[0] ^ xtime(cs[1]); for (int j = 0; j < 2; j++) cs[j] = t[j];

}

}

void InvSubBytes(unsigned char s[2 * Nb]) { for (int i = 0; i < 2 * Nb; i++)

s[i] = ISB[s[i]];

}

void AddRoundKey(unsigned char s[2 * Nb], unsigned short W[Nb]) {

for (int i = 0; i < Nb; i++) for (int j = 0; j < 2; j++)

s[(i << 1) + j] ^= (W[i] >> (j * 8)) & 0x00FF;

}

void Cipher(unsigned char in[2 * Nb], unsigned char out[2 * Nb], unsigned char Key[2 * Nk]) {

unsigned short W[Nb * (1 + Nr)]; KeyExpansion(Key, W);

for (int i = 0; i < 2 * Nb; i++) out[i] = in[i];

unsigned char *state = out; AddRoundKey(state, &W[0]);

for (int round = 1; round < Nr; round++) { SubBytes(state);

37

ShiftRows(state);

MixColumns(state); AddRoundKey(state, &W[round * Nb]);

}

SubBytes(state);

ShiftRows(state); AddRoundKey(state, &W[Nr * Nb]);

}

void InvCipher(unsigned char in[2 * Nb], unsigned char out[2 * Nb], unsigned char Key[2 * Nk]) {

unsigned short W[Nb * (1 + Nr)]; KeyExpansion(Key, W);

for (int i = 0; i < 2 * Nb; i++) out[i] = in[i];

unsigned char *state = out; AddRoundKey(state, &W[Nr * Nb]);

for (int round = Nr - 1; round > 0; round--) { ShiftRows(state);

InvSubBytes(state); AddRoundKey(state, &W[round * Nb]); MixColumns(state);

}

ShiftRows(state);

InvSubBytes(state); AddRoundKey(state, &W[0]);

}

38

Приложение 2

void DifferentialCryptanalysis() {

unsigned char Key[4] = {0x2b, 0x7e, 0x15, 0x16},

x1[4], x2[4], y1[4], y2[4], yl1[4], yl2[4]; srand((unsigned)time(NULL));

int cn[256];

for (int k = 0; k < 256; k++) { cn[k] = 0;

KeyT[0] = 0x00;

KeyT[1] = (k / 16) << 4; KeyT[2] = (k % 16) << 4; KeyT[3] = 0x00;

for (int n = 0; n < (1 << 14); n++) {

x1[0] = rand() % 256; x2[0] = x1[0] ^ 0x40; x1[1] = rand() % 256; x2[1] = x1[1] ^ 0x40; x1[2] = rand() % 256; x2[2] = x1[2] ^ 0x10; x1[3] = rand() % 256; x2[3] = x1[3] ^ 0x10; Cipher(x1, y1, Key);

Cipher(x2, y2, Key); InvCipherLast(y1, yl1, KeyT); InvCipherLast(y2, yl2, KeyT);

if ((((int *)yl1)[0] ^ ((int *)yl2)[0]) == 0x20200000) cn[k]++;

}

}

for (int i = 0; i < 256; i++)

printf("%02X\t%.5f\n", i, double(abs(cn[i])) / (1 << 14));

}

39