디바이스의 데이터 암호화
모바일 디바이스에서 로컬 데이터 저장소의 암호화를 사용하려면 암호화 기능이 포함되도록 애플리케이션 업데이트를 수행하고 암호화된 데이터 저장소를 작성해야 합니다.
iOS 디바이스의 데이터 암호화
프로시저
- CocoaPods를 사용하여 암호화 기능을 얻으십시오.
- Podfile을 열고 다음 행을
추가하십시오.
BEFORE(IMFData/CloudantToolkit 포함):
pod 'IMFDataLocal/SQLCipher'AFTER (Cloudant Sync 포함):자세한 정보는 CDTDatastore 암호화 문서를 참조하십시오.pod 'CDTDatastore/SQLCipher' - 다음 명령을 실행하여 애플리케이션에 종속성을
추가하십시오.
pod install
- Podfile을 열고 다음 행을
추가하십시오.
- Swift 애플리케이션 내에서
암호화 기능을 사용하려면 애플리케이션의
연관 브릿징 헤더에 다음 가져오기를 추가하십시오. BEFORE (IMFData/CloudantToolkit
포함):
#import <CloudantSync.h> #import <CloudantSyncEncryption.h> #import <CloudantToolkit/CloudantToolkit.h> #import <IMFData/IMFData.h>AFTER(Cloudant Sync 포함):#import <CloudantSync.h> #import <CloudantSyncEncryption.h> - 키 제공자로 암호화에 필요한 로컬 저장소를 초기화하십시오.
경고: 데이터베이스를 작성한 후에 비밀번호를 변경하면 기존 데이터베이스를 복호화할 수 없으므로 오류가 발생합니다. 데이터베이스를 암호화한 후에는 비밀번호를 변경할 수 없습니다. 비밀번호를 변경하려면 데이터베이스를 삭제해야 합니다.BEFORE(IMFData/CloudantToolkit 포함):
//Get reference to data manager IMFDataManager *manager = [IMFDataManager sharedInstance]; NSString *name = @"automobiledb"; NSError *error = nil; // Initalize a key provider id<CDTEncryptionKeyProvider> keyProvider = [CDTEncryptionKeychainProvider providerWithPassword: @"passw0rd" forIdentifier: @"identifier"]; //Initialize local store CDTStore *localStore = [manager localStore: name withEncryptionKeyProvider: keyProvider error: &error];let manager = IMFDataManager.sharedInstance() let name = "automobiledb" let keyProvider = CDTEncryptionKeychainProvider(password: "passw0rd", forIdentifier: "identifier") var store:CDTStore? do { store = try manager.localStore(name, withEncryptionKeyProvider: keyProvider) } catch let error as NSError { // Handle error }AFTER(Cloudant Sync 포함):// Get reference to datastore manager CDTDatastoreManager *datastoreManager = existingDatastoreManager; NSString *name = @"automobiledb"; NSError *error = nil; // Create KeyProvider id<CDTEncryptionKeyProvider> keyProvider = [CDTEncryptionKeychainProvider providerWithPassword: @"passw0rd" forIdentifier: @"identifier"]; //Create local store CDTDatastore *datastore = [datastoreManager datastoreNamed:name withEncryptionKeyProvider:keyProvider error:&error];// Get reference to datastore manager let datastoreManager:CDTDatastoreManager = existingDatastoreManager let name:String = "automobiledb" //Create local store var datastore:CDTDatastore? let keyProvider = CDTEncryptionKeychainProvider(password: "passw0rd", forIdentifier: "identifier") do{ datastore = try datastoreManager.datastoreNamed(name, withEncryptionKeyProvider: keyProvider) }catch let error as NSError{ // Handle error } - 암호화된 로컬 저장소를 사용하여 데이터를 복제하는 경우
키 제공자로 CDTPullReplication 및
CDTPushReplication 메소드를 초기화해야 합니다. BEFORE(IMFData/CloudantToolkit 포함):AFTER (Cloudant Sync 포함):
//Get reference to data manager IMFDataManager *manager = [IMFDataManager sharedInstance]; NSString *databaseName = @"automobiledb"; // Initalize a key provider id<CDTEncryptionKeyProvider> keyProvider = [CDTEncryptionKeychainProvider providerWithPassword:@"password" forIdentifier:@"identifier"]; // pull replication CDTPullReplication *pull = [manager pullReplicationForStore: databaseName withEncryptionKeyProvider: keyProvider]; // push replication CDTPushReplication *push = [manager pushReplicationForStore: databaseName withEncryptionKeyProvider: keyProvider];//Get reference to data manager let manager = IMFDataManager.sharedInstance() let databaseName = "automobiledb" // Initalize a key provider let keyProvider = CDTEncryptionKeychainProvider(password: "password", forIdentifier: "identifier") // pull replication let pull:CDTPullReplication = manager.pullReplicationForStore(databaseName, withEncryptionKeyProvider: keyProvider) // push replication let push:CDTPushReplication = manager.pushReplicationForStore(databaseName, withEncryptionKeyProvider: keyProvider)암호화된 데이터베이스를 사용하는 복제 시 암호화되지 않은 데이터베이스를 사용하는 복제를 변경할 필요가 없습니다.

