2011-04-10 5 views
5

나는 안드로이드 비밀 번호 관리자 응용 프로그램을 쓰고 있는데 어딘가에 마스터 암호를 저장하고 싶지만 어디에 있는지 모른다. 사용자가 내가 선택한 하드 코딩 된 암호를 제공 한 다음 데이터베이스에 저장하는 마스터 암호를 암호화해야합니까? 아니면 다른 일을해야합니까?어디에서 암호를 저장 하시겠습니까?

+4

마스터 비밀번호를 저장하지 않는 비밀번호 관리자에 대한 전체 아이디어가 아닙니까? 마스터 비밀번호를 암호화 키로 사용하여 개별 비밀번호를 저장합니다. 그리고 마스터 비밀번호는 저장되지 않습니다. – Wolph

답변

5

암호화되지 않은 암호는 절대로 저장하면 안됩니다.

암호는 안전하게 암호화 할 수 없습니다 (암호 해독 키를 어딘가에 저장해야하기 때문에). 암호 해독 할 수없는 해시를 저장해야합니다.

그런 식으로 사용자가 암호를 제공 할 때 암호를 해시와 비교할 수 있습니다. 일치하는 경우 지정된 암호로 저장된 사용자 : 암호 쌍을 해독 할 수 있습니다.

추 신 : 해시 소금을 잊지 말고 please do it properly.

+0

나는 그의 질문을 다시 읽으라고 조언합니다. 암호 관리자를 만들 때 원래 암호를 저장해야합니다;) 대상이 지원하지 않으면 해싱은 옵션이 아닙니다. – Wolph

+1

@WoLpH : 마스터 비밀번호로 비밀번호를 암호화 할 수 있습니다. 그러나 마스터 비밀번호는 저장하지 않아도됩니다. 해시를 저장하는 것으로 충분합니다. –

+0

숄리 : 원래 답변을 수정 한 것으로 확인됩니다. 이제 맞습니다. +1 – Wolph

3

아니요, 아니요, 천 번입니다.

GPLv2 코드를 볼 수 있다면 KeePass 소스 코드를 살펴보십시오.

마스터 비밀번호가 키 (비밀번호 기반 키 파생)로 바뀌고 해당 키는 개별 데이터 (개별 비밀번호)를 암호화하고 해독하는 데 사용됩니다.

따라서 프로세스는 다음과 유사합니다. 1. 해제 할 수있는 모든 종류의 디스크 스왑을 끕니다. 사용자에게 마스터 비밀번호를 요청하십시오.

  1. 가 PBKDF2 같은 것을 사용하여, 메모리 내의 전용 마스터 암호화 키에 마스터 암호 우회전

    (HMAC-SHA-256, 마스터 비밀 저장된 임의의 염 * 2,000,000를 256) - PBKDF2이기도 RFC2898 및 PKCS # 5로 알려져 있습니다. HMAC-SHA-256은 해시 함수입니다. 마스터 비밀 번호는 사용자가 입력 한 것입니다 - 이것은 결코 어떤 형태로든 저장되지 않습니다! 저장된 임의 소금은 새로운 마스터 암호가 선택 될 때마다 새로 생성 된 64 비트 이상의 암호화 된 무작위 값이며 대신에 을 저장하여 모든 형식의 마스터 암호를 저장합니다. 2000000은 우리가 HMAC를 실행할 횟수로, 저장되어 있으며 사용자가 선택할 수 있어야합니다 - 기다려야하는 수만큼 있어야합니다 (KeePass는 벤치마킹 할 수있는 기능이 있으며 얼마나 많은 사람들이 1 초가 걸리는지 봅니다 - 4 초 또는 5 초로 늘리는 것이 좋습니다.) 256은 필요한 출력 비트 수입니다.이 경우 CAMELIA-256 또는 AES-256을 사용하여 암호를 암호화한다고 가정합니다 (암호화 기능이 키에 사용하는 비트 수와 일치) . 예, 대신 scrypt 또는 bcrypt를 사용할 수 있습니다.

  2. 마스터 비밀번호가 올바른지 확인하십시오 : 기존 마스터 비밀번호가있는 기존 데이터베이스로 이동하는 경우 해당 메모리 전용 키를 사용하여 '기본'비밀번호와 같은 일부 고정 데이터를 해독하십시오 . 값이 원하는 값으로 암호 해독되면 입력 된 마스터 비밀번호가 정확하고 그렇지 않은 경우 마스터 비밀번호가 잘못되었거나 데이터베이스가 손상되었습니다. 새 데이터베이스를 시작하거나 마스터 비밀번호를 변경하는 경우 '기본'비밀번호를 암호화하고 암호화 된 값을 저장하십시오.

  3. 마스터 암호화 키를 사용하여 URL, 사용자 이름, 메모 및 기타 비 암호 데이터의 암호를 해독합니다.

  4. 마스터 암호화 키를 사용하여 사용자 요청에 따라 기존 암호를 해독 한 다음 (사용자가 요청한 정확한 암호 만 사용) 데이터를 완료하거나 타이머가 실행되는 즉시 임의의 가비지로 데이터를 덮어 씁니다. 아웃. 마스터 암호 키를 사용하여 새 암호를 암호화하십시오.

  5. 사용자가 완료하거나 타이머가 만료되면 모든 변수 (특히 메모리 전용 마스터 암호화 키)를 임의의 가비지로 덮어 씁니다.

주 당신이 저장하고 :

  • 반복
  • 수 소금
  • 암호화 된 마스터 암호가
  • 암호화 된 사용자 이름 정확한지 여부를 검증하기 위해 만 사용 "고정"암호 URL, 메모 등
  • 암호화 된 개별 사이트 암호

당신은 절대로 마스터 암호 나 해시를 저장하지 않습니다. 마스터 암호, 해시 또는 생성 된 마스터 암호화 키를 다른 것과 비교할 수 없습니다. 마스터 암호를 가져 와서 마스터 암호화 키로 변환 한 다음 해당 키를 사용하여 데이터를 암호화하거나 해독합니다. 알려진 데이터 ("고정"암호)를 통해 해당 키가 예상 된 결과를 제공하는지 확인할 수 있습니다. 마스터 비밀번호가 정확한지 알 때 알 수없는 데이터 (사용자가 입력하고 신경 쓰는 모든 것)도 암호화되거나 해독됩니다.

관련 문제