Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_лекцій_Захист_інформації.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

4.6 Транспортне кодування

Оскільки системи шифрування даних часто використовуються для кодування текстової інформації: листування, рахунків, платежів електронної комерції, і при цьому криптосистема має бути абсолютно прозорою для користувача, то над вихідним потоком криптосистеми часто здійснюється транспортне кодування, тобто додаткове кодування (не шифрування!) інформації винятково для забезпечення сумісності з протоколами передачі даних.

Річ у тому, що на виході криптосистеми байт може приймати всі 256 можливих значень, незалежно від того чи був вхідний потік текстовою інформацією чи ні. А при передачі поштових повідомлень багато систем орієнтовано на те, що допустимі значення байтів тексту лежать у вужчому діапазоні: всі цифри, розділові знаки, алфавіт латиниці плюс, можливо, національної мови. Перші 32 символи набору ASCII служать для спеціальних цілей. Для того, щоб вони і деякі інші службові символи ніколи не з'явилися у вихідному потоці використовується транспортне кодування.

Найбільш простий метод полягає в записі кожного байта двома шістнадцятковими цифрами-символами. Так байт 252 буде записаний двома символами 'FC'; байт з кодом 26, що потрапляє на спеціальний символ CTRL-Z, буде записаний двома допустимими символами '1A'. Але ця схема дуже надлишкова: у одному байті передається лише 4 біта інформації.

Насправді практично в будь-якій системі комунікації без проблем можна передавати близько 68 символів (латинський алфавіт рядковий і прописний, цифри і розділові знаки). З цього виходить, що цілком реально створити систему з передачею 6 біт в одному байті (26<68), тобто кодувати 3 байти довільного вмісту 4-мя байтами з виключно дозволених (так званих друкарських) символів. Подібна система була розроблена і стандартизована на рівні протоколів мережі Інтернет – це система Base64 (стандарт RFC1251).

Процес кодування перетворить 4 вхідних символу у вигляді 24-бітової групи, обробляючи їх зліва направо. Ці групи потім розглядаються як 4 сполучених 6-бітових групи, кожна з яких транслюється в одиночну цифру алфавіту base64. При кодуванні base64 вхідний потік байтів має бути впорядкований старшими бітами вперед.

Кожна 6-бітова група використовується як індекс для масиву 64-х друкарських символів. Символ, на який вказує значення індексу, поміщається у вихідний рядок. Ці символи вибрані так, щоб бути універсальними і виключають символи, що мають спеціальне призначення (".", CR, LF).

Вихідний потік (закодовані байти) повинен мати довжину рядків не більше 76 символів. Всі ознаки переходу рядка і інші символи, відсутні в таблиці 4.2, мають бути проігноровані декодером base64. Серед даних символи, не перераховані в табл. 4.2, повинні говорити про помилку передачі даних, і, відповідно, програма-декодер повинна сповістити користувача про неї.

Таблиця 4.2 - Алфавіт Base64

Зна-чення

Код

Зна-чення

Код

Зна-чення

Код

Зна-

чення

Код

0

A

17

R

34

i

51

z

1

B

18

S

35

j

52

0

2

C

19

T

36

k

53

1

3

D

20

U

37

l

54

2

4

E

21

V

38

m

55

3

5

F

22

W

39

n

56

4

6

G

23

X

40

о

57

5

7

H

24

Y

41

p

58

6

8

I

25

Z

42

q

59

7

9

J

26

а

43

r

60

8

10

K

27

b

44

s

61

9

11

L

28

с

45

t

62

+

12

M

29

d

46

u

63

/

13

N

30

e

47

v

запов-нювач

=

14

O

31

f

48

w

15

P

32

g

49

x

16

Q

33

h

50

y

Якщо в хвості потоку кодованих даних залишилося менше, ніж 24 біта, справа додаються нульові біти до утворення цілого числа 6-бітових груп. А до кінця 24-бітової групи може залишатися лише від 0 до 3-х невистачаючих 6-бітових груп, замість кожної з яких ставиться символ-заповнювач "=". Оскільки весь вхідний потік є цілим числом 8-бітових груп (тобто, просто байтних значень), то можливі лише такі випадки:

  1. вхідний потік закінчується рівно 24-бітовою групою (довжина файлу кратна 3). В такому випадку вихідний потік закінчуватиметься чотирма символами Base64 без будь-яких додаткових символів;

  2. "хвіст" вхідного потоку має довжину 8 біт. Тоді в кінці вихідного коду будуть два символи Base64, з додаванням двох символів "=";

  3. "хвіст" вхідного потоку має довжину 16 біт. Тоді в кінці вихідного стоятимуть три символи Base64 і один "="

Оскільки символ "=" є хвостовим заповнювачем, його поява в тілі листа може означати лише те, що кінець даних досягнутий. Але спиратися на пошук символу "=" для виявлення кінця файлу невірно, оскільки, якщо кількість переданих бітів кратна 24, то у вихідному файлі не з'явиться жодного символу "=".