FIDO2
)
"authenticatorSelection": {
def is_fido2_required(user: "User", action: str | None = None, context: dict | None = None) -> bool:
db.commit()
"timeout": 300000,return False event_type="FIDO2_LOGIN_SUCCESS",
5. |-
| AC-3 | WebAuthn + CTAP2. | style="background:#c8e6c9;" | Must have | |||||||||||||||||||||||||||||||||||||||||||||||||
| FIDO2 для адміністраторів | - | backup_state | boolean | Чи виступає як credential у backup-синхронізації. Критерій | - | Passkey | Так | Так | }
db=db, }, SEO title: FIDO2 для ERP SEO keywords: FIDO2, WebAuthn, CTAP2, passkeys, security key, phishing-resistant MFA, K2 ERP, ERP security, MFA, 2FA, кібербезпека ERP, YubiKey, passkey </noinclude>
{{SEO
Шаблон для службового SEO-опису сторінки.
}}
user_id=user.id, | |||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| AC-12 | - | TOTP | Так | Ні | Код можна ввести на фальшивому сайті. Компонент
11.1. Перевірка, чи потрібен FIDO211. Приклад Python-логіки
)
16. Висновок], |
- | Email OTP | Частково | Ні | Якщо зламана пошта — зламана 2FA.=== 9.1. fido2_credentials ===
) 9. |- |
Push із number matching | Так | Краще | Менше ризику випадкового approve. audit_logger.log(
credential_id=assertion_response ["credential_id"], user_id=user_id, return True 9. Модель даних FIDO2 | ||||||||||||||||||||||||||||||||||||
| id | uuid | - | status | varchar | - | authenticator_type | varchar | Подія логуються, користувач системи реєструє новий ключ. | style="background:#c8e6c9;" | Must have | ||||||||||||||||||||||||||||||||||||||||||
| Мінімум 2 зареєстровані ключі для admin | базовий і резервний ключ. FIDO2 / WebAuthn / passkeys виступає ключовою рисою Критично критично: SMS-коди, email-коди, TOTP і push-підтвердження зменшують ризик злому, але не виступає як на 100% захищеними від phishing. Чому потрібен FIDO2
def save_fido2_credential(user_id: str, verification_result: dict, db: "Session") -> "Fido2Credential": "public_key": verification_result ["public_key"],
"user": {
| |||||||||||||||||||||||||||||||||||||||||||||||||
| AC-9 | користувач системи змінює банківські реквізити. №
"id": "erp.example.com", credential = fido2_credential_repository.get_by_credential_id( public_key=credential.public_key, 10.4. Завершити вхід через FIDO2</syntaxhighlight> |
* визначити ролі, для яких FIDO2 обов’язковий;
db.commit() expected_origin="https://erp.example.com", 4. | style="background:#c8e6c9;" | Step-up FIDO2 + погодження. | style="background:#ffcc80;" | Рекомендовано | ||||||||||||||||||||||||||||||||||||||||||||||||
| Масовий експорт даних | - | Passkey | платформа вимагає step-up FIDO2 і логування. |- | challenge_type | varchar | style="background:#c8e6c9;" | Must have | ||||||||||||||||||||||||||||||||||||||||||||
| Журнал FIDO2-подій | Реєстрація, вхід, помилка, видалення ключа.=== 9.3. fido2_events ===
data={
"rp_id": "erp.example.com", |
SEO-опис
"residentKey": "preferred", |
- | AC-13 | Admin recovery. Дія
"CHANGE_USER_ROLE", Етап 5. Масове впровадження |
}
event_type="FIDO2_LOGIN_FAILED", audit_logger.log( db.commit() Потрібно передбачити:
|
AC-17 | - | WebAuthn | - | sign_count | integer | Вхід блокується або вимагається реєстрація FIDO2. | style="background:#ffcc80;" | Рекомендовано | |||||||||||||||||||||||||||||||||||||
| Віддалений доступ | Вищий ризик phishing і компрометації. if user.role in ["SUPER_ADMIN", "ADMIN", "CFO", "CHIEF_ACCOUNTANT"]:
"credential_id": verification_result ["credential_id"], |
Очікуваний результат
6. Де FIDO2 має бути обов’язковим10. API K2 ERP для FIDO2</div>
{| class="wikitable"
|-
| AC-1
| користувач системи додає FIDO2 security key. Приклад
"id": str(user.id),
=== 15.1. Реєстрація FIDO2 ===
}
"user_id": user_id,
is_valid = fido2_service.verify_assertion(
"name": user.email,
4. POST /api/v1/security/fido2/registration/options
! | Потрібне погодження другим адміністратором.=== 10.5. Список ключів користувача ===
<pre>
},
|-
| FIDO2 для Super Admin
| Без FIDO2 super admin не здатна увійти. Публічний ключ зберігається в K2 ERP.== 3. FIDO2, passkeys і security keys ==
return True
"MASS_EXPORT",
<div style="border-left: 8px solid #2e7d32; background: #e8f5e9; padding: 14px 18px; margin: 16px 0;">
|-
| id
| uuid
| ID події. |-
| FIDO2 security key
| style="background:#c8e6c9;" | Так
| style="background:#c8e6c9;" | Так
| Рекомендовано для критичних ролей. {| class="wikitable"
2. №
* super admin;
* адміністратори;
* фінансовий директор;
* провідний бухгалтер;
* 5–10 power users;
* перевірка recovery;
* перевірка step-up дій. Тип
"name": "K2 ERP",
"authenticator_type": verification_result.get("authenticator_type"),
! | style="background:#ef9a9a;" | Обов’язково
|-
| style="background:#ef9a9a;" | Фінансовий директор
| Платежі, бюджети, банківські інформаційні дані. |-
| SMS OTP
| style="background:#fff9c4;" | Частково
| style="background:#ef9a9a;" | Ні
| Код можна виманити або перехопити. |-
| Масовий експорт клієнтів
| style="background:#ef9a9a;" | Витік бази. | USB/NFC/BLE security key. |-
| AC-7
| Ключ відкликаний. | USB/NFC security key. | style="background:#c8e6c9;" | Must have
|-
| Recovery через погодження
| Відновлення доступу до admin-акаунта потребує погодження. | style="background:#ffcc80;" | Step-up FIDO2
|}
{| class="wikitable"
"user_id": user.id,
! Автентифікатор створює пару ключів. |-
| user_agent
| text
| Браузер / пристрій. користувач системи відкриває K2 ERP. |-
| public_key
| text
| Публічний ключ. користувач системи підтверджує вхід на пристрої або ключі. |-
| expires_at
| timestamp
| Строк дії. | Він показується в контрольному списку. if context and context.get("remote_access") is True:
</div>
!== 8. Політика FIDO2 для K2 ERP ==
[[Категорія:Контроль доступу]]
'''Головне правило:''' для ERP пароль і одноразовий код — це вже недостатньо для критичних ролей.== 4. Чим FIDO2 сильніший за SMS, TOTP і push ==
* [[K2 ERP]]
* [[Кібербезпека ERP]]
* [[MFA]]
* [[2FA]]
* [[FIDO2]]
* [[WebAuthn]]
* [[CTAP2]]
* [[Passkeys]]
* [[Security Key]]
* [[TOTP]]
* [[API Security]]
* [[Журнал аудиту]]
* [[Incident Response]]
* [[Zero Trust]]
7. |-
| AC-4
| Origin неправильний. | style="background:#c8e6c9;" | Step-up FIDO2 адміністратора. |-
| challenge
| text
| Challenge для WebAuthn. )
6. ! ! Поле
ERP — це платформа, де компрометація доступу здатна мати прямі фінансові наслідки. Поточний метод
== 14. План впровадження FIDO2 в K2 ERP ==
"pubKeyCredParams": [
! Ризик
return credential
POST /api/v1/security/fido2/registration/verify
=== 10.1. Почати реєстрацію ключа ===
<pre>
=== 11.2. Створення registration challenge ===
! '''Зелена зона:''' K2 ERP використовує FIDO2 / passkeys для критичних ролей, step-up FIDO2 для небезпечних операцій, dashboard покриття ключами, журнал подій і контроль recovery. | style="background:#c8e6c9;" | Step-up FIDO2 + журнал.</div>
== 5. Як функціонує FIDO2 у K2 ERP ==
if action in [
<syntaxhighlight lang="python">
|-
| style="background:#ef9a9a;" | Super Admin
| Повний контроль над системою. :contentReference [oaicite:1]{index=1}
'''FIDO2''' — це сучасний стандарт автентифікації, який дає можливість входити в систему без класичного пароля або використовувати сильний другий фактор, захищений криптографією. Поле
=== Етап 1. Аудит доступів ===
},
1. Захищає від викраденого пароля
</syntaxhighlight>
6. |-
| AC-10
| Адміністратор створює API token. |-
| status
| varchar
| ACTIVE, LOST, DISABLED, REVOKED. 7. Контроль
! {| class="wikitable"
return user.security_policy.require_fido2_for_remote_access
'''Червона зона:''' адміністратори, фінансовий блок, бухгалтерський обліковий облік або керівники входять у ERP через пароль, SMS або email-код без FIDO2. | Сесія створюється після успішної перевірки assertion. Коментар
=== 5.2. Вхід користувача ===
"authenticator_type": credential.authenticator_type,
payload={"credential_record_id": str(credential.id)},
|-
| Зміна банківських реквізитів
| style="background:#ef9a9a;" | Підміна рахунку. | Вхід відхиляється. |-
| last_used_at
| timestamp
| Останнє використання. |-
| created_at
| timestamp
| Дата створення. K2 ERP перевіряє підпис публічним ключем. SEO-опис
POST /api/v1/security/fido2/credentials/{credential_id}/mark-lost
! | style="background:#c8e6c9;" | Step-up FIDO2 + двоетапне погодження. | Вхід у K2 ERP через passkey. '''Перевага FIDO2:''' автентифікація криптографічно прив’язується до справжнього домену K2 ERP. |-
| Підтвердження платежу
| style="background:#ef9a9a;" | Фінансова втрата. |}
=== 13.2. Проблемні користувачі ===
if not credential or credential.status != "ACTIVE":
=== 15.3. Step-up FIDO2 ===
[[Категорія:K2 ERP]]
{| class="wikitable"
|-
| AC-5
| користувач системи входить із FIDO2. |}
)
=== 15.4. Recovery ===
db=db,
! Якщо FIDO2 можна обійти через просте прохання в чаті, захист втрачає сенс. Для адміністратора, бухгалтера, фінансового директора і керівника стандартом має бути '''FIDO2 або passkey'''. K2 ERP створює WebAuthn registration challenge. У системі зберігається тільки публічний ключ і технічні параметри credential. |-
| credential_id
| text
| ID WebAuthn credential. |-
| user_id
| uuid
| користувач системи. | Вхід відхиляється. Браузер передає challenge автентифікатору.</syntaxhighlight>
[[Категорія:WebAuthn]]
{"type": "public-key", "alg": -257}
"status": "PENDING",
! |-
| AC-2
| користувач системи додає passkey. |}
"challenge": challenge,
'''Ризик:''' якщо вхід у ERP захищено тільки паролем, SMS-кодом або TOTP-кодом, користувача все ще можна атакувати через phishing-сайт, який імітує сторінку входу. {| class="wikitable"
! |-
| Зміна ролі користувача
| style="background:#ef9a9a;" | Розширення доступу. * NIST SP 800-63B Revision 4. Очікуваний результат
! Автентифікатор підписує challenge приватним ключем. {| class="wikitable"
{| class="wikitable"
</syntaxhighlight>
'''Правильна модель:''' K2 ERP ніколи не зберігає приватний ключ користувача. | Passkey реєструється як platform authenticator. credential = fido2_credential_repository.create(
=== 10.3. Почати вхід через FIDO2 ===
! | платформа вимагає step-up FIDO2.<div style="border-left: 8px solid #2e7d32; background: #e8f5e9; padding: 14px 18px; margin: 16px 0;">
{| class="wikitable"
=== 10.6. Відкликати ключ ===
"backup_eligible": verification_result.get("backup_eligible"),
|-
| Super Admin із FIDO2
| 100%
| style="background:#c8e6c9;" | Норма
|-
| Адміністраторів із FIDO2
| 100%
| style="background:#c8e6c9;" | Норма
|-
| Фінансових ролей із FIDO2
| 80%
| style="background:#ffcc80;" | Потрібна дія
|-
| Бухгалтерів із FIDO2
| 76%
| style="background:#ffcc80;" | Потрібна дія
|-
| Користувачів тільки з SMS
| 18
| style="background:#ef9a9a;" | Замінити
|-
| Втрачених ключів
| 2
| style="background:#ffcc80;" | Контроль
|-
| Ключів без використання понад 90 днів
| 11
| style="background:#fff9c4;" | Перевірити
|-
| Підозрілих FIDO2-помилок
| 3
| style="background:#ef9a9a;" | Критично
|}
credential.last_used_at = utc_now()
! Ризик
! №
== 15. Acceptance Criteria ==
!</div>
event_type="FIDO2_CREDENTIAL_REGISTERED",
! | Реєстрація не приймається. | платформа вимагає step-up FIDO2. def verify_fido2_login(user: "User", assertion_response: dict, db: "Session") -> bool:
=== 9.2. fido2_challenges ===
'''Правильне рішення для бізнесу для K2 ERP:''' впровадити FIDO2 як базовий або пріоритетний метод входу для критичних ролей: адміністраторів, фінансових користувачів, головного бухгалтера, керівників, HR / зарплати, користувачів із віддаленим доступом і користувачів, які виконують критичні дії. | style="background:#c8e6c9;" | Must have
|-
| Step-up FIDO2 для критичних дій
| Потрібне повторне підтвердження. |-
| AC-8
| користувач системи із роллю admin не має FIDO2. |-
| aaguid
| varchar
| Ідентифікатор моделі автентифікатора, якщо доступний. :contentReference [oaicite:3]{index=3}
=== 8.2. Рекомендовані правила ===
<pre>
=== 15.2. Вхід через FIDO2 ===
! Очікуваний результат
! | Touch ID, Face ID, Windows Hello. Для чого потрібен
=== 11.4. Перевірка входу ===
=== 15.5. Dashboard ===
=== 10.2. Завершити реєстрацію ключа ===
<div style="border-left: 8px solid #6a1b9a; background: #f3e5f5; padding: 14px 18px; margin: 16px 0;">
GET /api/v1/security/fido2/credentials
! | дає можливість використовувати USB, NFC або BLE security key. |-
| ip_address
| varchar
| IP. |-
| backup_eligible
| boolean
| Чи здатна credential бути синхронізованим. |-
| AC-16
| виступає як admin без FIDO2. | style="background:#ffcc80;" | Рекомендовано
|-
| style="background:#ffcc80;" | Керівники
| Доступ до управлінської звітності. |-
| Roaming authenticator
| Переносний автентифікатор. |-
| Push
| style="background:#c8e6c9;" | Так
| style="background:#ffcc80;" | Частково
| виступає як ризик MFA fatigue. |-
| Пароль
| style="background:#ef9a9a;" | Ні
| style="background:#ef9a9a;" | Ні
| Найслабший варіант для ERP. Тому recovery має бути сильним і контрольованим. | Він підсвічується червоним або помаранчевим. Якщо перевірка успішна — створюється сесія. |-
| AC-18
| виступає як втрачений ключ. | Windows Hello, macOS/iCloud Keychain, Android, iOS, 1Password, Bitwarden. | Реєстрація відхиляється. Правило
! | style="background:#c8e6c9;" | Must have
|}
]:
* FIDO2 для всіх фінансових ролей;
* FIDO2 для користувачів із доступом до зарплати;
* FIDO2 для користувачів із віддаленим доступом;
* passkeys для зручного входу з корпоративних пристроїв;
* фізичні security keys для адміністраторів;
* hardware security key як резерв для керівника;
* заборона реєстрації невідомих пристроїв без підтвердження;
* регулярний аудит зареєстрованих FIDO2-ключів. | Він підсвічується червоним. Захищає від phishing
return False
! Роль / зона
! |-
| AC-11
| користувач системи запускає масовий експорт. |}
5. |-
| CTAP2
| Протокол взаємодії між браузером / ОС і зовнішнім автентифікатором. платформа створює authentication challenge. |-
| Генерація API token
| style="background:#ef9a9a;" | Створення прихованого доступу. Критерій
return False
"expires_at": utc_now_plus_minutes(5),
db=db,
assertion_response=assertion_response,
FIDO2 потрібно використовувати не тільки для входу, а й для підтвердження небезпечних операцій. |-
| transport
| varchar
| USB, NFC, BLE, INTERNAL. | style="background:#c8e6c9;" | Must have
|-
| Заборона SMS для admin
| SMS не допускається як базовий метод для admin. Критерій
POST /api/v1/security/fido2/step-up/verify
<pre>
|
№
"sign_count": verification_result.get("sign_count", 0),
| |||||||||||||||||||||||||||||||||||||||||||||||
| AC-15 | Адміністратор відкриває dashboard FIDO2. Очікуваний результат
11.3. Збереження credential2. |- |
device_name | varchar | Назва пристрою. SEO-опис | Статус
"APPROVE_PAYMENT", 3. Критерій
користувач системи здатна втратити security key або пристрій із passkey. ! SEO-опис
"challenge_type": "REGISTRATION",
{| class="wikitable"
! * Внутрішні вимоги K2 ERP до доступів, MFA, FIDO2, журналювання та критичних дій. |-
| Security key
| Фізичний ключ автентифікації. Критерій
"aaguid": verification_result.get("aaguid"),
NIST SP 800-63B Revision 4 зазначає, що застосунки рівня AAL2 повинні пропонувати phishing-resistant варіант автентифікації. Поле ) "attestation": "none", return True audit_logger.log( | |||||||||||||||||||||||||||||||||||||||||||||
| id | uuid | - | rp_id | varchar | - | created_at | timestamp | - | user_id | uuid | користувач системи. Метод
|