Come funzionano le chiavi API e le chiavi segrete? Sarebbe sicuro se devo passare la mia API e le chiavi segrete a un'altra applicazione?


136

Sto solo iniziando a pensare a come funzionano le chiavi API e le chiavi segrete. Solo 2 giorni fa mi sono registrato ad Amazon S3 e ho installato il plug-in S3Fox . Mi hanno chiesto sia la mia chiave di accesso sia la chiave di accesso segreta, entrambe le quali richiedono l'accesso per accedere.

Quindi mi chiedo, se mi stanno chiedendo la mia chiave segreta, devono conservarla da qualche parte, giusto? Fondamentalmente non è la stessa cosa che chiedermi i numeri della mia carta di credito o la mia password e memorizzarli nel loro database?

Come dovrebbero funzionare le chiavi segrete e le chiavi API? Quanto devono essere segreti? Queste applicazioni che usano le chiavi segrete lo memorizzano in qualche modo?

Risposte:


90

Fondamentalmente elaborando ciò che è delineato qui .

Ecco come funziona: diciamo che abbiamo una funzione che prende un numero da zero a nove, ne aggiunge tre e, se il risultato è maggiore di dieci, sottrae dieci. Quindi f (2) = 5, f (8) = 1, ecc. Ora, possiamo fare un'altra funzione, chiamarla f ', che va indietro, aggiungendo sette anziché tre. f '(5) = 2, f' (1) = 8, ecc.

Questo è un esempio di una funzione a due vie e il suo inverso. Teoricamente, tutte le funzioni matematiche che mappano una cosa all'altra possono essere invertite. In pratica, tuttavia, puoi creare una funzione che mescola i suoi input così bene che è incredibilmente difficile invertire.

Prendere un input e applicare una funzione a senso unico è chiamato "hashing" dell'input e ciò che Amazon memorizza sul loro sistema è un "hash" della tua chiave segreta. SHA1 è un esempio di questo tipo di funzione "unidirezionale", inoltre è rinforzato dagli attacchi.

La funzione HMAC si basa su funzioni hash consolidate per utilizzare una chiave nota per autenticare una stringa di testo. Funziona così:

  • Prendi il testo della tua richiesta e la tua chiave segreta e applichi la funzione HMAC.
  • Aggiungi quell'intestazione di autenticazione alla tua richiesta e la invii ad Amazon.
  • Amazon cerca la loro copia della chiave segreta, il testo che hai appena inviato e applica la funzione HMAC.
  • Se il risultato corrisponde, sanno che hai la stessa chiave segreta.

La differenza tra questo e PKI è che questo metodo è RESTful , consentendo un numero minimo di scambi tra il tuo sistema e i server di Amazon.

Fondamentalmente non è la stessa cosa che chiedermi i numeri della mia carta di credito o la mia password e memorizzarli nel loro database?

Sì, anche se il danno che qualcuno può fare con S3 sembra essere limitato a svuotare il tuo account.

Quanto devono essere segreti? Queste applicazioni che usano le chiavi segrete lo memorizzano in qualche modo?

Ad un certo punto, dovrai caricare la chiave segreta e, con la maggior parte dei sistemi basati su Unix, se un utente malintenzionato può ottenere l'accesso come root può ottenere la chiave. Se si crittografa la chiave, è necessario disporre di codice per decrittografarla e, a un certo punto, il codice di decrittografia deve essere un testo semplice in modo che possa essere eseguito. Questo è lo stesso problema che ha DRM, tranne per il fatto che sei il proprietario del computer.

In molti casi, ho appena inserito le chiavi segrete in un file con autorizzazioni limitate e ho preso le consuete precauzioni per impedire il root del mio sistema. Ci sono alcuni trucchi per farlo funzionare correttamente con un sistema multiutente, come evitare file temporanei e simili.


14
"Prendere un input e applicare una funzione a senso unico è chiamato" hashing "dell'input e ciò che Amazon memorizza sul loro sistema è un" hash "della tua chiave segreta" - Se Amazon memorizza un HASH della tua chiave segreta, come mai possibile per Amazon HASH il testo inviato loro?
Franklin,

21
Per prima cosa dici "ciò che Amazon memorizza sul loro sistema è un" hash "della tua chiave segreta" e poi "Amazon cerca la loro copia della chiave segreta". Questi sembrano contraddirsi a vicenda. Credo che la prima affermazione sia sbagliata.
Sean

3
Questo URL fornisce
asyncwait

10
"Teoricamente, tutte le funzioni matematiche che mappano una cosa all'altra possono essere invertite" - Non è vero, le funzioni di hash sono l'esempio. è molto facile da mostrare. diciamo che abbiamo una funzione che trasforma le parole in numeri, in base alla somma dei valori (a = 1, b = 2, c = 3 ecc.). Ad esempio "SO" sarebbe 18 + 14 = 32. Quindi abbiamo cambiato SO in 32 ma se rivelo questa funzione a qualcuno e gli do il numero 32, non c'è modo che possa sapere se la nostra parola di base fosse "SO" o "ZF" (26 + 6) o una delle dozzine di altre possibilità
Leone

1
Secondo il documento che @asyncwait ha collegato, Amazon memorizza sicuramente la tua chiave segreta, non solo un hash di essa. In effetti, sembra che l'unico hashing in atto sia tutto ciò che accade all'interno della funzione HMAC
cowlinator

7

La crittografia a chiave pubblica viene utilizzata per difendersi da attacchi molto specifici, alcuni dei quali sono comuni. In breve, si tratta di una matematica complessa che consente di verificare che l'individuo abbia sia la coppia di chiavi pubblica che privata pur conoscendo solo la chiave pubblica. Questo è molto diverso da una carta di credito o una password statica. Ad esempio, se si esegue l' autenticazione con un server OpenSSH, il server non necessita della chiave privata .

Idealmente, se il database API di Amazon dovesse essere compromesso, l'attaccante avrebbe un elenco di chiavi pubbliche e non sarebbe in grado di accedere all'API dell'utente utilizzando queste informazioni. Tuttavia i sistemi ideali non sono sempre messi in pratica e non so con certezza se Amazon sta proteggendo da questo vettore di attacco, ma dovrebbero esserlo.

In chiave pubblica l'autenticazione è statisticamente immune alla forza bruta. Le password sono spesso parole del dizionario che possono essere rapidamente interrotte in termini di relatività. Tuttavia, una chiave privata è un numero enorme che non è facile da indovinare. Se l'attaccante avesse la chiave pubblica, allora potrebbe eseguire molte ipotesi "offline" su un supercomputer, ma anche allora ci vorrebbe molto tempo e denaro per rompere la chiave.


2
il non ha bisogno della chiave privata di collegamento è rotto ora.
setzamora,

@Joset ha aggiornato il collegamento che punta a una copia nella macchina del wayback di Internet dal 2008
oligofren

1

AWS ha progettato il proprio algoritmo di autenticazione personalizzato. v4 è stato rilasciato nel 2014. I dettagli sono descritti qui: Richieste di autenticazione (AWS Signature Versione 4) . Un punto importante è che la richiesta non è firmata con il segreto stesso, ma con una chiave di firma che viene generata utilizzando il segreto. Utilizza anche HMAC-SHA256 per la firma.

Generazione della firma

L'uso di chiavi asimmetriche sarebbe più sicuro poiché AWS memorizzava solo una chiave pubblica anziché quella segreta, che viene memorizzata sia dall'utente che da AWS.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.