¿Por qué usar una clave API y un secreto?


Me encontré con muchas API que dan al usuario tanto una API clave y un secreto. Pero mi pregunta es: ¿cuál es la diferencia entre ambos?

En mis ojos, una llave puede ser suficiente. Digamos que tengo una llave y sólo yo y el servidor la conocemos. Creo un hash HMAC con esta clave y hago una llamada a la API. En el servidor, creamos el hash HMAC de nuevo y lo comparamos con el hash enviado. Si es lo mismo, la llamada se autentica.

Entonces, ¿por qué usar dos teclas?

Editar: o ¿se utiliza esa clave API para buscar el secreto de la API?

Author: EsTeGe, 2012-07-19

4 answers

La criptografía de clave secreta se basa en el uso de la misma clave para codificar y luego decodificar un mensaje. Por lo tanto, solo aquellos que conocen el "secreto" pueden leer el mensaje.

La seguridad RSA se basa en 2 claves coincidentes. Hay una clave pública para cada usuario, y todo el mundo puede (debe) saberlo. También hay una clave privada que solo el usuario debe saber. Un mensaje cifrado por la clave pública solo puede ser descifrado por la clave privada, y viceversa.

Por lo tanto, si quiero enviarle un mensaje que solo usted puede leer, obtengo (de la red) su clave pública, encriptar el mensaje con esa clave y usted es la única persona que puede descifrarlo.

O, si quiero demostrarle que envié un mensaje, puedo cifrar el mensaje con mi clave privada, decirle (en texto abierto o en otro mensaje) cómo se cifró. Entonces podrías descifrar el mensaje con mi clave pública, y si se vuelve legible, sabes que vino de mí.

Esta forma de encriptación es bastante informática intensivo, así que lo que a veces se hace es cifrar una "clave secreta" de una sola vez con tecnología RSA, luego cifrar el resto del mensaje con la clave secreta, luego cifrar mi firma de segunda manera. A continuación, invertir este proceso por lo que si el mensaje y la firma son legibles, usted y solo usted puede leerlo y se asegura de que he enviado el mensaje.

O

Puede visitar este enlace para una explicación más detallada.

Cómo funcionan las Claves API y las Claves Secretas trabajo?

 32
Author: SALMAN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 15:57:26

Necesitas dos llaves separadas, una que les diga quién eres, y la otra que demuestre que eres quien dices ser .

La "clave" es su ID de usuario, y el "secreto" es su contraseña. Solo usan los términos" clave "y" secreto " porque así es como lo han implementado.

 38
Author: Marcus Adams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-16 19:06:43

Respuesta simple, si la entendí correctamente...

Si utiliza su clave API para el cifrado, ¿cómo sabrá el servicio quién se comunica con ellos? ¿Cómo descifrarán ese mensaje?

Utiliza la clave API para indicar quién es, esto es lo que está enviando en texto sin formato. La clave SECRETA que no envíes a nadie. Simplemente lo usas para encriptar. Luego envías el mensaje cifrado. Usted no envía la clave que se utilizó para el cifrado, que frustraría el propósito.

 0
Author: ancajic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-30 23:27:04

Hay respuestas que explican cuál es la clave secreta y (pública). Es un par de claves público-privadas al que le dan nombres confusos. Pero nadie dice por qué las API requieren ambos, y muchas API solo le dan un secreto! También nunca he visto documentos de ninguna API explicar por qué tienen dos claves, por lo que lo mejor que puedo hacer es especular...

Es mejor poner solo su clave pública en su solicitud y firmar la solicitud localmente con su clave privada; no debería ser necesario enviar nada más. Pero algunos salirse con la suya con solo tener el secreto en la solicitud. Ok, cualquier buena API usará algo de seguridad de transporte como TLS (generalmente a través de HTTPS). Pero todavía estás exponiendo tu clave privada al servidor de esa manera, aumentando el riesgo de que de alguna manera la manejen mal (ver: Error de registro de contraseñas de GitHub y Twitter descubierto recientemente). Y HTTPS es teóricamente igual de seguro, pero siempre hay fallas de implementación.

Pero muchas – en realidad la mayoría parece-APIs tienen que enviar ambas claves en solicitudes ya que eso es más fácil que hacer que la gente haga sus propias firmas; no puede tener ejemplos de cURL puro de lo contrario! En ese caso, no tiene sentido separarlos. Supongo que las claves separadas son solo para en caso de que cambien la API más tarde para aprovecharlas. O algunos tienen una biblioteca cliente que podría hacerlo de la manera más segura.

 0
Author: sudo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-11 17:47:38