Методы и средства защиты компьютерной информации

2



Кафедра: Автоматика и информационные технологии























МЕТОДЫ И СРЕДСТВА ЗАЩИТЫ КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ

























Екатеринбург 2005


Содержание



РАБОТА 1. ИССЛЕДОВАНИЕ ХАРАКТЕРИСТИК ТЕКСТОВ

РАБОТА 2. РЕАЛИЗАЦИЯ СИММЕТРИЧНОГО КРИПТОАЛГОРИТМА

РАБОТА 3. АЛГОРИТМ AES

1. ПОСТАНОВКА ЗАДАЧИ

2. ОПИСАНИЕ АЛГОРИТМА

2.1 ВЫЧИСЛЕНИЕ КЛЮЧА РАУНДА

2.2 S-БЛОК

2.3 ПРЕОБРАЗОВАНИЕ ShiftRow

2.4 ПРЕОБРАЗОВАНИЕ MixColumn

2.5 СЛОЖЕНИЕ С КЛЮЧОМ РАУНДА

2.6 ПОЛНАЯ ПРОЦЕДУРА ЗАШИФРОВАНИЯ БЛОКА

2.7 РАСШИФРОВАНИЕ

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

РАБОТА 4. КРИПТОСИСТЕМА PGP

1. ХАРАКТЕРИСТИКА PGP

2. КАК PGP РАБОТАЕТ

3. ОСНОВНЫЕ ШАГИ В ИСПОЛЬЗОВАНИИ PGP

4. ИНСТАЛЛЯЦИЯ PGP

5. ГЕНЕРАЦИЯ КЛЮЧЕЙ

6. КАК ПОСЛАТЬ ЗАШИФРОВАННОЕ СООБЩЕНИЕ

7. РАСШИФРОВКА СООБЩЕНИЙ

РАБОТА 5. ВИРУСЫ И АНТИВИРУСНЫЕ ПРОГРАММЫ

РАБОТА 6. ИССЛЕДОВАНИЕ СИСТЕМЫ БЕЗОПАСНОСТИ ОС

РАБОТА 7. ЗАЩИТА ОТ СЕТЕВЫХ АТАК




РАБОТА 1. ИССЛЕДОВАНИЕ ХАРАКТЕРИСТИК ТЕКСТОВ



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

Универсальные тесты для анализа случайных последовательностей.

Критерий "хи-квадрат", вероятно, самый распространенный из всех статистических критериев. Он используется не только сам по себе, но и как составная часть многих других тестов. Прежде чем приступить к общему описанию критерия "хи", рассмотрим сначала в качестве примера, как можно было бы применить этот критерий для анализа игры в кости. Пусть каждый раз бросаются независимо две "правильные" кости, причем бросание каждой из них приводит с равной вероятностью к выпадению одного из чисел 1, 2, 3, 4, 5 и 6 вероятности выпадения любой суммы s при одном бросании представлены в таблице:







Например, сумма S=4 может быть получена тремя способами:

1+3, 2+2, 3+1; при 36 возможных исходах это составляет 3/36=1/12=P4

Если бросать кости N раз, можно ожидать, что сумма S появится в среднем nps раз. Например, при 144 бросаниях значение 4 должно появиться около 12~раз. Следующая таблица показывает, какие результаты были в действительности, получены при 144 бросаниях.







Отметим, что фактическое число выпадений отличается от среднего во всех случаях. В этом нет ничего удивительного. Дело в том, что всего имеется 36144 возможных последовательностей исходов для 144 бросаний, и все они равновероятны. Одна из таких последовательностей состоит, например, только из двоек ("змеиные глаза"), и каждый, у кого "змеиные глаза" выпадут подряд 144~раза, будет уверен, что кости поддельные. Между тем эта последовательность так же вероятна, как и любая другая. Каким же образом в таком случае мы можем проверить, правильно ли изготовлена данная пара костей? Ответ заключается в том, что сказать определенно "да" или "нет" мы не можем, но можем дать \EMPH{вероятностный} ответ, т.е. указать, насколько вероятно или невероятно данное событие.

Естественный путь решения нашей задачи состоит в следующем. Вычислим (прибегнув к помощи ЭВМ) сумму квадратов разностей фактического числа выпадений Ys и среднего числа выпадений nps:







Для плохого комплекта костей должны получаться относительно высокие значения V. Возникает вопрос, насколько вероятны такие высокие значения? Если вероятность их появления очень мала, скажем равна 1/100, т.е. отклонение результата от среднего значения на такую большую величину возможно только в одном случае из 100, то у нас есть определенные основания для подозрений. (Не следует забывать, однако, что даже хорошие кости будут давать такое высокое значение V один раз из 100, так что для большей уверенности следовало бы повторить эксперимент и посмотреть, получится ли повторно высокое значение V).

В статистику V все квадраты разностей входят с равным весом, хотя (Y7 - np7) 2, например, вероятно, будет намного больше, чем (Y2 - np2) 2, так как s=7 встречается в шесть раз чаще, чем s=2. Оказывается, что в "правильную" статистику, или по крайней мере такую, для которой доказано, что она наиболее значима, член (Y7 - np7) 2 входит с множителем, который в шесть раз меньше множителя при (Y2 - np2) 2 Таким образом, следует заменить~ (3) на следующую формулу:







Определенную таким образом величину V называют статистикой “хи-квадрат", соответствующей значениям Y2, …, Y12 полученным в эксперименте.

Подставляя в эту формулу значения из (2), получаем







Теперь, естественно, возникает вопрос, является ли значение 7 7/48 настолько большим, что его случайное появление можно считать маловероятным. Прежде чем отвечать на этот вопрос, сформулируем критерий “хи-квадрат" в более общем виде. Предположим, что все возможные результаты испытаний разделены на k категорий. Проводится n независимых испытаний это означает, что исход каждого испытания абсолютно не влияет на исход остальных. Пусть ps вероятность того, что результат испытания попадет в категорию s, и пусть Ys число испытаний, которые действительно попали в категорию s. 


Сформируем статистику







В предыдущем примере имелось 11 возможных исходов при каждом бросании костей, так что k=11. [Формулы (4) и (6) различаются только нумерацией: в одном случае она производится от 2 до 12, а в другом от 1 до k.]

Используя тождество







	и равенства	

	





можно преобразовать формулу (6) к виду







причем в большинстве случаев такая запись облегчает вычисления.

Большим преимуществом рассматриваемого метода является то, что одни и те же табличные значения используются при любых n и любых вероятностях ps. Единственной переменной является v =k - 1. На самом деле приведенные в таблице значение не являются абсолютно точными во всех случаях: это приближенные значения, справедливые лишь при достаточно больших значениях n Как велико должно быть n? Достаточно большими можно считать такие значения n, при которых любое из nps не меньше 5; однако лучше брать n значительно большими, чтобы повысить надежность критерия. Заметим, что в рассмотренных примерах мы брали n=144, и np равнялось всего 4, что противоречит только что сформулированному правилу. Единственная причина этого нарушения кроется в том, что автору надоело бросать кости; в результате числа из таблицы оказались не очень подходящими для нашего случая. Было бы горазда лучше провести эти эксперименты на машине при n=1000 или 10000







Датчики a, b, d прошли испытания удовлетворительно, датчик c находится на грани и должен быть, по-видимому, забракован, а датчики e и f определенно не прошли испытаний. Датчик~f, безусловно, маломощен; датчики c и d обсуждались в литературе, но у них слишком мало значение a. В датчике d реализован метод вычетов в том виде, в каком он был впервые предложен Лемером в 1948г., а в датчике c-линейный конгруэнтный метод с≠0 также в его первоначальном виде (Ротенберг, 1960).

Брюс Шнайер, Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си 816 стр., 2002 г. Издательство: Триумф Дональд Кнут Искусство программирования Том 2.




РАБОТА 2. РЕАЛИЗАЦИЯ СИММЕТРИЧНОГО КРИПТОАЛГОРИТМА



Реализовать симметричный криптоалгоритм на основе простого гамиирования и с использованием сети Фейстеля. Для реализации последнего применить программу diskreet.

Провести статистический анализ открытых текстов и шифртекстов.

Пакет Norton Utilities содержит программу DISKREET, которая позволяет обеспечить защиту и шифровку файлов и создания виртуальных зашифрованных дисков. Для шифровки и защиты программы (файла) от несанкционированного доступа необходимо запустить программу DISKREET, указать в меню пункт Файл, указать путь шифруемого программного файла (с расширением com или exe), задать новое имя шифруемого файла, несколько отличающееся от старого, ввести пароль (не менее 6 символов), подтвердить его и запустить программу DISKREET, которая зашифрует файл и даст ему новое имя. Старый незашифрованный файл надо удалить. Для запуска зашифрованной программы надо расшифровать полученный новый файл при помощи программы DISKREET, запустив ее и введя пароль. С помощью программы DISKREET можно также зашифровать и текстовый файл (*. txt), который без расшифровки программой DISKREET нельзя будет прочитать при нажатии на клавишу F3. Зашифрованный текстовый файл должен иметь имя, отличающееся от исходного.




