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

WSL 에서 root 암호 분실 시, 후속방법 (초간단 설명입니다)

  • (1) cmd.exe 명령을 입력합니다. (또는 명령 프롬프트를 실행)
  • (2) 명령 프롬프트에서 wsl -u root 를 입력합니다.
  • (3) passwd 명령을 입력한 후, root 계정의 새로운 암호를 입력합니다.
  • (4) exit 명령을 입력하여 종료합니다.
  • (5) 명령 프롬프트에서 wsl 명령을 입력합니다.
  • (6) su 명령을 입력하고, root 계정으로 로그인합니다.

그리고

  • 혹시 도움이 되셨다면 공감 ❤️ 한번 눌러 주세요. 감사합니다.
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
반응형

디피 헬만(Diffe-Hellman) 알고리즘 이해하기

디피-헬만(Diffie–Hellman) 알고리즘은 왠지 호감이 가는(?) 인상의

아저씨들이 1976년에 만든 알고리즘입니다.

(사진은 1977년의 것입니다. 왼쪽부터 Ralph Merkle, Martin Hellman, Whitfield Diffie)

원리는 간단히 이야기하자면,

--- 아주 큰 2 개의 소수를 양쪽(peer)에서 공유하면서 시작합니다. ---

소수(prime number)는 자신과 1 로만 나누어 지는 수를 말합니다. (2, 3, 5, 7, ...)

일단 소수 1개(N)를 정의하여 두 노드간에 값을 공유합니다.

소수 N의 크기가 매우 클수록 암호화 수준이 올라갑니다.

G는 1부터 N-1 사이의 자연수입니다.

-- 여기까지는 이해가 물론 가시죠? --

그러면 이상태에서,

한쪽(1번측이라고 봅시다)에서 공개키(public key)인 R1을 생성합니다.

R1 = G^x mod N 입니다.

(^는 승수를 의미하고, mod는 나머지를 의미합니다. 2^3=8 이고 10 mod 3 = 1 입니다.)

이 때, x 는 물론 1번측의 비밀키(private key)입니다.

비밀키(private key)는 공개키와 다르게 외부에 노출되면 안되는 값입니다.

그리고 이 공개키인 R1 을 다른측(2번측)으로 전송합니다.

R1은 통신(전송)을 할 경우 값이 외부로 값이 노출 될 수 있습니다.

--- 여기까지는 이해가 가시죠? ---

그리고 다른쪽(=2번측)에서도 마찬가지로 2번측의 공개키인 R2를 만듭니다.

R2 = G^y mod N 입니다.

이 때, y 는 2번측의 비밀키(private key)입니다. 당연히 y는 공개되면 안되죠.

그리고 R2를 2번측에서 1번측으로 전송합니다.

이제 양쪽은 다른 쪽이 전송한 수(R1,R2)를 서로서로 알고 있습니다.

즉, 1번측에서는 2번측이 전송한 R2 를 알고 있고요,

반대로, 2번측에서는 1번측이 전송한 R1 을 알고 있습니다.

단, 상대방의 비밀키(x, y)는 모릅니다. 비밀키는 자신만이 알고 있습니다.

--- 여기까지도 이해가시리라 믿고요 ---

그 상태에서 1번측은

전송받은 수 R2 를 가지고 K1 = R2^x mod N 값을 계산합니다.

그리고 마찬가지로,

2번측도 전송받은 수 R1 으로 K2 = R1^y mod N 값을 계산합니다.

그러면, 이때 K1 = K2 은 관계가 성립합니다!

(둘은 수학적으로 동일하게 증명됩니다.)

그리고, K1 = K2 = K = G^(xy) mod N 의 관계도 성립하게 됩니다.

K는 1번측과 2번측 모두가 알 수 있는 키값입니다.

--- 이제 서로 키 교환과 연산은 끝났습니다. ---

마지막으로 생성된 키 K 를 이용하여서

일반적인 세션키 알고리즘(AES, SEED 등)의 키로

이용하는 것이 일반적인 사용방법입니다.

--- 이해되시나요? 설명이 별로죠. 죄송합니다. ㅋ ---

예전에는 귀찮아서 대충 라이브러리 함수로 대충 코딩했는데

지금 정리해보니까 대충 이런 내용이군요 ㅎ

728x90
반응형

+ Recent posts