Я розумію, що специфікація OAuth нічого не вказує про походження коду ConsumerKey, ConsumerSecret, AccessToken, RequestToken, TokenSecret або Verifier, але мені цікаво, чи є найкращі практики створення значно захищених жетонів (особливо Token / Таємні комбінації).
Як я бачу, існує декілька підходів до створення жетонів:
- Просто використовуйте випадкові байти, зберігайте в БД, пов’язаних зі споживачем / користувачем
- Хешіть деякі дані, що стосуються користувача / споживача, зберігайте в БД, пов’язаних зі споживачем / користувачем
- Шифруйте дані, що стосуються користувача / споживача
Переваги до (1) - це база даних є єдиним джерелом інформації, яка видається найбільш захищеною. Було б важче запустити атаку проти, ніж (2) або (3).
Хешування реальних даних (2) дозволить повторно генерувати маркер з імовірно вже відомих даних. Можливо, насправді не надавати жодних переваг (1), оскільки все одно потрібно зберігати / шукати. Більш інтенсивний процесор, ніж (1).
Шифрування реальних даних (3) дозволило б розшифрувати інформацію. Це вимагатиме менше сховища та потенційно меншої кількості пошукових запитів, ніж (1) та (2), але також може бути менш безпечним.
Чи є інші підходи / переваги / недоліки, які слід враховувати?
EDIT: ще одна думка полягає в тому, що В Токенах ОБОВ'ЯЗКОВО має бути якесь випадкове значення, оскільки повинно існувати можливість закінчення терміну дії та повторного випуску нових токенів, тому воно не повинно складатися лише з реальних даних.
Дотримуйтесь питань :
Чи є мінімальна довжина токена, щоб зробити істотно криптографічно захищеним? Як я розумію, довші Token Secrets створюватимуть більш безпечні підписи. Чи правильно це розуміння?
Чи є переваги використання певного кодування над іншим з точки зору хешування? Наприклад, я бачу багато API, які використовують шістнадцяткові кодування (наприклад, рядки GUID). В алгоритмі підпису OAuth Token використовується як рядок. З шістнадцятковим рядком доступний набір символів був би набагато меншим (передбачуванішим), ніж скажімо, з кодуванням Base64. Мені здається, що для двох рядків однакової довжини одна з більшим набором символів мала б краще / ширше хеш-розподіл. Мені здається, це покращило б безпеку. Чи правильне це припущення?
Специфікація OAuth порушує цю проблему в 11.10 "Ентропія секретів" .