Comment fonctionnent les clés API et les clés secrètes? Serait-ce sécurisé si je devais transmettre mon API et mes clés secrètes à une autre application?

136

Je commence tout juste à réfléchir au fonctionnement des clés API et des clés secrètes. Il y a à peine 2 jours, je me suis inscrit à Amazon S3 et j'ai installé le plug-in S3Fox . Ils m'ont demandé à la fois ma clé d'accès et ma clé d'accès secrète, qui nécessitent toutes deux que je me connecte pour accéder.

Alors je me demande, s'ils me demandent ma clé secrète, ils doivent la stocker quelque part, non? N'est-ce pas fondamentalement la même chose que de me demander mes numéros de carte de crédit ou mon mot de passe et de les stocker dans leur propre base de données?

Comment les clés secrètes et les clés API sont-elles censées fonctionner? À quel point ont-ils besoin d'être secrets? Ces applications qui utilisent les clés secrètes les stockent-elles d'une manière ou d'une autre?

Lance Pollard
la source

Réponses:

90

Essentiellement élaborer sur ce qui est décrit ici .

Voici comment cela fonctionne: disons que nous avons une fonction qui prend un nombre de zéro à neuf, en ajoute trois et, si le résultat est supérieur à dix, en soustrait dix. Donc f (2) = 5, f (8) = 1, etc. Maintenant, on peut faire une autre fonction, l'appeler f ', qui va en arrière, en ajoutant sept au lieu de trois. f '(5) = 2, f' (1) = 8, etc.

C'est un exemple de fonction bidirectionnelle et de son inverse. Théoriquement, toutes les fonctions mathématiques qui mappent une chose à une autre peuvent être inversées. En pratique, cependant, vous pouvez créer une fonction qui brouille si bien son entrée qu'elle est incroyablement difficile à inverser.

Prendre une entrée et appliquer une fonction unidirectionnelle s'appelle «hacher» l'entrée, et ce qu'Amazon stocke sur son système est un «hachage» de votre clé secrète. SHA1 est un exemple de ce genre de fonction "unidirectionnelle", elle est également renforcée contre les attaques.

La fonction HMAC s'appuie sur des fonctions de hachage établies pour utiliser une clé connue pour authentifier une chaîne de texte. Cela fonctionne comme ceci:

  • Vous prenez le texte de votre demande et votre clé secrète et appliquez la fonction HMAC.
  • Vous ajoutez cet en-tête d'authentification à votre demande et l'envoyez à Amazon.
  • Amazon recherche leur copie de la clé secrète et le texte que vous venez d'envoyer et applique la fonction HMAC.
  • Si le résultat correspond, ils savent que vous avez la même clé secrète.

La différence entre cela et PKI est que cette méthode est RESTful , permettant un nombre minimum d'échanges entre votre système et les serveurs d'Amazon.

N'est-ce pas fondamentalement la même chose que de me demander mes numéros de carte de crédit ou mon mot de passe et de les stocker dans leur propre base de données?

Oui, bien que les dégâts que quelqu'un puisse faire avec S3 semblent se limiter à vider votre compte.

À quel point ont-ils besoin d'être secrets? Ces applications qui utilisent les clés secrètes les stockent-elles d'une manière ou d'une autre?

À un moment donné, vous allez devoir charger la clé secrète, et avec la plupart des systèmes basés sur Unix, si un attaquant peut obtenir un accès root, il peut obtenir la clé. Si vous cryptez la clé, vous devez avoir du code pour la décrypter, et à un moment donné, le code de décryptage doit être en texte brut pour pouvoir être exécuté. C'est le même problème que DRM, sauf que vous possédez l'ordinateur.

Dans de nombreux cas, je mets simplement des clés secrètes dans un fichier avec des autorisations limitées et je prends les précautions habituelles pour éviter que mon système ne soit rooté. Il existe quelques astuces pour le faire fonctionner correctement avec un système multi-utilisateur, comme éviter les fichiers temporaires et autres.

