Перейти до змісту

Lab 9: Криптографія

Завдання

Після виконання цієї лабораторної роботи ви зможете:

  • застосовувати криптографічні концепції для захисту даних і зв'язку

Приблизний час виконання цієї лабораторної роботи: 120 хвилин

Загальні терміни та визначення криптографії

Криптографія

У загальному повсякденному вживанні криптографія — це дія або мистецтво написання таємними символами. На технічному жаргоні це можна визначити як науку про використання математики для шифрування та дешифрування даних.

Криптоаналіз

Криптоаналіз — це дослідження того, як скомпрометувати (подолати) криптографічні механізми. Це наука злому коду, розшифровки секретів, порушення схем автентифікації та взагалі зламу криптографічних протоколів.

Криптологія

Криптологія - це дисципліна, яка складається з криптографії та криптоаналізу. Криптологія — розділ математики, що вивчає математичні основи криптографічних методів.

Шифрування

Шифрування перетворює дані у форму, яку майже неможливо прочитати без відповідних знань (наприклад, ключа). Його метою є забезпечення конфіденційності, зберігаючи інформацію прихованою від будь-кого, для кого вона не призначена.

Розшифровка

Дешифрування є протилежністю шифруванню; він перетворює зашифровані дані в зрозумілу форму.

Шифр

Метод шифрування і дешифрування називається шифром.

Хеш-функції (алгоритми дайджесту)

Криптографічні хеш-функції використовуються в різних контекстах, наприклад, для обчислення дайджесту повідомлення під час створення цифрового підпису. Хеш-функція стискає біти повідомлення до хеш-значення фіксованого розміру, щоб рівномірно розподілити можливі повідомлення між можливими хеш-значеннями. Криптографічна хеш-функція робить це таким чином, що надзвичайно ускладнює розробку повідомлення, яке хешує до певного хеш-значення. Нижче наведено кілька прикладів найвідоміших і найпоширеніших хеш-функцій.

a) - SHA-1 (Secure Hash Algorithm) - це криптографічний хеш-алгоритм, опублікований урядом Сполучених Штатів. Він створює 160-бітне хеш-значення з рядка довільної довжини. Вважається, що це дуже добре.

b)- MD5 (Message Digest Algorithm 5) – це криптографічний геш-алгоритм, розроблений у RSA Laboratories. Його можна використовувати для хешування байтового рядка довільної довжини до 128-бітного значення.

Алгоритм

Він описує покрокову процедуру розв’язування задачі, особливо усталену, рекурсивну обчислювальну процедуру для розв’язання задачі за кінцеву кількість кроків. Технічно алгоритм повинен досягти результату після кінцевої кількості кроків. Ефективність алгоритму можна виміряти як кількість елементарних кроків, необхідних для вирішення проблеми. Існує два класи алгоритмів на основі ключів. Це:

a) -- Алгоритми симетричного шифрування (секретний ключ)

Симетричні алгоритми використовують один і той самий ключ для шифрування та дешифрування (або ключ дешифрування легко отримати з ключа шифрування). Алгоритми із секретним ключем використовують один і той самий ключ для шифрування та дешифрування (або один легко вивести з іншого). Це більш простий підхід до шифрування даних; він математично менш складний, ніж криптографія з відкритим ключем. Симетричні алгоритми можна розділити на потокові шифри та блочні шифри. Потокові шифри можуть шифрувати один біт відкритого тексту за раз, тоді як блочні шифри беруть кілька бітів (зазвичай 64 біти в сучасних шифрах) і шифрують їх як єдине ціле. Симетричні алгоритми набагато швидше виконуються на комп’ютері, ніж асиметричні.

Прикладами симетричних алгоритмів є AES, 3DES, Blowfish, CAST5, IDEA та Twofish.

b) -- Асиметричні алгоритми (алгоритми з відкритим ключем)

З іншого боку, асиметричні алгоритми використовують різні ключі для шифрування та дешифрування, і ключ дешифрування не може бути отриманий із ключа шифрування. Асиметричні шифри дозволяють ключу шифрування бути відкритим, дозволяючи будь-кому шифрувати за допомогою ключа, тоді як лише відповідний одержувач (який знає ключ розшифровки) може розшифрувати повідомлення. Ключ шифрування також називається відкритим ключем, а ключ дешифрування – закритим або секретним ключем.

RSA, ймовірно, найвідоміший алгоритм асиметричного шифрування.

Цифровий підпис

Цифровий підпис прив’язує документ до власника певного ключа.

Цифровий підпис документа — це частина інформації, яка базується як на документі, так і на закритому ключі підписувача. Зазвичай він створюється за допомогою хеш-функції та функції приватного підпису (шифрування за допомогою закритого ключа підписувача). Цифровий підпис — це невелика кількість даних, створених за допомогою деякого секретного ключа, і відкритий ключ можна використовувати для перевірки того, що підпис було згенеровано за допомогою відповідного закритого ключа.

