Est UUID.randomUUID() approprié pour l'usage comme un mot de passe?
Comme précédent discuté, e-mails de confirmation doit avoir un unique, (pratiquement) de l'onu-deviner code-essentiellement de l'un un mot de passe--dans le lien de confirmation.
L'UUID.randomUUID() docs dire:
L'UUID est généré à l'aide d'un cryptage fort pseudo-aléatoire
générateur de nombre.
Est ce que cela implique que l'UUID générateur aléatoire dans un correctement mise en œuvre de la JVM est adapté pour une utilisation en tant qu'unique, (pratiquement) de l'onu-deviner BP?
- Vous pourriez être intéressé par ma réponse à une autre question,, qui vous donnera plus de sécurité avec moins de chiffres... si ce qui compte.
- Voir aussi la discussion ici: security.stackexchange.com/questions/890/...
Vous devez vous connecter pour publier un commentaire.
Pas. Selon le L'UUID de la spec:
Aussi, Uuid n'a que 16 caractères possibles (de 0 à F). Vous pouvez générer un beaucoup plus compact et explicitement sécurisé mot de passe aléatoire à l'aide de
SecureRandom
(merci à @erickson).si vous lisez le RFC qui définit des Uuid, et qui est liée à partir de l'API docs, vous verrez que pas tous les bits de l'UUID sont réellement aléatoire (la "variante" et la "version" ne sont pas aléatoires). donc, un type 4 UUID (le genre que vous voulez utiliser), si elles sont appliquées correctement, devrait avoir 122 bits (secure, pour cette mise en œuvre) de l'information aléatoire, d'une taille totale de 128 bits.
donc, oui, il fonctionnera aussi bien qu'un 122 peu de nombre aléatoire à partir d'un "secure" générateur. mais une courte valeur peut contenir une quantité suffisante de l'aléatoire et peut-être plus facile pour un utilisateur (peut-être que je suis le seul à l'ancienne personne qui lit encore e-mail dans un terminal, mais la confirmation des Url qui s'enroulent à travers les lignes sont ennuyeux....).
Oui, à l'aide d'un
java.util.UUID
est très bien. Il n'y a pas beaucoup plus qui doit être dit.Voici ma suggestion:
Cela va prendre un certain travail, mais il est nécessaire si vous vous souciez vraiment de la rédaction d'un robuste système sécurisé.
Si elle est générée par un CSRNG puis elle est imprévisible et peut donc être utilisé.
Mais le problème que vous allez est gaspillé si vous êtes l'envoi d'e-mails de confirmation non chiffrés - si un attaquant a les moyens de prédire les résultats RNG de votre système, alors les chances sont, ils peuvent intercepter les e-mails trop.
Uuid sont également des chaînes longues (128 bits puis généralement, en Base64 (22 caractères) ou Base16 codé (32 caractères)) - pensez à la facilité d'utilisation de votre système sera. Personnellement je préfère utiliser un CSRNG pour sélectionner 8 caractères alphanumériques au hasard et le retour de ces.
Le point de l'aléatoire code pour un lien de confirmation, c'est que l'attaquant ne devrait pas être en mesure de deviner ni prédire la valeur. Comme vous pouvez le voir, pour trouver le bon code de votre lien de confirmation, une 128bits longueur UUID donne 2^128 différents codes possibles, à savoir, 340,282,366,920,938,463,463,374,607,431,768,211,456 codes possibles pour essayer. Je pense que votre lien de confirmation n'est pas pour le lancement d'une arme nucléaire, droit? C'est assez difficile pour l'attaquant de deviner. Il est sécurisé.
-- update --
Si vous n'avez pas confiance en la cryptage fort générateur de nombre aléatoire fourni, vous pouvez mettre un peu plus imprévisible des paramètres avec l'UUID code de hachage et de leur. Par exemple,
code = SHA1(UUID, Processus de PID, l'ID de Thread, Local numéro de port de connexion, la température du PROCESSEUR)
- Ce qu'il est encore plus difficile à prévoir.
java.util.Random
peut être utilisé pour obtenir des 128 bits de données, mais cela ne signifie pas qu'il est quelque chose comme sécurisé.java.util.Random
avecUUID.randomUUID()
java.util.Random
, mais cette réponse ne donne pas de aucun indication des raisons pour lesquelles.Il est parfait comme un mot de passe, que j'avais moi-même mis en œuvre la même pour l'application sur laquelle travaille. De plus, le lien que vous avez partagé tout est dit.
Je pense que cela devrait être approprié, car il est généré de manière aléatoire plutôt que de n'importe quelle entrée spécifique (c'est à dire vous n'êtes pas de l'alimenter avec un nom d'utilisateur ou quelque chose comme ça) -, de sorte que plusieurs appels à ce code vous donnera des résultats différents. Il précise que sa clé de 128 bits, de sorte que son assez longtemps pour être impossible à briser.
Alors en êtes-vous allez utiliser cette clé pour chiffrer une valeur, ou attendez-vous d'utiliser ce que le mot de passe? Peu importe, vous aurez besoin de ré-interpréter la clé dans un format qui peut être saisi par un clavier. Par exemple, faire un Base64 ou Hex de conversion, ou en quelque sorte la carte les valeurs de l'alpha-numériques, autrement, l'utilisateur va être d'essayer d'entrer des valeurs d'octets qui n'existent pas sur le clavier.
Je pense que java.util.UUID doit être fine. Vous pouvez trouver plus d'informations sur ce l'article: