> For the complete documentation index, see [llms.txt](https://appsecurity.gitbook.io/offensive/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://appsecurity.gitbook.io/offensive/programming/rekomendacii/khranenie-pin-koda-i-shifrovanie-informacii.md).

# Хранение PIN-кода и шифрование информации

## Хранение PIN-кода

Для онлайн приложения (работа приложения в оффлайн-режиме исключена) - использовать для проверки PIN-кода SRP-протокол (<https://ru.wikipedia.org/wiki/SRP>). Этот подход не потребует хранения пин-кода в любом виде на устройстве

Для оффлайн приложения - шифровать с использованием ключа из iOS Keychain / Android KeyStore. Хеш не подходит по той причине, что PIN-код - легко перебираемое значение, следовательно, при утечке хеша исходное значение будет восстановлено.

Про SRP: <http://srp.stanford.edu/design.html>

## Шифрование информации&#x20;

Для хранения локального кеша, шифровать информацию следует с использованием ключей, сгенерированных в iOS Keychain / Android KeyStore.

В Android, PIN-код можно использовать как пароль для доступа к ключу шифрования: <https://developer.android.com/reference/java/security/KeyStore#getKey(java.lang.String,%20char%5B%5D)>

Для старых версий Android-устройств:

На старых версиях устройств KeyStore сервис не реализован. В этом случае допустимо использовать для генерации ключей pbkdf2 от PIN-кода и android\_id как соли.<br>
