- •Безпека даних
- •Вступ. Основні поняття безпеки. Конфіденційність, цілісність та доступність даних. Класифікація загроз. Сервіси та механізми захисту.
- •Основні поняття і визначення криптографічного захисту даних.
- •Порушення, механізми і служби захисту.
- •Традиційне шифрування. Модель традиційного шифрування. Криптографія і криптоаналіз. Класична техніка шифрування: підстановки і перестановки.
- •Потокові і блокові шифри. Дифузія і конфузія. Шифр Файстеля. Диференційний та лінійний крипто аналіз. Принципи побудови блокових шифрів
- •Стандарт шифрування даних (des). Критерії, що лежать в основі конструкції des. Алгоритми "Подвійний" та "Потрійний" des.
- •Режими роботи блочних шифрів. Проблема та схеми розподілу ключів симетричного шифрування.
- •1. Режим електронної шифрувальної книги
- •2. Режим зчеплення шифрованих блоків
- •3. Режим шифрованого зворотного зв'язку
- •Генерування випадкових чисел. Використання та джерела випадкових чисел. Генератори псевдовипадкових чисел.
- •Криптографія з відкритим ключем. Принципи побудови криптосистем з відкритим ключем.
- •Алгоритм rsa
- •Порівняння основних характеристик симетричних та асиметричних алгориммів
- •Управління ключами і схема Діффі–Хеллмана.
- •1. Публічне оголошення
- •2. Публічно доступний каталог
- •3. Авторитетне джерело відкритих ключів
- •4. Сертифікати відкритих ключів
- •1. Простий розподіл секретних ключів
- •2. Розподіл секретних ключів із забезпеченням конфіденційності і аутентифікації
- •3. Гібридна схема
- •Аутентифікація повідомлень і функції хешування. Вимоги та функції аутентифікації.
- •1.1. Шифрування повідомлення
- •1.1.1. Традиційне шифрування
- •Коди автентичності повідомлень та функції хешування.
- •1. Коди автентичності повідомлень
- •1.1. Необхідні властивості кодів автентичності повідомлень
- •1.2. Коди автентичності повідомлень на основі des
- •2. Функції хешування
- •2.1. Вимоги, що пред'являються до функції хешування
- •2.2. Прості функції хешування
- •2.3. Атаки, в основі яких лежить парадокс задачі про дні народження
- •3. Захист функцій хешування і кодів автентичності повідомлень
- •3.1. Атаки з перебором всіх варіантів
- •3.2. Функції хешування
- •Алгоритми хешування. Алгоритм hmac.
- •1.1. Цілі розробки нмас
- •1.2. Алгоритм нмас
- •1.3. Захищеність нмас
- •Цифрові підписи та протоколи аутентифікації. Вимоги до цифрового підпису. Стандарт цифрового підпису dss.
- •1. Цифрові підписи
- •1.1. Вимоги
- •1.2. Безпосередній цифровий підпис
- •1.3. Арбітражний цифровий підпис
- •Протоколи аутентифікації. Взаємна та одностороння аутентифікація. (прочитати уважно номери малюнків і т.Д.)
- •2. Підходи на основі традиційного шифрування
- •3. Підходи на основі шифрування з відкритим ключем
- •4. Одностороння аутентифікація
- •5. Підхід на основі традиційного шифрування
- •6. Підходи на основі шифрування з відкритим ключем
- •Програмна реалізація криптографічних алгоритмів. Використання криптографічних функцій Microsoft CryptoApi в прикладному пз. Поняття про безпечний цикл розробки пз (sdl).
- •1. Будова і можливості Crypto api
- •2. Криптопровайдери
- •3. Контейнери ключів
- •4. Алгоритми
- •5. Сертифікати
- •6. Базові функції
- •6.1. Шифрування
- •6.2. Експорт сесійних ключів
- •6.3. Імпорт сесійних ключів
- •6.4. Розшифрування
- •6.5. Хешування
- •6.6. Цифровий підпис
- •6.7. Перевірка цифрового підпису
- •Методи і засоби створення захищеного програмного забезпечення.
- •3. Класифікація вразливостей захисту
- •4. Огляд існуючих аналізаторів
- •Відношення Історія експонатів
- •Список літератури
3. Контейнери ключів
Контейнером ключів називають частину бази даних ключів, яка містить пару ключів для обміну ключами і формування цифрового підпису. В ролі контейнерів ключів (сховищ пар ключів) використовують, наприклад, область тимчасової пам'яті, ділянка реєстру, файл на диску, смарт-карти. Контейнери ключів в системі можуть бути двох типів: користувальницькі і рівня системи. Користувальницькі контейнери існують в контексті роботи поточного користувача. За замовчуванням доступу до них більше ніхто не має (правда, існують можливості видачі доступу до контейнерів для інших користувачів). Контейнери ключів рівня системи використовуються, в основному, не в користувацьких програмах, а, наприклад, в сервісах (доступ до контейнерів ключів рівня системи можливий без інтерактивної ідентифікації користувача в системі). Контейнери ключів не існують самі по собі, а існують тільки в контексті криптопровайдера. Для кожного криптопровайдера існує свій власний набір контейнерів ключів. Це пояснюється тим, що різні криптопровайдери можуть по-різному реалізовувати навіть один і той же математичний алгоритм. Отже, і способи зберігання ключів можуть також сильно варіюватися від криптопровайдера до криптопровайдера.
Основними операціями з контейнерами ключів можна вважати:
Створення нового контейнера ключів. Виконується за допомогою функції CryptAcquireContext, описаної раніше в розділі про криптопровайдерів. Для створення нового контейнера ключів в якості останнього параметра даної функції передається значення CRYPT_NEWKEYSET. Необхідно також зауважити, що початково в новому контейнері ключів ніяких даних не міститься, і пари ключів необхідно генерувати самостійно за допомогою виклику функції CryptGenKey, або імпортувати.
Видалення існуючого контейнера ключів. Виконується за допомогою виклику функції CryptAcquireContext з останнім параметром, встановленим у CRYPT_DELETEKEYSET.
Генерація нової пари ключів. Виконується за допомогою виклику функції CryptGenKey. При генерації пари ключів для обміну ключами третій параметр даної функції встановлюють у AT_KEYEXCHANGE, а при генерації пари ключів для формування цифрового підпису - AT_SIGNATURE. Потрібно зауважити, що багато криптопровайдерів дозволяють використовувати пару ключів, створену для обміну, також і для формування цифрового підпису.
Отримання значення пари ключів. Виконується за допомогою виклику функції CryptGetUserKey. Прапори, що передаються в дану функцію, відповідають прапорам для генерації пари ключів.
Установка параметрів. Виконується за допомогою виклику функції CryptSetProvParam. В основному встановлюють тільки один параметр - дескриптор безпеки контейнера ключів. Даний параметр використовується, наприклад, для видачі доступу до контейнера не тільки користувачеві, що створив контейнер. Інші параметри контейнера ключів можуть сильно варіюватися від криптопровайдера до кріптопровайдера, і зазвичай добре розписані в документації, що поставляється безпосередньо з криптопровайдером.
Отримання параметрів. Виконується за допомогою виклику функції CryptGetProvParam. Набір одержуваних параметрів також може сильно варіюватися залежно від криптопровайдера. У якості цікавого стандартного параметра можна назвати параметр PP_UNIQUE_CONTAINER. В якості параметра, що повертається, передається унікальний (в масштабах всієї системи) рядок, що ідентифікує контейнер ключів. Зокрема, по цьому рядку часто можна дізнатися фізичне розташування контейнера ключів (наприклад, для контейнера ключів, розташованого в регістрі системи, на початку повертається рядки буде «REGISTRY»).
Перерахування контейнерів ключів. Виконується окремо для кожного криптопровайдера в системі за допомогою виклику функції CryptGetProvParam з параметром dwParam встановленим в PP_ENUMCONTAINERS
