5

我需要一个用于我正在开发的 R 包的消费者密钥和秘密。每个用户申请并获得他们自己的会有些麻烦,实际上没有必要,因为他们必须使用用户名/密码进行身份验证才能使用包功能。但是,我不允许公开分享我的密钥。一旦它在 CRAN 上,是否有任何方法可以将密钥 + 秘密(或任何相关信息)隐藏在我的包源中?我猜答案是否定的,但我想确保我没有错过其他想法。

更新:我预见到的唯一滥用行为是有人提取并使用另一个应用程序中的密钥来最大化我的速率限制。但如果是这样的话,那么我可以删除它。但我可能会错过其他形式的虐待。也许我应该让每个人都自己申请。

4

1 回答 1

3

好吧,只要您知道混淆不是安全性,就有一些简单的混淆方法。您没有指定密钥的存储方式,因此我假设它们以二进制形式存储在文件中。

最简单的混淆是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是对称的,相同的代码也可用于从原始密钥创建混淆密钥。

另一种方法是打乱向量。通过使用带有“秘密”种子 (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

...你当然可以结合这两种方法...

于 2012-02-29T19:13:35.753 回答