Slide 1

Slide 1 text

Keep Secrets Right

Slide 2

Slide 2 text

WHOAMI - пишу Android приложения - интересуюсь безопасностью приложений и серверов - могу что-нибудь взломать на досуге ;) - в свободное время помогаю OpenSource проектам Android Lead в Redmadrobot Артем Кулаков 2 Twitter: @Fi5t
 Telega: https://t.me/android_guards

Slide 3

Slide 3 text

План доклада 3 - Хранение секретной информации - Проблемы шифрования - Генерация надежных ключей - Где хранить ключи? - Итоги

Slide 4

Slide 4 text

Соглашения 4 Sensitive information == “чувствительная информация” == конфиденциальная информация == секретная информация

Slide 5

Slide 5 text

Виды секретов 5 - Персональные данные пользователя - Токены доступа - Служебные файлы приложения - Придумайте свой вариант…

Slide 6

Slide 6 text

Хранение секретов (популярный подход) 6

Slide 7

Slide 7 text

Хранение секретов (правильный подход) 7 - Не хранить вообще - Хранить на backend/middleware - Шифровать

Slide 8

Slide 8 text

Как не хранить секреты 8 - Не хардкодить аккаунты, “суперсистемные” токены и прочую секретную информацию - Не сохранять персональные данные пользователя на диске - Не использовать “секретные конфиги” вида disableSSL=false

Slide 9

Slide 9 text

Как не хранить секреты 9 Вывод: понять какие данные являются секретными для вашей доменной области и отказаться от их хранения.

Slide 10

Slide 10 text

Как хранить на сервере 10 - Весь обмен с сервером только по HTTPS + SSL Pinning - Все секретные данные лежат на сервере и запрашиваются в realtime и не кэшируются - Токены имеют адекватно-короткое время жизни и обновляются

Slide 11

Slide 11 text

Как хранить на сервере 11 Вывод: приложение становится максимально тонким клиентом.

Slide 12

Slide 12 text

Как шифровать 12

Slide 13

Slide 13 text

Шифрование. Племенная мифология. 13 - Это сложно (spoiler: да) - Нужно знать матан, дифуры и квантовую физику - Медленно и дорого - Никто не знает где хранить ключи

Slide 14

Slide 14 text

Главная проблема криптографии 14 Управление ключами Стоимость руководителя контрразведки ЦРУ вместе с женой не превысила двух миллионов долларов. Это намного дешевле, чем создавать крупные компьютеры для взлома и нанимать гениальных криптоаналитиков. Б. Шнайер

Slide 15

Slide 15 text

Виды ключей 15 - симметричные (AES, DES) - асимметричные (RSA, Diffie-Hellman)

Slide 16

Slide 16 text

Создание надежных ключей 16 1. Взять за основу пользовательский ввод 2. Взять соль и/или перец (salt + pepper) 3. Смешать все вместе и скормить хэш-функции 4. ?????? 5. PROFIT!!!

Slide 17

Slide 17 text

Создание надежных ключей 17 - HMAC-SHA1 в качестве PRF - 64 бита соль - 10k итераций PBKDF2 Альтернативы: bcrypt/scrypt, Argon2

Slide 18

Slide 18 text

Где хранить ключи? 18 - В голове пользователя (PBKDF2 and etc.) - В железе (TEE, SEP) Там, откуда их сложно извлечь без паяльника на 100W ;)

Slide 19

Slide 19 text

Android way 19 - Trusted Execution Environment - Secure Element - Keystore & KeyChain

Slide 20

Slide 20 text

KeyChain vs Keystore 20 - KeyChain: общесистемное хранилище - Keystore: индивидуальное хранилище для каждого приложения

Slide 21

Slide 21 text

KeyChain 21 - Android 4.0+ - Можно хранить PKCS#12 (private key + X.509 CA) - Можно хранить в железе (Android 4.3+) - Нельзя грабить корованы и хранить симметричные ключи =(

Slide 22

Slide 22 text

Keystore 22 - Android 4.3+ - Нельзя извлечь из памяти приложения - Можно хранить в железе - Поддерживаются асимметричные ключи и симметричные ключи (Android 6+) - Поддержка Fingerprint auth API

Slide 23

Slide 23 text

Проблемы Keystore 23 - Удаление ключей при изменении типа блокировки экрана (баг или фича?) - Key blob можно расшифровать (но это неточно) - Ключи остаются на устройстве после удаления приложения если в его манифесте было allowBackup=true

Slide 24

Slide 24 text

Итоги 24 - Нельзя ничего хранить на устройстве - Хочешь хранить? Шифруй. - Хочешь шифровать? Не храни ключи! - Хочешь хранить? Страдай…

Slide 25

Slide 25 text

Полезные ссылки 25 - Android Keystore System - https://goo.gl/wMCoHC - Keystore redesign in Android M - https://goo.gl/Qdd1BV - The Forgetful Keystore - https://goo.gl/x6Cz6w - Unifying Key Store Access in ICS - https://goo.gl/2nXydS - Applied Cryptography - https://goo.gl/mNwKrQ - Android Security Internals - https://goo.gl/xEL1Pd

Slide 26

Slide 26 text

Any questions?