ben
la source
14
"Prendre une entrée et appliquer une fonction unidirectionnelle s'appelle" hacher "l'entrée, et ce qu'Amazon stocke sur son système est un" hachage "de votre clé secrète" - Si Amazon stocke un HASH de votre clé secrète, comment est-il possible pour Amazon de HASH le texte qui leur a été envoyé?
Franklin
21
Vous dites d'abord "ce qu'Amazon stocke sur son système est un" hachage "de votre clé secrète" et ensuite "Amazon recherche sa copie de la clé secrète". Ceux-ci semblent se contredire. Je pense que la première déclaration est fausse.
Sean
3
Cette URL donne plus de détails sur l'implémentation d'Amazon S3 Auth - docs.aws.amazon.com/AmazonS3/latest/dev/S3_Authentication2.html
asyncwait
10
"Théoriquement, toutes les fonctions mathématiques qui mappent une chose à une autre peuvent être inversées" - Ce n'est pas vrai, les fonctions de hachage en sont l'exemple. c'est très facile à montrer. disons que nous avons une fonction qui transforme les mots en nombres, basée sur la somme des valeurs (a = 1, b = 2, c = 3 etc.). Par exemple, "SO" serait 18 + 14 = 32. Nous avons donc changé SO en 32 mais si je révèle cette fonction à quelqu'un et que je lui donne le numéro 32, il n'y a aucun moyen qu'il puisse savoir si notre mot de base était "SO" ou "ZF" (26 + 6) ou l'une des dizaines d'autres possibilités
Leo
1
Selon le document lié à @asyncwait, amazon stocke définitivement votre clé secrète, pas seulement un hachage de celle-ci. En fait, il semble que le seul hachage en cours soit ce qui se passe dans la fonction HMAC
cowlinator
7

La cryptographie à clé publique est utilisée pour se défendre contre des attaques très spécifiques, dont certaines sont courantes. En bref, il s'agit de mathématiques complexes qui permettent de vérifier que l'individu possède à la fois la paire de clés publique et privée tout en ne connaissant que la clé publique. Ceci est très différent d'une carte de crédit ou d'un mot de passe statique. Par exemple, si vous vous authentifiez avec un serveur OpenSSH, le serveur n'a pas besoin de la clé privée .

Idéalement, si la base de données d'API d'Amazon où être compromise, l'attaquant aurait une liste de clés publiques et ne serait pas en mesure d'accéder à l'API de l'utilisateur en utilisant ces informations. Cependant, les systèmes idéaux ne sont pas toujours mis en pratique et je ne sais pas avec certitude si Amazon se protège contre ce vecteur d'attaque, mais ils devraient l'être.

Dans l'authentification par clé publique, il est statistiquement immunisé contre la force brute. Les mots de passe sont souvent des mots du dictionnaire qui peuvent être rapidement rompus avec la relativité. Cependant, une clé privée est un nombre massif qui n'est pas facile à deviner. Si l'attaquant avait la clé publique, il pourrait alors effectuer de nombreuses suppositions "hors ligne" sur un super ordinateur, mais même dans ce cas, il faudrait beaucoup de temps et d'argent pour casser la clé.

tour
la source
2
le n'a pas besoin du lien de clé privée est cassé maintenant.
setzamora
@Joset a mis à jour le lien pointant vers une copie dans la machine à remonter Internet de 2008
oligofren
1

AWS a conçu son propre algorithme d'authentification personnalisé. La version v4 a été publiée en 2014. Les détails sont décrits ici: Requêtes d'authentification (AWS Signature Version 4) . Un point majeur est que la demande n'est pas signée avec le secret lui-même, mais avec une clé de signature qui est générée à l'aide du secret. Il utilise également HMAC-SHA256 pour la signature.

Génération de signature

L'utilisation de clés asymétriques serait plus sûre car AWS ne stockerait qu'une clé publique au lieu du secret, qui est stocké à la fois par l'utilisateur et AWS.

JBaczuk
la source