Android 디바이스의 데이터 암호화
Android 디바이스의 데이터를 암호화하려면 애플리케이션에 올바른 라이브러리를 포함하여 암호화 기능을 얻습니다. 그런 다음 데이터 암호화 및 복제에 필요한 로컬 저장소를 초기화할 수 있습니다.
프로시저
- 다음과 같이 build.gradle 파일에 Cloudant
툴킷 라이브러리를 종속성으로 추가하십시오. BEFORE(IMFData/CloudantToolkit
포함):
repositories { mavenCentral() } dependencies { compile 'com.ibm.mobile.services:cloudant-toolkit-local:1.0.0' }AFTER (Cloudant Sync 포함):repositories { mavenLocal() maven { url "http://cloudant.github.io/cloudant-sync-eap/repository/" } mavenCentral() } dependencies { compile group: 'com.cloudant', name: 'cloudant-sync-datastore-core', version:'0.13.2' compile group: 'com.cloudant', name: 'cloudant-sync-datastore-android', version:'0.13.2' compile group: 'com.cloudant', name: 'cloudant-sync-datastore-android-encryption', version:'0.13.2' } - Android v3.2용
SQLCipher .jar 및 .so
2진 파일을 다운로드하고 애플리케이션의
앱 구조 내 적절한 폴더에
포함시키십시오.
- 라이브러리를 추가하십시오. Android 앱 디렉토리 아래의 jniLibs 폴더에 공유 라이브러리 파일 및 SQLCipher 아카이브를 추가하십시오.
- 앱의 assets 폴더에 필수 ICU 압축 파일을 추가하십시오.
- sqlcipher.jar을 파일 종속성으로 추가하십시오. Android 스튜디오의 앱 폴더 메뉴에서 모듈 설정 열기 아래의 종속성 탭을 선택하십시오.
- 키 제공자로 암호화에 필요한 로컬 저장소를 초기화하십시오.
경고: 데이터베이스를 작성한 후에 비밀번호를 변경하면 기존 데이터베이스를 복호화할 수 없으므로 오류가 발생합니다. 데이터베이스를 암호화한 후에는 비밀번호를 변경할 수 없습니다. 비밀번호를 변경하려면 데이터베이스를 삭제해야 합니다.BEFORE(IMFData/CloudantToolkit 포함):

// Get reference to DataManager DataManager manager = DataManager.getInstance(); // Initalize a key provider KeyProvider keyProvider = new AndroidKeyProvider(getContext(),"password","identifier"); // Create local store String databaseName = "automobiledb"; Task<Store> storeTask = manager.localStore(databaseName, keyProvider); storeTask.continueWith(new Continuation<Store, Void >() { @Override public Void then(Task<Store> task) throws Exception { if (task.isFaulted()) { // Handle error } else { // Do something with Store Store store = task.getResult(); } return null; } });AFTER(Cloudant Sync 포함):
// Load SQLCipher libs SQLiteDatabase.loadLibs(context); // Create DatastoreManager File path = context.getDir("databasedir", Context.MODE_PRIVATE); DatastoreManager manager = new DatastoreManager(path.getAbsolutePath()); // Create encrypted local store String name = "automobiledb"; KeyProvider keyProvider = new AndroidKeyProvider(context,"passw0rd","identifier"); Datastore datastore = manager.openDatastore(name, keyProvider); - 암호화된 로컬 저장소를 사용하여
데이터를 복제하는 경우 pullReplicationForStore() 또는
pushReplicationForStore() 메소드에
KeyProvider 오브젝트를 전달해야 합니다. BEFORE(IMFData/CloudantToolkit 포함):AFTER (Cloudant Sync 포함):

//Get reference to data manager DataManager manager = DataManager.getInstance(); String databaseName = "automobiledb"; // Initalize a key provider KeyProvider keyProvider = new AndroidKeyProvider(getContext(),"password","identifier"); // pull replication Task<PushReplication> pullTask = manager.pullReplicationForStore(databaseName, keyProvider); // push replication Task<PushReplication> pushTask = manager.pushReplicationForStore(databaseName, keyProvider);암호화된 데이터베이스를 사용하는 복제 시 암호화되지 않은 데이터베이스를 사용하는 복제를 변경할 필요가 없습니다.