Кілька методів створення та перевірки цифрових підписів є у вільному доступі, але найвідомішим алгоритмом є алгоритм відкритого ключа RSA.

Криптографічні протоколи

Криптографія працює на багатьох рівнях. На одному рівні у вас є алгоритми, такі як блокові шифри та криптосистеми з відкритим ключем. Спираючись на них, ви отримуєте протоколи, а на основі протоколів ви знаходите програми (або інші протоколи). Нижче наведено список типових щоденних програм, які використовують криптографічні протоколи. Ці протоколи побудовані на основі криптографічних алгоритмів нижчого рівня.

i.) Безпека сервера доменних імен (DNSSEC)

Це протокол для безпечних розподілених служб імен. Наразі він доступний як чернетка в Інтернеті.

ii.) Рівень захищених сокетів (SSL)

SSL — це один із двох протоколів, які використовуються для безпечних WWW-з’єднань (інший — SHTTP). Безпека WWW стала необхідною, оскільки все більша кількість конфіденційної інформації, такої як номери кредитних карток, передається через Інтернет.

iii.) Протокол безпечної передачі гіпертексту (SHTTP)

Це ще один протокол для забезпечення більшої безпеки для транзакцій WWW.

iv) Безпека електронної пошти та супутні послуги

GnuPG – GNU Privacy Guard – відповідає запропонованому Інтернет-стандарту OpenPGP, описаному в RFC2440.

v) Протокол SSH2

Цей протокол є універсальним для потреб Інтернету та зараз використовується в програмному забезпеченні SSH2. Протокол використовується для захисту термінальних сеансів і TCP-з'єднань.

У наступних вправах розглядаються дві програми, які використовують криптографічні протоколи - GnuPG і OpenSSH.

Завдання 1

GnuPG

GnuPG (GNU Privacy Guard) — це набір програм для шифрування з відкритим ключем і цифрових підписів. Інструменти можна використовувати для шифрування даних і створення цифрових підписів. Він також включає розширений засіб керування ключами. GnuPG використовує криптографію з відкритим ключем, щоб дозволити користувачам безпечно спілкуватися.

Виконайте наступні вправи як звичайний користувач. напр. користувач ying

Щоб створити нову пару ключів

  1. Увійдіть в систему як користувач «ying»

  2. Переконайтеся, що у вашій системі встановлено пакет GnuPG. Впишіть:

[ying@serverXY ying]$ rpm -q gnupg

gnupg-*.*

Якщо ні, попросіть суперкористувача встановити його.

  1. Перерахуйте та запишіть усі приховані каталоги у вашому домашньому каталозі.

  2. Перелічіть ключі, які зараз є у вашому keyring. Впишіть:

[ying@serverXY ying]$ gpg --list-keys

Примітка

У вашому keyring ще не повинно бути ключів. Але наведена вище команда також допоможе створити середовище за замовчуванням, щоб ви могли виконати нову пару ключів з першого разу.

Знову перерахуйте приховані каталоги у вашому домашньому каталозі. Як називається новий доданий каталог?

  1. Використовуйте програму gpg для створення нових пар ключів. Впишіть:
[ying@serverXY ying\]$ gpg --gen-key

......................................

