首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iOS应用程序中存储包含的亚马逊网络服务凭据的最佳位置

在iOS应用程序中存储包含的亚马逊网络服务凭据的最佳位置
EN

Stack Overflow用户
提问于 2011-08-10 08:53:44
回答 3查看 3.2K关注 0票数 9

我计划在即将到来的项目中使用AWS SDK for iOS。我需要在打包的应用程序中存储AWS的凭据。放置它们最安全的地方是哪里?我知道将它们存储在pList中不是一个好主意。把它“硬编码”成一个要编译的类是不是更好?这有什么风险吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-23 22:24:16

我认为完全隐藏凭证在理论上是不可能的。也就是说,如果您的编译代码可以读取它们,那么理论上任何有权访问编译代码的人都可以读取它们。但不完美的安全性仍然是有价值的。我猜大多数攻击者只会在二进制文件中查找看起来像密钥的字符串,而不会费力地反编译代码并试图解释它是如何工作的,所以隐藏凭据的一种方法是以编码的形式存储它们,然后根据需要对它们进行解码。这样,解码算法就成为您的密钥,攻击者必须找到并理解它才能提取您的凭据。

这里有一个使用随机XOR掩码的相当简单的方法。将以下假密码替换为您的密码,并记住将空终止符(\0)保留在适当的位置。将此代码作为独立程序编译并运行:

代码语言:javascript
运行
复制
#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复制到代码中,如下所示(实际上将包含在您的应用程序中):

代码语言:javascript
运行
复制
#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];

由于这是在一个公共论坛上,您可能想要更改一些事情,如使垫不同的长度,拆分它们,并用代码重新连接它们,重新排序,等等。您还可以将垫和键存储在代码的远程部分。一个真正熟练和专注的攻击者无论如何都能找到你的密码,但基本的想法是,大多数人扫描二进制文件寻找密码时都找不到它。

票数 16
EN

Stack Overflow用户

发布于 2011-08-10 09:07:28

您看过数据保护API吗?

What are the new "iOS data protection APIs"?

根据您的安全需求,有多种选择。

这个问题也可能会有所帮助。

Data Protection on iOS

今年一次会议的视频很有用。

http://developer.apple.com/videos/wwdc/2010

票数 1
EN

Stack Overflow用户

发布于 2011-08-23 03:20:30

您应该使用亚马逊网络服务身份和访问管理(IAM):http://aws.amazon.com/iam/

您可以在http://aws.amazon.com/articles/4611615499399490上的移动应用程序中找到有关亚马逊网络服务凭证管理的更多信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7004766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档