KeyInfo의 isInsideSecureHardware-method의 반환 값은 장치 모델, OS 버전 및 기타 임의의 요소에 의존하는 것으로 보입니다.안드로이드에서 비공개 키가 보안 하드웨어 내에 저장되는 것을 보장하는 방법
예를 들어 오래된 OS 버전 인 isInsideSecureHardware()가있는 Sony xperia z5 compact를 사용하면 잠시 동안 true를 반환 한 다음 갑자기 동일한 개인 키에 대해 false를 반환하기 시작할 수 있습니다. 최신 os 버전 (32.2.A.0.224)에서는 false 만 반환하는 것으로 보입니다. Huawei Nexus 6P는 항상 true를 반환합니다.
키가 보안 하드웨어에 저장되어 있는지 확인하는 방법이 있습니까?
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");
keyPairGenerator.initialize(new KeyGenParameterSpec.Builder(KEY_NAME, KeyProperties.PURPOSE_DECRYPT | KeyProperties.PURPOSE_ENCRYPT)
.setUserAuthenticationRequired(true)
.setBlockModes(KeyProperties.BLOCK_MODE_ECB)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
.build());
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// Check that private key is inside secure hardware
KeyFactory factory = KeyFactory.getInstance(key.getAlgorithm(), "AndroidKeyStore");
KeyInfo keyInfo = factory.getKeySpec(key, KeyInfo.class);
boolean secure = keyInfo.isInsideSecureHardware(); // this usually returns false
감사 :
여기에 내 현재 코드입니다!
편집 : https://talk.sonymobile.com/t5/Android-development/hardware-backed-keystore/td-p/1154124
그것은 언급 한 다음과 같은 경고가 로그에 인쇄됩니다 :
W 키 스토어 : 1 차 keymaster 장치 실패 소니 지원 포럼에서 같은 문제에 대한 항목이 키를 생성하여 SW로 떨어집니다.
설명을 요청할 때 질문에 대한 답을 쓰지 마십시오. 댓글이 더 좋습니다. – payala
안녕하세요, 답변을 오래 받아서 죄송합니다. isUserAuthenticationRequirementEnforcedBySecureHardware()는 현재 버전에서 false를 반환합니다. 일관성이있는 것 같습니다. 이전 버전은 32.1.A.1.185입니다. 이 버전에서는 isUserAuthenticationRequirementEnforcedBySecureHardware()가 true를 반환합니다. 공장 출하 상태로 복원해도 문제가 해결되지 않았습니다. 지문 스캐너 정보 : UserAuthenticationRequired를 false로 설정하면 같은 문제가 발생합니다. 지문 스캐닝과 관련된 것이 더 이상 없습니다. – KaPa