728x90
반응형
728x90
반응형
728x90
반응형

SQLite 암호화 SQLCipher : 특징, 빌드, 적용 가이드

1. SQLCipher는 왜 필요한가?

  • 데이터베이스는 많은 애플리케이션에서 핵심 역할을 하지만, 민감한 정보를 담고 있을 경우 무단 접근 시 치명적인 문제가 발생할 수 있습니다.
  • 특히 모바일 앱, IoT 기기, 또는 로컬 파일로 저장되는 데이터베이스는 물리적 복제나 탈취 위험이 큽니다.

  • SQLCipher 는 이러한 위험을 해결해 주는 SQLite 기반 데이터베이스 전체 암호화 솔루션 입니다.
  • SQLite의 가벼움과 투명성을 유지하면서, AES-256 암호화 기술을 적용하여 저장 데이터를 보호합니다.


2. SQLCipher 주요 특징

  • AES-256 비트 암호화 : 데이터베이스 전체 파일을 암호화합니다.
  • SQLite API와 완벽 호환 : 기존 SQLite 프로젝트에 손쉽게 적용 가능합니다.
  • PBKDF2 키 스트레칭 : 무차별 대입 공격에 강한 암호화 키 파생 기법 적용.
  • 멀티 플랫폼 지원 : iOS, Android, Windows, macOS, Linux 환경에서 사용 가능.
  • 가벼운 설치 및 유연한 빌드 : 다양한 환경에서 쉽게 컴파일 및 적용 가능.


✅ 3. 라이선스 및 상업적 사용

  • SQLCipherBSD-3-Clause 라이선스 로 배포됩니다.
  • 기업 및 상업 프로젝트에서도 무료로 사용 및 배포가 가능합니다만, 다음 조건을 지켜야 합니다:
    • 저작권 및 라이선스 고지 포함
    • 저작권 표시 유지
    • 보증 면책 조항 포함
  • 다만, 법적 확약이 필요하거나 상업용 지원, 기술 컨설팅, SLA 서비스 등이 필요한 경우,
    • Zetetic (SQLCipher 개발사)에서 유료 라이선스 및 지원 계약(연간 약 $6,000 USD부터)을 체결할 수 있습니다.


✅ 4. SQLCipher 빌드 방법 (Linux/macOS/Windows)

4.1. Linux/macOS 빌드

  • bash

      # 빌드 도구 준비 (Ubuntu 인 경우)
      sudo apt-get install tcl autoconf automake libtool
      
      # SQLCipher 소스 코드 얻기
      git clone https://github.com/sqlcipher/sqlcipher.git
      
      # 빌드 및 설치
      cd sqlcipher
      ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
      make
      sudo make install
    

4.2. Windows 빌드 방법

  • A. 준비
    • Visual Studio (C++ 개발 도구 포함)
    • ActiveState Tcl (또는 다른 Tcl 배포판)
    • OpenSSL 빌드 또는 prebuilt 라이브러리
    • SQLCipher 소스
  • B. 빌드 순서
      1. 필요한 라이브러리 준비
      • OpenSSL Windows prebuilt 버전을 다운로드하여 libinclude 경로 준비
      1. SQLCipher 소스 다운로드
      • bash

          git clone https://github.com/sqlcipher/sqlcipher.git
        
      1. 명령 프롬프트(또는 PowerShell)에서 nmake 사용 준비
      • Visual Studio 개발자 명령 프롬프트 실행
      1. 환경 변수 설정
      • cmd

          set PATH=C:\Path\To\OpenSSL\bin;%PATH%
          set INCLUDE=C:\Path\To\OpenSSL\include;%INCLUDE%
          set LIB=C:\Path\To\OpenSSL\lib;%LIB%
        
      1. 빌드 실행
      • cmd

          cd sqlcipher
          nmake -f Makefile.msc
        
      1. 빌드 결과
      • sqlcipher.exe 실행 파일 및 관련 라이브러리(sqlite3.dll, sqlite3.lib) 생성
  • C. Visual Studio IDE로 빌드
    • sqlite3.csqlite3.h(sqlcipher 소스코드 포함)를 Visual Studio 프로젝트에 추가
    • C/C++ > Preprocessor 설정에 SQLITE_HAS_CODEC 추가
    • C/C++ > Additional Include Directories에 OpenSSL include 경로 추가
    • Linker > Additional Library Directories에 OpenSSL lib 경로 추가
    • Linker > Input > Additional Dependencieslibcrypto.lib 추가
    • 빌드 실행 후 생성된 .dll.libexe 파일 사용


