SQLite의 암호화 및 암호 보호
기밀 정보가 있는 대규모 데이터베이스를 처리할 때 이를 잘 숨기고 싶은 것은 매우 자연스러운 일입니다. 한 시스템에 남아 있는 경우 일반적으로 암호로 충분합니다.
그러나 보안되지 않은 네트워크를 통해 전송되는 경우 데이터베이스를 암호화하는 것이 가장 좋습니다.
암호화란?
간단히 말해서 암호화는 데이터를 단순히 읽는 것만으로는 해독할 수 없는 읽을 수 없는 데이터 문자열로 변환하는 프로세스입니다. 암호화하고 해독하려면 키가 필요합니다.
복호화는 읽을 수 없는 데이터를 원래의 형태로 되돌리는 반면, 암호화는 그 반대이며 읽을 수 있는 데이터를 읽을 수 없는 형태로 변환합니다.
데이터는 알고리즘을 기반으로 암호화됩니다. 복잡성은 다양할 수 있으며 일부는 다른 것보다 더 안정적입니다.
따라서 사용하는 암호화 유형은 키 없이 암호 해독을 방지할 수 있을 만큼 충분히 신뢰할 수 있어야 합니다.
SQLite에서 암호를 설정하는 방법
SQLite에서 데이터베이스를 보호하려면 다른 작업을 수행하기 전에 다음 코드를 사용하여 암호를 설정하십시오.
SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
conn.SetPassword("any_password");
conn.open();
다음에 다음을 사용하여 데이터베이스(SQLite 버전 3에서)에 액세스할 수 있습니다.
conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=any_password;");
conn.Open();
다음과 같이 비밀번호를 재설정할 수도 있습니다.
conn.ChangePassword("new_password");
비밀번호 대신 String.Empty
절을 추가하면 비밀번호를 제거할 수 있습니다.
SQLite에서 데이터베이스를 암호화하는 방법
데이터를 암호화하기 위해 여러 가지 방법을 채택할 수 있습니다. 거의 모두가 완전히 안전하고 데이터를 성공적으로 암호화할 수 있는 일부 확장 프로그램이나 소프트웨어를 사용합니다.
다음은 몇 가지 신뢰할 수 있는 옵션입니다.
SQLite 암호화 확장(SEE)
This는 SQLite 전용 표준 암호화 서비스입니다. SQLite에서 암호화된 파일과 암호화되지 않은 파일 모두에서 읽고 쓸 수 있습니다.
또한 ATTACH
명령을 사용하여 SEE
를 사용하여 두 개 이상의 파일을 동시에 작업할 수도 있습니다.
이 확장 프로그램에서 파일을 암호화하는 것은 매우 간단합니다. 아래 코드를 사용하여 그렇게 할 수 있습니다.
int sqlite3_key
(
sqlite3 *db,
const void *e_key,
int key_size
);
여기서 첫 번째 행은 사용된 데이터베이스를 나타내고 두 번째 행은 암호 해독에 사용된 키를 나타내며 마지막 행은 키를 저장하는 데 사용된 바이트 수를 나타냅니다.
다음 코드를 사용하여 데이터베이스의 키를 변경할 수도 있습니다.
int sqlite3_rekey
(
sqlite *db,
const void *e_key, int key_size
);
여기서 첫 번째 행은 데이터베이스를 나타내고 두 번째 행에는 새 키와 키의 전체 크기가 포함됩니다.
NULL
키를 지정하여 이전에 암호화된 데이터베이스를 해독하기 위해 sqlite3_rekey()
를 사용할 수도 있습니다.
이것이 SEE
가 전체 데이터베이스의 데이터와 메타데이터를 암호화하는 방법입니다. 그러나 이것은 현재 무료로 제공되지 않는다는 점에 유의해야 합니다.
wxSQLite
이 암호화 서비스는 모두에게 열려 있습니다. 공개 도메인 SQLite 데이터베이스 주변의 C++ 래퍼로 간주될 수 있습니다.
이것과 다른 점은 wxSQLite
가 기본 데이터베이스를 숨기려고 시도하지 않는다는 것입니다. 대신 wxStrings
와 UTF-8
문자열 간의 자동 변환을 통해 모든 기능을 지원하고 UTF-8 코딩으로 모든 기능을 개별적으로 암호화합니다.
다른 ANSI
빌드의 경우 현재 로케일 변환 개체 (wxConvCurrent)
가 변환에 사용됩니다. 그러나 외부 관리 도구를 사용하여 데이터베이스를 수정하는 경우 문제가 발생할 수 있다는 점에 유의해야 합니다.
이 키 기반 암호화를 사용하면 런타임에 선호하는 암호화 체계를 선택할 수 있습니다.
SQLCipher
SQLCipher
는 SQLite용 오픈 소스 확장입니다. 요구 사항에 따라 안전한 암호화 서비스를 제공합니다.
예를 들어 “Community”, “Commercial” 및 “Enterprise"와 같은 다양한 패키지를 제공합니다. 각각은 추가 기능에 대한 비용을 지불하지 않고 필요한 기능을 제공하도록 설계되었습니다.
‘SQLCipher’는 성능이 우수하고 설치 공간이 작아 임베디드 애플리케이션 데이터베이스 보호에 적합하며 모바일 개발에 적합합니다. 그 기능은 다음과 같습니다.
- 5-15%의 오버헤드 암호화만 있습니다. 이것은 빠른 암호화를 제공한다는 것을 의미합니다.
- 전체 데이터베이스가 암호화됩니다.
- 보안 사례에는
CBC
모드 및 키 파생이 포함됩니다. - 애플리케이션 수준의 암호화를 제공합니다.
- 피어 리뷰
OpenSSL
암호화 라이브러리는 알고리즘을 제공합니다. - 여러 플랫폼을 지원합니다.
SQLiteCrypt
이 서비스는 SQLite와 동일한 AES
인 AES 256
암호화 지원을 사용하여 너무 많은 속도를 손상시키지 않습니다. 실제로 사용자에게는 평소처럼 빠르게 보일 것입니다.
다음은 제공하는 기능 중 일부입니다.
- 엄청나게 빠릅니다.
- SQLite 런타임을 교체하고
2
PRAGMA
를 추가하기만 하면 됩니다. - 한 번에 하나의 블록을 해독하므로 해커도 메모리 덤프에서 아무것도 얻을 수 없습니다.
- 제로 구성으로 간단한 프로세스로 암호화가 가능합니다.
사용하는 pragma
문은 아래에 언급되어 있습니다.
PRAGMA key = 'the passphrase'
PRAGMA lic = 'the license key'
PRAGMA rekey = 'new passphrase'
첫 번째는 암호화된 데이터베이스를 생성하는 것이고, 두 번째는 SQLiteCrypt
소프트웨어의 적법한 사본을 식별하는 것이며, 마지막은 새로운 암호로 데이터베이스를 다시 작성하는 것입니다.
스퀘어
Sqleet
는 최적의 보안을 위한 고급 알고리즘을 기반으로 하는 투명한 암호화 서비스입니다. 강력한 사이드 채널 저항과 높은 소프트웨어 성능을 제공합니다.
크로스 컴파일 및 크로스 플랫폼 개발을 용이하게 하는 종속성이 없기 때문에 컴파일이 간단합니다.
다음과 같이 sqleet
암호화 지원으로 SQLite3 셸을 컴파일할 수 있습니다.
- 유닉스 -
% gcc sqleet.c shell.c -o sqleet -lpthread -ldl
- Windows -
% gcc sqleet.c shell.c -o sqleet
시스템.데이터.SQLite
This는 암호화를 제공하는 .NET
라이브러리입니다. 관련 패키지를 다운로드한 후 SQLite.Interop.dll
을 추출하고 sqlite3.dll
로 이름을 바꿉니다.
일반 텍스트 암호 또는 암호화 키로 암호화합니다.
함수 생성 루틴
SQLite의 함수 생성 루틴을 사용할 수도 있습니다.
$db_obj->sqliteCreateFunction('Encrypt', 'function_name', 2);
$db_obj->sqliteCreateFunction('Decrypt', 'function_name', 2);
이제 데이터베이스를 쉽게 암호화하고 암호를 추가할 수 있습니다.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub