Протокол Деннинга
Деннинг запропонував перебороти цю слабість модифікацією протоколу Нидхема й Шредера, що включає додаткову оцінку часу на кроках 2 і 3:
1. A -> KDC: IDA || IDB
2. KDC -> A: EKa [KS || IDB || T || EKb [KS || IDA || T] ]
3. A -> B: EKb [KS || IDA || T]
4. B -> A: EKS [N1]
5. A -> B: EKS [f (N1)]
Т - це оцінка часу, що гарантує А и B, що ключ сесії є тільки що створеним. Таким чином, і А, і В знають, що розподілений ключ не є старим. А й В можуть верифікувати часову оцінку перевіркою, що
|Clock - T| < Δt1 + Δt2,
де Δt1 - оцінювана нормальна розбіжність між годинниками KDC і локальними годинниками (в А або B) і t2 - очікувана мережна затримка часу. Кожний учасник може встановити свої годинники, орієнтуючись на певне довірене джерело. Оскільки часова оцінка Т шифрується з використанням секретних майстер-ключів, зломщик, навіть знаючи старий ключ сесії, не зможе досягти мети повторенням кроку 3 так, щоб В не помітив перекручування часу.
Кроки 4 і 5 не були включені в первісне подання, але були додані пізніше. Ці кроки підтверджують А, що В одержав ключ сесії.
Протокол Деннинга забезпечує більший ступінь безпеки в порівнянні із протоколом Нидхема й Шредера. Однак дана схема вимагає довіри до годинників, які повинні бути синхронізовані в мережі. В цьому є певний ризик, що полягає в тому, що розподілені годинники можуть розсинхронізуватись в результаті диверсії або ушкоджень. Проблема виникає, коли годинник відправника поспішає стосовно годинників одержувача. В цьому випадку супротивник може перехопити повідомлення від відправника й повторити його пізніше, коли оцінка часу в повідомленні стане рівної часу на вузлі одержувача. Це повторення може мати непередбачені наслідки.
Один спосіб обчислення атак повторення складається у вимозі, щоб учасники регулярно звіряли свої годинники з годинниками KDC. Інша альтернатива, при якій немає необхідності всім синхронізувати годинники, складається в довірі протоколам рукостискання, що використовує nonce.
Протокол автентифікації з використанням квитка
Даний протокол намагається перебороти проблеми, що виникли в попередніх двох протоколах. Він виглядає в такий спосіб:
1. A -> B: IDA || Na
2. B -> KDC: IDB || Nb || EKb [IDA || Na || Tb]
3. KDC -> A: EKa [IDB || Na || KS || Tb] || EKb [IDA || KS || Tb] || Nb
4. A -> B: EKb [IDA || KS || Tb] || EKS [Nb]
А инициализирует автентифікаційний обмін створенням nonce Na і посилкою його й свого ідентифікатора до В у незашифрованому виді. Цей nonce повернеться до А в зашифрованому повідомленні, що включає ключ сесії, гарантуючи А, що ключ сесії не старий.
B повідомляє KDC, що необхідно ключ сесії. Це повідомлення до KDС включає ідентифікатор В и nonce Nb. Даний nonce повернеться до В у зашифрованому повідомленні, що включає ключ сесії, гарантуючи B, що ключ сесії не застарів. Повідомлення В к KDC також включає блок, зашифрований секретним ключем, поділюваним В и KDC. Цей блок використовується для вказівки KDC, коли закінчується час життя даного ключа сесії. Блок також специфікує наміченого одержувача й містить nonce, отриманий від А. Цей блок є свого роду "вірчою грамотою" або "квитком" для А.
KDC одержав nonces від А и В і блок, зашифрований секретним ключем, що В розділяє з KDC. Блок служить квитком, що може бути використаний А для наступних автентифікацій. KDC також посилає А блок, зашифрований секретним ключем, поділюваним А и KDC. Цей блок доводить, що В одержав початкове повідомлення А (IDB), що в ньому втримується припустима оцінка часу й немає повтору (Na). Цей блок забезпечує А ключем сесії (KS) і встановлює обмеження часу на його використання (Тb).
А посилає отриманий квиток В разом з nonce B, зашифрованим ключем сесії. Цей квиток забезпечує В ключем сесії, що той використовує для дешифрування й перевірки nonce. Той факт, що nonce B розшифровано ключем сесії, доводить, що повідомлення прийшло від А и не є повтором.
Даний протокол автентифікує А и В і розподіляє ключ сесії. Більше того, протокол надає в розпорядження А квиток, що може використовуватися для його наступної автентифікації, крім необхідності повторних контактів з автентифікованим сервером. Припустимо, що А и В установили сесію з використанням описаного вище протоколу й потім завершили цю сесію. Згодом, але до витікання ліміту часу, установленого протоколом, А може створити нову сесію з B. Використовується наступний протокол:
1. A -> B: EKb [IDA || KS || Tb], Na'
2. B -> A: Nb', ES [Na']
3. A -> B: ES [Nb']
Коли В одержує повідомлення на кроці 1, він перевіряє, що квиток не прострочений. Заново створені nonces Na' і Nb' гарантують кожному учасникові, що не було атак повтору. Час Tb є часом щодо годинника B. Таким чином, ця часова мітка не вимагає синхронізації, так як В перевіряє тільки їм самим створену часову оцінку.
Використання шифрування з відкритим ключем
Протокол автентифікації з використанням автентифікационного сервера.
Розглянемо протокол, що використовує оцінки часу й автентифікаційний сервер:
1. A -> AS: IDA || IDB
2. AS -> A: EKRas [IDA || KUa || T] || EKRas [IDB || KUb || T]
3. A -> B: EKRas [IDA || KUa || T] || EKRas [IDB || KUb || T] || EKUb [EKRa [KS || T]]
В цьому випадку третя довірена сторона є просто автентифікаційним сервером AS, так як третя сторона не створює й не розподіляє секретний ключ. AS просто забезпечує сертифікацію відкритих ключів учасників. Ключ сесії вибирається й шифрується А, отже, не існує ризику, що AS зламають і змусять розподіляти скомпрометовані ключі сесії. Оцінки часу захищають від повтору скомпрометованих ключів сесії.
Даний протокол компактний, але, як і раніше, вимагає синхронізації годинників.
