Секреты лучше всего генерируются из случайных данных. Таким образом, нет внешних данных, которые могли бы помочь злоумышленнику определить или угадать часть или весь ключ. Конечно, это зависит от того, какой степени защиты нужен ваш секретный ключ. Java включает в себя некоторые генераторы случайных чисел в java.util.Random (начиная с JDK1.0). Если у вас нет проблем с обратной совместимостью, в Java 6 есть java.security.SecureRandom, отвечающий требованиям FIPS 140-2. Библиотеки Java не совсем случайны, но, вероятно, достаточно хороши для большинства приложений. Если вам нужны более качественные случайные данные, вам следует использовать аппаратный генератор случайных чисел.