Bu sayfada, KeyMint donanım soyutlama katmanını (HAL) uygulayanlara yardımcı olacak ek ayrıntılar ve yönergeler verilmektedir. HAL'nin birincil dokümanı AIDL arayüz spesifikasyonudur.
API'nin hatalı kullanımı
Arayanlar, API parametreleri olarak geçerli olan ancak sonuçtaki anahtarları güvensiz veya kullanılamaz hale getiren yetkilendirmelerle KeyMint anahtarları oluşturabilir. KeyMint uygulamalarının bu gibi durumlarda başarısız olması veya teşhis yayınlaması gerekmez. Çok küçük anahtarların kullanılması, alakasız giriş parametrelerinin belirtilmesi, başlatma vektörlerinin veya tek kullanımlık sayıların yeniden kullanılması, amaçsız (dolayısıyla işe yaramaz) anahtarların oluşturulması gibi durumlar uygulamalar tarafından teşhis edilmemelidir.
KeyMint modüllerine yapılan çağrıların mantıklı ve faydalı olmasını sağlamak uygulamaların, çerçevelerin ve Android Keystore'un sorumluluğundadır.
addRngEntropy giriş noktası
addRngEntropy
giriş noktası, rastgele sayılar, anahtarlar ve başlatma vektörleri oluşturmak için KeyMint uygulamasının kullandığı havuza arayan tarafından sağlanan entropiyi ekler.
KeyMint uygulamaları, sağlanan entropiyi havuzlarına güvenli bir şekilde karıştırmalıdır. Bu havuzda, donanım rastgele sayı üretecinden dahili olarak oluşturulan entropi de bulunmalıdır. Karıştırma işlemi, addRngEntropy
tarafından sağlanan bitler veya donanım tarafından oluşturulan bitler (ancak ikisi birden değil) üzerinde tam kontrol sahibi olan bir saldırganın, entropi havuzundan oluşturulan bitleri tahmin etmede önemli bir avantaj elde etmeyeceği şekilde yapılmalıdır.
Temel özellikler
KeyMint anahtarları oluşturan mekanizmaların (generateKey
, importKey
ve importWrappedKey
) her biri, yeni oluşturulan anahtarın özelliklerini döndürür. Bu özellikler, her bir özelliği zorunlu kılan güvenlik düzeylerine uygun şekilde bölünür. Döndürülen özellikler, anahtar oluşturma için belirtilen tüm parametreleri (Tag::APPLICATION_ID
ve Tag::APPLICATION_DATA
hariç) içerir.
Bu etiketler anahtar parametrelere dahil edilirse döndürülen anahtar blobu incelenerek değerlerinin bulunması mümkün olmaması için döndürülen özelliklerden kaldırılır. Ancak bunlar, keyblob'a kriptografik olarak bağlıdır. Bu nedenle, anahtar kullanıldığında doğru değerler sağlanmazsa kullanım başarısız olur. Benzer şekilde, Tag::ROOT_OF_TRUST
, anahtara kriptografik olarak bağlıdır ancak anahtar oluşturma veya içe aktarma sırasında belirtilemez ve hiçbir zaman döndürülmez.
KeyMint uygulaması, sağlanan etiketlere ek olarak anahtarın oluşturulma şeklini (KeyOrigin::GENERATED
, KeyOrigin::IMPORTED
veya KeyOrigin::SECURELY_IMPORTED
) belirten Tag::ORIGIN
etiketini de ekler.
Geri alma direnci
Geri alma direnci Tag::ROLLBACK_RESISTANCE
ile gösterilir ve bir anahtar deleteKey
veya deleteAllKeys
ile silindiğinde güvenli donanımın bu anahtarın bir daha asla kullanılamayacağını garanti ettiği anlamına gelir.
KeyMint uygulamaları, oluşturulan veya içe aktarılan anahtar materyalini, şifrelenmiş ve kimliği doğrulanmış bir biçim olan anahtar blobu olarak arayana döndürür. Keystore, keyblob'u sildiğinde anahtar kaybolur ancak daha önce anahtar materyalini almayı başarmış bir saldırgan, anahtarı cihaza geri yükleyebilir.
Güvenli donanım, silinen anahtarların daha sonra geri yüklenemeyeceğini garanti ediyorsa anahtar, geri alma işlemine karşı dirençlidir. Bu işlem genellikle ek anahtar meta verilerini, saldırgan tarafından değiştirilemeyen güvenilir bir konumda depolayarak yapılır. Mobil cihazlarda bu amaçla kullanılan mekanizma genellikle tekrar oynatmaya karşı korumalı bellek bloklarıdır (RPMB). Oluşturulabilecek anahtar sayısı esasen sınırsız olduğundan ve geri alma direnci için kullanılan güvenilir depolama alanı boyutu sınırlı olabileceğinden, depolama alanı dolduğunda uygulama, geri alma dirençli anahtarlar oluşturma isteklerini karşılayamayabilir.
başla
begin()
giriş noktası, belirtilen amaç için belirtilen anahtar kullanılarak belirtilen parametrelerle (uygun şekilde) bir şifreleme işlemi başlatır. İşlemi tamamlamak için kullanılan yeni bir IKeyMintOperation
Binder nesnesi döndürür. Ayrıca, kimliği doğrulanmış işlemlerde kimlik doğrulama jetonunun bir parçası olarak kullanılan bir sorgulama değeri döndürülür.
KeyMint uygulaması en az 16 eşzamanlı işlemi destekler. Anahtar deposu 15 anahtar kullanır ve vold
için şifre şifrelemede kullanılacak bir anahtar bırakır. Keystore'da 15 işlem devam ederken (begin()
çağrılmış ancak finish
veya abort
çağrılmamış) ve 16. işlemi başlatma isteği alındığında, en son kullanılan işlemde abort()
çağrılır. Böylece, yeni istenen işlemi başlatmak için begin()
çağrılmadan önce etkin işlem sayısı 14'e düşürülür.
Anahtar oluşturma veya içe aktarma sırasında Tag::APPLICATION_ID
ya da Tag::APPLICATION_DATA
belirtilmişse begin()
çağrıları, bu yöntemin params
bağımsız değişkeninde başlangıçta belirtilen değerlerle birlikte bu etiketleri içermelidir.
Hata işleme
IKeyMintOperation
üzerindeki bir yöntem ErrorCode::OK
dışında bir hata kodu döndürürse işlem iptal edilir ve işlem Binder nesnesi geçersiz kılınır. Nesnenin gelecekteki tüm kullanımları ErrorCode::INVALID_OPERATION_HANDLE
değerini döndürür.
Yetkilendirme zorunluluğu
Anahtar yetkilendirme zorunluluğu öncelikle begin()
içinde uygulanır. Tek istisna, anahtarın bir veya daha fazla Tag::USER_SECURE_ID
değeri olduğu ve Tag::AUTH_TIMEOUT
değerinin olmadığı durumdur.
Bu durumda, anahtarın işlem başına yetkilendirme yapılması gerekir ve update()
veya finish()
yöntemleri, authToken
bağımsız değişkeninde bir kimlik doğrulama jetonu alır. Jetonun geçerli olduğundan emin olmak için KeyMint uygulaması:
- Kimlik doğrulama jetonundaki HMAC imzasını doğrular.
- Jetonun, anahtarla ilişkilendirilmiş bir kullanıcı kimliğiyle eşleşen güvenli bir kullanıcı kimliği içerdiğini kontrol eder.
- Jetonun kimlik doğrulama türünün anahtarın
Tag::USER_AUTH_TYPE
ile eşleşip eşleşmediğini kontrol eder. - Jetonun, mevcut işlem için zorluk değerini zorluk alanında içerdiğini kontrol eder.
Bu koşullar karşılanmazsa KeyMint, ErrorCode::KEY_USER_NOT_AUTHENTICATED
değerini döndürür.
Arayan, update()
ve finish()
'ye yapılan her aramada kimlik doğrulama jetonunu sağlar. Uygulama, jetonu yalnızca bir kez doğrulayabilir.