안드로이드 개발 정보
(글 수 1,067)
안드로이드 운영체제 특성상 앱에 포함된 데이터베이스 파일이 악의적인 접근 (파일시스템 접근과 같은) 에 노출되기
쉽고, 노출된 데이터는 도난을 당할 우려가 있습니다.
저 역시 데이터를 활용하는 앱을 개발하고 있으며, 본격적인 개발 이전에 데이터의 암호화를 미리 해놓는 작업을 했습니다.
암호화 코드는 여기에서 질답 게시판에서 도움을 받아 어느 분께서 공개하신 코드를 사용하였습니다.
암호화 코드는 타인의 코드이며,
http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=devroom&page=2&wr_id=26579
에서 인용하였습니다. 이 게시물의 원글님의 아이디는 hankmoon 님입니다.
자바와 C++ 로의 변환 작업에 감사드립니다. 안드로이드에 맞게 수정하여 이 글에 첨부합니다.
전체 코드는 다음과 같습니다.
쉽고, 노출된 데이터는 도난을 당할 우려가 있습니다.
저 역시 데이터를 활용하는 앱을 개발하고 있으며, 본격적인 개발 이전에 데이터의 암호화를 미리 해놓는 작업을 했습니다.
암호화 코드는 여기에서 질답 게시판에서 도움을 받아 어느 분께서 공개하신 코드를 사용하였습니다.
암호화 코드는 타인의 코드이며,
http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=devroom&page=2&wr_id=26579
에서 인용하였습니다. 이 게시물의 원글님의 아이디는 hankmoon 님입니다.
자바와 C++ 로의 변환 작업에 감사드립니다. 안드로이드에 맞게 수정하여 이 글에 첨부합니다.
전체 코드는 다음과 같습니다.
package encryptDB.tool;
import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText;
public class EncryptDB extends Activity { /** Called when the activity is first created. */
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ((Button) findViewById(R.id.btnEncrypt)).setOnClickListener(on_Encrypt); } private View.OnClickListener on_Encrypt = new View.OnClickListener() { @Override public void onClick(View v) { WCEncrypt enc = new WCEncrypt(); _DB = openOrCreateDatabase("Unse.db", MODE_PRIVATE, null); Cursor WordTbl = _DB.rawQuery("SELECT * FROM Unse ORDER BY id" , null); String id = ""; String word = ""; String synonym = "";
WordTbl.moveToFirst(); do { id = WordTbl.getString(0); word = enc.Encrypt(WordTbl.getString(1).getBytes(),1234); synonym = enc.Encrypt(WordTbl.getString(2).getBytes(), 1234); ((EditText) findViewById(R.id.txtString)).setText(id); _DB.execSQL("UPDATE Unse SET word = '" + word + "', synonym = '" + synonym + "' WHERE id = " + id); } while (WordTbl.moveToNext() ); } }; private SQLiteDatabase _DB = null; }
2010.08.17 11:02:57
sqlite3 자체에 암호화 기능은 있습니다만(db 파일 자체 암호화) 아직 Froyo에선 안보이네요. 레코드의 필드단위 암호화는 아무래도 인덱스를 걸 수 없거나 서치를 할 수 없다는 단점이 있겠습니다. 상황에 따라 방법을 고려해야 겠죠.
현재 DB의 제한은 UID로 검증하도록 되어 있습니다만 루팅된 디바이스이거나 이미지를 직접 접근/추출한 경우라면 문제가 있을 수 있겠죠. 몇몇 논의 되는 것을 보니 디비 자체 암호화도 곧 지원할 듯 합니다.
위의 코드를 보니 결국 키를 어떻게 할것인가가 해결되지 않았네요.
2010.08.18 00:10:03
어떤 개발자에게 듣기로는 (신뢰성이 있는것을 논외로 하구요), apk 파일이 decompile 되기 때문에.. 소스 코드에 있는 상수는 쉽게 노출될 수 있다고 합니다. 그렇다면,... 키값을 안전하게 숨길 방법이 없을까요???? 제가 오히려 질문을 하네요 ㅜㅜㅜ
2010.08.18 01:44:15
apk가 디컴파일 되는건 사실이구요...
(완벽하게 소스로 재현까진 안되도 변수에 어쩌고 하는건 다 알아볼수 있을정도까지 되는건 제가 테스트 해봤습니다.)
키값을 숨기는 방법은 사실상 없겠죠.... 소스가 다 공개된다고 봤을때 말이죠....
(완벽하게 소스로 재현까진 안되도 변수에 어쩌고 하는건 다 알아볼수 있을정도까지 되는건 제가 테스트 해봤습니다.)
키값을 숨기는 방법은 사실상 없겠죠.... 소스가 다 공개된다고 봤을때 말이죠....