我正在构建一个接受付款的移动应用程序。用户输入他们的CC详细信息,付款信息通过HTTPS提交给零售商的POS系统。 POS直接处理付款并需要实际的信用卡信息才能正常工作,因此我们不能使用存储卡的Stripe等服务,并且给我们返回一个令牌来处理付款。如何以符合PCI标准的方式在iOS/Android上存储信用卡信息
由于应用程序的性质,用户将定期付款,所以我想存储他们的CC信息以方便。然而,这不是反复计费,用户将会随意启动交易。因此,我并不需要一台服务器上集中保持CC和我正在考虑使用这种方法每个用户的设备上存储个人卡:
- 收集CC数&有效期限采用AES256它
- 加密,使用在CVC作为密钥(CVC不存储)
- 然后存储在IOS钥匙串加密的数据(或等效于Android)
- 要进行付款,(a)中的数据被取出钥匙链的,和
- (二)用户必须输入CVC才能解密CC信息
这个想法是,如果用户知道CVC他们可能拥有该卡,因此他们不需要尝试黑客入侵设备。
对于加密,我正在考虑使用RNCryptor lib。其主要功能之一是将通用密码自动转换为两个256位密钥的加密“随机”字节序列,以进行加密和认证。关键延伸是通过10k轮PBKDF2实现的。实施细节为中的链接,但在短:
- AES-256加密
- CBC模式
- 密码与PBKDF2拉伸
- 密码腌制
- 随机IV
- 加密,然后-hash HMAC
问题:
我不明白这个数学 - 足以判断用3个CVC数字播种RNCryptor的密钥伸展实现是否会产生足够的统计随机密钥。我一直无法找到有关RNCryptor保持安全所需的密码规格的文档。任何想法,将不胜感激。使用这个LIB是这样简单:
// Encryption
NSData *data = ...
NSString *password = @"Secret password";
NSData *ciphertext = [RNCryptor encryptData:data password:password];
// Decryption
NSError *error = nil;
NSData *plaintext = [RNCryptor decryptData:ciphertext password:password error:&error];
if (error != nil) {
NSLog(@"ERROR:%@", error);
return
}
// ...
当storying的AES256在iOS钥匙扣(或DROID当量)加密 CC的信息,这很重要,如果没有设备锁密码启用?我的想法是,信息已经AES256加密,它可以存储在设备上,无需使用钥匙串加密?
鉴于没有中央服务器存储大量CC号码,在这种情况下哪些PCI合规性部分相关?我试着读了PCI规格,但该文档是一个迷宫导航:(
至少您需要验证iDevice是否启用了密码。 – zaph
Aes256需要一个256位密钥,但一个cvc代码只包含10位信息。如果使用cvc代码作为关键字,暴力破解不仅会立即破解,而且还会泄露进程中的cvc代码。 –
这不是ApplePay用于iOS的一方吗? – Bobson