it-swarm-eu.dev

Come si può proteggere una password / chiave nel codice sorgente

Se è necessario che il codice sorgente contenga una password, come dovrebbe essere protetto? Questo è puramente un esempio, ma supponiamo che esista un'app che utilizza un'API e che non vuoi esporre la tua chiave API, ma devi averla nel codice sorgente, perché viene utilizzata. Come si dispone effettivamente di una stringa che l'utente non può ancora recuperare e che può essere utilizzata. Non sembra possibile senza chiedere al server la stringa.

RE: Perché possiamo ancora rompere le foto di Snapchat in 12 righe di Ruby?

16
Peter

Risposta breve: non puoi.

Non puoi mai proteggere una password che stai distribuendo. Potresti nasconderlo tra alcune stringhe e utilizzare altre operazioni per "coprire" la password ma, alla fine, dovrai mettere tutto insieme per far funzionare la tua funzione. Ed ecco dove lo prenderà il cracker.

Non esiste un modo semplice per risolvere questo problema e di solito significa che non hai scelto il miglior schema di sicurezza o, se lo ritieni sufficiente, forse significa che non hai bisogno di questo tipo di sicurezza.

E se davvero, davvero, hai davvero bisogno di fare in quel modo dovrai andare con la "sicurezza per oscurità" dopo tutto, più tempo ci vorrà per essere rotto, meglio è. È meglio avere un sistema di rilevamento per quando ciò accade.

Ad esempio, considera l'industria del gioco in tutti questi anni con le sue protezioni contro la copia e così via, se ci fosse stato un modo per raggiungere la sicurezza all'interno del codice stesso che significherebbe la fine della "pirateria".

23
kiBytes

Mentre la risposta di @kiBytes è corretta dal punto di vista pratico, vorrei aggiungere per aggiungere che n documento recente di Amit Sahai suggerisce un modo (teorico) per costruire un offuscatore della scatola nera che è crittograficamente "difficile" da invertire. (Vedi qui per un articolo cablato al riguardo).

Non è, tuttavia, come se potessi o addirittura dovessi implementarlo: finora, è completamente poco pratico da utilizzare su software reale e non è stato ancora verificato correttamente. È comunque interessante.

8
Stephane

Come dice @kiBytes, semplicemente non è possibile proteggere una password o una chiave all'interno del codice sorgente. Aggiungerei (nel caso in cui le persone arrivino a questa domanda cercando di risolvere un problema generale) che nell'esempio che dai (un'app che utilizza un'API), non è necessario che la chiave API sia archiviata nel codice sorgente dell'app.

In genere, la chiave API è memorizzata su un server che controlli. Per accedere all'API, l'app effettua una richiesta al server, che a sua volta effettua una richiesta all'API, quindi risponde all'app con le informazioni recuperate dall'API.

A parte questo, idealmente la chiave API non è memorizzata nemmeno nel codice sorgente sul server, dal momento che è presumibilmente verificato nel controllo della versione e quindi potenzialmente insicuro.

1
joegoldbeck