РАБОТА 3. АЛГОРИТМ AES



1. ПОСТАНОВКА ЗАДАЧИ



Разработать программное обеспечение, реализующее симметричный блочный алгоритм шифрования с переменной длинной блока и ключа Rijndael - улучшенный стандарт шифрования AES.

Использовать среду разработки Visual C++.

Составить описание алгоритма и описание особенностей непосредственной реализации алгоритма.



2. ОПИСАНИЕ АЛГОРИТМА



Rijndael - это симметричный блочный алгоритм шифрования с переменной длиной блока и ключа. Длины блока и ключа могут принимать значения 128, 192 и 256, причем в любой комбинации, варьируемое значение длины ключа составляет одно из достоинств стандарта AES, а вот "официальная" длина блока - только 128 бит.

Каждый блок открытого текста зашифровывается несколько раз в так называемых раундах (round) с помощью повторяющейся последовательности различных функций. Число раундов зависит от длины блока и ключа (см. таблицу 1).



Таблица 1 Число раундов в алгоритме Rijndael как функция от длины блока и ключа

Длина ключа в битах

Длина блока (в битах) 



128

192

256

128

10

12

14

192

12

12

14

256

14

14

14



Rijndael не относится к алгоритмам на сетях Фейстеля, которые характеризуются тем, что блок текста разбивается на левую и правую половины, затем преобразование раунда применяется к одной половине, результат складывается по модулю 2 с другой половиной, после чего эти половины меняются местами. Самым известным блочным алгоритмом из этой серии является DES. Rijndael, напротив, состоит из отдельных уровней, каждый из которых по-своему воздействует на блок в целом. Для зашифрования блока последовательно выполняются следующие преобразования:

Первый раундовый ключ складывается с блоком по модулю 2 (XOR).

Выполняются Lr - 1 обычных раундов. 



Подстановка

(S-блок) 



ShiftRow



MixColumn



Сложение с раундовым ключом



Рис.1. Уровни преобразования внутри одного раунда алгоритма Rijndael



Выполняется завершающий раунд, в котором, в отличие от обычного, отсутствует преобразование MixColumn.

Каждый обычный раунд на этапе 2 состоит из четырех отдельных шагов.

Подстановка. Каждый байт блока заменяется значением, которое определяется S-блоком.

Перестановка. Байты в блоке переставляются с помощью преобразования ShiftRow.

Перемешивание. Выполняется преобразование MixColumn.

Сложение с раундовым ключом. Текущий раундовый ключ складывается с блоком по модулю 2.

Каждый уровень оказывает на каждый из блоков открытого текста определенное воздействие.

1. Влияние ключа

Сложение текста с ключом до первого раунда и на последнем шаге внутри каждого раунда влияет на каждый бит результата раунда. В процессе зашифрования результат каждого шага в каждом бите зависит от ключа.

2. Нелинейный уровень

Операция подстановки в S-блоке является нелинейной. Строение S-блоков обеспечивает почти идеальную защиту от дифференциального и линейного криптоанализа.

3. Линейный уровень

Преобразования ShiftRow и MixColumn обеспечивают максимальное перемешивание битов в блоке.

Далее в описании внутренних функций алгоритма Rijndael, через Lb будем обозначать длину блока в четырехбайтовых словах, через Lk - длину ключа пользователя в четырехбайтовых словах (то есть Lb, Lk  {4, 6, 8}) и через Lr - число раундов (см. таблицу 1).

Открытый и зашифрованный тексты представлены в виде полей байтов и являются соответственно входом и выходом алгоритма.

Блок открытого текста, обрабатываемый как поле m0,..., m4Lb-1, представлен в виде двумерной структуры  (см. таблицу 2). в которой байты открытого текста отсортированы в следующем порядке:





т.е. , где i = n mod 4 и; j = n/4.



Таблица 2

b0,0

b0,1

b0,2

b0,3

b0,4

…

b0,Lb-1

b1,0

b1,1

b1,2

b1,3

b1,4

…

b1,Lb-1

b2,0

b2,1

b2,2

b2,3

b2,4

…

b2,Lb-1

b3,0

b3,1

b3,2

b3,3

b3,4

…

b3,Lb-1



Доступ к структуре  в функциях алгоритма Rijndael осуществляется по-разному, в зависимости от операции. S-блок оперирует с битами, ShiftRow - со строками (bi,0, bi,1, bi,2, …, bi,Lb-1) структуры , а функции AddRoundKey и MixColumn - с четырехбайтовыми словами, обращаясь к столбцам .



2.1 ВЫЧИСЛЕНИЕ КЛЮЧА РАУНДА



И для зашифрования, и для расшифрования требуется сгенерировать Lr раундовых ключей, совокупность которых называется разверткой ключа (key schedule). Развертка строится путем присоединения к секретному ключу пользователя, рекурсивно получаемых: четырехбайтовых слов 



.



Первые Lk слов  развертки ключа - это сам секретный ключ пользователя. Для Lk  {4, 6} очередное четырехбайтовое слово ki определяется как сумма по модулю 2 предыдущего слова ki-1 со словом ki-Lk. При i  0 mod Lk перед операцией XOR нужно применить функцию FLk (k, i), которая включает в себя циклический сдвиг k байтов влево (операция r (k)), подстановку S (r (k)) с использованием S-блока алгоритма Rijndael (к этой операции мы еще вернемся) и сложение по модулю 2 с константой c (i/Lk). Итоговое уравнение функции F таково: 



FLk (k, i) = S (r (k))  c (i/Lk).



Константы c (j) задаются равенством c (j) = (rc (j), 0, 0, 0), где значения rc (j) определяются рекурсивно как элементы поля F28:



rc (1) = 1, rc (j) = rc (j-1) х = хj-1.



Или в виде численных значений:



rc (1) = '01’, rc (j) = rc (j-1) •'02'.



Программно значение rc (j) реализуется (j - 1) - кратным рекурсивным вызовом функции xtime, с начальным значением аргумента, равным 1 или более быстро - с использованием таблицы предвычислений (см. таблицу 3).



Таблица 3. Константы rc (j) (в шестнадцатеричном виде) 

'01’

'02'

'04'

'08'

'10'

'20'

'40'

'80'

'1B'

'36'

'6C

'D8'

'AB'

'4D'

'9A'

'2F'

'5E'

'ВС

'63'

'C6'

'97'

'35'

'6A'

'D4'

'B3'

7O'

'FA'

'EF'

'C5

'91'



Для ключей длины 256 бит (то есть при Lk = 8) введена дополнительная операция подстановки: при i  4 mod Lk перед операцией XOR значение ki-1 заменяется на s (ki-1).

Таким образом, развертка ключей состоит из Lb (Lr + 1) четырехбайтовых слов, включая и секретный ключ пользователя. На каждом раунде i = 0,..., Lr - 1 очередные Lb, четырехбайтовых слова с kLbi по kLb (I+1) выбираются из развертки и используются в качестве ключа раунда. Раундовые ключи рассматриваются, по аналогии с блоками открытого текста, как двумерная структура (см. таблицу 4).



Таблица 4. Представление раундовых ключей

k0,0

k 0,1

k 0,2

k 0,3

k 0,4

…

k 0,Lb-1

k 1,0

k 1,1

k 1,2

k 1,3

k 1,4

…

k 1,Lb-1

k 2,0

k 2,1

k 2,2

k 2,3

k 2,4

…

k 2,Lb-1

k 3,0

k 3,1

k 3,2

k 3,3

k 3,4

…

k 3,Lb-1



Для ключей длины 128 бит процесс генерации ключа изображен на рис.2.





Рис.2. Диаграмма раундовых ключей для Lk = 4



Пока не известны слабые ключи, использование которых неблагоприятно сказалось бы на стойкости алгоритма Rijndael



2.2 S-БЛОК



Блок подстановки, или S-блок алгоритма Rijndael показывает, каким значением следует заменять каждый байт блока текста на каждом раунде. S-блок представляет собой список из 256 байтов. Сначала каждый ненулевой байт рассматривается как элемент поля F28 и заменяется мультипликативно обратным (нулевые байты остаются неизменными). Затем выполняется следующее аффинное преобразование над полем F2 путем умножения на матрицу и сложения с вектором (11000110):







Здесь через х0 и у0 обозначены младшие, а через х7 и у7 - старшие биты в байте; вектор (11000110) длины 8 соответствует шестнадцатеричному числу '63'.

S-блок построен так, чтобы свести к минимуму чувствительность алгоритма к дифференциальному и линейному методам криптоанализа, а также к алгебраическим атакам. Последовательно применяя приведенную выше процедуру к числам от 0 до 255, получаем таблицу 5 (значения идут по строкам слева направо).



Таблица 5. Значения S-блока

99

124

119

123

242

107

111

197

48

1

103

43

254

215

171

118

202

130

201

125

250

89

71

240

