4

사용자 인증 방법 (정확한 지문)을 실험 중이며 Android KeyStore도 찾고 있습니다. 사용자가 내 서버에 사용자를 기록하는 지문을 설정할 수있는 시스템을 구축하려고합니다. 현재 서버에는 올바른 사용자 이름/암호 조합이 필요한 POST 요청이 필요합니다.Android KeyStore를 사용하여 사용자 인증 자격 증명 저장

초보자에게 Fingerprint API와 KeyStore의 작동 방식에 대한 이해가 있기 때문에 몇 가지 질문이 있습니다.

1) 지문을 물어보고 성공적인 응답을 얻으 려 할 때 (달성하기 쉽습니다) - POST 요청을 시작할 수 있도록 유효한 사용자 이름/암호로 어떻게 변환 할 수 있습니까? KeyStore에 사용자 이름과 암호를 모두 저장해야합니까?

2) KeyStore을 설정할 때 정확히 어떻게 보이나요? 사용자 이름과 비밀번호의 별칭을 설정해야합니까? "myapp_user", "myapp_pass"예를 들면?

3) KeyStore에 사용자 이름과 비밀번호 값을 어떻게 저장할 수 있습니까?

4) 나는이 문제에 올바른 방법으로 접근하고 있습니까? 지문을 사용자 이름/암호 조합에 안전하게 연결하는 더 좋은 방법이 있습니까?

도움 주셔서 감사합니다.

+0

AndroidKeyStore가 4.4 버전과 현재 버전 사이에서 많이 변경되었습니다 (처음에는 RSA 키만 저장할 수 있음). 따라서 항상 최소한의 SDK 만 타겟팅해야합니다. – Robert

+0

공정한 @ 로버트. 내 질문은 API 23을 대상으로 한 것이지만, 23 세 이상의 사용자가이를 처리하는 방법을 배우는 데에도 흥미가 있습니다. –

답변

3

AndroidKeystore를 사용하는 일반적인 프로세스는 AndroidKeyStore에서 키를 생성한다는 것입니다. 이 키는 키 스토어를 벗어나지 않고 (내보낼 수는 없지만) 특정 알고리즘을 사용하는 한 사용할 수 있습니다 (모두 지원되지는 않음). Android 버전에서 지원하는 암호화 유형은 here입니다.

Android API 23 이상에서는 AndroidKeyStore에서 직접 AES 키를 생성하고 언급 한 사용자 자격 증명과 같은 사용 데이터를 암호화하기 위해 해당 AES 키를 사용할 수 있습니다.

추가 단계가 필요합니다. 먼저 AndroidKeyStore에서 RSA 키를 생성 한 다음 AndroidKeystore 외부에서 임의의 AES 키를 생성합니다 (내부의 AES는 지원되지 않음). 그런 다음 생성 된 AES 키를 AndroidKeyStore에서 생성 한 RSA 키로 암호화하고 암호화 된 AES 키를 비공개 앱 데이터 디렉토리에 저장합니다.

나중에 옵션 1에서 생성 된 AES 키로 사용자 자격 증명을 암호화 할 수 있습니다.

+0

내 문제는 프로세스를 이해하는 데 더 중요하다고 생각합니다. 새 별칭을 만들고 공개/개인 키 쌍을 쉽게 생성 할 수 있습니다. 그러나 사용자 이름과 암호는 어디에 저장합니까? 값을 암호화하여 SharedPreferences 또는 다른 것으로 설정합니까? 표준 관행은 무엇입니까? 실제로 사용자 이름과 암호를 KeyStore에 배치하고 키를 반환해야한다고 생각했습니다. 어쩌면 KeyStore에서해야 할 일이 잘못된 생각 일 수 있습니다. –

+0

참고로 다음 검색어를 살펴 보았습니다. http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/ https://www.sitepoint.com/securing-your-android-apps-with-the- fingerprint-api/ 첫 번째 예는 텍스트를 암호화/복호화하지만 어디에도 저장하지 않습니다. 두 번째 예제는 암호화 된 텍스트를 SharedPreferences에 저장합니다. –

+1

@h_k : 키 스토어는 암호 키를 저장하기위한 것입니다. 임의의 데이터를 저장할 수는 없습니다. 데이터를 보호하려면 데이터를 설명하고 어딘가에 저장하십시오 (예 : 환경 설정). 사용 된 AES 키 (API23 +)를 저장하지 마십시오. 안드로이드 용 RSA 암호화가 API23까지 저장됩니다. – Robert

0

나는 같은 종류의 요구 사항이 있습니다. 아래 단계가 있습니다.

  1. 지문 옵션을 등록하는 동안 사용자 이름 암호와 지문을 제공합니다.
  2. 우리는 안드로이드 저장소에 키를 생성하고이를 서버에 전달해야합니다 (사용자 이름, 암호 및 생성 된 키).
  3. 서버에서 사용자 이름과 암호에 해당하는이 키를 저장합니다.
  4. 사용자가 finger pint로 로그인을 시도 할 때마다 클라이언트 측에서 지문 인증이 성공하면 키를 가져와 서버로 전달해야합니다.
  5. 서버에서 키가 이미 저장되어있는 테이블 행 (서버 DB)을 확인하고 해당 사용자 이름과 암호를 사용합니다.

의심의 여지는 없습니다. 우리는 사용자 이름 암호와 함께 지문을 등록하는 동안 서버 측에 키를 전달합니다. 따라서 사용자가 로그인을 시도하고 키를 만들 때 다시 동일하게 유지됩니다.

관련 문제