5. 암호 키 설정 및 변경 방법

  • 초기 암호 설정
    • sql

        PRAGMA key = '암호';
      

  • 암호 변경
    • sql

        PRAGMA rekey = '새로운암호';
      

주의: rekey는 기존 암호가 올바르게 적용된 상태에서만 성공합니다.



6. iOS 적용 방법

6.1. Podfile에 의존성 추가

  • ruby

      pod 'SQLCipher', '~> 4.5'
    

6.2. 설치

  • bash

      pod install
    

6.3. Swift 코드 예제

  • swift

      import SQLite3
      
      var db: OpaquePointer?
      if sqlite3_open("경로/데이터베이스.db", &db) == SQLITE_OK {
          let key = "암호"
          sqlite3_key(db, key, Int32(key.utf8.count))
          if sqlite3_exec(db, "SELECT count(*) FROM sqlite_master;", nil, nil, nil) == SQLITE_OK {
              print("암호 적용 및 열기 성공")
          }
      }
    


✅ 7. Android 적용 방법

7.1. build.gradle 의존성 추가

  • gradle

       dependencies {
           implementation 'net.zetetic:android-database-sqlcipher:4.5.6@aar'
       }
    

7.2. ProGuard 설정

  • proguard

      -keep class net.sqlcipher.** { *; }
    

7.3. Java 코드 예제

  • java

      SQLiteDatabase.loadLibs(context);
      SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(databaseFile, "암호", null);
      db.execSQL("CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, name TEXT);");
      db.close();
    


8. 요약

  • SQLCipher는 민감한 데이터를 안전하게 보호하면서도 SQLite의 장점을 그대로 가져올 수 있는 강력한 도구입니다.
  • 기업 및 개인 개발자 모두 자유롭게 사용할 수 있으며, 필요 시 상업용 라이선스를 통한 안정적인 지원도 가능합니다.
  • 직접 빌드와 적용 과정도 비교적 간단하며, iOSAndroid에서의 통합 또한 공식 라이브러리로 잘 지원됩니다.



  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄

728x90
반응형

'DB' 카테고리의 다른 글

Oracle Trigger  (1) 2024.11.13
Oracle INNER JOIN, OUTER JOIN  (0) 2024.11.13
DBCLI  (0) 2019.11.05
NoSQL 주요 DB 비교: CouchDB와 MongoDB의 차이점과 활용성  (0) 2011.08.04
Membase 서버의 기본 네트워크 소켓 포트  (0) 2011.07.19
728x90
반응형

SQLite의 장점과 단점: 간단한 데이터베이스 관리 솔루션

SQLite는 가벼운 파일 기반 데이터베이스 관리 시스템으로, 주로 소규모 애플리케이션이나 임베디드 시스템에서 자주 사용됩니다. 배포가 용이하고, 외부 DBMS나 별도 라이브러리 설치가 필요 없어 독립적으로 사용할 수 있다는 것이 주된 장점입니다. 이러한 특성 덕분에 모바일 애플리케이션 개발, 소규모 데이터 관리 등에서 인기를 끌고 있습니다.

SQLite의 주요 장점

  • 컴포넌트 독립성: 외부 DBMS가 필요 없으므로 배포와 설치가 간단합니다.
  • 경량성: 파일 기반 DB로 작동하기 때문에 메모리와 리소스 소비가 적어 작은 규모의 프로젝트에 적합합니다.
  • 빠른 속도: 간단한 CRUD 작업에서는 높은 성능을 보입니다.

SQLite의 한계점

  • 기능 제한: 고급 SQL 기능 (예: 아우터 조인 등)이 부족해 복잡한 쿼리 작성에 한계가 있습니다.
  • 동시성 처리의 한계: 다중 사용자 환경에서의 동시성 처리 성능이 부족하여 대규모 시스템에서는 적합하지 않습니다.

추가 의견

SQLite는 단일 사용자 환경이나 로컬 데이터베이스 관리가 필요한 프로젝트에 적합합니다. 반면, 복잡한 데이터 구조나 동시성 처리가 중요한 시스템에서는 MySQL, PostgreSQL 같은 풀-DBMS를 고려하는 것이 좋습니다.

728x90
반응형

+ Recent posts