173

212

162

175

156

164

114

192

183

253

147

38

54

63

247

204

52

165

229

241

113

216

49

21

4

199

35

195

24

150

5

154

7

18

128

226

235

39

178

117

9

131

44

26

27

110

90

160

82

59

214

179

41

227

47

132

83

209

0

237

32

252

177

91

106

203

190

57

74

76

88

207

208

239

170

251

67

77

51

133

69

249

2

127

80

60

159

168

81

163

64

143

146

157

56

245

188

182

218

33

16

255

243

210

205

12

19

236

95

151

68

23

196

167

126

61

100

93

25

115

96

129

79

220

34

42

144

136

70

238

184

20

222

94

11

219

224

50

58

10

73

6

36

92

194

211

172

98

145

149

228

121

231

200

55

109

141

213

78

169

108

86

244

234

101

122

174

8

186

120

37

46

28

166

180

198

232

221

116

31

75

189

139

138

112

62

181

102

72

3

246

14

97

53

87

185

134

193

29

158

225

248

152

17

105

217

142

148

155

30

135

233

206

85

40

223

140

161

137

13

191

230

66

104

65

153

45

15

176

84

187

22



При расшифровании порядок действий меняется на противоположный. Сначала выполняется обратное аффинное преобразование, затем мультипликативное обращение в поле F28. Обратный S-блок приведен в таблице 6.



Таблица 6. Значения обратного S-блока

82

9

106

213

48

54

165

56

191

64

163

158

129

243

215

251

124

227

57

130

155

47

255

135

52

142

67

68

196

222

233

203

84

123

148

50

166

194

35

61

238

76

149

11

66

250

195

78

8

46

161

102

40

217

36

178

118

91

162

73

109

139

209

37

114

248

246

100

134

104

152

22

212

164

92

204

93

101

182

146

108

112

72

80

253

237

185

218

94

21

70

87

167

141

157

132

144

216

171

0

140

188

211

10

247

228

88

5

184

179

69

6

208

44

30

143

202

63

15

2

193

175

189

3

1

19

138

107

58

145

17

65

79

103

220

234

151

242

207

206

240

180

230

115

150

172

116

34

231

173

53

133

226

249

55

232

28

117

223

110

71

241

26

113

29

41

197

137

111

183

98

14

170

24

190

27

252

86

62

75

198

210

121

32

154

219

192

254

120

205

90

244

31

221

168

51

136

7

199

49

177

18

16

89

39

128

236

95

96

81

127

169

25

181

74

13

45

229

122

159

147

201

156

239

160

224

59

77

174

42

245

176

200

235

187

60

131

83

153

97

23

43

4

126

186

119

214

38

225

105

20

99

85

33

12

125




2.3 ПРЕОБРАЗОВАНИЕ ShiftRow



Следующий шаг раунда - перестановка байтов в блоке. Порядок байтов меняется в строке (bi,0, bi,1, bi,2,..., bi,Lb-1) структуры В в соответствии с таблицами 7-9.

Операция ShiftRow для блоков длины 128 бит (Lb = 4) 



До операции ShiftRow

0

4

8

12

1

5

9

13

2

6

10

14

3

7

11

15



После операции ShiftRow

0

4

8

12

5

9

13

1

10

14

2

6

15

3

7

11





Операция ShiftRow для блоков длины 192 бит (Lb = 6) 



До операции ShiftRow

0

4

8

12

16

20

1

5

9

13

17

21

2

6

10

14

18

22

3

7

11

15

19

23



После операции ShiftRow

0

4

8

12

16

20

5

9

13

17

21

1

10

14

18

22

2

6

15

19

23

3

7

11





Операция ShiftRow для блоков длины 256 бит (Lb = 8) 



До операции ShiftRow

0

4

8

12

16

20

24

28

1

5

9

13

17

21

25

29

2

6

10

14

18

22

26

30

3

7

11

15

19

23

27

31



После операции ShiftRow

0

4

8

12

16

20

24

28

5

9

13

17

21

25

29

1

14

18

22

26

30

2

6

10

19

23

27

31

3

7

11

15





Все нулевые строки остаются без изменений. В строках i = 1,2,3 байты циклически сдвигаются влево на cLb, i позиций: с позиции с номером j на позицию с номером j - cLb, i mod Lb, где значение cLb, i определяется по таблице 10.

Таблица 10. Размер сдвига строк в операции ShiftRow

Lb

cLb,1

cLb,2

cLb,3

4

1

2

3

6

1

2

3

8

1

3

4



При обратном преобразовании позиция с номером j в строках i = 1,2,3 сдвигается на позицию с номером j + cLb, i mod Lb.



2.4 ПРЕОБРАЗОВАНИЕ MixColumn



После того как выполнена последняя построчная перестановка, на следующем шаге каждый столбец (bi,j) блока текста, где i = 0,...,3, j = 0,...,Lb, представляется в виде полинома над полем F28 и умножается на фиксированный полином a (x) = а3x3 + а2x2 + а1x + a0 с коэффициентами a0 (x) =x, a1 (x) = 1, a2 (x) = 1, a3 (x) = х + 1. Затем вычисляется остаток от деления полученного произведения на модуль М (х) = х4 + 1. Таким образом, каждый байт столбца взаимодействует со всеми остальными байтами столбца. При построковом преобразовании ShiftRow на каждом раунде байты взаимодействуют друг с другом в других комбинациях. То есть эти две операции дают сильное перемешивание.

Этот шаг можно свести к умножению на матрицу:







Умножение на '02' (соответственно на х) мы уже реализовали в виде функции xtime (см. таблицу 3). Умножение на '03' (соответственно на х + 1) тоже сделано по аналогии.

Для обращения преобразования MixColumn умножаем каждый столбец (bi,j) блока текста на полином г (х) = r3х3 + r2х2 + r1х + r0 с коэффициентами r0 (х) =х3 + х2 + х, r1 (х) = х3 + 1, r2 (х) = х3 + х2 + 1, r3 (х) = х3 + х + 1 и приводим результат по модулю М (х) = х4 + 1. Соответствующая матрица имеет вид:







2.5 СЛОЖЕНИЕ С КЛЮЧОМ РАУНДА



На последнем шаге цикла раундовый ключ складывается по модулю 2 с блоком текста:







2.6 ПОЛНАЯ ПРОЦЕДУРА ЗАШИФРОВАНИЯ БЛОКА



Зашифрование по алгоритму Rijndael реализуется в виде следующего псевдокода. Аргументы обрабатываются как указатели на поля байтов или четырехбайтовых слов. Интерпретация полей, переменных и функций дана в таблицах 11-13.



Таблица 11

Интерпретация переменных

Переменные

Интерпретация

Nk

Длина Lk секретного ключа пользователя в четырехбайтовых словах

Nb

Длина Lb блока в четырехбайтовых словах

Nr

Число раундов Lr в соответствии с таблицами выше




Таблица 12

Интерпретация полей

Переменные

Размер в байтах

Интерпретация

CipherKey

4*Nk

Секретный ключ пользователя

ExpandedKey

4*Nb* (Nr+1) 

Поле четырехбайтовых слов под развертку ключа

Rcon

4*Nb* (Nr+1) /Nk

Поле четырехбайтовых слов под константы c (j) = (rc (j), 0, 0, 0) 

State

4*Nb

Поле ввода открытого текста и вывода зашифрованного текста

RoundKey

4*Nb

Раундовый ключ, фрагмент ExpandedKey



Таблица 13

Интерпретация функций

Функция

Интерпретация

KeyExpansion

Генерация раундового ключа

RotByte

Сдвиг четырехбайтового слова влево на 1 байт: (abcd)  (bcda) 

ByteSub

Подстановка в S-блоке всех байтов поля

Round

Обычный раунд

FinalRound

Последний раунд без преобразования MixColumn

ShiftRow

Преобразование ShiftRow

MixColumn

Преобразование MixColumn

AddRoundKey

Сложение с ключом раунда



Генерация ключа при Lk < 8:

KeyExpansion (byte CipherKey, word ExpandedKey)

{

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

ExpandedKey [i] = (CipherKey [4*i], CipherKey [4*i + 1], CipherKey [4*i + 2], CipherKey [4*i + 3]);

for (i = Nk; i<Nb* (Nr+1); i++)

{

temp = ExpandedKey [i - 1] ; if (i% Nk == 0)

temp = ByteSub (RotByte (temp)) ^Rcon [i/Nk] ; ExpandedKeyp] = ExpandedKey [i - Nk] ^temp;

}

}

Генерация ключа при Lk = 8:

KeyExpansion (byte CipherKey, word ExpandedKey)

{

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

ExpandedKey [i] = (CipherKey [4*i], CipherKey [4*i + 1], CipherKey [4*i + 2], CipherKey [4*i + 3]);

for (i = Nk; i < Nb * (Nr + 1); i++)

{

temp = ExpandedKey [i - 1] ; if (i% Nk == 0)

temp = ByteSub (RotByte (temp)) ^Rcon [i/Nk] ; else if (i% Nk == 4)

temp = ByteSub (temp); ExpandedKey [i] = ExpandedKey [i - Nk] ^temp;

}

}

Раундовые функции:

Round (word State, word RoundKey)

{

ByteSub (State);

ShiftRow (State); MixColumn (State); AddRoundKey (State, RoundKey)

FinalRound (word State, word RoundKey) {

ByteSub (State);

ShiftRow (State);

AddRoundKey (State, RoundKey)

}

Полная процедура зашифрования блока текста:

Rijndael (byte State, byte CipherKey)

{

KeyExpansion (CipherKey, ExpandedKey);

AddRoundKey (State, ExpandedKey);

for (i = 1; i < Nr; i++)

Round (State, ExpandedKey + Nb*i);

FinalRound (State, ExpandedKey + Nb*Nr);

}

Раундовый ключ можно заготовить и вне функции Rijndael, a вместо ключа пользователя CipherKey использовать развертку ключей ExpandedKey. Преимущества такого варианта очевидны, когда для зашифрования текста длиной более одного блока нужно несколько раз вызывать функцию Rijndael с одним и тем же ключом пользователя.

Rijndael (byte State, byte ExpandedKey)

{

AddRoundKey (State, ExpandedKey);

for (i = 1; i < Nr; i++) Round (State, ExpandedKey + Nb*i);

FinalRound (State, ExpandedKey + Nb*Nr);

}

Для 32-разрядных процессоров раундовое преобразование лучше вычислять заранее и хранить результаты в виде таблиц. Заменяя операции перестановки и умножения на матрицу обращением к таблице, мы значительно сокращаем время работы как при зашифровании, так и (как будет видно позже) при расшифровании. С помощью таблиц вида







каждая из которых содержит по 256 четырехбайтовых слов (здесь w = 0,...,255; S (w) - S-блок подстановки), преобразование блока  j = 0,..., Lb - 1, можно быстро выполнить как



,



где  (см. ShiftRow) и  - j-й столбец раундового ключа.

На последнем раунде преобразование MixColumn не выполняется, поэтому результат получается как







Конечно, можно воспользоваться таблицей из 256 четырехбайтовых слов, тогда







где r (a,b,c,d) = (d,a,b, с) - циклический сдвиг вправо на один байт.д.ля приложений с ограниченной памятью этот вариант чрезвычайно удобен, немного увеличится лишь время вычислений, необходимое для выполнения трех сдвигов.



2.7 РАСШИФРОВАНИЕ



При расшифровании алгоритмом Rijndael процесс зашифрования выполняется в обратном порядке с обратными преобразованиями. Вот эти обратные функции:

InvFinalRound (word State, word RoundKey)

{

AddRoundKey (State, RoundKey);

InvShiftRow (State);

InvByteSub (State);

}

InvRound (word State, word RoundKey)

{

AddRoundKey (State, RoundKey);

InvMixColumn (State);

InvShiftRow (State);

InvByteSub (State);

}

Полная процедура расшифрования выглядит следующим образом:

InvRijndael (byte State, byte CipherKey)

{

KeyExpansion (CipherKey, ExpandedKey);

InvFinalRound (State, ExpandedKey + Nb*Nr);

for (i = Nr - 1; i > 0; i--)

InvRound (State, ExpandedKey + Nb*i);

AddRoundKey (State, ExpandedKey);

}

Алгебраическая структура алгоритма Rijndael позволяет упорядочить преобразования зашифрования так, что и для них можно будет использовать таблицы. Заметим, что подстановка S и преобразование ShiftRow коммутируют, поэтому внутри одного раунда их можно поменять местами. Благодаря свойству гомоморфизма  линейных преобразований, операции InvMixColumn и сложение с раундовым ключом можно тоже поменять местами. В пределах одного раунда это выглядит так:

InvFinalRound (word State, word RoundKey)

{

AddRoundKey (State, RoundKey);

InvByteSub (State);

InvShiftRow (State);

}

InvRound (word State, word RoundKey)

{

InvMixColumn (State);

AddRoundKey (State, InvMixColumn (RoundKey));

InvByteSub (State);

InvShiftRow (State);

}

Если порядок функций не менять, то их можно переопределить:

AddRoundKey (State, RoundKey);

InvRound (word State, word RoundKey)

{

InvByteSub (State);

InvShiftRow (State);

InvMixColumn (State);

AddRoundKey (State, InvMixColumn (RoundKey));

}

InvFinalRound (word State, word RoundKey)

{

InvByteSub (State);

InvShiftRow (State);

AddRoundKey (State, RoundKey);

}

Отсюда получаем структуру, аналогичную зашифрованию. Из соображений эффективности в процедуре lnvRound () отложим применение функции InvMixColumn к раундовому ключу до вычисления развертки, в которой первый и последний раундовые ключи из InvMixColumn оставим без изменений. "Обратные" раундовые ключи генерируются процедурой

InvKeyExpansion (byte CipherKey, word InvEpandedKey)

{

KeyExpansion (CipherKey, InvExpandedKey);

for (i = 1; i < Nr; i++)

InvMixColumn (InvExpandedKey + Nb*i);

}

Теперь полная процедура расшифрования выглядит так:

InvRijndael (byte State, byte CipherKey)

{

InvKeyExpansion (CipherKey, InvExpandedKey);

AddRoundKey (State, InvExpandedKey + Nb*Nr);

for (i = Nr-1; i>0; i--)

InvRound (State, InvExpandedKey + Nb*i);

InvFinalRound (State, InvExpandedKey);

}

По аналогии с зашифрованием можно и для расшифрования составить таблицы предвычислений. С помощью следующих преобразований:







(где w = 0,...,255; S-1 (w) - обратный S-блок подстановки) получаем результат обратного раундового преобразования блока  j = 0,..., Lb - 1:



,



где  и  - j-й столбец "обратного" раундового ключа.

Здесь на последнем раунде тоже не выполняется преобразование MixColumn, и результатом последнего раунда будет



,



где j = 0,…,Lb -1.

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



,



где r (а,b,c,d) = (d,a,b, с) - циклический сдвиг вправо на один байт.




БИБЛИОГРАФИЧЕСКИЙ СПИСОК



М. Вельшенбах. Криптография на Си и С++ в действии. М.: ТРИУМФ, 2004.

М. Яхтсмен. Теория и практика информационной безопасности. Под редакцией Зегжды П.Д. 1996.

Методы и средства защиты компьютерной информации. Методические указания к лабораторным работам для студентов специальности 220100 - Вычислительные машины, комплексы, системы и сети и направления 552800 - Информатика и вычислительная техника Сост.С. С. Соколов.

Екатеринбург: ГОУ ВПО УГТУ-УПИ, 2005.33 с.


РАБОТА 4. КРИПТОСИСТЕМА PGP



Задание: провести шифрование и расшифрование текстов с помощью криптосистемы PGP.



1. ХАРАКТЕРИСТИКА PGP



PGP (Pretty Good Privacy) - это криптографическая (шифровальная) программа с высокой степенью надежности, которая позволяет пользователям обмениваться информацией в электронном виде в режиме полной конфиденциальности.

Главное преимущество этой программы состоит в том, что для обмена зашифрованными сообщениями пользователям нет необходимости передавать друг другу тайные ключи, т.к эта программа построена на новом принципе работы - публичной криптографии или обмене открытыми (публичными) ключами, где пользователи могут открыто посылать друг другу свои публичные ключи с помощью сети "Интернет" и при этом не беспокоиться о возможности несанкционированного доступа каких-либо третьих лиц к их конфиденциальным сообщениям.

В PGP применяется принцип использования двух взаимосвязанных ключей: открытого и закрытого. К закрытому ключу имеете доступ только вы, а свой открытый ключ вы распространяете среди своих корреспондентов.

Еще одно преимущество этой программы состоит также в том, что она бесплатная и любой пользователь, имеющий доступ к Интернету, может ее закачать на свой компьютер в течение получаса. PGP шифрует сообщение таким образом, что никто кроме получателя сообщения, не может ее расшифровать. Создатель PGP Филипп Циммерман открыто опубликовал код программы, который неоднократно был исследован специалистами крипто-аналитиками высочайшего класса и ни один из них не нашел в программе каких-либо слабых мест.

Филипп Циммерман следующим образом объясняет причину создания программы: "Людям необходима конфиденциальность. PGP распространяется как огонь в прериях, раздуваемый людьми, которые беспокоятся о своей конфиденциальности в этот информационный век. Сегодня организации по охране прав человека используют программу PGP для защиты своих людей за рубежом. Организация Amnesty International также использует ее". Пользователям сети Интернет рекомендуется использовать эту программу именно по той же причине, почему люди предпочитают посылать друг другу письма в конвертах, а не на открытках, которые могут быть легко прочитаны почтовыми служащими. Дело в том, что электронные сообщения, в том виде и формате, который существует на сегодняшний день, легко могут быть прочитаны и архивированы любым человеком, имеющим доступ к серверу Интернет провайдера (поставщика услуг сети Интернет). В настоящий момент спецслужбам проще и дешевле подключиться к электронным адресам большого количества лиц, нежели к телефонным разговорам. Здесь вообще ничего делать не надо. Все сделает компьютер. Агенту спецслужбы или другому заинтересованному человеку остается только сесть за компьютер и просмотреть все ваши сообщения. Научно-технический прогресс облегчил задачу таким людям, однако, этот же самый прогресс предоставил возможность пользователям сети Интернет скрыть свои сообщения от третьих лиц таким образом, что даже суперкомпьютер стоимостью несколько десятков миллионов долларов не способен их расшифровать.




2. КАК PGP РАБОТАЕТ



Когда пользователь шифрует сообщение с помощью PGP, то программа сначала сжимает текст, что сокращает время на отправку сообщения через модем и увеличивает надежность шифрования. Большинство приемов криптоанализа (взлома зашифрованных сообщений) основаны на исследовании рисунков, присущих текстовым файлам, что помогает взломать ключ. Сжатие ликвидирует эти рисунки и таким образом повышает надежность зашифрованного сообщения. Затем PGP генерирует сессионный ключ, который представляет собой случайное число, созданное за счет движений вашей мышки и нажатий на клавиши клавиатуры.

Как только данные будут зашифрованы, сессионный ключ зашифровывается с помощью публичного ключа получателя сообщения, который отправляется к получателю вместе с зашифрованным текстом.

Расшифровка происходит в обратной последовательности. Программа PGP получателя сообщения использует закрытый ключ получателя для извлечения временного сессионного ключа, с помощью которого программа затем дешифрует зашифрованный текст.

Ключи.

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

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

Ключи хранятся на жестком диске вашего компьютера в зашифрованном состоянии в виде двух файлов: одного для открытых ключей, а другого - для закрытых. Эти файлы называются "кольцами" (keyrings). В течение работы с программой PGP вы, как правило, будете вносить открытые ключи ваших корреспондентов в открытые "кольца". Ваши закрытые ключи хранятся в вашем закрытом "кольце". При потере вашего закрытого "кольца" вы не сможете расшифровать любую информацию, зашифрованную с помощью ключей, находящихся в этом "кольце".

Цифровая подпись.

Огромным преимуществом публичной криптографии также является возможность использования цифровой подписи, которая позволяют получателю сообщения удостовериться в личности отправителя сообщения, а также в целостности (верности) полученного сообщения. Цифровая подпись исполняет ту же самую функцию, что и ручная подпись. Однако ручную подпись легко подделать. Цифровую же подпись почти невозможно подделать.

Хэш-функция.

Еще одно важное преимущество использования PGP состоит в том, что PGP применяет так называемую "хэш-функцию", которая действует таким образом, что в том случае какого-либо изменения информации, пусть даже на один бит, результат "хэш-функции" будет совершенно иным. С помощью "хэш-функции" и закрытого ключа создается "подпись", передаваемая программой вместе с текстом. При получении сообщения получатель использует PGP для восстановления исходных данных и проверки подписи.

При условии использования надежной формулы "хэш-функции" невозможно вытащить подпись из одного документа и вложить в другой, либо каким-то образом изменить содержание сообщения. Любое изменение подписанного документа сразу же будет обнаружено при проверке подлинности подписи.

Парольная фраза.

Большинство людей, как правило, знакомы с парольной системой защиты компьютерных систем от третьих лиц. Парольная фраза - это сочетание нескольких слов, которое теоретически более надежно, чем парольное слово. В виду того, что парольная фраза состоит из нескольких слов, она практически неуязвима против так называемых "словарных атак", где атакующий пытается разгадать ваш пароль с помощью компьютерной программы, подключенной к словарю. Самые надежные парольные фразы должны быть достаточно длинными и сложными и должны содержать комбинацию букв из верхних и нижних регистров, цифровые обозначения и знаки пунктуации.

Парольная фраза должна быть такой, чтобы ее потом не забыть и чтобы третьи лица не могли ее разгадать. Если вы забудете свою парольную фразу, то уже никогда не сможете восстановить свою зашифрованную информацию. Ваш закрытый ключ абсолютно бесполезен без знания парольной фразы и с этим ничего не поделаешь.



3. ОСНОВНЫЕ ШАГИ В ИСПОЛЬЗОВАНИИ PGP



Установите программу на свой компьютер. Руководствуйтесь краткой инструкцией по инсталляции программы, приведенной ниже.

Создайте закрытый и открытый ключ. Перед тем, как вы начнете использовать программу PGP, вам необходимо генерировать пару ключей, которая состоит из закрытого ключа, к которому имеете доступ только вы, и открытый ключ, который вы копируете и свободно передаете другим людям (вашим корреспондентам).

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

Удостовериться в верности открытого ключа. Как только вы получите открытые ключи своих корреспондентов, то их можно внести в "кольцо" открытых ключей. После этого вам необходимо убедиться в том, что у вас действительно открытый ключ вашего корреспондента. Вы можете это сделать, связавшись с этим корреспондентом и, попросив его зачитать вам по телефону "отпечатки пальцев" (уникальный идентификационный номер) его открытого ключа, а также сообщив ему номер вашего ключа. Как только вы убедитесь в том, что ключ действительно принадлежит ему, вы можете его подписать и таким образом подтвердить ваше доверие к этому ключу.

Шифрование и удостоверение корреспонденции вашей цифровой подписью. После генерации пары ключей и обмена открытыми ключами вы можете начать шифрование и удостоверение ваших сообщений и файлов своей цифровой подписью. Если вы используете почтовую программу, которая поддерживается программой PGP, то вы можете шифровать и дешифровать всю вашу корреспонденцию, находясь прямо в этой программе. Если же ваша почтовая программа не поддерживается программой PGP, то вы можете шифровать вашу корреспонденцию другими способами (через буфер обмена или шифрованием файлов целиком).

Дешифровка поступающих к вам сообщений и проверка подлинности отправителя. Когда кто-либо высылает вам зашифрованное сообщение, вы можете дешифровать его и проверить подлинность отправителя этого сообщения и целостность самого сообщения. Если ваша почтовая программа не поддерживается PGP, то вы можете сделать это через буфер обмена.

Уничтожение файлов. Когда вам необходимо полностью удалить какой-либо файл, вы можете исполнить команду wipe (стереть). Таким образом, удаленный файл уже невозможно будет восстановить.


4. ИНСТАЛЛЯЦИЯ PGP



Ниже приводятся заголовки сообщений, появляющиеся при инсталляции программы и команды, которые необходимо исполнять при инсталляции:

PGP Installation program:

Нажмите Next

Software License agreement:

Согласны ли вы с лицензионным соглашением? Если согласны, то тогда нажмите Yes

User information:

Информация о пользователе. Заполните необходимые поля и нажмите Next

Setup: choose installation directory:

Выберите каталог, куда будет проинсталлирована PGP. Если никаких особых пожеланий по этому поводу нет, то нажмите Next

Select components:

Программа инсталляции предлагает выбрать компоненты, которые будут установлены. Обязательны для инсталляции Program Files. Далее вы можете отметить птичкой плагин для той почтовой программы, которой вы пользуетесь. Если ее в списке нет, то ничего помечать не нужно. Можете также пометить файлы документации (User's manual) и программу PGP Disk for Windows (рекомендуется).

Нажмите Next.

Check setup information Пронрамма инсталляции что-то там проверит... Смело жмите Next и начнется копирование файлов на жесткий диск.

Для того чтобы программа автоматически запустила операцию создания ключей после перезагрузки компьютера нажать на кнопку "Yes I want to run PGP keys"

Нажмите Finish и на предложение программы инсталляции о перезапуске компьютеры ответьте положительно.

Компьютер перезапустится и на этом программа установки завершится.

Теперь необходимо сгенерировать два ключа:

public key - открытый ключ private key - закрытый ключ



5. ГЕНЕРАЦИЯ КЛЮЧЕЙ



После перезагрузки компьютера в правом нижнем углу панели задач (возле часов) появится значок PGP. Кликните по нему и выберите Launch PGP Keys

В меню Keys выберите пункт New Key. Нажмите Next и заполните необходимые формы (имя и E-Mail). Нажмите Next

Выберите размер ключа (2048 рекомендуется) и нажмите Next. Поставьте птичку напротив фразы "Key pair never expires" и нажмите Next.

Два раза введите парольную фразу и нажмите Next.

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

Когда программа выдаст сообщение о том, что процесс генерации закончен, нажмите Next и затем "Done".

На этом процесс создания пары ключей закончился и можно начинать пользоваться программой.

Теперь, после установки программы, необходимо обменяться со своими корреспондентами открытыми ключами. Для этого снова запустите PGP Keys, правой кнопкой мыши кликните файл со своим ключом и выберите пункт Export. Программа предложит вам выбрать путь и имя файла. Этот файл вы должны послать своему корреспонденту, в обмен на его открытый ключ. Когда вы получите необходимый ключт от своего корреспондента, двойным кликом мыши по нему начните процесс импорта (Import). Теперь можно пересылать друг другу зашифрованные сообщения, которые шифруются открытым ключом получателя сообщения.



6. КАК ПОСЛАТЬ ЗАШИФРОВАННОЕ СООБЩЕНИЕ



После того, как открытый (публичный) ключ вашего корреспондента установится на вашем компьютере, сообщение можно отправлять получателю следующим образом:

Составляем сообщение в почтовой программе, например в Outlook Express

Выделяем текст сообщения (Ctrl+A или Правка-Выделить все) и копируем его в буфер обмена (Ctrl+C или Правка-Копировать). Затем кликаем по иконке PGP на панели задач и выбираем путкт Encrypt Clipboard. Появляется диалог Key Selection Dialog. Дважды щелкните по открытому ключу того, кому собираетесь отправить сообщение и нажмите ОК. PGP зашифрует содержимое буфера обмена.

В поле сообщения снова выделяем весь текст и вставляем только что зашифрованное содержимое буфера обмена, выбрав в меню Правка пункт Вставить (или просто нажав Ctrl+V).

Вот и все. Можно отправлять сообщение!

Шифровка файлов для Attachment (вложений).

Кликните правой кнопкой мыши необходимый файл (например, то же сообщение, созданное в текстовои редакторе) и выберите пункт "PGP-Encrypt". Появится диалоговое окно со списком доступных ключей, выберите ключ своего корреспондента. Файл будет зашифрован и его расширение изменится на pgp. Присоедините этот файл к своему сообщениею и можете не беспокоиться о том, что ваша информация станет достоянием третьих лиц.


7. РАСШИФРОВКА СООБЩЕНИЙ



Расшифровка текста сообщения.

Открываем зашифрованное сообщение и выделяем весь его текст (Ctrl+A), затем копируем его в буфер обмена (Ctrl+C). Кликнув по иконке PGP на панели задач, выбираем пункт "decrypt and verify clipboard". PGP попросит вас ввести парольную фразу. Если фраза введена корректно, содержимое буфера обмена будет дешифровано.

Расшифровка вложений.

Сохраните вложение где-нибудь на жестком диске. Кликните по этому файлу правой кнопкой мыши и выберите пункт "PGP-Decrypt". Программа предложит ввести вашу парольную фразу и, если она была введена корректно, файл будет дешифрован.




РАБОТА 5. ВИРУСЫ И АНТИВИРУСНЫЕ ПРОГРАММЫ



Задание. Ознакомьтесь с проявлениями некоторых вирусов (программа mvdemo. exe, электронный каталог вирусов). Проведите антивирусный контроль раздела диска с предварительной записью на него имитаторов вирусов.

Существует два подхода к распознаванию вредоносного кода: сигнатурный и эвристический. "Сигнатура" от слова "подпись" - "особые приметы" конкретного злодея. Для успешного применения сигнатурного метода необходимо иметь полную базу данных существующих вирусов и троянов. Очевидно, что между появлением вируса и внесением его "примет" в антивирусные базы проходит некоторое время. Пользователю остается надеяться на то, что производитель антивируса внесет сигнатуру нового вируса раньше, чем последний доберется до его, пользователя, компьютера. Иногда пользователь рискует заполучить вирус, который нарушает работу антивирусного ПО, делая невозможным обновления антивирусных баз, а то и вовсе блокируя антивирус. Продвинутые создатели вирусов хорошо знакомы с принципами работы антивирусного ПО и создают вирусы, способные самостоятельно изменять свой программный код (время от времени делать себе "пластическую операцию").

Эвристический анализ - попытка применить "искусственный интеллект". Создателям антивирусного ПО известны "привычки" злодеев. На основании анализа поведения проверяемого объекта, его структуры, антивирус может заподозрить неладное и сообщить об этом пользователю. Легальный пользователь может отправить подозрительный объект производителю своего антивируса для исследования, или просто удалить.

Основным признаком компьютерного вируса является способность распространяться. До тех пор, пока глобальные сети не обрели множество пользователей, основным средством распространения вирусов являлись дискеты. Для того, чтобы заразить компьютер, необходимо было запустить инфицированный исполняемый файл, открыть документ, зараженный макровирусом, а иногда достаточно просто просмотреть содержимое дискеты. Такой способ распространения актуален и поныне. Если Ваш компьютер без видимых причин обращается к дисководу (загорается индикатор, дисковод издает характерные звуки), значит какая-то программа пытается обнаружить диск в устройстве. Это может быть свидетельством активности вируса.

В наше время наибольшей опасности подвержены пользователи сетей, прежде всего Интернет, распространение которого подготовило почву новым злодейским технологиям. Прежде всего, на смену дискетам пришла электронная почта. Тут наблюдается практически полная аналогия. Иногда достаточно просто "открыть" письмо в почтовом клиенте или окне браузера, не говоря об открытии безобидного с виду файла, фотографии, например, чтобы заполучить на компьютер заразу.

"Шагом вперед" стали "почтовые черви", рассылающие сами себя по адресам из адресной книги, если таковая имеется на зараженном компьютере.

Настоящим прорывом было появление интернет-червей, распространяющихся безо всякой почты. Червь, обосновавшись на одном из компьютеров, начинает сканировать определенный диапазон адресов в поисках следующих жертв. Уязвимому компьютеру достаточно войти в сеть и "ждать своего часа". Впрочем, если "повезет", достаточно и минуты. Заметьте, для того, чтобы заразиться, не обязательно посещать какие-то, сайты, читать почту и так далее.

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

1. Вирус обследует компьютер жертвы на предмет файла, содержащего пароли доступа в интернет, высылает пароли "хозяину". В итоге хозяин вируса пользуется интернетом за счет жертвы. Удел школьников. Таких умников как правило ловят.

2. Вирус протоколирует ввод с клавиатуры и высылает отчеты хозяину. Таким образом злодей может получить пароли доступа к чему угодно, включая банковский счет. К счастью, для доступа к счету обычно требуется еще и "ключ" (например, специально подготовленная дискета). Комментарии излишни.

3. Вирус ищет на компьютере жертвы документы, интересующие хозяина.

4. Хозяин вируса - "звонилки" организует телефонную компанию, звонки на телефоны - платные (тариф - космический). Вирус меняет на компьютере жертвы телефон дозвона до интернет-провайдера. На другом конце запросто может стоять модем, и даже обеспечивать доступ в интернет (сам не видел, но могу предположить). Пока там пользователь разберется, почему не работает интернет (а если работает???)...

5. Хозяин вируса регистрирует платный интернет-сайт. О том, что сайт платный и счет придет посетителю от его (посетителя) поставщика услуг связи (телефонной компании), предупреждают. Другое дело, что предупреждение это в лучшем случае на английском языке (а если на санскрите каком-нибудь?). Вирус может либо поменять стартовую страницу Вашего браузера (при входе в сеть автоматически загружается страница с заманчивым содержимым), либо другим способом направлять Вас на сайт-ловушку.

6. Хозяин вируса - злобный хакер. Здравомыслящий злодей всегда позаботится о своей безопасности, одним из способов обеспечения анонимности является использование цепочки компьютеров-посредников между машиной хакера и жертвой. Добровольцев предоставить свои компьютеры в качестве посредников при взломе найдется немного, и несчастному хакеру приходится зомбировать чужие машины с помощью вируса.

7. Опять злобный хакер решил пошалить. То ли ему не угодили чем, то ли заказ поступил, захотелось хакеру провести на определенный интернет-сервер атаку класса Dos (отказ в обслуживании). Например, засыпать запросами до такой степени, что либо канал передачи данных "забьется", либо сам сервер перестанет справляться с работой. Даже если запросы сформированы особым образом (некорректные запросы), то их все равно должно быть много. А забить запросами канал (как правило, достаточно широкий) по силам только целой армии "клиентов" сервера. Организовать такую армию помогает вирус. Зараженные машины докладывают "хозяину" о готовности. Когда злодей сочтет количество "бойцов" достаточным, он может отдать команду атаковать жертву.

8. Теперь о самых неприятных злодеях. Если слово "хакер" окутано ореолом таинственности, тем более, что рядовой пользователь не ощущает на себе негативных последствий от действий хакера, то спамеров в интернет-сообществе ненавидят все. Этот гадкий народец занимается рассылкой писем, в которых что-то рекламируется. Если Ваш почтовый ящик стал известен спамерам, готовьтесь к тому, что в половине поступающих писем (а бывает и 90%) содержится ненужная Вам реклама. Это не только мешает разбирать корреспонденцию, но и бьет по карману, если ваш почтовый клиент забирает всю почту с сервера, а Вы оплачиваете этот трафик. Так вот, для рассылки спама или для сбора адресов электронной почты (для включения в спамерскую базу) могут использоваться зомбированные компьютеры.




РАБОТА 6. ИССЛЕДОВАНИЕ СИСТЕМЫ БЕЗОПАСНОСТИ ОС



Используя знания и навыки, полученные в курсе "Операционные системы", реализуйте наиболее безопасные настройки ОС Вашего ПК.

Если в эпоху однозадачных операционных систем вирусы могли распространяться лишь благодаря беспечности пользователей, запускающих непроверенные программы (или перехватывать управление при обращении к загрузочному сектору дискеты), то в многозадачных системах им полное раздолье. Во время работы в оперативную память загружено, помимо пользовательских приложений, множество служебных сервисов, которые готовы получать данные друг от друга, от пользователя, и даже из сети. В идеале эти данные должны проверяться на предмет их "правильного" происхождения и назначения, но, из-за ошибок программистов, это происходит не всегда должным образом. Программы, содержащие такие ошибки, называют уязвимыми, наличие самих ошибок - уязвимостями, а воплощенное в программном коде решение, способное эксплуатировать уязвимость - эксплойтом.

Классическим, но не единственным, типом уязвимостей является возможность переполнения буфера. Каждой программе выделяются для хранения своих данных определенные участки памяти. Если вернуться к примеру из раздела "немного о вирусах", то начальник имеет привычку (странный такой) оставлять пустое место на листе с приказом, чтобы любой из сотрудников мог вписать свой комментарий. Сам по себе комментарий никого особенно не волнует. И тут, злодей вписывает комментарий не на полстраницы, как предполагалось, а на всю, затирая начисто начальный документ. В идеале размер "комментария" должен контролироваться, но это происходит не всегда. Переполнив буфер, злодей "подсовывает" вредоносный код процессору для исполнения.

Уязвимости в программном обеспечении обнаруживаются чаще, чем многие думают. Добропорядочный программист часто публикует информацию об обнаруженной им ошибке (по различным причинам). Производитель уязвимого ПО, в идеальном случае, быстро реагирует, выпуская "заплатку", называемую обычно "патчем" или "обновлением". Если уязвимость обнаружена, всегда найдутся злодеи, которые ее используют в своих злодейских целях.

Таким образом, претендовать на звание "неуязвимой" может программа (в том числе операционная система), включающая все обновления (установлены все патчи). Заметьте, только претендовать, поскольку часть ошибок найдена злодеями, которые не спешат делиться информацией.

Патчи и обновления обычно доступны на сайтах производителей ПО. Как было показано выше, даже установка полного комплекта официальных заплаток не решит всех проблем. Для обеспечения "локальной" безопасности неплохо иметь программу, способную оповещать о подозрительной активности приложений, чтобы пользователь сам мог принять решение, позволять ли программе те или иные действия. Такими функциями (как дополнительными) обладает большинство файерволов.




РАБОТА 7. ЗАЩИТА ОТ СЕТЕВЫХ АТАК



Задание. Установить и настроить межсетевой экран.

Нижеприведенный текст взят с одного из сайтов с сохранением стиля автора.

Изначально межсетевой экран (файервол) служил для ограничения доступа к локальным сетям извне. Сейчас популярны комплексные решения. Если речь идет о "профессиональном" применении, то это отдельное устройство, умеющее не только фильтровать пакеты, но и обнаружить попытку сетевой атаки. Нам, простым пользователям, достаточно иметь программный файервол. Даже "простенький" файервол не ограничивается контролем интернет-трафика, он предупреждает о любой подозрительной активности приложений, спрашивая пользователя о том, что разрешать делать приложению, а что - нет. Это является и "недостатком". Первое время придется отвечать на вопросы, причем отвечать правильно. Я видел ситуации, когда пользователь ошибочно заблокировал доступ в интернет своему интернет-браузеру. В итоге - соединение с провайдером устанавливается, но, ни один сайт не открывается.

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

Прежде, чем освещать сетевые атаки, неплохо ознакомиться с принципами функционирования сетей. Эти знания могут оказаться полезными и для устранения неполадок своими силами. Тех, кто желает всерьез изучить проблему, отсылаю к серьезным материалам. Простому человеку не обязательно читать всякие RTFSы. Моя цель - помочь пользователю обоснованно выбрать уровень защиты. Здесь приходится руководствоваться необходимой достаточностью, а определение этой "достаточности" - индивидуально.

Если вы - пользователь Интернет, ваш компьютер постоянно отправляет и получает данные. Отправляются запросы на получение информации, сама информация (например, почта). Получаются служебные ответы (готовность сервера, данные о размере скачиваемого файла и т.д.), и сами данные.

Представим себе работу двух штабов дружественных армий во время совместных учений. Российский генерал просит китайского поддержать наступление огнем с моря. Как происходит обмен информацией? Составляется письмо, передается шифровальщику, уже зашифрованное - радисту. Последний отстукивает письмо в эфир азбукой Морзе. Китайский радист получает "морзянку", шифровальщик расшифровывает, с удивлением обнаруживает, что послание на русском языке и отдает его переводчикам. Только теперь можно считать, что письмо дошло до адресата. Заметим, что нашим генералам по рангу не положено задумываться об азбуке Морзе, методах шифрования и радиопередатчиках. Также, как пользователь не обязан ничего знать о семи сетевых уровнях взаимодействия. Самым интересным для нас является IP - протокол интернета. Этот протокол должен понимать любой компьютер в сети Интернет, как все радисты способны пользоваться "морзянкой". Известно, что, при организации связи часто используются кабельные линии. Если на пути встречается преграда, например - река, то в место разрыва по берегам устанавливают два приемо-передатчика (ретрансляторы, это выгоднее, чем тянуть по дну кабель), далее могут использоваться и спутниковые каналы, и снова кабельная линия. Два "радиста" используют морзянку и могут ничего не знать о методах передачи сигнала по кабельным или радиоканалам с их аппаратурой уплотнения. Сети передачи данных, на которых базируется интернет, столь же сложны, но оконечные устройства, например Ваш компьютер, понимает IP, независимо от установленной операционной системы.

В соответствии с концепцией IP, данные преобразуются в отдельные "пакеты", которые могут (но не обязаны) нести в себе помимо куска данных и информации о пункте отправки и назначения, сведения о том, кусок чего именно содержится в пакете, как его стыковать с остальными частями. Понятно, что не существует идеальных каналов для передачи данных, а значит часть пакетов будет содержать ошибки, пакеты достигают цели в "неправильной" последовательности или вообще не достигают. Иногда это не критично. Поскольку теряется лишь небольшая часть пакетов, передачу можно повторить несколько раз (разумный подход, если сообщение небольшое). Сетевик увидит здесь дейтаграммный протокол (UDP), который базируется на протоколе IP и не гарантирует доставку сообщений. Протоколы TCP/IP располагают средствами для надежной доставки за счет установления виртуального соединения. В процессе такого соединения общаются уже две пользовательские программы. "Принимающая" сторона уведомляется о количестве отправленных пакетов и способе их стыковки, и, если какой-то пакет не дошел, просит повторить отправку. Здесь уже можно сделать два практических вывода. Первый: если сигнал сильно искажается или много помех, то значительная часть пакетов проходят с ошибками, что приводит к множеству повторных отправок, то есть, снижается реальная скорость передачи данных. Отсюда и возникает понятие ширины (пропускной способности) канала. Второй вывод: если отправит все заявленные пакеты кроме одного, принимающая сторона не закроет виртуального соединения, ожидая опаздывающего. Если насоздавать множество таких соединений, принимающему компьютеру будет тяжко, поскольку под каждое соединение резервируется участок памяти, а память не резиновая. По такому принципу строили сетевые атаки, "подвешивая" компьютер жертвы.

Чтобы понять процесс установления соединения, необходимо рассмотреть систему идентификации компьютеров в сети. Если мы говорим об интернет, то у каждого компьютера есть уникальное имя, называемое IP - адресом. выглядит он может примерно так: 213.180.204.11 Трудновато для запоминания, поэтому придумали доменные имена, состоящие из "нормальных" символов, например www.yandex.ru. Если в командной строке Вашего интернет-браузера набрать http://213.180.204.11, то это будет равноценно http://www.yandex.ru. Каждое доменное имя соответствует определенному IP - адресу. Как я узнал IP знаменитой поисковой системы? Можно использовать специальную программку, а можно выполнить команду "ping". Если у Вас Windows, нажмите кнопку "Пуск", кликните на пункте "выполнить". Нам предлагают выполнить на компьютере какую-нибудь команду, скомандуем cmd (введем cmd в поле "открыть"), откроется окно командного интерпретатора. Теперь мы можем видеть вводимые команды и результат их выполнения. Итак, командуем ping yandex.ru, жмем "Enter" и получаем результат. Результат будет положительным, если ваш компьютер подключен к Интернет. В этом случае Вам покажут время прохождения пробных пакетов до сервера yandex, а заодно ip - адрес. В роле "переводчика" выступает DNS - сервер, специальный компьютер, хранящий таблицы соответствия доменных имен ip-адресам, причем таких компьютером может быть много. Интернет изначально задумывался как отказоустойчивая сеть (для военных в США), а надежность должно было обеспечить отсутствие единого центра. Группа пакетов, отправленная в рамках одного соединения, может идти разными путями (на то она и всемирная паутина), управляется этот процесс маршрутизаторами, хранящими различные пути до различных подсетей. Теперь понятно, почему очередность поступления пакетов адресату может отличаться от исходной. Также понятно, что, если злодей подменит запись в таблице адресов, то вместо нужного сайта клиент может угодить на сайт-двойник, где введет свои пароли и другие данные. Утешает то, что подмена таблиц публичных DNS является весьма трудным делом. Но, следует помнить, что браузер первым делом просматривает локальную таблицу, хранящуюся в специальном файле на Вашем компьютере. Если вирусу удастся внести туда свою запись, то введя www.yandex.ru, Вы запросто можете попасть на совершенно другой сайт, быть может, внешне похожий. Если ваш файервол сообщает, что какая-то программа пытается изменить файл с таблицей адресов, стоит обследовать компьютер на предмет опасной заразы.

Для установления соединения мало знать адрес компьютера. Непременными атрибутами запроса на подключение являются протокол (язык, на котором решено общаться) и номер порта, к которому мы подключаемся. Протокол мы каждый раз указываем в адресной строке браузера (тот самый http, хотя можно набрать ftp и связаться с ftp-сервером, если он есть на сервере). Номер порта обычно явно не указывается, в этом случае для http подразумевается порт 80, на котором "висит" интернет-сервер (не в смысле "мощный компьютер", а в смысле "программа, обслуживающая клиентские приложения". На компьютере может быть запущено множество сервисов (тот же ftp), каждый слушает "свой" порт. Если интернет-браузеры обеспечивают в основном подключение по http и просмотр web-страниц, то для подключения к другим сервисам существуют специальные программы, как стандартные, так и "хакерские" Если установлена программа ICQ, то она открывает свой порт и "слушает" его на предмет желающих подключиться и пообщаться. Чем больше на машине запущено сетевых сервисов, тем больше вероятность, что среди них найдется уязвимый, ведь каждый открытый порт - дверь систему, а надежен ли замок - тот еще вопрос. Существует целый класс программ - сканеры портов, которые опрашивают заданный диапазон портов, перебирая номера и выдают список открытых. Забегая вперед, скажу, что есть "сканеры безопасности", которые не только сканируют порты, но и исследуют в автоматическом режиме целевой хост на наличие всех известных уязвимостей.

Итак, сетевые атаки. Банки и без моей помощи разберутся с хакерами, мне ближе проблемы простого пользователя. Об этом и поговорим.

Удаленный взлом компьютера становится не таким простым делом. Если интересно, кто и как занимался этим лет пять назад, вот ссылка на приговор горе-хакерам, в котором описана вся технология взлома (в начале и в конце документа). Во времена Windows 98 любой школьник мог проделать такие штуки. С Windows XP эти фокусы не проходят, а методы взлома Linux знают только профи, которые и у себя в банке неплохо зарабатывают. Для проникновения на чужой компьютер необходимо иметь теперь приличную квалификацию, а персонального внимания толкового злодея удостаиваются не все. Мой компьютер вряд ли кого-то заинтересует. Другое дело, что сканированием портов все же многие балуются. Уж не знаю, чего они там ищут, но раздражает сильно. Трафик то я оплачиваю! Замечу, что адрес, с которого осуществляется сканирование, зачастую принадлежит ничего не подозревающему добропорядочному пользователю. Скорее всего, у последнего поселился червь, выискивающий очередную жертву.

Если Ваш компьютер кого-то и заинтересовал, то это близкие Вам люди. Я имею в виду деловых партнеров, начальство и ревнивых супругов. В интернете можно найти массу шпионских программ, типа клавиатурных шпионов. Если на компьютере стоит такая программа, то все, что набрано на клавиатуре, включая пароли к электронной почте, записывается в специальный файл и может быть негласно отправлено по электронной почте "хозяину".

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

Теперь рассмотрим наиболее популярные способы заполучить на компьютер трояна (как этого избежать - в следующей главе).

Способ первый - заразить компьютер компактным вирусом, единственной функцией которого является закачка из интернета и инсталляция полноценного "троянского коня"

Способ второй - зайти "не на тот" сайт. А уж заставить открыть страницу, содержащую опасное содержимое - дело техники и психологии.

Способ третий - дать злоумышленнику посидеть за вашим компьютером. Известны также случаи, когда посетитель в организации просто незаметно вставлял специально приготовленную "флэшку" в USB-порт, дальше - понятно.

Еще одна неприятная реалия сетевой жизни - сниффинг. По простому - перехват трафика. Из предыдущей главы (руководствуясь здравым смыслом) ясно, что исходящие пакеты уходят в некотором смысле "в эфир". По крайней мере, в пределах одной подсети они доступны всем, а это - не так уж мало. Другое дело, что "порядочный" компьютер воспринимает только адресованную ему информацию. Если же злодей установил программу - сниффер (нюхач), то может читать передаваемые данные. Восстановить весь поток - невыполнимая задача, поскольку соединение с источником не устанавливается и запросить повторную отправку потерянных пакетов не удастся (это была бы наглость - подслушивать соседей за стенкой, да еще переспрашивать, когда не расслышали). Сниффинг используют для перехвата паролей, передающихся в открытом (незашифрованном) виде.

Сознавая уровень реальной опасности, можно разумно подойти к защите своего компьютера от различных напастей. Здесь поход простой: стоимость сейфа не должна превышать стоимость хранимых в нем ценностей. Многое Вы можете сделать сами, с этого и начнем.

1. Устанавливаем нормальную операционную систему. Исходить приходится из того, что большинству пользователей подходят ОС от Microsoft. В этом случае вариантов нет - Windows XP c SP2 (как минимум). SP2 - это второй пакет обновлений, закрывший многие дыры в безопасности. Сгодилась бы и Windows 2000, но ее перестали поддерживать, а уязвимости находят все новые и новые.

2. Настраиваем минимальную защиту: включаем брандмауэр (если установлен SP2, то включен по умолчанию) для всех соединений. Делается это так: Пуск>Панель управления>Сетевые подключения, откроется окно со значками настроенных подключений. Кликаем правой кнопкой мыши по значку подключения, выбираем пункт "свойства", жмем на вкладку "дополнительно", потом в зоне "брандмауэр Windows" нажимаем кнопку "параметры". Если установлено значение "выключить", меняем его на "включить" и подтверждаем кнопкой ОК.

3. Устанавливаем антивирусное программное обеспечение. Как бы ни ругали антивирус Касперского (притормаживает работу компьютера), разумной альтернативы я не вижу. Обновляем антивирусные базы через интернет до актуального состояния. Теперь можно покопаться в настройках (в разных версиях это выглядит по-разному, поэтому подробно описывать не буду). Имеет смысл отключить ежедневную полную проверку компьютера. Обычно я отключаю автоматическое обновление, поскольку большинство компьютеров не подключены к Интернет постоянно.

4. Находим в "Панели управления" раздел "администрирование", в нем "службы" и отключаем все ненужное. Первым делом - службу сообщений. Объясню, почему. Может быть вы сталкивались с ситуацией, когда во время работы в Интернет периодически всплывает сообщение, в котором вас пугают разными ошибками в системе и прочими вирусами, предлагая зайти на такой-то сайт, где вам помогут избавиться от проблем. На самом деле, посетив такой сайт, эти проблемы можно нажить. Служба сообщений предназначена прежде всего для работы в локальной сети, с ее помощью администратор сети может оповещать пользователей о чем либо. Злодеи же используют ее для заманивания на сайты-ловушки. Еще можно смело отключать "Telnet", "Удаленный реестр" и "Сервер", если ваш компьютер не планируется использовать в качестве сервера. Чем меньше служб запущено, тем быстрее работает компьютер. Там еще много чего можно отключить, но, действовать следует с осторожностью. Если не уверены, лучше пригласите специалиста.

5. Если Вы не сделали этого ранее, установите пароли для всех пользователей позаковыристей. Последнее означает, что хороший пароль должен быть длинным и состоять из цифр, букв в разных регистрах и специальных символов.

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

6. Наделить всех пользователей только минимально необходимыми правами. Например, запретить всем, кроме "Администратора", устанавливать программы. Даже если Вы единственный пользователь, создайте вторую учетную запись с ограниченными правами, и входите в систему под именем Администратор только в случае необходимости. Дело в том, что некоторые уязвимости позволяют злодею исполнять на компьютере команды от имени текущего пользователя. А если у такового прав - минимум, то и использовать уязвимость не удастся.

7. Иногда при вводе пароля, например для доступа к своему почтовому ящику, система предлагает сохранить пароль. Я всегда отказываюсь, чего и Вам советую. Это - хорошая привычка.

8. Установите полноценный файервол. Встроенный брандмауэр Windows многие действия программ попросту не отслеживает.