угроза, что кто-то получает базу данных и получает ключи означает, что они могут использовать ключи API для доступа к данным в базе данных, которые у них уже есть, так что не выиграть там.
Угроза, что кто-то может получить доступ к базе данных, получить пароли, означает, что они могут повторно использовать эти пароли на других веб-сайтах с тем же именем пользователя, потому что люди склонны повторно использовать свои пароли.
Еще одна причина, заключающаяся в том, что пароли в ясном или легко обратимом состоянии - это кто-то из вашей компании, может завладеть паролями и начать делать плохие вещи, действуя как пользователь. Какой риск вы можете иметь, если ваши ключи API находятся в ясном виде.
Как правило, HMAC является решением для криптографического вычисления безопасного значения из одного секретного ключа и некоторой общественной ценности.
Посмотрите на HMAC. С помощью HMAC вы можете загружать секретный ключ в память с помощью приложения (файл конфигурации, считывать AMAZON KMS, вводить в начало приложения или, тем не менее, вы хотите получить там секретный ключ).
В базе данных хранится токен. Token = UUID()
например. Токен должен быть уникальным для пользователя, маркер может быть версией в случае, если вам нужно регенерировать, а токен может быть случайным (например, UUID). Знак не секрет.
Ключ API вычисляется с использованием секретного ключа (SK
) и маркер пользователя (UT
) следующим образом:
API_SECRET = HMAC(SK, UT)
Затем распределить эту API_KEY
и API_SECRET
пользователю, и когда пользователь пытается подключиться, вы можете вычислить API_SECRET
:
- Получить пользователь запись из базы данных (вы, вероятно, уже просите пользователь предоставить свое имя пользователя)
Вычислить api_secret от UT в базе данных:
API_SECRET_DB = HMAC (СК, UT)
Сравнить вычисленный API_SECRET_DB
к одному представленному в запросе:
, если (API_SECRET_DB == API_SECRET_FROM_REQUEST) {// пользователь Войти }
Нижняя линия, вы только защитить секретный ключ, а не каждый грех gle credential.
Почему бы не просто использовать секретный ключ сервера для шифрования каждого ключа API? Когда ключ API приходит через запрос, зашифровывает его и сравнивает с сохраненным зашифрованным значением. Расшифруйте сохраненное значение, если необходимо отобразить ключ API. –
HAMC - это одностороннее шифрование, обычно используемое в этих сценариях. Рассмотрите это тип шифрования, за исключением того, что это один из способов, поэтому вы не можете расшифровать данные. – Jonathan
ОП задал вопрос о просмотре ключей API. Для одностороннего хэширования, где вам не нужно восстанавливать оригинал, я бы использовал хэш-пароль, например, bcrypt или scrypt, чтобы вы получили растяжение и соление ключа. –