2012-02-29 5 views
5

Ho bisogno di una chiave del consumatore e di un segreto per un pacchetto R che sto sviluppando. Sarebbe alquanto complicato per ogni utente applicare e ottenere il proprio e non c'è davvero bisogno dato che dovranno autenticare con un nome utente/password per utilizzare le funzioni del pacchetto. Tuttavia, non sono autorizzato a condividere le mie chiavi allo scoperto. C'è un modo in cui la chiave + secret (o qualsiasi altra informazione per quella materia) potrebbe essere nascosta nella mia sorgente di pacchetti una volta che è su CRAN? Immagino che la risposta sia no ma vorrei essere sicuro che non mi mancassero altre idee.Esiste un modo per nascondere le chiavi API in un pacchetto R?

Aggiornamento: l'unico abuso che prevedo è che qualcuno estrae e utilizzi le chiavi in ​​un'altra applicazione per ridurre al massimo i limiti di velocità. Ma se fosse così, potrei semplicemente rimuoverlo. Ma potrebbero esserci altre forme di abuso che mi mancano. Forse dovrei lasciare che tutti facciano domanda per conto loro.

+5

Definire "nascosto". Poi vai su "sicurezza attraverso l'oscurità" su schneier.com. –

+0

Carl ha appena ottenuto un +1. Considera anche esattamente quanto può essere offuscato qualcosa quando le fonti sono libere. Ma potresti fare qualcos'altro, ad esempio mac hash o indirizzo IP. –

+0

@DirkEddelbuettel Ovviamente so che le fonti sono gratuite e di solito mi fido delle persone che non fanno nulla di malevolo ma TOS mi impedisce di farlo senza qualche ragionevole offuscamento. Se risulta che qualcuno abusa delle chiavi, posso rimuoverle in un altro aggiornamento. – Maiasaura

risposta

3

Benché tu sappia che l'offuscamento non è la sicurezza, ci sono alcuni semplici modi per offuscare. Non si specifica come vengono archiviate le chiavi, quindi presumo che siano archiviate in formato binario in un file.

L'offuscamento più semplice è quello di xor con un certo valore - lo userò "deadbeef" solo perché suona gustoso:

keyFile <- "c:/foo.bin" 
obfuscatedKey <- readBin(keyFile, "raw", file.info(keyFile)$size) 
key <- xor(obfuscatedKey , as.raw(c(0xde, 0xad, 0xbe, 0xef))) # xor with DEADBEEF 

A causa di xor essere simmetrica, lo stesso codice può essere utilizzato per creare l'obfuscatedKey anche dalla chiave originale.

Un altro modo è quello di scramble il vettore. Usando il generatore di numeri casuali con un seme "segreto" (42), la chiave è offuscato:

# obfuscate 
key <- 101:110 
n <- length(key) 
set.seed(42, "Mersenne-Twister") # To get the same permutation 
perm <- sample.int(n) 
obfuscatedKey <- key[perm] 

# unobfuscate 
orgKey <- integer(n) 
set.seed(42, "Mersenne-Twister") # To get the same permutation 
perm <- sample.int(n) 
orgKey[perm] <- obfuscatedKey 

identical(key, orgKey) # TRUE 

... e si può, naturalmente, combinare entrambi i metodi ...

+1

Prevedo gli OP la prossima domanda sarà come nascondere il codice sorgente di R. La mia risposta standard è usare ROT-13, due volte. – Spacedman

Problemi correlati