Android: Должны ли случайные SALT-байты, передаваемые AESObfuscator, оставаться неизменными?

Я реализую лицензирование в своем приложении Android, и существует массив из 20 байтов, который необходимо передать в AESObfuscator, который передается объекту ServerManagedPolicy. Может ли этот массив генерироваться случайным образом при каждом запуске кода, или он должен быть жестко закодирован?

Прямо сейчас я случайно генерирую соль следующим образом:

private static final byte[] SALT;

static {
    Random random = new Random();
    random.setSeed(System.currentTimeMillis());
    byte[] buf = new byte[20];
    random.nextBytes(buf);
    SALT = buf;
}

1 ответ

Решение

Немного поздно, но да: соль должна оставаться прежней, чтобы иметь возможность снова расшифровывать сохраненные значения.

В основном солить означает рандомизацию ключевой фразы, чтобы сделать атаки по словарю намного сложнее. Как соль защищает от атаки по словарю?

Обновление (год спустя:) Кстати: используйте генератор SecureRandom для байтов вместо генератора случайных чисел - это лучше (я мог бы углубиться в детали, но вы можете найти это и в других местах. http://docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html)

Другие вопросы по тегам