L'article How to Memorize 100 Passwords in 10 Seconds (via fr.misc.cryptologie) approche le problème de génération des mots de passe et la multiplication des logins/mots de passe différents.
La solution proposée par Jean-Philippe Aumasson est intéressante et doit ressembler à quelque chose comme ça (à vérifier dans les sources):

 
int passwords[maxpasswords][lenpassword]; /* avec lenpassword = lenpassword/4 */
int i, j;

srand(masterkey);

for (i=0; i < maxpassword; i++) {
  for (j=0 ; j < lenpassword ; j ++)
       passwords[i][j] = rand();

  srand(passwords[i][0]);
}

Ce tableau indexé correspond à n mots de passe disponibles. L'intérêt d'utiliser exclusivement rand() permet de ne pas compromettre p[n+1] ou p[n-1] si p[n] était découvert (car les passwords sont en ASCII, donc chaque octet généré est modulo la taille de l'alphabet). Notons que cela est vrai si et seulement si le PRG est considéré sûr et que la taille de l'alphabet est assez grande.

L'intérêt, face aux gestionnaires de keyring comme pwsafe ou revelation, est que cet algorithme vous permet de ne pas avoir à vous balader avec votre keyring partout, vous avez juste besoin du programme, votre master key en tête... et d'une liste qui associe pr0nwild.com à l'index n de votre table de mot de passe.

Tout ça pour dire que je n'ai toujours pas trouvé un gestionnaire de mots de passe correct avec les fonctionnalités suivantes :

Update quelques heures plus tard : En fait, je ne sais pas ce qui est le mieux ; une taille d'alphabet grande ou petite ? Plus elle est grande, plus les caractères du password seront aléatoires, mais la difficulté de retrouver le mot de 32 bits à partir du modulo sera diminué... Enfin je me comprends...