Где почитать про создание инфраструктуры ключей регистрации для своего приложения?
Озадачился написанием для своего приложения системы отсылки пользователям ключей регистрации, соответственно их проверка на валидность в приложении, хранение в удаленной бд, срок жизни, уровень подписки премиум и пр.
И тут подумалось, что наверняка на хабре подобная тема обсуждалась более умными людьми. Начал гуглить и искать:
"Ключи регистрации для своего приложения"
"Создание инфраструктуры ключей регистрации"
Но выдача забита блокчейнами, токенами, криптованием и прочим не относящимся к сабжу.
Подскажите варианты поисковых запросов или, может, свой опыт.
Как то решал задачу, по генерации короткоживущих токенов аутентификации, при том чтоб нигде не хранить, легко было проверить, сложно подделать, да еще и компактнее чем JWT (решающий аналогичную задачу).
Возможно сам принцип Вам может подойти:
1. id пользователя приводится к бинарному представлению (у меня был UUID - это 16 байт)
2. вычисляется unix-timestamp для времени, до которого данный токен валиден (еще 4 байта)
3. от конкатенации 2х предыдущих значений считается hmac-sha256 (еще 32 байта)
4. Итоговое значение (52 байта) кодируется в base64 для удобства (72 символа) и отправляется пользователю
Из плюсов:
- Проверить что токен протух может кто угодно, ничего не запрашивая
- Запрашивать данные юзера из БД можно паралельно с проверкой подписи.
- Подписать может только владелец секрета, а если его раскрыли - генерим новый и все предыдущие токены просто становятся невалидными
Минус только 1: Проверить подпись может только владелец секрета
Даша Циклаури, зависит от ситуации, если запрашивать паралельно - сэкономим время для хороших пользователей, если после проверки - снизим нагрузку на БД при плохих запросах
Дмитрий Беляев, да это понятно, но у пользователя же не написано хороший он или плохой. и что характерно, хороший пользователь может вдруг стать плохим
Даша Циклаури, ну в большинстве ситуаций, как мне кажется, нагрузка не большая (чтоб 1 бесполезный запрос как то сильно повлиял) и ломают не нацелено - плохие пользователи тоже будут единичны
Но не плохо иметь возможность быстро это логику сменить, если вдруг нацелено ломать начали
забыл пояснить, что вопрос безопасности для меня на последнем месте, сейчас вопрос зачищаемости интернета на удивление прост, достаточно пожаловаться на авторские права и ломанную версию в большинстве случаев удалят. Да и даже этим заниматься не буду, у софтины частые циклы обновлений, лояльные пользователи, своя дружелюбная комьюнити тусовка. Меня больше интересует например защититься от одновременного использования премиум подписки несколькими пользователями. Чтобы они не могли друг с другом делиться. Соответственно, думаю, просто онлайн проверка ключей, если где-то уже зафиксировано использование на данный момент, то отказ в разрешении. Отсюда надо предусмотреть случаи, когда программа жестко крешится, то ключ тоже должен протухнуть на сервере. Либо при проверке ключа высылать еще hardware id, что типа с этого компа ключ начат использоваться, если приходят попытки с других компов с таким же ключом, то отказ.
Честно говоря, удивлен, что эта тема вообще никак не развита и практически не обсуждаема на форумах. Каждый тихонечко городит свой велосипед, решения весьма очень кастыльные и типа так и должно быть, мол, крякеру надо подобрать индивидуальный подход. Но мне лично видится, что эпоха крякеров уходит в прошлое даже в России, люди все чаще предпочитают купить за недорого софтинку, чем поставить сомнительную штуку и думать, нету ли в ней чего такого.