Делаю авторизацию в приложении через SMS. Отправка SMS происходит через сервер (на сервер отправляется запрос, а потом уже с сервера отправляется запрос на отправку смс). Теперь ближе к сути - запрос к серверу может отправить кто угодно, а это значит, что какой-то нехороший человек может отправить кучку запросов с разными номерами и на все эти номера отправятся SMS, за которые мне нужно будет заплатить. Решил воспользоваться старым добрым методом: создавать хэш из номера+ключ (секретная строка, отпечаток ключа или ещё что-то) и передавать в запросе номер и хэш, ну а на сервере делать проверочку, вот только как хранить этот ключ на устройстве?
P.S. Скорее всего такой метод не очень хорош, так что прошу пнуть в нужном направлении.
Никак не хранить. Всё, что ты сохранишь, можно раскопать, среда полностью недоверенная. Решай это на стороне сервера (ограничение числа запросов с одного айпи и тд).
Вот неплохой видос на тему безопасности в Android от одного из сотрудников Redmadrobot. Если вкратце - на стороне устройства эта задача нерешаема, что бы вы не сделали, всё это можно будет разобрать и поломать в нужном направлении (есть варианты усложнить задачу извлечения из apk нужного ключа, но только лишь усложнить - сделать её невыполнимой невозможно).
Соответственно, как уже упомянули в комментариях, решать только совместно с сервером.