Есть ли способ обфусцировать ключи API в пакете R? - PullRequest
5 голосов
/ 29 февраля 2012

Мне нужен потребительский ключ и секрет для пакета R, который я разрабатываю. Для каждого пользователя было бы несколько обременительно подавать заявку и получать свои собственные данные, и в этом действительно нет необходимости, поскольку им придется проходить аутентификацию с использованием имени пользователя / пароля, чтобы использовать функции пакета. Тем не менее, я не имею права делиться своими ключами под открытым небом. Есть ли способ, чтобы ключ + секрет (или любая другая информация по этому вопросу) могли быть скрыты в моем исходном пакете, когда он находится на CRAN? Я предполагаю, что ответ - нет, но я хотел бы убедиться, что я не пропускаю другие идеи.

Обновление: единственное злоупотребление, которое я предвижу, это то, что кто-то извлекает и использует ключи в другом приложении, чтобы максимально увеличить мои ограничения скорости. Но если бы это было так, то я мог бы просто удалить это. Но могут быть и другие формы злоупотреблений, которые мне не хватает. Возможно, я должен просто позволить всем подать заявку на свое.

1 Ответ

3 голосов
/ 29 февраля 2012

Ну, пока вы знаете, что запутывание не является безопасностью, есть несколько простых способов запутать.Вы не указываете, как хранятся ваши ключи, поэтому я предполагаю, что они хранятся в двоичном виде в файле.

Самое простое запутывание - xor с некоторым значением - я буду использовать "DEADBEEF "только потому, что это звучит вкусно:

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

Поскольку xor является симметричным, тот же код можно использовать для создания obfuscatedKey из исходного ключа.

Другой способзашифровать вектор.Используя генератор случайных чисел с «секретным» начальным числом (42), ключ запутывается:

# 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

... и вы, конечно, можете комбинировать оба метода ...

...