SharedIT | 묻고 답하기(AMP)

SQLite 공부 중 에러 사항이 있습니다...

안녕하세요.

SQLite 취약점 진단 관련해서 공부 중 도저히 풀리지 않는 에러가 있어 여쭤봅니다.


SQLCipher를 사용해서 미리 작성된 DB파일을 암호화 하려고 하는데 PRAGMA KEY 값을 입력하기 전에는 정상적인 DB파일로 읽히다가 해당 명령어를 입력만 하면 DB파일 아니라고 모든 명령어가 에러가 납니다.

그래서 해당 sql창을 종료하고 다시 DB파일로 접속을 하면 이때는 또 문제가 없이 정상적으로 모든 명령어가 작동합니다.

혹시 해당 부분 잘 아시는 분이 계신다면 도와주세요.


위 사진은 입력 사진입니다.

Tags : 태그가 없습니다.

4개의 답변이 있습니다.

wansoo
  0 추천 | 5달 전

기존의 평문 DB를 암호화 시키려면...


sqlcipher plaintext.db

sqlite> ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'newkey';

sqlite> SELECT sqlcipher_export('encrypted');

sqlite> DETACH DATABASE encrypted;


와 같이 해 줘야 하는 걸로 보이네요.



PRAGMA key 명령은 암호화된 DB 파일을 열어서 사용하는 명령인 걸로 보이네요.


암호화된 DB 파일을 다시 평문 DB file로 만들때는


sqlcipher encrypted.db

sqlite> PRAGMA key = 'testkey';

sqlite> ATTACH DATABASE 'plaintext.db' AS plaintext KEY '';  -- empty key will disable encryption

sqlite> SELECT sqlcipher_export('plaintext');

sqlite> DETACH DATABASE plaintext;



 같이 하면 되겠고요.



아래 링크 자료 참조하면 도움이 될 것 같습니다.

https://discuss.zetetic.net/t/how-to-encrypt-a-plaintext-sqlite-database-to-use-sqlcipher-and-avoid-file-is-encrypted-or-is-not-a-database-errors/868

앵그리파파
  0 추천 | 5달 전

내용만 봐서는 SQLCipher를 사용해서 SQLite 데이터베이스를 암호화하는 동안 문제가 발생한 것 같습니다. 표시되는 오류는 암호화 프로세스나 제공된 키에 문제가 있을 수 있음을 나타냅니다.

몇가지 체크해볼 수 있는 내용이니 참고하세요.

  • 1.SQLite 데이터베이스 버전과 호환되는 SQLCipher 버전을 사용하고 있는지 확인해 보세요. SQLCipher 버전마다 요구 사항이 다를 수 있습니다.

  • 2.SQLCipher 라이브러리를  SQLite 도구 또는 환경과 올바르게 통합했는지 확인해 보세요. 도구가 SQLCipher 암호화를 인식하지 못하는 경우 오류가 발생할 수 있습니다.

sshnau
  0 추천 | 5달 전

사진만 보면 암호화 된 상태에서 무결성 검사랑 조회를 해서 sqlite 가 인식을 못하는것 같구요.
pragma key 명령으로 암호화 -> select 실패 -> pragma key 명령으로 복호화 -> select 성공
위 순서대로 진행 함 보시면 될것 같습니다

wansoo
  0 추천 | 5달 전

SQLite DB file은 Access 처럼 Database가 한개 파일로 존재합니다.

정확한 내용은 모르겠지만...

암호화와 관련된 작업인 걸로 보이는데, 암호키를 입력한 상태인지, 암호키를 입력하지 않은 상태인지에 따라서 Database에 접근 가능 여부가 결정되는 걸로 보이는데요.


파일이 database가 아니란 말은 database로 정해져 있는 파일 포멧이 아니란 말입니다.

예를 들어 Excel에서  XLSX 확장자를 가진 파일을 열려고 하는데, 파일 내용은 JPG 이미지인데, 파일 확장자만 XLSX로 변경해두고 Excel에서 열려고 하면 파일 포멧이 맞지 않기 때문에 엑셀에서 정상적인 XLSX 파일이 아니라고 메시지가 나오는 것과 같은 내용인걸로 보입니다.


암호화되지 않은 SQLite Database 파일인데, 암호화되어 있는 파일인것 처럼 파일 내용을 암호 복호화 처리해서 파일 포멧을 변경한 후에 파일을 읽으려한다면 SQLite에서 포멧이 맞지 않아 읽지 못하게 되는게 아닐까 싶네요.

반대로 암호화되어 있는 SQLite Database file을 복화화 처리하지 않고 SQLite에서 DB file을 열려고 할 경우에도 동일하게 Database file 포멧이 아니라고 읽지 못하는 문제가 발생하게 될 것이고요.


암호화된 DB 파일을 복호화하여 사용하려고 한것이 맞는지, 암호화 되지 않은 파일을 암/복호화 과정ㅇ을 거치지 않고 사용하려고 접근시도한 것이 맞는지...

아니면, 암호화된 DB 파일을 제대로된 암호를 이용하여 제대로된 복호화 알고리즘을 이용하여 복호화한 후에 접근 시도를 한 것이 맞는 지를 확인해 볼 필요가 있을 것 같네요.