gpg: keyring \`/home/ying/.gnupg/secring.gpg' created

gpg: keyring \`/home/ying/.gnupg/pubring.gpg' created

Please select what kind of key you want:

 (1) DSA and ElGamal (default)

 (2) DSA (sign only)

 (5) RSA (sign only)

Your selection? 1

У запиті типу ключа, який ви хочете створити, прийміть значення за замовчуванням, тобто (DSA та ElGamal). Тип 1

Увага

Варіант (1) створить для вас дві пари ключів. Пара ключів DSA буде основною парою ключів - для створення цифрових підписів і підпорядкованою парою ключів ELGamel для шифрування даних.

  1. Ви створите розмір ключа ELG-E 1024. Знову прийміть значення за замовчуванням у запиті нижче:

DSA key pair will have 1024 bits.

About to generate a new ELG-E key pair.

minimum key size is 768 bits

default key size is 1024 bits

highest suggested key size is 2048 bits

What key size do you want? (1024) 1024

  1. Створіть ключі, термін дії яких закінчиться через рік. Введіть «1y» у рядку нижче:

Please specify how long the key should be valid.

0 = key does not expire

= key expires in n days

w = key expires in n weeks

m = key expires in n months

y = key expires in n years

Key is valid for? (0) 1y

  1. Введіть «y», щоб прийняти термін придатності, показаний у запиті:

Is this correct (y/n)? y

  1. Створіть ідентифікатор користувача, щоб ідентифікувати свій ключ за допомогою:

You need a User-ID to identify your key; the software constructs the user id

from Real Name, Comment and Email Address in this form:

"Firstname Lastname (any comment) <yourname@serverXY>"

Real name: Ying Yang[ENTER]

Comment : my test[ENTER]

Email address: ying@serverXY [ENTER]

У запиті підтвердження введіть «o» (Добре), щоб прийняти правильні значення.

Ви вибрали цей USER-ID:

"Ying Yang (my test) <ying@serverXY>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

  1. Виберіть парольну фразу, яку ви НЕ забудете під час наступного запиту:

Enter passphrase: ********

Repeat passphrase: ********

Завдання 2

Адміністрування ключів

Програма gpg також використовується для адміністрування ключів.

Список ваших ключів

  1. Увійшовши в систему як користувач ying. Покажіть ключі у вашому key-ring. Впишіть:

[ying@serverXY ying]$ gpg --list-keys

gpg: WARNING: using insecure memory!

/home/ying/.gnupg/pubring.gpg


pub 1024D/1D12E484 2003-10-16 Ying Yang (my test) <ying@serverXY>

sub 1024g/1EDB00AC 2003-10-16 [expires: 2004-10-15]

  1. Щоб придушити дещо дратівливе «попередження» про «незахищену пам’ять», додайте наступний параметр

у ваш особистий файл конфігурації gpg. Впишіть:

[ying@serverXY ying]$ echo "no-secmem-warning" >> ~/.gnupg/gpg.conf

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

  2. Перерахуйте свої ключі разом із їхніми підписами. Впишіть:

[ying@serverXY ying]$ gpg --list-sigs

/home/ying/.gnupg/pubring.gpg

  1. Перелічіть лише свої секретні ключі. Впишіть:

[ying@serverXY ying]$ gpg --list-secret-keys

/home/ying/.gnupg/secring.gpg


sec 1024D/1D12E484 2003-10-16 Ying Yang (my test) <ying@serverXY>

ssb 1024g/1EDB00AC 2003-10-16

  1. Відобразити ключові відбитки пальців. Впишіть:

[ying@serverXY ying]$ gpg --fingerprint

/home/ying/.gnupg/pubring.gpg


pub 1024D/1D12E484 2003-10-16 Ying Yang (my test) <ying@serverXY>

Key fingerprint = D61E 1538 EA12 9049 4ED3 5590 3BC4 A3C1 1D12 E484

sub 1024g/1EDB00AC 2003-10-16 [expires: 2004-10-15]

Свідоцтва про відкликання

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

Щоб створити свідоцтво про відкликання

  1. Увійшовши як користувач ying. Створіть свідоцтво про відкликання. Він відображатиметься на вашому

стандартному виході. Впишіть:

[ying@serverXY ying]$ gpg --gen-revoke ying@serverXY

Дотримуйтесь підказок і введіть свою парольну фразу, коли буде запропоновано це зробити.

  1. Тепер створіть сертифікат відкликання, який зберігатиметься у форматі ASCII у файлі під назвою -

“revoke.asc”. Впишіть:

[ying@serverXY ying]$ gpg --output revoke.asc --gen-revoke ying@serverXY

  1. Ви повинні безпечно зберігати сертифікат відкликання та навіть зробити роздруковану копію.

Експорт відкритих ключів

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

З огляду на це - можливо, не настільки очевидне слід сказати:

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

Або принаймні зробіть свій відкритий ключ доступним у будь-якому загальнодоступному місці (рекламні щити, веб-сторінки, сервери ключів, радіо, ТБ, СПАМ через електронну пошту тощо).

Щоб експортувати ваші відкриті ключі

  1. Експортуйте свій відкритий ключ у двійковому форматі у файл під назвою «ying-pub.gpg». Впишіть:

[ying@serverXY ying]$ gpg --output ying-pub.gpg --export <your_key’s_user_ID>

Примітка

Замініть <ваш_ключ_user_ID> з будь-яким рядком, який правильно визначає ваші ключі. У нашому прикладі це значення може бути будь-яким із наведеного нижче:

ying@serverXY, ying, yang

АБО

The actual key ID - 1D12E484

  1. Експортуйте відкритий ключ у файл під назвою «ying-pub.asc». Але цього разу згенеруйте його в

форматі ASCII-armored. Впишіть:

[ying@serverXY ying]$***gpg --output ying-pub.asc --armor --export ying@serverXY ***

  1. Використовуйте команду cat, щоб переглянути двійкову версію відкритого ключа ying (ying-pub.gpg)

  2. (Щоб скинути термінал, введіть: «reset»)

  3. Використовуйте команду cat, щоб переглянути версію ASCII відкритого ключа ying (ying-pub.asc)

  4. Ви помітите, що версія ASCII більше підходить для розміщення на веб-сторінках або спаму тощо.

Завдання 3

Цифрові підписи

Для створення та перевірки підписів використовується пара відкритий/приватний ключ, яка відрізняється від шифрування та дешифрування. Підпис створюється за допомогою закритого ключа підписувача. Підпис можна перевірити за допомогою відповідного відкритого ключа.

Цифровий підпис файлу

  1. Створіть файл із назвою «secret-file.txt» із текстом «Hello All». Впишіть:

[ying@serverXY ying]$ echo "Hello All" > secret1.txt

  1. Використовуйте cat для перегляду вмісту файлу. Використовуйте команду file, щоб побачити тип файлу.

  2. Тепер підпишіть файл своїм цифровим підписом. Впишіть:

[ying@serverXY ying]$ gpg -s secret1.txt

Введіть свою парольну фразу, коли буде запропоновано.

Наведена вище команда створить ще один стиснутий файл «secret1.txt.gpg», до якого додано підпис. Виконайте команду «file» для файлу, щоб перевірити це. Перегляньте файл із cat

  1. Перевірте підпис у підписаному файлі “secret1.txt.gpg”. Впишіть:

[ying@serverXY ying]$ gpg --verify secret1.txt.gpg

gpg: Signature made Thu 16 Oct 2003 07:29:37 AM PDT using DSA key ID 1D12E484

gpg: Good signature from "Ying Yang (my test) <ying@serverXY>"

  1. Створіть інший файл secret2.txt із текстом «Hello All».

  2. Підпишіть файл secret2.txt, але цього разу нехай файл буде захищений ASCII. Впишіть:

[ying@serverXY ying]$ gpg -sa secret2.txt

У вашому pwd буде створено броньований файл ASCII під назвою “secret2.txt.asc”.

  1. Використовуйте команду cat, щоб переглянути вміст ASCII-файлу, створеного для вас вище.

  2. Створіть ще один файл під назвою «secret3.txt» із текстом «hello dude». Впишіть:

[ying@serverXY ying]$ echo "hello dude" > secret3.txt

  1. Додайте свій підпис до тіла файлу, який ви створили вище. Впишіть:

[ying@serverXY ying]$ gpg --clearsign secret3.txt

Це створить нестиснений файл (secret3.txt.asc), загорнутий у ваш ASCII-броньований підпис.

Запишіть команду для перевірки створеного для вас підпису файлу.

  1. Відкрийте файл, щоб переглянути його вміст за допомогою будь-якого пейджера. Чи можете ви прочитати текст, який ви ввели у файл?

ПЕРЕКОНАЙТЕСЯ, ЧИ ВАШ ПАРТНЕР ВИКОНАВ ПОВНІСТЮ

«ВПРАВИ -1, 2, 3» ВИЩЕ ПЕРЕД ПЕРЕХОДОМ ДО «ВПРАВИ 4» НИЖЧЕ

ЯКЩО У ВАС НЕМАЄ ПАРТНЕРА. ВИЙДІТЬ З ОБЛІКОВОГО ЗАПИСУ КОРИСТУВАЧА YING ТА УВІЙДІТЬ ДО СИСТЕМИ ЯК КОРИСТУВАЧ «me».

ПОТІМ ПОВТОРИТЕ ВСІ «ВПРАВИ -1,2,3» ЯК КОРИСТУВАЧ «me».

ТОДІ ВИ МОЖЕТЕ ВИКОНАТИ ВПРАВУ 4 НИЖЧЕ. ЗАМІНІТЬ УСІ ПОСИЛАННЯ НА КОРИСТУВАЧА YING НА “serverPR” НА - КОРИСТУВАЧ “me” НА serverXY (тобто ваш локальний хост)

ВИ МОЖЕТЕ ВИКОРИСТОВУВАТИ БУДЬ-КОГО - КОРИСТУВАЧА «me@serverXY» або КОРИСТУВАЧА «ying@serverPR»

ЯК ВАШОГО ПАРТНЕРА У НАСТУПНІЙ ВПРАВІ.

Завдання 4

У цій вправі ви будете використовувати так звану «Мережу довіри» для спілкування з іншим користувачем.

Імпорт відкритих ключів

  1. Увійдіть в систему як користувач ying.

  2. Зробіть свій ASCII-броньований файл відкритого ключа (ying-pub.asc) доступним для вашого партнера ( використовуйте

або - me@serverXY або ying@serverPR)

NOTE "Примітка":

Є кілька способів зробити це, напр. електронна пошта, копіювання та вставка, scp, ftp, збереження на дискеті тощо.

Виберіть для себе найефективніший спосіб.

  1. Попросіть свого партнера надати вам доступ до файлу відкритого ключа.

  2. Припустимо, що відкритий ключ вашого партнера зберігається у файлі під назвою «me-pub.asc» у вашому pwd;

Імпортуйте ключ у свій key-ring. Впишіть:

[ying@serverXY ying]$ gpg --import me-pub.asc

gpg: key 1D0D7654: public key "Me Mao (my test) <me@serverXY>" imported

gpg: Total number processed: 1

gpg: imported: 1

  1. Тепер перелічіть ключі у вашому key-ring. Впишіть:

[ying@serverXY ying]$ gpg --list-keys

/home/ying/.gnupg/pubring.gpg


pub 1024D/1D12E484 2003-10-16 Ying Yang (my test) <ying@serverXY>

sub 1024g/1EDB00AC 2003-10-16 [expires: 2004-10-15]

pub 1024D/1D0D7654 2003-10-16 Me Mao (my test) <me@serverXY>

sub 1024g/FD20DBF1 2003-10-16 [expires: 2004-10-15]

  1. Зокрема, перелічіть ключ, пов’язаний з ідентифікатором користувача me@serverXY. Впишіть:

[ying@serverXY ying]$ gpg --list-keys me@serverXY

  1. Перевірте відбиток ключа для me@serverXY. Впишіть:

[ying@serverXY ying]$ gpg --fingerprint me@serverXY

Шифрування та дешифрування файлів

Процедура шифрування та дешифрування файлів або документів проста.

Якщо ви хочете зашифрувати повідомлення для користувача ying, ви зашифруєте його за допомогою відкритого ключа користувача ying.

Після отримання ying має розшифрувати повідомлення за допомогою закритого ключа ying.

ТІЛЬКИ ying може розшифрувати повідомлення або файл, зашифрований відкритим ключем ying

Щоб зашифрувати файл

  1. Увійшовши в систему як користувач ying, створіть файл під назвою encrypt-sec.txt. Впишіть:

[ying@serverXY ying]$ echo "hello" > encrypt-sec.txt

Переконайтеся, що ви можете прочитати вміст файлу за допомогою cat.

  1. Зашифруйте файл encrypt-sec.txt, щоб лише користувач «me» міг переглядати файл. тобто ви будете шифрувати

використовуючи відкритий ключ me@serverXY (який зараз є у вашому брелоку). Впишіть:

[ying@serverXY ying]$ gpg --encrypt --recipient me@serverXY encrypt-sec.txt

Наведена вище команда створить зашифрований файл під назвою «encrypt-sec.txt.gpg» у вашому pwd.

Щоб розшифрувати файл

  1. Файл, який ви зашифрували вище, призначений для me@serverXY.

Спробуйте розшифрувати файл. Впишіть:

[ying@serverXY ying]$ gpg --decrypt encrypt-sec.txt.gpg

gpg: encrypted with 1024-bit ELG-E key, ID FD20DBF1, created 2003-10-16

"Me Mao (my test) <me@serverXY>"

gpg: decryption failed: secret key not available

  1. Чи отримали ми тут якісь цінні уроки?

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

команду для розшифровки файлу. Чи вдалося їм розшифрувати файл.

Примітка

Будьте дуже обережні, розшифровуючи двійкові файли (наприклад, програми), тому що після успішного розшифрування файлу gpg спробує надіслати вміст файлу на стандартний вихід.

Візьміть звичку використовувати команду нижче під час розшифровки файлів:

[ying@serverXY ying]$ gpg --output encrypt-sec --decrypt encrypt-sec.txt.gpg

Це примусово надсилає вихідні дані у файл під назвою «encrypt-sec».

Який потім можна переглянути (або запустити) за допомогою будь-якої програми, яка підходить для типу файлу (або вмісту).

Підказка

  1. Більшість команд і параметрів, які використовуються з програмою gpg, також мають короткі форми, що призводить до меншого результату

введення для користувача в командному рядку. напр.

gpg --encrypt --recipient me@serverXY encrypt-sec.txt

Коротка форма наведеної вище команди:

gpg -e -r me@serverXY encrypt-sec.txt

  1. Щоб зашифрувати рядок "hello" і надіслати його як броньоване повідомлення ASCII користувачеві з адресою електронної пошти

ying@serverXY; Використовуйте команду нижче:

echo "hello" | gpg -ea -r ying@serverXY | mail ying@serverXY

  1. Щоб зашифрувати файл "your_file" відкритим ключем "me@serverXY" і записати його до "your_file.gpg"

після підпису його своїм ідентифікатором користувача (за допомогою цифрового підпису); Використовуйте команду нижче:

gpg -se -r me@serverXY your_file

  1. Існує загальнодоступний сервер ключів на wwwkeys.pgp.net. Ви можете використовувати gpg, щоб завантажити туди свій ключ за допомогою:

gpg --send-keys <your_real_email_address> --keyserver wwwkeys.pgp.net

OpenSSH (www.openssh.org)

OpenSSH — це реалізація протоколу SSH (Secure SHell) OpenBSD.

Це БЕЗКОШТОВНА версія набору інструментів для підключення до мережі протоколу SSH. OpenSSH шифрує весь трафік (включаючи паролі), щоб уникнути підслуховування, викрадення з’єднання та інших атак на рівні мережі. Крім того, OpenSSH надає безліч можливостей безпечного тунелювання, а також різноманітні методи автентифікації.

Це допомагає забезпечити безпечний зашифрований зв’язок між двома ненадійними хостами через незахищену мережу (наприклад, Інтернет).

Він включає як компоненти на стороні сервера, так і набір програм на стороні клієнта.

sshd

Серверна сторона включає демон безпечної оболонки (sshd). sshd — це демон, який прослуховує підключення від клієнтів.

Він створює новий демон для кожного вхідного з’єднання. Розгалужені демони обслуговують обмін ключами, шифрування,

аутентифікацію, виконання команд і обмін даними. Згідно зі сторінкою довідки sshd, sshd працює наступним чином:

Для протоколу SSH версії 2:

Кожен хост має спеціальний ключ (RSA або DSA), який використовується для ідентифікації хоста. Коли демон запускається, він не генерує ключ сервера (як у випадку протоколу SSH версії 1). Передня безпека забезпечується через ключову угоду Діффі-Хеллмана. Ця угода ключа призводить до спільного ключа сеансу.

Решта сеансу шифрується за допомогою симетричного шифру, наразі 128-бітного AES, Blowfish, 3DES, CAST128, Arcfour, 192-бітного AES або 256-бітного AES. Клієнт вибирає алгоритм шифрування із запропонованих сервером. Крім того, цілісність сеансу забезпечується за допомогою коду автентифікації криптографічного повідомлення (hmac-sha1 або hmac-md5).

Протокол версії 2 надає метод автентифікації на основі відкритого ключа користувача (PubkeyAuthentication) або клієнтського хоста (HostbasedAuthentication), звичайну автентифікацію за паролем і методи на основі виклику.

Протокол SSH2, реалізований у OpenSSH, стандартизовано робочою групою «IETF secsh».

ssh

Клієнтський пакет програм включає “ssh”. Це програма, яка використовується для входу у віддалені системи, а також може використовуватися для виконання команд у віддалених системах.

Завдання 5

sshd

Використання: sshd [параметри]

Опції:

-f файл Файл конфігурації (за замовчуванням /etc/ssh/sshd_config)

-d Режим налагодження (кілька -d означає більше налагодження)

-i Запущено з inetd

-D Не переходити в режим демона

-t Перевірити лише файл конфігурації та ключі

-q Тихий (без реєстрації)

-p порт Прослуховувати на вказаному порту (за замовчуванням: 22)

-k секунд Регенерувати ключ сервера кожні стільки секунд (за замовчуванням: 3600)

-g секунди Пільговий період для автентифікації (за замовчуванням: 600)

-b біт Розмір ключа RSA сервера (за замовчуванням: 768 біт)

-h файл Файл, з якого читається ключ хоста (за замовчуванням: /etc/ssh/ssh_host_key)

-u len Максимальна довжина імені хоста для запису utmp

-4 Використовуйте лише IPv4

-6 Використовуйте лише IPv6

-o параметр Обробити параметр так, ніби його було прочитано з файлу конфігурації.

Більшість систем Linux із коробки вже мають сервер OpenSSH, налаштований і запущений із деякими параметрами за замовчуванням. Конфігураційний файл для sshd зазвичай знаходиться в - /etc/ssh/ - і називається sshd_config.

sshd_config

  1. Відкрийте конфігураційний файл ssh-сервера будь-яким пейджером і вивчіть його. Впишіть:

[root@serverXY root]# less /etc/ssh/sshd_config

NOTE "Примітка":

sshd_config is a rather odd configuration file.

Ви помітите, що на відміну від інших конфігураційних файлів Linux, коментарі (#) у файлі sshd_config позначають значення параметрів за замовчуванням. тобто коментарі представляють уже скомпільовані значення за замовчуванням.

  1. Перегляньте сторінку довідки для sshd_config і поясніть, що роблять наведені нижче параметри?

AuthorizedKeysFile

Ciphers

HostKey

Port

Protocol

X11Forwarding

HostKey

  1. Змініть свій pwd на каталог /etc/ssh/.

  2. Перелічіть усі файли в каталозі нижче:

Створення ключів хоста

Ваш сервер ssh уже має ключі хоста, які він використовує. Ці ключі були згенеровані під час першого встановлення вашої системи. У цій вправі ви дізнаєтеся, як створити ключі хост-типу для вашого сервера. Але ви не будете використовувати ключі.

Для створення ключів хосту для вашого сервера

  1. Створіть новий каталог під вашим pwd. Назвіть це запасними ключами. cd у новий каталог. Впишіть:

[root@serverXY ssh]# mkdir spare-keys && cd spare-keys

  1. Використовуйте програму ssh-keygen, щоб створити ключ хоста з такими характеристиками:

a. тип ключа має бути "rsa"

b. Ключ не повинен мати зауважень

c. Файл закритого ключа повинен мати назву - ssh_host_rsa_key

d. Ключ не повинен використовувати парольну фразу

Впишіть:

[root@serverXY spare-keys]# ssh-keygen -q -t rsa -f ssh_host_rsa_key -C '' -N ''

  1. Перегляньте відбиток ключа, який ви створили вище. Впишіть:

[root@serverXY spare-keys]# ssh-keygen -l -f ssh_host_rsa_key

  1. Запишіть команду для створення ключа типу dsa під назвою “ssh_host_dsa_key” без коментарів,

і немає парольної фрази?

Завдання 6

ssh

Usage:- ssh \[-l login\_name\] hostname | user@hostname \[command\]

 ssh \[-afgknqstvxACNTX1246\] \[-b bind\_address\] \[-c cipher\_spec\]

 \[-e escape\_char\] \[-i identity\_file\] \[-l login\_name\] \[-m mac\_spec\]

 \[-o option\] \[-p port\] \[-F configfile\] \[-L port:host:hostport\]

\[-R port:host:hostport\] \[-D port\] hostname | user@hostname \[command\]

Для використання ssh

  1. Увійдіть на serverXY як користувач me.

  2. Використовуйте ssh для підключення до serverPR. Впишіть:

[me@serverXY me]$ ssh serverPR

Введіть пароль користувача me, коли буде запропоновано. Якщо ви отримаєте будь-які попередження, введіть «так», щоб продовжити.

  1. Після входу створіть каталог під назвою myexport і створіть порожній файл. Впишіть:

[me@serverPR me]$ mkdir ~/myexport && touch myexport/$$

Зверніть увагу на випадковий файл, який було створено для вас, у розділі ~/myexport ?

  1. Вийдіть з serverPR. Впишіть:

[me@serverPR me]$ exit

Ви повернетеся до локальної оболонки на serverXY.

  1. Використовуйте ssh, щоб віддалено виконати команду «ls», щоб переглянути список файлів у домашньому каталозі ying за адресою

serverPR. Впишіть:

[me@serverXY me]$ ssh ying@serverPR “ls /home/ying”

Коли буде запропоновано, введіть пароль ying. Якщо ви отримаєте будь-які попередження, введіть «так», щоб продовжити.

  1. Увійшовши як я на serverXY, увійдіть у serverPR як користувач ying. Впишіть:

[me@serverXY me]$ ***ssh -l ying serverPR ***

Коли буде запропоновано, введіть пароль ying.

  1. Введіть «exit», щоб вийти з serverPR і повернутися до serverXY.

scp

scp - безпечне копіювання (програма віддаленого копіювання файлів)

scp копіює файли між хостами в мережі. Він використовує ssh для передачі даних, використовує ту саму автентифікацію та забезпечує таку саму безпеку, що й ssh.

Usage:- scp \[-pqrvBC46\] \[-F ssh\_config\] \[-S program\] \[-P port\] \[-c cipher\]

 \[-i identity\_file\] \[-o ssh\_option\] \[\[user@\]host1:\] file1 \[...\]

 \[\[user@\]host2:\] file2
 ```

