지불을 허용하는 모바일 앱을 구축 중입니다. 사용자는 자신의 참조 목록 세부 정보를 입력하고 지불 정보는 HTTPS를 통해 소매점의 POS 시스템에 제출됩니다. POS는 지불을 직접 처리하고 실제 신용 카드 정보가 필요하므로 카드를 저장할 Stripe와 같은 서비스를 사용할 수 없으며 지불을 처리 할 토큰을 돌려 줄 수 없습니다.PCI 호환 방식으로 iOS/Android에 신용 카드 정보를 저장하는 방법
앱의 성격 상 사용자는 정기적으로 결제를하므로 편의를 위해 참조 정보를 저장하고 싶습니다. 그러나 이것은 반복 청구가 아니므로 사용자는 의지대로 트랜잭션을 시작합니다. 그러므로 나는 서버에 중앙 CC를 보관할 필요가없는 나는이 방법을 사용하여 각 사용자의 기기에 개별 카드를 저장하는 고려 중이 야 : 사용이 AES256을 사용
- 수집 CC 수 & 유효 기간
- 암호화를 키와 CVC
- 는 다음의 (a) 데이터가 키 체인에서 촬영, 지불을 위해 (안드로이드에 대한 동등하거나) 아이폰 OS 키 체인에서 암호화 된 데이터
- 를 저장 (CVC는 저장되지 않음)
- (B) 사용자는 CC 정보를 해독하기 위해 CVC를 입력해야합니다.
사용자가 CVC를 알고 있다면 어쨌든 카드를 소지하고 있으므로 장치를 해킹 할 필요가 없다는 아이디어가 있습니다.
암호화의 경우 RNCryptor lib을 사용하려고합니다. 주요 기능 중 하나는 암호화 및 인증을 위해 공통 암호를 두 개의 256 비트 키의 암호로 '임의의'바이트 시퀀스로 자동 변환하는 것입니다. 키 스트레칭은 10k 라운드 PBKDF2를 통해 구현됩니다. 구현 세부 사항은 링크에 있지만 짧은 : PBKDF2으로 연신
- AES-256 암호화
- CBC 모드
- 암호화-다음
- 랜덤 IV를 염석 비밀 - 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
}
// ...
AES256 아이폰 OS 키 체인 (또는 드로이드 상당)에 암호화 된 CC 정보에는 장치 잠금 암호가 활성화하지 않는 경우, 그것은 중요 않습니다를 storying? 내 생각에, 정보는 이미 AES256 암호화되어 있으며, 키 체인의 암호화가 없으면 장치에 저장할 수 있습니까?
많은 수의 CC 번호를 저장하는 중앙 서버가 없다는 것을 고려하면이 경우 PCI 준수 섹션과 관련이 있습니까? 나는 PCI 사양을 읽는 시도하지만 문서는 미로를 탐색 할 :(
최소한 iDevice의 암호가 활성화되어 있는지 확인해야합니다. – zaph
Aes256은 256 비트 키가 필요하지만 cvc 코드는 10 비트의 정보 만 포함합니다. cvc 코드를 키로 사용하면 무차별 대입은 즉시이를 파기 할뿐만 아니라 프로세스에서 cvc 코드를 유출합니다. –
iOS 측에서 ApplePay를 사용하지 않는 것이 맞습니까? – Bobson