Size: a a a

2019 July 29

NK

Nikita Kulikov in Android Guards
Или в случае ключа для сервера
источник

СП

Сергей П. in Android Guards
Мне кажется тут математику не обойти. Единственный способ исключить брутфорс подбор 4 значного пина за максимум 10000 попыток - это блокировка подбора после пары неудачных попыток. А локально оно или на сервере - уже неважно
источник

NK

Nikita Kulikov in Android Guards
+1
источник

EK

Evgeniy Kuznetsov in Android Guards
С этим никто не спорит. В статье идёт речь, о шифровании RefreshToken и безопасном его хранении на устройстве. Сервер проверяет неудачные попытки и блокирует. Я же описал схему, как проверить тоже самое офлайн
источник

EK

Evgeniy Kuznetsov in Android Guards
Просто там в комментах этот вопрос всплыл, вот я и решил, что это актуально. Видимо офлайн никому не нужен
источник

NK

Nikita Kulikov in Android Guards
Я так и не понял твою идею
источник

EK

Evgeniy Kuznetsov in Android Guards
Есть RefreshToken. Он шифруется пином и сохраняется на девайсе. При входе в приложение запрашивается пин. Если есть онлайн, то расшифрованый REfreshToken отправляется на сервер, там проверяется и пользователя пускает в приложение (или не пускает). Нужно в офлайне сделать тоже самое. Проверить правильные ли пин вводится и пустить пользователя в приложение (или не пустить)
источник

EK

Evgeniy Kuznetsov in Android Guards
RefreshToken - случайный набор байт
источник

NK

Nikita Kulikov in Android Guards
Я не понимаю как происходит валидация оффлайн и что спасает от перебора
источник

EK

Evgeniy Kuznetsov in Android Guards
В приложении перебор блочится счётчиком неудачных попыток. Если вытащить шифрованый токен из приложения, то перебором ты будешь получать расшифрованный текст, по которому невозможно определить, что он верный
источник

IC

Ilya Chirkov in Android Guards
Evgeniy Kuznetsov
В приложении перебор блочится счётчиком неудачных попыток. Если вытащить шифрованый токен из приложения, то перебором ты будешь получать расшифрованный текст, по которому невозможно определить, что он верный
Ну приложение же как-то определяет, что он верный
источник

EK

Evgeniy Kuznetsov in Android Guards
Evgeniy Kuznetsov
Тихо как-то в группе 😀 Предлагаю обсудить. Навеяно статьёй https://habr.com/ru/post/423753/, где автор (@NeonLost) писал, что пин нужно валидировать только на сервере. Думал, как можно проверять валидность пина локально на девайсе (для работы в оффлайн режиме, например), если будем шифровать данные ключём выведенным из пина, с помощью AES/CBC/NoPadding.
Пришёл к такой схеме:
1. Когда пользователь создал пин, мы выводим из него ключ (назовём его PinKey)
2. В это же время генерим ключ в Android KeyStore - AES или RSA, что позволяет Api level (KeyStoreKey)
3. Генерим рандом байты (Challenge)
4. Шифруем Challenge с помощью PinKey (PinEncryptedChallenge) и KeyStoreKey (KeyStoreEncryptedChallenge) и сохраняем в префы
5. Когда надо проверить пин (CandidatePinKey) локально расшифровываем KeyStoreEncryptedChallenge с помошью KeyStoreKey и получаем эталон Challenge. Расшифровываем PinEncryptedChallenge с помощью PinCandidateKey и получаем candidateChallenge. Сравниваем с эталоном - совпало CandidatePin - OK. Нет - NotOK.

Так как Challenge не зашит в приложении, реверсом его не достать и пин не забрутфорсить.

Такие мысли. Рабочая ли схема, или что-то упустил? Может какие подводные камни заметили?
Тут описал как
источник

IC

Ilya Chirkov in Android Guards
Evgeniy Kuznetsov
Тут описал как
Ну если приложение может определить, то и кто угодно может
источник

СП

Сергей П. in Android Guards
От приложения в которое залезли отладчиком не поможет
источник

EK

Evgeniy Kuznetsov in Android Guards
Ilya Chirkov
Ну если приложение может определить, то и кто угодно может
Как?
источник

IC

Ilya Chirkov in Android Guards
Как описано выше))
источник

IC

Ilya Chirkov in Android Guards
Повторить все действия, но без ограничения на количество
источник

EK

Evgeniy Kuznetsov in Android Guards
Ilya Chirkov
Как описано выше))
Там используются ключи из Android KeyStore, к которым есть доступ только у приложение, которое их сгенерило
источник

IC

Ilya Chirkov in Android Guards
С рутом у всех есть доступ
источник

СП

Сергей П. in Android Guards
А, ну ключи в сторе труднодоступны, в этом смысле да.
источник