- •1 Основні види й джерела атак на інформацію
- •1.1 Сучасна ситуація в області інформаційної безпеки
- •1.2 Категорії інформаційної безпеки
- •1.3 Абстрактні моделі захисту інформації
- •1.4 Огляд найпоширеніших методів "злому"
- •2 Криптографія
- •2.1 Основні відомості про криптографію
- •2.2 Предмет криптографії
- •2.3 Математичні основи криптографії
- •2.4 Нові напрями
- •2.5 Класифікація криптоалгоритмів
- •3 Симетричні криптоалгоритми
- •3.1 Скремблери
- •3.2 Блокові шифри Загальні відомості про блокові шифри
- •3.3 Мережа Фейштеля
- •3.4 Блоковий шифр tea
- •4 Симетричні криптосистеми
- •4.1 Функції криптосистем
- •4.2 Алгоритми створення ланцюжків
- •4.3 Методи рандомізації повідомлень
- •4.5 Хешування паролів
- •4.6 Транспортне кодування
- •4.7 Загальна схема симетричної криптосистеми
- •5 Асиметричні криптоалгоритми
- •5.1 Загальні відомості про асиметричні криптоалгоритми
- •5.2 Алгоритм rsa
- •5.3 Технології цифрових підписів
- •5.4 Механізм поширення відкритих ключів
- •5.5 Обмін ключами за алгоритмом Діффі-Хеллмана
- •Перелік рекомендованих джерел
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-бітових груп (тобто, просто байтних значень), то можливі лише такі випадки:
вхідний потік закінчується рівно 24-бітовою групою (довжина файлу кратна 3). В такому випадку вихідний потік закінчуватиметься чотирма символами Base64 без будь-яких додаткових символів;
"хвіст" вхідного потоку має довжину 8 біт. Тоді в кінці вихідного коду будуть два символи Base64, з додаванням двох символів "=";
"хвіст" вхідного потоку має довжину 16 біт. Тоді в кінці вихідного стоятимуть три символи Base64 і один "="
Оскільки символ "=" є хвостовим заповнювачем, його поява в тілі листа може означати лише те, що кінець даних досягнутий. Але спиратися на пошук символу "=" для виявлення кінця файлу невірно, оскільки, якщо кількість переданих бітів кратна 24, то у вихідному файлі не з'явиться жодного символу "=".
