나는 안드로이드 비밀 번호 관리자 응용 프로그램을 쓰고 있는데 어딘가에 마스터 암호를 저장하고 싶지만 어디에 있는지 모른다. 사용자가 내가 선택한 하드 코딩 된 암호를 제공 한 다음 데이터베이스에 저장하는 마스터 암호를 암호화해야합니까? 아니면 다른 일을해야합니까?어디에서 암호를 저장 하시겠습니까?
답변
암호화되지 않은 암호는 절대로 저장하면 안됩니다.
암호는 안전하게 암호화 할 수 없습니다 (암호 해독 키를 어딘가에 저장해야하기 때문에). 암호 해독 할 수없는 해시를 저장해야합니다.
그런 식으로 사용자가 암호를 제공 할 때 암호를 해시와 비교할 수 있습니다. 일치하는 경우 지정된 암호로 저장된 사용자 : 암호 쌍을 해독 할 수 있습니다.
추 신 : 해시 소금을 잊지 말고 please do it properly.
아니요, 아니요, 천 번입니다.
GPLv2 코드를 볼 수 있다면 KeePass 소스 코드를 살펴보십시오.
마스터 비밀번호가 키 (비밀번호 기반 키 파생)로 바뀌고 해당 키는 개별 데이터 (개별 비밀번호)를 암호화하고 해독하는 데 사용됩니다.
따라서 프로세스는 다음과 유사합니다. 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를 사용할 수 있습니다.
마스터 비밀번호가 올바른지 확인하십시오 : 기존 마스터 비밀번호가있는 기존 데이터베이스로 이동하는 경우 해당 메모리 전용 키를 사용하여 '기본'비밀번호와 같은 일부 고정 데이터를 해독하십시오 . 값이 원하는 값으로 암호 해독되면 입력 된 마스터 비밀번호가 정확하고 그렇지 않은 경우 마스터 비밀번호가 잘못되었거나 데이터베이스가 손상되었습니다. 새 데이터베이스를 시작하거나 마스터 비밀번호를 변경하는 경우 '기본'비밀번호를 암호화하고 암호화 된 값을 저장하십시오.
마스터 암호화 키를 사용하여 URL, 사용자 이름, 메모 및 기타 비 암호 데이터의 암호를 해독합니다.
마스터 암호화 키를 사용하여 사용자 요청에 따라 기존 암호를 해독 한 다음 (사용자가 요청한 정확한 암호 만 사용) 데이터를 완료하거나 타이머가 실행되는 즉시 임의의 가비지로 데이터를 덮어 씁니다. 아웃. 마스터 암호 키를 사용하여 새 암호를 암호화하십시오.
사용자가 완료하거나 타이머가 만료되면 모든 변수 (특히 메모리 전용 마스터 암호화 키)를 임의의 가비지로 덮어 씁니다.
주 당신이 저장하고 :
- 반복
- 수 소금
- 암호화 된 마스터 암호가
- 암호화 된 사용자 이름 정확한지 여부를 검증하기 위해 만 사용 "고정"암호 URL, 메모 등
- 암호화 된 개별 사이트 암호
당신은 절대로 마스터 암호 나 해시를 저장하지 않습니다. 마스터 암호, 해시 또는 생성 된 마스터 암호화 키를 다른 것과 비교할 수 없습니다. 마스터 암호를 가져 와서 마스터 암호화 키로 변환 한 다음 해당 키를 사용하여 데이터를 암호화하거나 해독합니다. 알려진 데이터 ("고정"암호)를 통해 해당 키가 예상 된 결과를 제공하는지 확인할 수 있습니다. 마스터 비밀번호가 정확한지 알 때 알 수없는 데이터 (사용자가 입력하고 신경 쓰는 모든 것)도 암호화되거나 해독됩니다.
- 1. 안전하게 암호를 저장
- 2. Git over HTTPS에 클라이언트 인증서 암호를 저장 하시겠습니까?
- 3. 해시 된 암호를 암호화 하시겠습니까?
- 4. 어디에서 삭제 하시겠습니까?
- 5. 어디에서 예외를 작성 하시겠습니까?
- 6. 어디에서 FROM을 선택 하시겠습니까?
- 7. Saleforce에 해시 문자열을 저장 하시겠습니까?
- 8. 암호화 된 값의 암호를 해독 하시겠습니까?
- 9. svcutil.exe에 사용자 이름과 암호를 전달 하시겠습니까?
- 10. Python에서 프롬프트시 암호를 프로그래밍 방식으로 입력 하시겠습니까?
- 11. vim NWrite 용 저장된 암호를 플러시 하시겠습니까?
- 12. php mcrypt - 파일의 암호를 해독하고 암호화 하시겠습니까?
- 13. 어쨌든 EFS 파일의 암호를 해독 하시겠습니까?
- 14. pgp에서 공개, 개인 및 암호를 생성 하시겠습니까?
- 15. preg_match를 사용하여 문자열에서 비밀 암호를 추출 하시겠습니까?
- 16. PHP를 사용하여 PDF에 텍스트와 암호를 추가 하시겠습니까?
- 17. PHP를 통해 WHM 암호를 변경 하시겠습니까?
- 18. 암호를 암호화하고 암호를 해독하기위한 키를 저장하는 위치
- 19. 내 정보 저장 확인란 : 인증 정보를 안전하게 저장 하시겠습니까?
- 20. 이메일 주소 비밀 번호를 저장 하시겠습니까? - 안전합니까?
- 21. XML에서 DataRelation을 저장 하시겠습니까?
- 22. viewController에서 저장 하시겠습니까?
- 23. 클래스를 파일에 저장 하시겠습니까?
- 24. gtk.TextTags를 파일에 저장 하시겠습니까?
- 25. 번들 저장 하시겠습니까?
- 26. ListView를 Settings.settings에 저장 하시겠습니까?
- 27. SQL 데이터베이스에 저장 하시겠습니까?
- 28. TreeViewItem에 개체를 저장 하시겠습니까?
- 29. 개체를 특성에 저장 하시겠습니까?
- 30. 텍스트를 BLOB에 저장 하시겠습니까?
마스터 비밀번호를 저장하지 않는 비밀번호 관리자에 대한 전체 아이디어가 아닙니까? 마스터 비밀번호를 암호화 키로 사용하여 개별 비밀번호를 저장합니다. 그리고 마스터 비밀번호는 저장되지 않습니다. – Wolph