Чем хорош RSA, например, то с ним можно использовать любой «мастер-ключ», так как там открытый и закрытый ключ взаимозависимые, а не как, например, в протоколе Эль-Гамаля.
Но тут будет проблема. Для программы, которая сама хранит пароли, хранить еще информацию о ключе шифрования ключей (мастер-ключе) — как-то небезопасно.
Лучше использовать другой подход. А именно стойкую (!) криптографическую хэш-функцию (так проще и информации о мастер-ключе почти не будет в программе) и симметричный алгоритм шифрования (3DES, AES, любой другой, который будет понятен для реализации. Даже ГОСТ28147-89 подойдет. Для всех них в сети много максимально разжеванных алгоритмов).
Теперь собственно протокол работы программы.
Шифрование:
Есть сообщение M, содержащее пользовательский пароль, который необходимо хранить в программе.
Шифруется оно случайно созданным ключом шифрования K.
К в свою очередь шифруется ключом шифрования ключей (мастер-ключом).
Ключ шифрования ключей — пусть будет результат воздействия стойкой криптографической хэш-функции H() на фразу-пароль P.
Расшифрование:
Я беру фразу-пароль P.
Беру от нее хэш H(P).
Расшифровываю разовый ключ шифрования данных K с помощью H(P) в качестве ключа.
Расшифровываю с помощью K хранимое сообщение М, содержащее пароль.
Возможные проблемы:
стойкость хэш-функции
равномерное распределение ГПСЧ
В остальном, будет очень даже увлекательное занятие. Для меня бы точно было таким =)
А если для хранения данных использовать списки и деревья, то преподаватели будут довольны)))