Смекни!
smekni.com

Аутентифікація користувачів на основі токенів безпеки (стр. 1 из 3)

Міністерство освіти і науки України

Чернівецький національний університет імені Юрія Федьковича

Факультет комп’ютерних наук

Кафедра комп’ютерних систем та мереж

Реферат

Аутентифікація користувачів на основі токенів безпеки

2007


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

Міжнародні та національні стандарти описують ряд добре відомих та вивчених функцій захисного характеру, зокрема алгоритми хешування MD5, MD2, SHA тощо; алгоритми генерування та перевірки електронного цифрового підпису RSA, DSS та інших. Усі ці алгоритми мають різні механізми викликів (зокрема, різну довжину аргументів). Це, у свою чергу, означає, що вони несумісні між собою.

Тому задача вбудовування тих чи інших захисних механізмів в операційну систему на основі якогось одного алгоритму буде виглядати неефективною, особливо, якщо ця ОС розповсюджується в різних регіонах земної кулі. В цьому випадку логічним є побудова "шаруватої" структури, де окремий шар, реалізований, скажемо, як набір динамічних бібліотек, відповідає за захист інформації. Цей спосіб досить універсальний і широко застосовується у сімействі операційних систем Windows. Таким способом можна розв‘язати великий клас задач, пов‘язаних з універсалізацією ОС: від національних налаштувань системи до реалізації різноманітних засобів безпеки.

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

Сьогодні є достатня кількість криптографічних інтерфейсів, однак найбільшої популярності набув інтерфейс від Microsoft - Microsoft CryptoAPI. Зараз використовується CryptoAPI версії 2.0. Причина популярності цього інтерфейсу полягає в тому, що Microsoft інтенсивно впровадила захисні механізми CryptoAPI у свої операційні системи та прикладне програмне забезпечення. Сучасні ОС сімейства Windows містять багато криптографічних підсистем різного призначення як прикладного рівня, так і рівня ядра. Провідну роль в цьому грають якраз функції CryptoAPI, зокрема базові криптографічні функції, сукупність яких створює інтерфейс CryptoAPI 1.0.

Інтерфейс CryptoAPI 2.0 містить як базові криптографічні функції, так і функції, що реалізують перетворення вищого рівня – роботу з сертифікатами Х.509, обробку криптографічних повідомлень PKCS#7 та інші функції, що підтримують інфраструктуру відкритих ключів. Однак набір базових криптографічних функцій цього інтерфейсу утворює CryptoAPI 1.0. Таким чином, функції CryptoAPI 1.0 утворюють криптографічне ядро прикладного рівня для сучасних операційних систем лінійки Windows.

Загальну архітектуру CryptoAPI 1.0 подано на рис. 1.

Рис. 1. Загальна архітектура CryptoAPI 1.0.


Усі функції інтерфейсу зосереджено у бібліотеці advapi32.dll. Ці процедури виконують ряд допоміжних функції та викликають бібліотеки, де безпосередньо реалізовано відповідні криптографічні перетворення. Такі бібліотеки називають криптопровайдерами. Криптопровайдери мають стандартний набір функцій, який налічує 23 обов‘язкових та 2 необов‘язкових процедури. Ці процедури подано у таблиці 1.

Таблиця 1 Функції криптопровайдерів

Функція Короткий опис
CryptAcquireContext Використовується для створення дескриптора ключового контейнера у рамках визначеного криптопровайдера (КП).
CryptContextAddRef Збільшує на одиницю лічильник посилань на дескриптор КП.
CryptEnumProviders Використовується для отримання першого та наступних доступних КП.
CryptEnumProviderTypes Використовується для отримання першого та наступних доступних типів КП.
CryptGetDefaultProvider Повертає КП, встановлений за замовчуванням для вказаного типу КП.
CryptGetProvParam Повертає параметри КП
CryptReleaseContext Вивільняє дескриптор КП
CryptSetProviderCryptSetProviderEx Задає тип та назву КП за замовчуванням
CryptSetProvParam Встановлює параметри КП
CryptDeriveKey Створює сесійні криптографічні ключі з ключового матеріалу
CryptDestroyKey Звільняє дескриптор ключа
CryptDuplicateKey Робить копію криптографічного ключа
CryptExportKey Експортує криптографічні ключі із заданого контейнера
CryptGenKey Генерує випадкові криптографічні ключі та ключові пари
CryptGenRandom Генерує випадкову послідовність та зберігає її в буфері
CryptGetKeyParam Повертає параметри ключа
CryptImportKey Імпортує криптографічні ключі з ключового блоба у контейнер КП
CryptSetKeyParam Встановлює параметри ключа
CryptDecrypt Виконує операцію розшифрування даних
CryptEncrypt Виконує операцію за шифрування даних
CryptCreateHash Створює хешований потік даних
CryptDestroyHash Знищує об‘єкт хеш функції
CryptDuplicateHash Створює точну копію хеш-об‘єкта
CryptGetHashParam Повертає параметри хеш-об‘єкта
CryptHashData Додає дані до хеш-об‘єкта
CryptHashSessionKey Підмішує до хеш-об‘єкта сесійний ключ
CryptSetHashParam Встановлює параметри хеш-об‘єкту
CryptSignHash Обчислює значення ЕЦП від значення хешу
CryptVerifySignature Перевіряє ЕЦП заданого значення хешу

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

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

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

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

Картки з магнітною стрічкою сьогодні найбільш розповсюджені – у вжитку знаходяться понад 2 млрд. подібних карток. Магнітна стрічка розміщується на зворотній стороні картки та, згідно зі стандартом ISO 7811, складається з трьох доріжок. Перші дві призначені для зберігання ідентифікаційних даних, а на третю можна записувати інформацію (наприклад, поточне значення суми грошей на рахунку). Однак внаслідок малої надійності запису на магнітну стрічку, режим запису, як правило, не практикується, а так картки використовуються лише у режимі читання.

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

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

Окрім різниці у стандартах, криптопровайдери відрізняються способом фізичної організації збереження ключової інформації. З точки зору програмування спосіб зберігання ключів значення не має, однак він дуже важливий з точки зору експлуатації та безпеки комп‘ютерної системи. Існуючі криптопровайдери Microsoft зберігають ключову інформацію на жорсткому диску (у реєстрі або у файлах), а провайдери інших фірм (GemPlus, Schlumberger та Infineon) – на смарт-картках.

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