我计划在即将到来的项目中使用AWS SDK for iOS。我需要在打包的应用程序中存储AWS的凭据。放置它们最安全的地方是哪里?我知道将它们存储在pList中不是一个好主意。把它“硬编码”成一个要编译的类是不是更好?这有什么风险吗?
发布于 2011-08-23 22:24:16
我认为完全隐藏凭证在理论上是不可能的。也就是说,如果您的编译代码可以读取它们,那么理论上任何有权访问编译代码的人都可以读取它们。但不完美的安全性仍然是有价值的。我猜大多数攻击者只会在二进制文件中查找看起来像密钥的字符串,而不会费力地反编译代码并试图解释它是如何工作的,所以隐藏凭据的一种方法是以编码的形式存储它们,然后根据需要对它们进行解码。这样,解码算法就成为您的密钥,攻击者必须找到并理解它才能提取您的凭据。
这里有一个使用随机XOR掩码的相当简单的方法。将以下假密码替换为您的密码,并记住将空终止符(\0)保留在适当的位置。将此代码作为独立程序编译并运行:
#include <stdio.h>
#define PAD_LENGTH 32
int main() {
int i;
char c;
// start with the password
char password[PAD_LENGTH] = "My AWS Password\0";
// make a random pad to encrypt it
printf("PAD:\n{");
char pad[PAD_LENGTH];
for (i = 0; i < PAD_LENGTH; i++) {
c = arc4random() & 0xFF;
pad[i] = c;
printf("%#02x", c & 0xFF);
if (i < PAD_LENGTH - 1) printf(",");
}
printf("}\n");
// make an encrypted version of the password
printf("KEY:\n{");
for (i = 0; i < PAD_LENGTH; i++) {
c = pad[i] ^ password[i];
printf("%#02x", c & 0xFF);
if (i < PAD_LENGTH - 1) printf(",");
}
printf("}\n");
return(0);
}然后将生成的pad和key复制到代码中,如下所示(实际上将包含在您的应用程序中):
#define PAD_LENGTH 32
char pad[PAD_LENGTH] = {0x83,0x26,0x8a,0x8b,0xee,0xab,0x6,0xed,0x2e,0x99,0xff,0x23,0x7f,0xef,0xc8,0x8,0x6b,0x8e,0xa4,0x64,0x6d,0xb,0x7,0xd2,0x6a,0x39,0x60,0xa4,0xa9,0xad,0xea,0xb8};
char key[PAD_LENGTH] = {0xce,0x5f,0xaa,0xca,0xb9,0xf8,0x26,0xbd,0x4f,0xea,0x8c,0x54,0x10,0x9d,0xac,0x8,0x6b,0x8e,0xa4,0x64,0x6d,0xb,0x7,0xd2,0x6a,0x39,0x60,0xa4,0xa9,0xad,0xea,0xb8};
for (int i = 0; i < PAD_LENGTH; i++) {
key[i] = key[i] ^ pad[i];
}
NSString *password = [NSString stringWithCString:key encoding:NSASCIIStringEncoding];由于这是在一个公共论坛上,您可能想要更改一些事情,如使垫不同的长度,拆分它们,并用代码重新连接它们,重新排序,等等。您还可以将垫和键存储在代码的远程部分。一个真正熟练和专注的攻击者无论如何都能找到你的密码,但基本的想法是,大多数人扫描二进制文件寻找密码时都找不到它。
发布于 2011-08-10 09:07:28
您看过数据保护API吗?
What are the new "iOS data protection APIs"?
根据您的安全需求,有多种选择。
这个问题也可能会有所帮助。
今年一次会议的视频很有用。
http://developer.apple.com/videos/wwdc/2010
发布于 2011-08-23 03:20:30
您应该使用亚马逊网络服务身份和访问管理(IAM):http://aws.amazon.com/iam/
您可以在http://aws.amazon.com/articles/4611615499399490上的移动应用程序中找到有关亚马逊网络服务凭证管理的更多信息
https://stackoverflow.com/questions/7004766
复制相似问题