Tag: 安全

iOS允许无效的证书,而android没有

在我们的一个应用程序部署过程中出现exception情况。 iOS版本运行良好,但Android版本的应用程序没有工作。 经过一些故障排除,我们发现应用程序打电话给API。 Apinetworking服务器缺less证书链。 我们尝试了与Safari浏览器的iOS8 iPhone上的API调用,它在Android上没有任何警告,它提供了证书警告。 我明白这个问题,但想知道为什么它在iOS上工作? iOS在操作系统级别有没有SSLvalidation的错误?

钥匙串:报告为errSecItemNotFound的项目,但在添加时收到errSecDuplicateItem

这个问题一直在困扰我,我希望有人对此有所了解。 从本质上讲,我有一小部分用户无法保存/更新项目到钥匙串。 有问题的控制stream程如下: 我们使用SecItemCopyMatching检查项目的存在。 这将返回错误代码errSecItemNotFound 然后我们尝试通过SecItemAdd添加项目,但是这会返回errSecDuplicateItem 。 因此,我们有一些用户根本无法更新钥匙串项目的一个子集,要求他们恢复他们的设备以清除钥匙串。 这显然是一个不可接受的解决方法。 它似乎以前为他们工作,但现在已经进入这个不可更新的周期。 经过研究,我看到有关SecItemCopyMatching使用的search查询的问题不够具体,但我的代码尽可能使用通用search查询。 + (NSMutableDictionary*)queryForUser:(NSString*)user key:(NSString*)key { if (!key || !user) { return nil; } NSString* bundleId = [[NSBundle mainBundle] bundleIdentifier]; NSString* prefixedKey = [NSString stringWithFormat:@"%@.%@", bundleId, key]; NSMutableDictionary* query = [NSMutableDictionary dictionary]; [query addEntriesFromDictionary:@{(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword}]; [query addEntriesFromDictionary:@{(__bridge id)kSecAttrAccount : user}]; [query addEntriesFromDictionary:@{(__bridge id)kSecAttrService […]

以安全格式存储游戏偏好和保存的游戏

这是从苹果文档: 当您devise一个向Game Center报告分数的游戏时,您还应该考虑游戏的安全需求。 您希望报告给Game Center的分数是玩家如何做的准确logging。 这里有两点build议: 以安全的格式存储游戏的偏好和保存的游戏,而不是以明文forms存储。 如果您的游戏数据以明文forms存储,玩家可以使用iTunes下载已保存的游戏数据,对其进行修改,然后重新同步到设备。 这可能会让玩家获得比你想要的更高的分数。 始终为排行榜设置合理的最小值和最大值。 我知道数据可以存储在.plist文件或.xml或.json中,即使在数据库中也是如此。 但所有这些都是非encryption的纯文本。 什么被认为是一个安全的格式? 还有什么方法/类/技术可以用来存储敏感数据?

如何selectSSKeychain的帐户和服务值

我正在考虑使用SSKeychain在iOS应用程序中存储密码,但是我不确定是否需要帐户和服务的某个特定值,或者是否可以使用任意值。 有没有普遍的做法?

安全的内存对于Swift对象

我正在写一个快速的应用程序,需要处理内存中的私钥。 由于这些对象的敏感性,当对象被释放时,这些键需要被清除(也被写为全零),并且内存不能被分页到磁盘(通常使用mlock()完成)。 在Objective-C中,您可以提供一个自定义的CFAllocator对象,它允许您使用自己的函数来分配/释放/重新分配对象使用的内存。 所以一个解决scheme是在objective-c中实现一个“SecureData”对象,该对象使用自定义的CFAllocator(也在objective-c中)在内部创build一个NSMutableData对象。 然而,有没有办法让我提供我自己的自定义内存分配函数的纯Swift对象(例如,一个结构或[UInt8])? 还是有更好的,“适当”的方式来实现这样的快速安全的内存?

iOS 8,9上的NSUserDefaults有多安全?

应用内购买编程指南build议您可以在这里坚持在NSUserDefaults的应用内购买。 然而,我发现这篇文章说这是不安全的,它的数据很容易被访问和修改: NSUserDefaults以二进制格式存储在plist中,不encryption,存储在你的应用程序目录中。 这意味着任何用户,即使是“最高级的”用户,都可以用5分钟的时间修补NSUserDefaults。 如果这是真的,用户可以很容易地获得免费的任何东西提供作为应用程序内购买,持续使用NSUserDefaults 。 该文章仍然是正确的iOS 8,9? 如果是的话,你如何坚持你的应用内购买? 我喜欢一些简单的解决scheme 我不(也不想)validation收据等

iOS上不同的填充types有什么区别?

在iOS上, 证书,密钥和信任服务 API包含以下填充types: kSecPaddingNone kSecPaddingPKCS1 kSecPaddingPKCS1MD2 kSecPaddingPKCS1MD5 kSecPaddingPKCS1SHA1 Apple CDSA邮件列表上的用户表示“kSecPaddingPKCS1 […]与PKCS#1 1.5相同”。 证书,密钥和信任服务引用使用“将完成标准ASN.1填充以及底层RSA操作的PKCS1填充”注释后三种填充types( kSecPaddingPKCS1MD2 , kSecPaddingPKCS1MD5和kSecPaddingPKCS1SAH )。 与kSecPaddingPKCS1什么不同? 根据RFC 3447, kSecPaddingPKCS1是底层RSA操作的原始填充吗? 使用SecKeyRawSign()签名SHA-256,SHA-384或SHA-512摘要时,开发人员是否需要使用kSecPaddingPKCS1并kSecPaddingPKCS1执行ASN.1填充? ASN.1填充是必需的还是可以省略的? 任何暗示我指向正确的方向是高度赞赏。

以编程方式检查是否设置了密码锁

由于我的应用程序将处理用户的敏感数据,我想知道是否有一种方法,我可以从我的应用程序检查是否有在iOS设置的密码锁。 我需要检查这个的原因是因为如果用户在应用程序中有一些信息,然后保持在桌子上,并出去了几分钟。 iPad / iPhone默认进入待机模式。 如果设置了密码锁,只有input正确的密码时,任何人都可以使用ipad。 这将提供一个额外的安全措施,以防止任何路人从应用程序查看敏感数据。 所以基本上,我想我的应用程序检查是否设置密码锁,如果不提示用户这样做。 这可能吗?

将SecKeyRef设备生成的公钥/私钥对保存在磁盘上

我在设备上使用SecKeyGeneratePair()在设备上生成一个RSA对称密钥对。 我有每个键的SecKeyRef结构指针。 那么,如何将SecKeyRef保存到磁盘? 甚至传输它(我也想象也有正确的编码问题)? 苹果的“证书,密钥和信任服务”指南注释 您可以将您的公钥发送给任何可以用来encryption数据的人。 我想特别保存私钥。 所以我可以在部署的设备上使用它来解密用公钥encryption的数据。 PS我不介意每个键的结果数据是DER编码的ASN.1还是base-64; 我只需要弄清楚如何从SecKeyRef取出密钥。 我也很清楚OS X的SecKeychainItemExport()不存在。

如何使用AFNetworking比较SSL证书

在我的iPhone应用程序中,我使用带有自签名SSL证书的https连接从服务器下载合理的数据(用户名和密码)。 这个应用程序仅供私人使用,并不意味着生产。 我正在使用AFNetworkingpipe理https连接,但是,由于我的证书没有从CA签名,为了使其工作,我不得不添加以下内容到AFURLConnectionOperation类的头部: #define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1 但有了这个我的应用程序将允许任何证书。 有没有办法只允许从我的服务器的证书,可能捆绑在应用程序,并与服务器提供的证书在HTTPS连接提供的证书进行比较? 如果可能的话,在安全方面会有什么显着的优势吗? 我对安全非常陌生,我有些困惑。