Size: a a a

2020 August 10

R

Rtem in Android Guards
Ок. А почему бы тогда тебе не сделать так:
В коде есть KDF функция, которая генерирует ключ, а в качестве секрета к ней прилетает строка из бэка. Получившийся ключ сохраняется в кейсторе и все операции шифрования/расшифрования производятся с этим ключем. Естественно строка прилетающая с бэка должна быть уникальной для каждого юзера.

И появляется она в памяти только один раз, при создании ключа.
источник

R

Rtem in Android Guards
При этом, я бы даже сделал еще веселее. Я бы получал с бэка каки-нибудь параметры, а генерил бы секрет на девайсе. Чтобы эта штука в string pool-е не оседала вообще
источник

R

Rtem in Android Guards
По параметрам подумай сам, но это может быть все что угодно вплоть до блоба из /dev/urandom 😄
источник

R

Rtem in Android Guards
источник

A

Alex in Android Guards
круто, спасибо) буду думать и предлагать
ща пока ещё читаю и вкуриваю
источник

R

Rtem in Android Guards
Основно, что тебе надо запомнить - ключевой материал никогда не должен появляться в памяти приложения
источник

R

Rtem in Android Guards
Тогда ничего не уведут. Ну только если TEE не поломают. Но его хоть и ломали уже, все же это маловероятно
источник

EK

Evgeniy Kuznetsov in Android Guards
Rtem
Ок. А почему бы тогда тебе не сделать так:
В коде есть KDF функция, которая генерирует ключ, а в качестве секрета к ней прилетает строка из бэка. Получившийся ключ сохраняется в кейсторе и все операции шифрования/расшифрования производятся с этим ключем. Естественно строка прилетающая с бэка должна быть уникальной для каждого юзера.

И появляется она в памяти только один раз, при создании ключа.
Разве можно что-то сохранить в кейстор, что было сгенерирована вне его? Или речь не про AndroidKeyStore?
источник

R

Rtem in Android Guards
Evgeniy Kuznetsov
Разве можно что-то сохранить в кейстор, что было сгенерирована вне его? Или речь не про AndroidKeyStore?
Можно хранить ключи. И только их
источник

R

Rtem in Android Guards
KDF - делает ключи
источник

EK

Evgeniy Kuznetsov in Android Guards
KDF внутри кейстора?
источник

R

Rtem in Android Guards
Evgeniy Kuznetsov
KDF внутри кейстора?
Я могу тебе поискать пример, но если коротко - KeySpec это умеет. Ты просто генеришь ключ у которого указываешь параметром хранение в кейсторе
источник

EK

Evgeniy Kuznetsov in Android Guards
А, я не так тебя понял. Подумал про PBKDF внутри кейстора
источник

R

Rtem in Android Guards
Не, кейстор это просто провайдер, который можно указать параметром. PBKDF это фукнция, которая генерит ключи. Обычно кстати, ее так не используют, а вычисляют каждый раз. Но насколько я помню ты можешь полученных ключ хранить в кейсторе, потому что это такой же ключ как ты генеришь без pbkdf2. Но ты заставил меня засомневаться =) Надо накидать POC будет на досуге.
источник

EK

Evgeniy Kuznetsov in Android Guards
На сколько я знаю, то в кейсторе можно хранить только то, что там сгенерилось. Ключ от pbkdf туда не засунуть
источник

EK

Evgeniy Kuznetsov in Android Guards
Ну и да, смысла в этом и нет
источник

R

Rtem in Android Guards
Вероятно. Просто при генерации ключа ты указываешь Provider. Тебе не обязательно генерить ключи именно в кейсторе. При генерации ключа из PBKDF тоже можно указать провайдер. Но я щас не поручусь сказать можно ли в качестве провайдера указать кейстор или нет
источник

m

main in Android Guards
В продолжении темы. А это нормальная практика генерить ключ от БД, на клиенте зашифровать sqllite с помощью SQLCipher этим ключем и хранить ключ в keystore?
источник

R

Rtem in Android Guards
Evgeniy Kuznetsov
На сколько я знаю, то в кейсторе можно хранить только то, что там сгенерилось. Ключ от pbkdf туда не засунуть
Глянул, да, там другой набор провайдеров и нужен другой spec. Поэтому не получится ключи PBKDF-а хранить в кейсторе. Хотя оно очень похоже на абстрактном уровне, в деталях там разные интерфейсы
источник

R

Rtem in Android Guards
Еще одна загадка андройда раскрыта 😄
источник