2010-12-01 3 views
0

J'utilise HMACSHA512 pour hacher des données à l'aide d'une clé partagée. Puisque la clé est partagée, j'aimerais que ce soit tous les caractères imprimables pour faciliter le transport. Je me demande quelle est la meilleure approche pour générer ces clés.Génération d'une clé partagée HMAC imprimable dans .Net

J'utilise actuellement la méthode GetBytes() de RNGCryptoServiceProvider pour générer une clé, mais le tableau d'octets qu'elle renvoie contient des caractères non imprimables. Donc, je me demande si c'est sûr pour encoder en base64 le résultat ou est-ce que cela réduit trop le caractère aléatoire et rend les choses beaucoup moins sécurisées? Si ce n'est pas une bonne approche, pouvez-vous en suggérer une? Je comprends qu'en limitant les touches aux caractères imprimables, je limite la largeur globale de l'espace clé (c'est-à-dire: en supprimant 1 des 8 bits), mais je suis d'accord avec cela.

Répondre

3

Si vous ne parvenez pas à générer automatiquement la clé, alors http://www.grc.com/passwords est une bonne source de données TRES aléatoires. Base64 ne réduirait pas l'entropie sous-jacente de la matrice d'octets

Vous pouvez générer la clé et l'utiliser sous sa forme brute, mais Base64 l'encode pour la transporter là où vous en avez besoin. Vous devriez alors le décoder en Base64 avant de l'utiliser au nouvel emplacement. Il n'y a pas de perte d'entropie dans cette opération. Le codage Base64 réduit l'entropie à 6 bits par octet au lieu de 8, mais le résultat du codage est plus long, donc globalement l'entropie est la même. L'autre façon de le faire serait d'obtenir 24 octets aléatoires pour 192 bits d'entropie. Le codage Base64 vous donnerait une chaîne de 32 caractères (256 bits) qui a toujours le caractère aléatoire d'origine et 192 bits d'entropie. Vous pouvez l'utiliser directement comme clé partagée. BASE64 transforme une séquence d'octets afin qu'elle n'utilise que certains caractères imprimables.

+1

Cette première phrase est un jeu de réflexion. –

+0

Merci pour la confirmation Andrew. Je vais prendre la dernière approche de la génération d'un tableau 24 bits et base64 l'encoder en 32 octets. – BrettRobi

3

Cette transformation ne modifie en rien l'information, mais son mode de stockage. Il est également réversible: vous pouvez obtenir la séquence d'octets originale en décodant la sortie BASE64. Par conséquent, l'utilisation de BASE64 n'érode pas le caractère aléatoire ou limite l'espace clé de quelque manière que ce soit.