2010-04-22 4 views
6

나는 응용 프로그램 암호 및 SQLite 보안에 관한 정보를 Google에서 찾고 있었으며 아무 것도 발견하지 못했습니다.응용 프로그램 암호 및 SQLite 보안

1) 내 응용 프로그램은 응용 프로그램을 처음 열 때 호출되는 선택적 암호 활동을해야 할 것입니다 : 여기

내가 알아 내려고 노력하고 있어요 것입니다. 이에 대한 나의 질문은 다음과 같습니다. a) 안드로이드 환경 설정 또는 SQLite 데이터베이스를 통해 암호를 저장하는 경우, 어떻게 암호에 대한 보안과 개인 정보를 보장 할 수 있습니까? 그리고 b) 암호 복구를 어떻게 처리해야합니까?

위에서 b)와 관련하여 암호 기능을 사용할 때 전자 메일 주소를 요구하고 암호 복구를 요청할 때 사용할 암호 힌트 질문을 생각했습니다. 힌트 질문에 성공적으로 대답하면 암호는 제출 된 전자 메일 주소로 전자 메일로 전송됩니다. 전자 메일 방법의 보안 및 개인 정보 보호에 완전히 확신하지는 못합니다. 특히 사용자가 공개 된 공용 무선 네트워크에 연결되어있을 때 전자 메일을 보내는 경우에는 더욱 그렇습니다.

2) 응용 프로그램에 SQLite 데이터베이스가 사용됩니다. SQLite 데이터베이스는 사용자가 가지고있는 SD 카드에 저장됩니다. 데이터가 전화 또는 SD 카드에 저장되었는지 여부에 관계없이 데이터 암호화에 어떤 옵션이 있으며 어떻게 응용 프로그램 성능에 영향을 줍니까?

미리 질문 해 주셔서 감사합니다. 나는 같은 관심사로 고투하고있는 다른 개발자들이있을 것이라고 생각한다.

+1

이러한 것들에 대한 실제 경험이 없으므로 답변을 게시하는 것을 주저합니다. 그러나 비밀번호를 저장해서는 안된다는 것을 알고 있습니다. 소금에 절인 해시를 저장해야합니다. 보안 질문 답변 (일부 표준화 이후 - 소문자로 변환, 공백을 다듬은 후 등)에 대해서도 동일한 작업을 수행 할 수 있습니다. 비밀번호 재설정의 경우 가장 안전한 방법은 질문을하고 보안 세션 내에서 재설정을 모두 허용하는 것입니다. 그렇지 않으면 적어도 시간 제한 내에서 로그인하고 안전하게 새 암호를 입력/검색 할 수 있음을 알리기 위해 사용자에게 이메일을 보낼 수 있습니다. – Cascabel

답변

4

1) 비밀번호 복구는 위험합니다. 비밀번호의 힘은 질문에 대한 답변에 의해 약화됩니다. 이것은 가장 약한 링크의 교장입니다. Sara Palin's email hack이 (매우) 안전하지 않은 기능으로 인해 가능했습니다. 또한 AES와 같은 블록 암호 나 RC4와 같은 스트림 암호 또는 RSA와 같은 비대칭 암호처럼 암호를 "복구 가능한 형식"으로 저장하면 사용자는 CWE-257을 분명하게 위반합니다. 이 기능이 정말로 필요한 경우 사용자 으로 재설정해야합니다. 암호를 모르는 경우 왜 알려야합니까?

암호는 항상 보안 메시지 다이제스트를 사용하여 해시되어야합니다. 현재 많은 메시지 다이제스트 기능이 불안정합니다. md4, md5, sha0 및 sha1은 모두 매우 손상되어 있으므로 암호로 사용해서는 안됩니다. 현재 sha2 제품군의 모든 구성원이 사용할 수있는 최상의 기능입니다. SHA-256을 사용하는 것이 좋습니다. NIST는 현재 sha3에 대한 콘테스트를 개최 중이며 2012 년 중순까지는 최종 마무리되지 않을 예정입니다.

비밀번호는 큰 임의 값으로 "소금에 절이는"것이어야합니다. 이것은 데이터베이스의 또 다른 열이 될 수 있으며,이 열은 메시지 다이제스트 기능에 전달되기 전에 일반 텍스트 암호에 추가됩니다. 이로 인해 공격자가 소금을 얻을 수 없으면 사전 공격이 불가능 해지고 미리 계산 된 공격이 자원 집약적으로 수행되어 성공적으로 수행됩니다. 일반적인 지식에도 불구하고, 염색은 무지개 테이블을 막지는 않으며, 단지 MUCH LARGER 레인보우 테이블 세트가 필요하다는 것을 의미합니다.

2) 암호화 된 데이터베이스의 키를 어디에 둘까요? Sqlite는 암호화 된 파일 일 뿐이며 앱을 시작할 때 암호를 해독 할 수있는 파일입니다.로드 시간이 추가되지만 런타임에는 빠릅니다. 진짜 문제는 거기에있다 절대적으로 장소가 없습니다 당신은 공격자가 얻을 수없는 장치에 비밀을 넣을 수 있습니다. 공격자는 사용자가 수행하는 것보다 컨트롤이 더 많습니다. 공격자는 장치를 탈옥 수 있으며 원하는대로 수행 할 수 있습니다.런타임에 키가 전송 되더라도 키는 장치의 메모리를보고 얻을 수 있습니다. 데이터베이스를 암호화하기위한 모든 노력이 훼손 될 수 있으며 더 어렵게 만들 수 있지만 숙련 된 해커를 막을 수는 없습니다.

+1

소금에 대해서 : 내가 실수하지 않는다면 일반적으로 사용자 당 고유 한 소금 ('username +'salt "+ password")을 선택하고 무지개 표는 실제로 쓸모가 없습니다. – mafu

+0

나는 내 자신의 질문에 대한 코멘트를 추가하려고합니다. 몇 년이 지났습니다. 전자 데이터 보호의 현재 상태에서 사용자의 암호가 데이터베이스 또는 기본 설정 값에 저장되어 있으면 SHA-256 또는 유사한 암호를 사용하여 암호를 암호화해야합니다. 일반적으로 암호화는 128 비트 이상이어야합니다. 암호화되지 않은 암호, 키, 소금, 해시 등을 저장하지 마십시오. – Bryan