Autenticazione dei servizi con PKI (pycrypto)

0

quindi sto cercando di risolvere un problema sul lavoro. Abbiamo un popolare negozio di valore chiave che fa sicurezza tramite token. L'archivio kv emette un token specifico che stabilisce quali client possono interrogare quali chiavi.

Voglio scrivere un micro servizio che aiuti altri micro servizi nell'ottenere questo token. L'idea è che il microservice auth (quello che invia il token ad altri servizi) avrà una chiave pubblica nel suo database che corrisponde a una chiave privata che possiede ogni servizio che ha bisogno di accedere a kv store (e quindi ha bisogno di un token).

Il servizio che richiede un token interrogherà il servizio auth con il suo nome e la sua chiave privata (su ssl). Se il servizio auth convalida che la chiave privata corrisponde matematicamente alla chiave pubblica, il servizio auth dovrebbe restituire il token.

Questa sembra essere un'idea solida, ma ho bisogno di alcune idee su come ottenerlo. Su tutti i tutorial di pycrypto che vedo, si tratta di crittografare e decifrare un messaggio, ma non è esattamente quello che voglio fare. Voglio solo che il servizio auth sia a conoscenza delle chiavi e, quando viene presentato con una chiave pubblica, basta dire "sì" che corrisponde alla tua chiave privata, ecco il token.

Leggendo la mia bozza potrei ricevere alcuni suggerimenti sul modo migliore per andare su questa metodologia?

    
posta Louis_Santos 01.07.2016 - 22:42
fonte

1 risposta

1

Innanzitutto, non si passano le chiavi private a un altro servizio. In generale, una chiave dovrebbe essere considerata compromessa se viene mai passata a un altro servizio. Se vuoi affidarti totalmente al microservizio di autenticazione, usa le password per l'autenticazione. Puoi generarli in modo sicuro evitando password deboli.

Il modo corretto per autenticarsi con la crittografia asimmetrica è utilizzare un modello di risposta alla sfida . In questo, il servizio di autenticazione genera un numero casuale, lo crittografa utilizzando la chiave pubblica del client e quindi trasmette il valore crittografato al client. Rispondendo al segreto del clear-text, il client dimostra di avere la chiave privata corrispondente alla chiave pubblica nel database. Quindi i messaggi sarebbero fondamentalmente:

  1. Cliente - > Server: Autentica Alice
  2. Server - > Client: decripta crittografia (testo, chiave pubblica di Alice)
  3. Cliente - > Server: testo in chiaro
  4. Server - > Client: ecco il tuo token ...

Probabilmente il modo migliore per farlo è utilizzare TLS di autenticazione reciproca . Questo gestisce la sfida / risposta all'interno dello stack di rete. Nel momento in cui viene chiamato il microservice, saprai già che l'utente detiene la chiave privata. Puoi semplicemente restituire il token in quel punto. I messaggi sarebbero:

  1. Client - > Server: dammi il token per Alice
  2. Server - > Client: ecco il tuo token ...

Il primo passaggio, in cui ha luogo l'handshake TLS, riguarderà più messaggi on-the-wire, ma verrà gestito automaticamente.

    
risposta data 01.07.2016 - 23:03
fonte

Leggi altre domande sui tag