2012-07-19 12 views
49

Mi sono imbattuto in molte API che forniscono all'utente una chiave API e un segreto. Ma la mia domanda è: qual è la differenza tra entrambi?Perché utilizzare una chiave API e un segreto?

Ai miei occhi, una chiave può essere sufficiente. Diciamo che ho una chiave e solo io e il server lo sappiamo. Creo un hash HMAC con questa chiave e faccio una chiamata API. Sul server, creiamo nuovamente l'hash HMAC e lo confrontiamo con l'hash inviato. Se è lo stesso, la chiamata è autenticata.

Quindi perché utilizzare due chiavi?

Modifica: o è la chiave API utilizzata per cercare il segreto dell'API?

risposta

24

La crittografia a chiave segreta si basa sull'utilizzo della stessa chiave per codificare e successivamente decodificare un messaggio. Quindi, solo chi conosce il "segreto" può leggere il messaggio.

La sicurezza RSA si basa su 2 chiavi corrispondenti. C'è una chiave pubblica per ogni utente e chiunque può (dovrebbe) saperlo. C'è anche una chiave privata che solo l'utente dovrebbe conoscere. Un messaggio crittografato dalla chiave pubblica può essere decodificato solo dalla chiave privata e viceversa.

Quindi, se voglio inviarti un messaggio che solo tu puoi leggere, ottengo (dalla rete) la tua chiave pubblica, cripto il messaggio con quella chiave e tu sei l'unica persona che può decodificarlo.

Oppure, se voglio provarti che ho inviato un messaggio, posso crittografare il messaggio con la mia chiave privata, dirti (in testo aperto o in un altro messaggio) come è stato crittografato. Quindi puoi decifrare il messaggio con la mia chiave pubblica, e se diventa leggibile, sai che viene da me.

Questa forma di crittografia richiede un uso intensivo del computer, quindi ciò che a volte viene fatto è crittografare una sola "chiave segreta" con tecnologia RSA, quindi crittografare il resto del messaggio con la chiave segreta, quindi crittografare la firma in la seconda moda. Quindi invertire questo processo, quindi se il messaggio e la firma sono leggibili, tu e solo tu puoi leggerlo e sei certo che ho inviato il messaggio.

O

potete visitare questo link per una spiegazione più dettagliata.

How do API Keys and Secret Keys work?

Grazie.

+3

Buona risposta, ma quando uso i segreti e le chiavi API con Facebook o Gmail ecc., In nessun punto devo crittografare o cancellare qualcosa. In questi casi, qual è il punto dei segreti e delle chiavi API? – Quintonn

+0

Usando Facebook come esempio ci sono due scenari che useresti app_secret. Il primo non richiede l'hashing. Viene utilizzato principalmente per impedire il dirottamento dell'URL di reindirizzamento. Dopo che un utente accede e concede l'accesso alla tua app se Facebook ha inviato il token di accesso direttamente all'URL di reindirizzamento, non avresti modo di verificare se il token di accesso fosse di Facebook. Potrei pubblicare il mio token di accesso al tuo URL di reindirizzamento ed eseguire le azioni di Facebook che verrebbero dalla tua API. Invece facebook invia un codice all'URL di reindirizzamento. L'API scambia quindi il codice per il token di accesso effettivo. –

+0

Durante l'ultima parte, scambiando il codice per l'effettivo token di accesso, Facebook si aspetta che la tua API verifichi la sua identità con una firma. In questo scenario non richiedono la crittografia a chiave pubblica per la firma, semplicemente si fidano di te per mantenere il segreto della tua app veramente segreto e usarlo come firma. Mi è sempre sembrato sciocco non andare avanti e usare una funzione unidirezionale per generare una firma, ma suppongo che ci siano motivi come le prestazioni per accontentarsi dell'uso diretto dell'app secret. –

32

Avete bisogno di due chiavi separate, una che dice loro chi siete e l'altra che dimostra che siete chi dite di essere.

La "chiave" è il tuo ID utente e il "segreto" è la tua password. Usano solo i termini "chiave" e "segreto" perché è così che l'hanno implementato.

+0

L'ultimo paragrafo dovrebbe essere BOLD –

+0

E se si sta comunicando tramite https? Che senso ha crittografare il tuo messaggio con una chiave segreta? – kamuniaft

0

Risposta semplice, se ho capito correttamente ...

Se si utilizza la chiave API per la crittografia, come sarà il servizio di sapere chi li sta contattando? Come decodificheranno quel messaggio?

Si utilizza la chiave API per indicare chi si è, questo è ciò che si sta inviando in testo normale. Il tasto SECRET si non invia a nessuno. Lo usi semplicemente per la crittografia.Quindi si invia il messaggio crittografato. Non si invia la chiave che è stata utilizzata per la crittografia, che avrebbe vanificato lo scopo.

Problemi correlati