Question

J'utilise HMACSHA512 aux données de hachage à l'aide d'une clé partagée. Étant donné que la clé est partagée, je voudrais que ce soit tous les caractères imprimables pour faciliter le transport. Je me demande quelle est la meilleure approche consiste à générer ces clés.

J'utilise actuellement la méthode GetBytes () de RNGCryptoServiceProvider pour générer une clé, mais le tableau d'octets elle retourne contient des caractères non-imprimables. Je me demande donc s'il est sûr de base64 encodent le résultat ou ne qui érodent le caractère aléatoire trop et rendre les choses beaucoup moins sûr? Si ce n'est pas une bonne approche peut vous proposer une?

Je comprends que, en limitant les clés de caractères imprimables Je limite la largeur globale de l'espace clé (par exemple: élaguer 1 des 8 bits), mais je suis OK avec ça

.
Était-ce utile?

La solution

Si vous ne pouvez pas manipuler création automatique de la clé, puis http://www.grc.com/passwords est une bonne source de matériel clé très aléatoire.

base64 ne réduirait pas l'entropie sous-jacente du tableau d'octets. Vous pouvez générer la clé et l'utiliser dans sa forme brute, mais il base64 encoder pour le transporter à l'endroit où vous en avez besoin d'être. Vous auriez alors base64 décodent Retour à la forme brute avant de l'utiliser dans le nouvel emplacement. Il n'y a pas de perte d'entropie dans cette opération. Le codage base64 réduit l'entropie de 6 bits par octet au lieu de 8, mais le résultat du codage est plus longue, de manière générale l'entropie est le même.

L'autre façon, vous pourriez le faire serait d'obtenir 24 octets aléatoires pour une valeur de 192 bits d'entropie. Base64 cela vous donne une chaîne de 32 caractères (256 bits) qui a encore le caractère aléatoire d'origine et 192 bits d'entropie. Vous pouvez l'utiliser comme directement votre clé partagée.

Autres conseils

BASE64 transforme une séquence d'octets de sorte qu'il utilise seulement certains caractères imprimables.

Cette transformation ne modifie pas les informations de quelque façon, à quel point il est stocké. Il est également réversible. Vous pouvez obtenir la séquence d'octets d'origine en décodant la sortie BASE64

Donc, en utilisant BASE64 ne pas « éroder le caractère aléatoire » ou limiter l'espace clé de toute façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top