Щоб використовувати scp

1. Переконайтеся, що ви все ще ввійшли як користувач me на serverXY.

2. Створіть каталог у вашому домашньому каталозі під назвою myimport і перейдіть до каталогу.

3. Скопіюйте всі файли в каталозі «/home/me/myexport/» на serverPR. Впишіть:

\[me@serverXY myimports\]$ ***scp serverPR:/home/me/myexport .***

4. Перелічіть вміст вашої pwd?

 Це було круто чи що?

5. Яка команда скопіювати весь вміст у розділі “/home/me/.gnupg/” на serverPR?

6. Тепер скопіюйте всі файли в домашній каталог ying на serverPR. Впишіть:

\[me@serverXY myimports\]$ ***scp -r ying@serverPR:/home/ying/\* .***

## Завдання 7

### Створення відкритих і закритих ключів користувача для SSH

Кожен користувач, який хоче використовувати SSH з автентифікацією RSA або DSA, потребує набору відкритих і закритих ключів. Для створення цих ключів можна використовувати програму ssh-keygen (так само, як вона використовувалася раніше, коли ви створювали запасні ключі для вашої системи)

Єдиною «рекомендованою» відмінністю під час створення ключів користувача є створення парольної фрази.

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

Загальнодоступний зберігається у файлі з таким же ім’ям, що й закритий ключ, але з доданим до нього розширенням «.pub». Немає способу відновити втрачену парольну фразу. Необхідно створити новий ключ, якщо парольну фразу втрачено або забуто.

Щоб створити ключі автентифікації ying

1. Увійдіть на локальну машину як користувач ying.

2. Запустіть програму “ssh-keygen”, щоб створити ключ типу “***dsa***” із довжиною за умовчанням. Впишіть:

\[ying@serverXY ying\]$ ***ssh-keygen -t dsa***

Створення пари відкритих/приватних ключів DSA.

Натисніть \[ENTER\], щоб прийняти розташування файлу за замовчуванням.

Введіть файл, у якому потрібно зберегти ключ (/home/ying/.ssh/id\_dsa): \[ENTER\]

Коли буде запропоновано, введіть дуже правильну парольну фразу, тобто таку, яку важко вгадати.

Створено каталог '/home/ying/.ssh'.

Введіть парольну фразу (пусто, якщо парольної фрази немає): \*\*\*\*\*\*\*\*\*

Введіть ту саму парольну фразу ще раз: \*\*\*\*\*\*\*\*\*

Вашу ідентифікацію збережено в /home/ying/.ssh/id\_dsa.

Ваш відкритий ключ збережено в /home/ying/.ssh/id_rsa.pub.

Ключовий відбиток:

61:68:aa:c2:0c:af:9b:49:4a:11:b8:aa:b5:84:18:10 ying@serverXY.example.org

3. cd у ваш каталог “**~/.ssh/**”. Перерахувати файли в каталозі?

4. Що таке команда “ssh-keygen” для перегляду відбитків ваших ключів?

5. Використовуйте команду cat, щоб переглянути вміст вашого файлу відкритого ключа (тобто “**~/.ssh/id\_rsa.pub**”).

## Завдання 8

### Автентифікація за допомогою відкритого ключа

Досі ви використовували схему автентифікації на основі пароля для входу в облікові записи користувачів на serverPR.

Це означає, що ви повинні були знати пароль відповідного облікового запису на віддаленій стороні, щоб мати змогу успішно ввійти.

У цій вправі ви налаштуєте автентифікацію за допомогою відкритого ключа між вашим обліковим записом користувача на serverXY та обліковим записом користувача ying на serverPR.

Щоб налаштувати автентифікацію за допомогою відкритого ключа

1. Увійдіть у свою локальну систему як користувач ying.

2. cd у ваш каталог «~/.ssh».

3. Введіть команду нижче:

\[ying@serverXY .ssh\]$ ***cat id\_dsa.pub | ssh ying@serverPR \\***

 '(cd ~/.ssh && cat - &gt;&gt; authorized\_keys && chmod 600 authorized\_keys)'

 Команда вище читається наступним чином:

 a. cat вміст вашого файлу відкритого ключа DSA, але надішліть вихід у канал ( | ) замість

 звичайного стандартного виходу.

 b. запустіть команду “***cd ~/.ssh && кіт - &gt;&gt; авторизовані\_keys && chmod 600 авторизовані\_ключі”***

 як користувач на serverPR.

 c. Суть команди полягає в тому, щоб просто скопіювати та додати вміст вашого відкритого ключа

 файл до “/home/ying/.ssh/authorized\_keys” на serverPR і надайте йому правильні дозволи.

 Якщо ви знаєте будь-який інший ручний спосіб досягнення такого ж результату, зробіть це.

4. Після додавання відкритого ключа до файлу authorized_keys у віддаленій системі. Спробуйте

 увійти на serverPR як ying через ssh. Впишіть:

\[ying@serverXY .ssh\]$ ***ssh serverPR***

Введіть парольну фразу для ключа '/home/ying/.ssh/id\_dsa': \*\*\*\*\*\*\*\*\*\*

Дуже уважно зверніть увагу, що цього разу вам буде запропоновано ввести парольну фразу замість

пароля. Введіть парольну фразу, яку ви створили раніше під час створення ключів.

5. Після успішного входу на serverPR; Вийти знову.

## Завдання 9

### ssh-agent

Згідно зі сторінкою довідки, ssh-agent — це програма для зберігання приватних ключів, які використовуються для автентифікації відкритих ключів (RSA, DSA). Ідея полягає в тому, що ssh-agent запускається на початку X-сеансу або сеансу входу, а всі інші вікна або програми запускаються як клієнти для програми ssh-agent. За допомогою змінних середовища можна знайти агента та автоматично використовувати його для автентифікації під час входу на інші машини за допомогою ssh.
Usage ssh-agent [-a bind_address] [-c | -s] [-d] [command [args ...]]

ssh-agent [-c | -s] -k ```

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

  1. Переконайтеся, що ви ввійшли в локальну систему як користувач ying.

  2. Введіть команду нижче:

[ying@serverXY .ssh]$ eval `ssh-agent`

Agent pid 5623

Зверніть увагу на PID агента:

  1. Використовуйте програму «ssh-add», щоб додати свої ключі до агента, який ви запустили вище. Впишіть:

[ying@serverXY .ssh]$ ssh-add

Введіть свою парольну фразу, коли буде запропоновано.

Введіть парольну фразу для /home/ying/.ssh/id_dsa:

Ідентичність додано: /home/ying/.ssh/id_dsa (/home/ying/.ssh/id_dsa)

  1. Тепер підключіться до serverPR як користувач ying. Вам НЕ буде запропоновано ввести пароль або

парольну фразу (тобто якщо все зроблено правильно). Впишіть:

[ying@serverXY .ssh]$ ssh serverPR

  1. Насолоджуйтесь.

Востаннє оновлено: September 18, 2023