Size: a a a

2021 January 25

KI

Kuzmin Ilia in Android Guards
Roman Sytnyk
Всем привет!

Кто-то сталкивался с таким, что нужно защитить локальным (!) пин-кодом доступ к KeyStore?
То есть, юзер вводит пин-код в приложении, и после этого получает доступ к ключу в KeyStore, который уже используется для своих нужд.
Биометрия не подходит.

KeyStore не поддерживает юзер-пароли. Как-бы все aliases, все ключи, уже доступны для использования в приложении, как только приложение запускается, я правильно понимаю?
Это действительно безопасно?

Какой самый адекватный способ сделать эту защиту ключу только поссле ввода локального пин-кода?

Есть мысль хранить PIN-код как KeyName с userID или чем-то таким, и делать проверку, что такой ключ есть, но не знаю на сколько это будет секьюрно.
Но опять же, каждый клюс в KeyStore должен/может быть запаролен, то есть не обязательно пилить свой пароль поверх другого пароля. Сами контейнеры будут с паролем. И повторюсь, в некоторых реализациях провайдеров, могут быть сторы без пароля, которые хранят только сертификаты
источник

R

Rtem in Android Guards
Roman Sytnyk
Всем привет!

Кто-то сталкивался с таким, что нужно защитить локальным (!) пин-кодом доступ к KeyStore?
То есть, юзер вводит пин-код в приложении, и после этого получает доступ к ключу в KeyStore, который уже используется для своих нужд.
Биометрия не подходит.

KeyStore не поддерживает юзер-пароли. Как-бы все aliases, все ключи, уже доступны для использования в приложении, как только приложение запускается, я правильно понимаю?
Это действительно безопасно?

Какой самый адекватный способ сделать эту защиту ключу только поссле ввода локального пин-кода?

Есть мысль хранить PIN-код как KeyName с userID или чем-то таким, и делать проверку, что такой ключ есть, но не знаю на сколько это будет секьюрно.
Хе-хе =) Вот это прямо моя тема. Как раз недавно делал большое исследование на эту тему. Планировал в какой-то момент поделиться результатами. Если коротко: ты не можешь защитить кейсторные ключи локальным пинкодом. Только системным. Увы
источник

R

Rtem in Android Guards
Если хочется защищать записи в KeyStore паролем, то твой путь лежит в файловый KeyStore. Который JKS
источник

RS

Roman Sytnyk in Android Guards
Rtem
Хе-хе =) Вот это прямо моя тема. Как раз недавно делал большое исследование на эту тему. Планировал в какой-то момент поделиться результатами. Если коротко: ты не можешь защитить кейсторные ключи локальным пинкодом. Только системным. Увы
Большое спасибо за ответ, и крутую статью, хотя немного не мой случай :)

А что на счет KeyStore - в нем действительно безопасно хранить ключи?
Потому что то, что я могу просто запросить в приложении список aliases и сразу использовать эти ключи – как-то пугает, действительно ли они там секьюрные такие.

В теории может быть несколько пользователей в приложении, и у каждого так ключ можно будет брать сохраненный прямо из списка aliases в KeyStore

Раньше особо не копал это тему, вот разбираюсь теперь
источник

KI

Kuzmin Ilia in Android Guards
ну ты по алиасу без пароля сможешь получить только сертификат, по идее
источник

KI

Kuzmin Ilia in Android Guards
для приватного ключа уже нужен пароль
источник

R

Rtem in Android Guards
@sytnyk_r в том и проблема, что если ты имеешь контроль над приложением, то ты также имеешь контроль над операциями шифрования/расшифровки. Даже в случае с аппаратным кейстором, если ты получил возможность динамической инструментации реального приложения с реальными данными, то ты победил =)
источник

R

Rtem in Android Guards
Но это не слишком распространненный случай. Хотя безусловно он тоже имеет место быть. При этом, аппаратный кейстор все еще безопаснее файлового. ИМХО
источник

KI

Kuzmin Ilia in Android Guards
Rtem
@sytnyk_r в том и проблема, что если ты имеешь контроль над приложением, то ты также имеешь контроль над операциями шифрования/расшифровки. Даже в случае с аппаратным кейстором, если ты получил возможность динамической инструментации реального приложения с реальными данными, то ты победил =)
имеется в виду шифрование своими ключами подставными?
источник

R

Rtem in Android Guards
Kuzmin Ilia
имеется в виду шифрование своими ключами подставными?
Не понял вопроса =(
источник

KI

Kuzmin Ilia in Android Guards
как можно получить доступ к операциям шифрования и дешифровки с помощью инструментации?
источник

KI

Kuzmin Ilia in Android Guards
если допустим контейнер запаролен
источник

R

Rtem in Android Guards
Kuzmin Ilia
если допустим контейнер запаролен
А пароль где хранится? =)
источник

KI

Kuzmin Ilia in Android Guards
в голове и видимо в хранилище
источник

R

Rtem in Android Guards
Kuzmin Ilia
в голове и видимо в хранилище
Ну вот если в голове и если это достаточно надежный пароль, то может занять какое-то время его перебор. Если этот пароль - пин-код, то перебор произойдет очень быстро. Но вообще, рассуждая о таких вещах, неплохо бы приводить конкретныые технологии о которых идет речь. "Контейнер" это очень общее понятие
источник

KI

Kuzmin Ilia in Android Guards
под контейнером я понимаю entry в keystore
источник

KI

Kuzmin Ilia in Android Guards
с парой ключей, публичный и приватный
источник

KI

Kuzmin Ilia in Android Guards
взять какой нибудь КриптоПро они так называют эту сущность
источник

R

Rtem in Android Guards
Kuzmin Ilia
под контейнером я понимаю entry в keystore
https://developer.android.com/training/articles/keystore#GeneratingANewPrivateKey - вот пример из оффдоки. Я не вижу тут пароля от ключа. Намекаю на то, чтобы ты привел конкретный кусок кода, о котором можно было бы говорить
источник

KI

Kuzmin Ilia in Android Guards
источник