비밀을 저장하기위한 휴대용 데이터베이스
-
23-08-2019 - |
문제
데이터베이스에 비밀을 저장 해야하는 응용 프로그램을 개발하고 있습니다.
데이터가 암호화되거나 비밀번호 보호 또는 둘 다로 저장되는 휴대용 데이터베이스 (Firebird, SQLITE 등)가 필요합니다.
해 보자 예를 들어 비밀번호 관리자를 만들고 싶습니다. 해당 비밀번호를 데이터베이스에 저장해야합니다. 나는 Embed Firebird를 사용하는 데 익숙하지만 비밀 데이터에는 적합하지 않습니다.
또 다른 솔루션은 파일에 연결되어 있지 않을 때 데이터베이스를 자연스럽게 사용하고 데이터베이스 파일을 암호화하는 것이지만 보안 또는 성능 영향은 확실하지 않습니다.
당신이 추천하는 가장 좋은 방법은 무엇입니까?
해결책
부르는 프로젝트가 있습니다 sqlite-crypt. 당신의 최선의 방법이어야합니다. 디스크 암호화 된 모든 데이터가 포함 된 SQLITE DB.
다른 팁
또한 DLL 만 필요한 SQL Server Compact Edition을 살펴볼 수 있으며 SQLITE 또는 ACCESS, Firebird 등과 같은 단일 파일에 데이터를 저장합니다.
또한 암호화 기능이 내장되어 있습니다.
일부 참조 :
- SQL Server Compact의 보안 및 암호화
- SQL Server Compact Edition 사용에 대한 튜토리얼 (페이지 아래로 두 번째 및 세 번째 섹션).
비밀번호 암호화
당신에 대한 나의 대답을 참조하십시오 다른 질문 OS.
나는 CJM에 동의하지만, 자신의 글을 쓰는 데 데드 세트가 있다면 쓰기 시간에 스트림을 암호화하고 읽기 시간에 해독해야합니다. 다소 강한 게시 된 알고리즘은 물건을 안전하게 유지해야합니다.
암호화 된 SQLITE 데이터베이스 작업에 대한 RealBasic의 내장 지원은 몇 가지 프로젝트에서 저에게 효과적이었습니다.
체크 아웃하는 것이 좋습니다 sqlcipher (전체 공개, 저는 개발자 중 하나입니다!) SQLITE에 대한 투명한 페이지 수준 암호화의 무료 및 오픈 소스 구현입니다. 구현은 상당히 강력하고 활발한 개발 중이며 사용하기가 매우 쉽습니다 (비교적 말하면).
나는 두 번째로 cheepass를 사용하라는 제안입니다. 민감한 데이터를위한 훌륭한 상점이며 꽤 좋은 API를 노출시킵니다. 다음은 표준 키패스 2 데이터베이스를 읽는 방법의 예입니다.
var dbpath = @"C:\path\to\passwords.kdbx";
var masterpw = "Your$uper$tr0ngMst3rP@ssw0rd";
var ioConnInfo = new IOConnectionInfo { Path = dbpath };
var compKey = new CompositeKey();
compKey.AddUserKey(new KcpPassword(masterpw));
var db = new KeePassLib.PwDatabase();
db.Open(ioConnInfo, compKey, null);
var kpdata = from entry in db.RootGroup.GetEntries(true)
select new
{
Group = entry.ParentGroup.Name,
Title = entry.Strings.ReadSafe("Title"),
Username = entry.Strings.ReadSafe("UserName"),
Password = entry.Strings.ReadSafe("Password"),
URL = entry.Strings.ReadSafe("URL"),
Notes = entry.Strings.ReadSafe("Notes")
};
db.Close();