Bu sayfada, temel KeyMint (veya Keymaster) uygulaması tarafından sağlanan Android Keystore'un kriptografik özellikleri hakkında bilgiler yer almaktadır.
Temel şifreleme
Anahtar deposu aşağıdaki işlem kategorilerini sağlar:
- Yalnızca güvenli ortama erişilebilen özel veya gizli anahtar materyaliyle sonuçlanan anahtar oluşturma İstemciler, anahtarları aşağıdaki yöntemlerle oluşturabilir:
- Yeni anahtar oluşturma
- Şifrelenmemiş anahtar materyalinin içe aktarılması
- Şifrelenmiş anahtar materyalinin içe aktarılması
- Anahtar onayı: Asimetrik anahtar oluşturma, anahtar çiftinin ortak anahtar kısmını içeren bir sertifika oluşturur. Bu sertifika isteğe bağlı olarak anahtarın meta verileri ve cihazın durumuyla ilgili bilgileri de içerir. Tüm bu bilgiler, güvenilir bir köke geri dönen bir anahtarla imzalanır.
- Şifreleme işlemleri:
- Simetrik şifreleme ve şifre çözme (AES, 3DES)
- Asimetrik şifre çözme (RSA)
- Asimetrik imzalama (ECDSA, RSA)
- Simetrik imzalama ve doğrulama (HMAC)
- Asimetrik anahtar anlaşması (ECDH)
Keystore ve KeyMint'in asimetrik anahtarlar için ortak anahtar işlemlerini işlemediğini unutmayın.
Amaç, mod ve dolgu gibi protokol öğelerinin yanı sıra erişim kontrolü kısıtlamaları, anahtarlar oluşturulurken veya içe aktarılırken belirtilir ve anahtara kalıcı olarak bağlanır. Böylece anahtarın başka bir şekilde kullanılması önlenir.
Yukarıdaki listeye ek olarak, KeyMint (eski adıyla Keymaster) uygulamalarının sağladığı ancak API olarak sunulmayan bir hizmet daha vardır: rastgele sayı oluşturma. Bu, anahtarların, başlatma vektörlerinin (IV'ler), rastgele dolgunun ve rastgelelik gerektiren güvenli protokollerin diğer öğelerinin oluşturulması için dahili olarak kullanılır.
Gerekli temel öğeler
Tüm KeyMint uygulamaları şunları sağlar:
- RSA
- 2048, 3072 ve 4096 bit anahtar desteği
- Herkese açık üs F4 (2^16+1) desteği
- RSA imzası için dolgu modları:
- RSASSA-PSS (
PaddingMode::RSA_PSS) - RSASSA-PKCS1-v1_5 (
PaddingMode::RSA_PKCS1_1_5_SIGN)
- RSASSA-PSS (
- RSA imzası için özet modları:
- SHA-256
- RSA şifreleme/şifre çözme için dolgu modları:
- Dolgusuz
- RSAES-OAEP (
PaddingMode::RSA_OAEP) - RSAES-PKCS1-v1_5 (
PaddingMode::RSA_PKCS1_1_5_ENCRYPT)
- ECDSA
- Sırasıyla NIST P-224, P-256, P-384 ve P-521 eğrileri kullanılarak 224, 256, 384 ve 521 bit anahtar desteği sağlanır.
- ECDSA için özet modları:
- Özet yok (kullanımdan kaldırıldı, gelecekte kaldırılacak)
- SHA-256
- AES
- 128 ve 256 bit anahtarlar desteklenir.
- CBC, CTR, ECB ve GCM. GCM uygulaması, 96 bit'ten küçük etiketlerin veya 96 bit'ten farklı nonce uzunluklarının kullanılmasına izin vermez.
- CBC ve ECB modları için dolgu modları
PaddingMode::NONEvePaddingMode::PKCS7desteklenir. Dolgu olmadan, CBC veya ECB modu şifrelemede giriş, blok boyutunun katı değilse şifreleme başarısız olur.
- HMAC En az 32 bayta kadar herhangi bir anahtar boyutuyla SHA-256.
SHA1 ve SHA2 ailesinin diğer üyeleri (SHA-224, SHA384 ve SHA512), KeyMint uygulamaları için önemle tavsiye edilir. Keystore, donanım KeyMint uygulaması bunları sağlamıyorsa yazılımda sağlar.
Diğer sistemlerle birlikte çalışabilirlik için bazı temel öğeler de önerilir:
- RSA için daha küçük anahtar boyutları
- RSA için rastgele genel üsler
Anahtar erişim denetimi
Cihazdan hiçbir zaman çıkarılamayan donanım tabanlı anahtarlar, saldırganın bunları istediği gibi kullanabilmesi durumunda çok fazla güvenlik sağlamaz (ancak çıkarılabilen anahtarlardan daha güvenlidir). Bu nedenle, Keystore'un erişim denetimlerini zorunlu kılması çok önemlidir.
Erişim kontrolleri, etiket/değer çiftlerinin "yetkilendirme listesi" olarak tanımlanır. Yetkilendirme etiketleri 32 bitlik tam sayılardır ve değerler çeşitli türlerdedir. Birden fazla değer belirtmek için bazı etiketler tekrarlanabilir. Bir etiketin tekrarlanıp tekrarlanamayacağı KeyMint HAL arayüzünde belirtilir. Bir anahtar oluşturulduğunda, arayan kişi bir yetkilendirme listesi belirtir. Keystore'un temelini oluşturan KeyMint uygulaması, anahtarın geri alma korumasına sahip olup olmadığı gibi bazı ek bilgileri belirtmek için listeyi değiştirir ve döndürülen anahtar blob'unda kodlanmış bir "nihai" yetkilendirme listesi döndürür. Son yetkilendirme listesi değiştirilirse anahtarı herhangi bir kriptografik işlem için kullanma girişimi başarısız olur.
Keymaster 2 ve önceki sürümlerde, olası etiketler kümesi keymaster_authorization_tag_t numaralandırmasında tanımlanır ve kalıcı olarak sabittir (ancak genişletilebilir).
Adların önüne KM_TAG ön eki eklenir. Türünü belirtmek için etiket kimliklerinin en üstteki dört biti kullanılır.
Keymaster 3, KM_TAG ön ekini Tag:: olarak değiştirdi.
Olası türler şunlardır:
ENUM: Birçok etiketin değeri numaralandırmalarda tanımlanır. Örneğin, TAG::PURPOSE değerinin olası değerleri keymaster_purpose_t enum'unda tanımlanır.
ENUM_REP: ENUM ile aynıdır. Tek fark, etiketin yetkilendirme listesinde tekrarlanabilmesidir. Tekrar, birden fazla yetkili değer olduğunu gösterir. Örneğin, bir şifreleme anahtarında KeyPurpose::ENCRYPT ve KeyPurpose::DECRYPT olması muhtemeldir.
KeyMint bir anahtar oluşturduğunda arayan, anahtar için bir yetkilendirme listesi belirtir. Bu liste, ek kısıtlamalar eklemek için Keystore ve KeyMint tarafından değiştirilir. Temel KeyMint uygulaması, nihai yetkilendirme listesini döndürülen keyblob'a kodlar. Kodlanmış yetkilendirme listesi, şifreleme açısından keyblob'a bağlıdır. Bu nedenle, yetkilendirme listesini (sıralama dahil) değiştirmeye yönelik tüm girişimler, şifreleme işlemleri için kullanılamayan geçersiz bir keyblob ile sonuçlanır.
Donanım ve yazılım zorunluluğu
Tüm güvenli donanım uygulamaları aynı özellikleri içermez. Keymaster, çeşitli yaklaşımları desteklemek için sırasıyla güvenli ve güvenli olmayan dünya erişim kontrolü zorlaması veya donanım ve yazılım zorlaması arasında ayrım yapar.
Bu, KeyCharacteristics türündeki securityLevel alanı ile KeyMint API'de kullanıma sunulur. Güvenli donanım, yetkilendirmeleri zorunlu kılınabilecek güvenlik düzeyine göre KeyCharacteristics içine yerleştirmekten sorumludur. Bu bilgiler, asimetrik anahtarların onay kayıtlarında da gösterilir: SecurityLevel::TRUSTED_ENVIRONMENT veya SecurityLevel::STRONGBOX için anahtar özellikleri hardwareEnforced listesinde, SecurityLevel::SOFTWARE veya SecurityLevel::KEYSTORE için özellikler ise softwareEnforced listesinde görünür.
Örneğin, güvenli ortamın tarih ve saat bilgilerine güvenilir erişimi olmadığından, bir anahtarın kullanılabileceği tarih ve saat aralığıyla ilgili kısıtlamalar genellikle güvenli ortam tarafından zorunlu kılınmaz. Sonuç olarak, Tag::ORIGINATION_EXPIRE_DATETIME gibi yetkilendirmeler Android'de Anahtar Deposu tarafından zorunlu kılınır ve SecurityLevel::KEYSTORE olur.
Anahtarların ve yetkilendirmelerinin donanım destekli olup olmadığını belirleme hakkında daha fazla bilgi için Anahtar onayı başlıklı makaleyi inceleyin.
Şifreleme mesajı oluşturma yetkileri
Aşağıdaki etiketler, ilişkili anahtarın kullanıldığı işlemlerin şifreleme özelliklerini tanımlamak için kullanılır:
Tag::ALGORITHMTag::KEY_SIZETag::BLOCK_MODETag::PADDINGTag::CALLER_NONCETag::DIGESTTag::MGF_DIGEST
Aşağıdaki etiketler tekrarlanabilir. Yani tek bir anahtarla birden fazla değer ilişkilendirilebilir:
Tag::BLOCK_MODETag::PADDINGTag::DIGESTTag::MGF_DIGEST
Kullanılacak değer, işlem sırasında belirtilir.
Amaç
Anahtarların, nasıl kullanılabileceklerini tanımlayan Tag::PURPOSE etiketiyle bir veya daha fazla yetkilendirme girişi olarak ifade edilen ilişkili bir amaçlar grubu vardır. Amaçlar, KeyPurpose.aidl adresinde tanımlanmıştır.
Bazı amaç değeri kombinasyonlarının güvenlik sorunlarına yol açtığını unutmayın. Örneğin, hem şifrelemek hem de imzalamak için kullanılabilen bir RSA anahtarı, sistemi rastgele verilerin şifresini çözmeye ikna edebilen bir saldırganın imza oluşturmasına olanak tanır.
Anahtar içe aktarma
Keymaster yalnızca X.509 biçimindeki ortak anahtarların dışa aktarılmasını ve aşağıdakilerin içe aktarılmasını destekler:
- DER kodlamalı PKCS#8 biçiminde asimetrik anahtar çiftleri (parola tabanlı şifreleme olmadan)
- Ham bayt olarak simetrik anahtarlar
İçe aktarılan anahtarların güvenli bir şekilde oluşturulan anahtarlardan ayırt edilebilmesi için Tag::ORIGIN uygun anahtar yetkilendirme listesine dahil edilir. Örneğin, güvenli donanımda oluşturulan bir anahtar için Tag::ORIGIN değeri KeyOrigin::GENERATED olan hw_enforced anahtar özelliklerinin listesinde yer alır. Güvenli donanıma aktarılan bir anahtarın değeri ise KeyOrigin::IMPORTED olur.
Kullanıcı kimlik doğrulaması
Güvenli KeyMint uygulamaları, kullanıcı kimlik doğrulamasını uygulamaz ancak bunu yapan diğer güvenilir uygulamalara bağlıdır. Bu uygulamaların uyguladığı arayüz için Gatekeeper sayfasını inceleyin.
Kullanıcı kimlik doğrulama koşulları iki etiket grubuyla belirtilir. İlk küme, hangi kimlik doğrulama yöntemlerinin anahtarın kullanılmasına izin verdiğini gösterir:
Tag::USER_SECURE_ID, anahtarın kullanımının kilidini açmak için güvenli bir kimlik doğrulama jetonunda sağlanan güvenli kullanıcı kimliğini belirten 64 bitlik bir sayısal değere sahiptir. Tekrarlanırsa değerlerden herhangi biri güvenli bir kimlik doğrulama jetonunda sağlandığı takdirde anahtar kullanılabilir.
İkinci grup, kullanıcının kimliğinin doğrulanması gerekip gerekmediğini ve gerekiyorsa ne zaman doğrulanması gerektiğini belirtir.
Bu etiketlerden hiçbiri yoksa ancak Tag::USER_SECURE_ID varsa anahtarın her kullanımı için kimlik doğrulama gerekir.
Tag::NO_AUTHENTICATION_REQUIRED, anahtara erişim sahibi uygulama (ve erişim izni verdiği uygulamalar) ile sınırlı olsa da kullanıcı kimlik doğrulamasının gerekli olmadığını gösterir.Tag::AUTH_TIMEOUT, saniye cinsinden, anahtar kullanımının yetkilendirilmesi için kullanıcı kimlik doğrulamasının ne kadar yeni olması gerektiğini belirten sayısal bir değerdir. Zaman aşımları yeniden başlatma işlemlerini etkilemez. Yeniden başlatma işleminden sonra tüm kimlik doğrulamalar geçersiz kılınır. Zaman aşımı, kimlik doğrulamanın her başlatmada bir kez gerekli olduğunu belirtmek için büyük bir değere ayarlanabilir (2^32 saniye yaklaşık 136 yıldır; Android cihazların bundan daha sık yeniden başlatıldığı varsayılır).
Cihazın kilidinin açılmasını zorunlu kılma
Tag::UNLOCKED_DEVICE_REQUIRED simgesi olan anahtarlar yalnızca cihazın kilidi açıkken kullanılabilir. Ayrıntılı semantik için
KeyProtection.Builder#setUnlockedDeviceRequired(boolean) başlıklı makaleyi inceleyin.
UNLOCKED_DEVICE_REQUIRED, KeyMint tarafından değil, anahtar deposu tarafından zorunlu kılınır. Ancak Android 12 ve sonraki sürümlerde, cihaz kilitliyken Anahtar Deposu, UNLOCKED_DEVICE_REQUIRED anahtarlarını kriptografik olarak korur. Bu sayede, cihaz kilitliyken Anahtar Deposu'nun güvenliği ihlal edilmiş olsa bile çoğu durumda anahtarlar kullanılamaz.
Bu bölümde açıklanan tüm kriptografi ve rastgele sayı oluşturma işlemleri, KeyMint'in kullanımı açıkça belirtilmediği sürece BoringSSL kullanır. Artık gerekli olmayan tüm gizli anahtarlar sıfırlanır.
UnlockedDeviceRequired süper anahtarları
UNLOCKED_DEVICE_REQUIRED anahtarlarını kriptografik olarak korumak için
Keystore, bunları veritabanında depolamadan önce "süper şifreler". Mümkün olduğunda, cihaz kilitliyken süper şifreleme anahtarlarını (süper anahtarlar) yalnızca cihazın kilidi başarıyla açıldığında kurtarılabilecek şekilde korur. (Bu şifreleme katmanı, KeyMint'in tüm anahtarlara uyguladığı şifreleme katmanına ek olarak uygulandığı için "süper şifreleme" terimi kullanılır.)
Profiller dahil her kullanıcının UNLOCKED_DEVICE_REQUIRED ile ilişkili iki süper anahtarı vardır:
- UnlockedDeviceRequired simetrik süper anahtarı. Bu bir AES-256-GCM anahtarıdır. Cihazın kilidi kullanıcı için açıkken içe aktarılan, oluşturulan veya kullanılan
UNLOCKED_DEVICE_REQUIREDanahtarlarını şifreler. - UnlockedDeviceRequired asimetrik süper anahtarı. Bu, ECDH
P-521 anahtar çiftidir. Cihaz, kullanıcı için kilitliyken içe aktarılan veya oluşturulan
UNLOCKED_DEVICE_REQUIREDanahtarlarını şifreler. Daha fazla bilgi için Cihaz kilitliyken anahtarları saklama başlıklı makaleyi inceleyin.
Süper anahtarları oluşturma ve koruma
Bir kullanıcı oluşturulduğunda Keystore, kullanıcının UnlockedDeviceRequired süper anahtarlarını oluşturur ve bunları kullanıcının sentetik şifresiyle (dolaylı olarak) şifrelenmiş şekilde veritabanında depolar:
- Sistem sunucusu, kullanıcının Keystore şifresini SP800-108 KDF kullanarak kullanıcının sentetik şifresinden türetir.
- Sistem sunucusu, kullanıcının anahtar deposu şifresini anahtar deposuna iletir.
- Keystore, kullanıcının süper anahtarlarını oluşturur.
- Kullanıcının her bir süper anahtarı için:
- Anahtar deposu rastgele bir tuz oluşturur.
- Keystore, HKDF-SHA256 kullanarak kullanıcının Keystore şifresinden ve tuzdan bir AES-256-GCM anahtarı türetir.
- Anahtar deposu, süper anahtarın gizli bölümünü bu AES-256-GCM anahtarıyla şifreler.
- Keystore, şifrelenmiş süper anahtarı ve tuzunu veritabanında depolar. Asimetrik anahtarlarda, anahtarın ortak kısmı da şifrelenmeden saklanır.
Bu prosedür, kullanıcının sentetik şifresi bilindiğinde (ör. kullanıcının doğru PIN'i, deseni veya şifresi girildiğinde) bu süper anahtarların şifresinin çözülmesine olanak tanır.
Keystore, bu süper anahtarları bellekte de önbelleğe alır ve UNLOCKED_DEVICE_REQUIRED anahtarları üzerinde çalışmasına olanak tanır. Ancak, bu anahtarların gizli kısımlarını yalnızca cihazın kilidi kullanıcı için açıkken önbelleğe almaya çalışır. Cihaz kullanıcı için kilitlendiğinde, mümkünse Keystore bu süper anahtarların gizli kısımlarının önbelleğe alınmış kopyasını sıfırlar. Daha net bir ifadeyle, cihaz kullanıcı için kilitlendiğinde Keystore, kullanıcının UnlockedDeviceRequired süper anahtarları için üç koruma düzeyinden birini seçip uygular:
- Kullanıcı yalnızca PIN, desen veya şifre etkinleştirmişse Keystore, önbelleğe alınmış süper anahtarlarının gizli kısımlarını sıfırlar. Bu sayede, süper anahtarlar yalnızca veritabanındaki şifrelenmiş kopya aracılığıyla kurtarılabilir. Bu kopya da yalnızca PIN, desen veya eşdeğer şifre ile şifresi çözülerek kullanılabilir.
- Kullanıcının yalnızca 3. sınıf ("güçlü") biyometrisi ve PIN, desen veya şifresi etkinse Keystore, süper anahtarların PIN, desen veya şifre eşdeğerine alternatif olarak kullanıcının kayıtlı 3. sınıf biyometrileri (genellikle parmak izi) kullanılarak kurtarılmasını sağlar. Bunu yapmak için yeni bir AES-256-GCM anahtarı oluşturur, süper anahtarların gizli kısımlarını bu anahtarla şifreler, AES-256-GCM anahtarını KeyMint'e son 15 saniye içinde biyometrik kimlik doğrulamanın başarılı olmasını gerektiren biyometriye bağlı bir anahtar olarak içe aktarır ve bu anahtarların tümünün şifrelenmemiş metin kopyalarını sıfırlar.
- Kullanıcının 1. sınıf ("kolaylık") biyometrisi, 2. sınıf ("zayıf") biyometrisi veya etkin kilit açma güven aracısı varsa Keystore, süper anahtarları düz metin olarak önbelleğe alır. Bu durumda,
UNLOCKED_DEVICE_REQUIREDanahtarları için şifreleme güvenliği sağlanmaz. Kullanıcılar bu kilidi açma yöntemlerini etkinleştirmeyerek bu güvenliği düşük yedek yöntemden kaçınabilir. Bu kategorilere giren en yaygın kilit açma yöntemleri arasında birçok cihazda yüz tanıma kilidi ve eşlenmiş bir akıllı saatle kilit açma yer alır.
Cihazın kilidi kullanıcı için açıldığında, Keystore mümkünse kullanıcının UnlockedDeviceRequired süper anahtarlarını kurtarır. PIN, desen veya şifreye eşdeğer kilit açma için bu anahtarların veritabanında depolanan kopyasının şifresini çözer. Aksi takdirde, bu anahtarların biyometriye bağlı bir anahtarla şifrelenmiş bir kopyasını kaydedip kaydetmediğini kontrol eder ve kaydettiyse bu kopyanın şifresini çözmeye çalışır. Bu işlem yalnızca KeyMint (Keystore değil) tarafından zorunlu kılınan ve kullanıcının son 15 saniye içinde 3. sınıf bir biyometriyle kimliğini başarıyla doğrulaması durumunda başarılı olur.
Cihaz kilitliyken anahtarları saklama
Keystore, kullanıcıların cihaz kilitliyken UNLOCKED_DEVICE_REQUIRED anahtarları oluşturmasına olanak tanır. Bu şema, verilerin yalnızca cihazın kilidi açıldıktan sonra şifresinin çözülmesini sağlamak için karma şifreleme şeması kullanır:
- Şifreleme (cihaz kilitliyken
UNLOCKED_DEVICE_REQUIREDanahtarı oluşturma):- Keystore, yeni bir geçici ECDH P-521 anahtar çifti oluşturur.
- Keystore, bu kısa ömürlü anahtar çiftinin özel anahtarı ile UnlockedDeviceRequired asimetrik süper anahtarının ortak kısmı arasında ECDH anahtar anlaşması yaparak paylaşılan bir gizli anahtar oluşturur.
- Anahtar deposu rastgele bir tuz oluşturur.
- Anahtar deposu, HKDF-SHA256 kullanarak paylaşılan gizli diziden ve tuzdan bir AES-256-GCM anahtarı türetir.
- Keystore, bu AES-256-GCM anahtarını kullanarak
UNLOCKED_DEVICE_REQUIREDanahtarını şifreler. - Keystore, şifrelenmiş
UNLOCKED_DEVICE_REQUIREDanahtarını, tuzunu ve geçici anahtar çiftinin ortak kısmını veritabanında depolar.
- Şifre çözme (cihazın kilidi açıkken oluşturulan
UNLOCKED_DEVICE_REQUIREDanahtarı kullanılarak):- Keystore, veritabanından şifrelenmiş
UNLOCKED_DEVICE_REQUIREDanahtarı, tuz ve geçici anahtar çiftinin ortak kısmını yükler. - Keystore, geçici anahtar çiftinin ortak kısmı ile UnlockedDeviceRequired asimetrik süper anahtarının özel kısmı arasında ECDH anahtar anlaşması yaparak paylaşılan bir gizli anahtar oluşturur. Cihazın kilidi açık olduğundan özel anahtar kullanılabilir.
- Anahtar deposu, HKDF-SHA256 kullanarak paylaşılan gizli diziden ve tuzdan bir AES-256-GCM anahtarı türetir. Bu AES-256-GCM anahtarı, şifreleme sırasında türetilen anahtarla aynıdır.
- Keystore, AES‑256‑GCM anahtarını kullanarak
UNLOCKED_DEVICE_REQUIREDanahtarının şifresini çözer. - Anahtar deposu,
UNLOCKED_DEVICE_REQUIREDanahtarını UnlockedDeviceRequired simetrik üst anahtarıyla yeniden şifreler. Bu işlem, anahtarın güvenlik özelliklerini etkilemez ancak daha sonra anahtara daha hızlı erişilmesini sağlar.
- Keystore, veritabanından şifrelenmiş
İstemci bağlama
İstemci bağlama, bir anahtarın belirli bir istemci uygulamasıyla ilişkilendirilmesi, isteğe bağlı bir istemci kimliği ve bazı isteğe bağlı istemci verileri (sırasıyla Tag::APPLICATION_ID ve Tag::APPLICATION_DATA) aracılığıyla yapılır. Keystore, bu değerleri opak blob'lar olarak ele alır ve yalnızca anahtar oluşturma/içe aktarma sırasında sunulan blob'ların her kullanımda sunulmasını ve bayt bayt aynı olmasını sağlar. İstemci bağlama verileri KeyMint tarafından döndürülmüyor. Arayanın, anahtarı kullanabilmesi için bunu bilmesi gerekir.
Bu özellik uygulamalara sunulmaz.
Son Geçerlilik Tarihi
Keystore, anahtar kullanımının tarihe göre kısıtlanmasını destekler. Anahtarın geçerlilik başlangıcı ve anahtarın geçerlilik bitişi bir anahtarla ilişkilendirilebilir. Keymaster, geçerli tarih/saat geçerli aralığın dışındaysa anahtar işlemlerini gerçekleştirmeyi reddeder. Anahtar geçerlilik aralığı Tag::ACTIVE_DATETIME, Tag::ORIGINATION_EXPIRE_DATETIME ve Tag::USAGE_EXPIRE_DATETIME etiketleriyle belirtilir. "Oluşturma" ve "kullanım" arasındaki ayrım, anahtarın yeni bir şifreli metin/imza/vb. "oluşturmak" için mi yoksa mevcut bir şifreli metin/imza/vb. "kullanmak" için mi kullanıldığına dayanır. Bu ayrımın uygulamalara gösterilmediğini unutmayın.
Tag::ACTIVE_DATETIME,
Tag::ORIGINATION_EXPIRE_DATETIME,
ve Tag::USAGE_EXPIRE_DATETIME etiketleri isteğe bağlıdır. Etiketler yoksa söz konusu anahtarın iletilerin şifresini çözmek/doğrulamak için her zaman kullanılabileceği varsayılır.
Duvar saati zamanı güvenli olmayan dünya tarafından sağlandığı için, geçerlilik süresiyle ilgili etiketler yazılımla zorunlu kılınan listede yer alır.
Güven kökü bağlama
Keystore, anahtarların bir güven köküne bağlanmasını gerektirir. Bu güven kökü, başlatma sırasında KeyMint güvenli donanımına sağlanan ve tercihen önyükleyici tarafından sağlanan bir bit dizisidir. Bu bit dizisi, KeyMint tarafından yönetilen her anahtara kriptografik olarak bağlıdır.
Güven kökü, önyükleme görüntüsündeki imzayı doğrulamak için kullanılan ortak anahtardan ve cihazın kilit durumundan oluşur. Farklı bir sistem görüntüsünün kullanılmasına izin vermek için ortak anahtar değiştirilirse veya kilit durumu değiştirilirse önceki sistem tarafından oluşturulan KeyMint ile korunan anahtarların hiçbiri kullanılamaz. Bunun için önceki güven kökünün geri yüklenmesi ve bu anahtarla imzalanmış bir sistemin başlatılması gerekir. Amaç, saldırgan tarafından yüklenen bir işletim sisteminin KeyMint anahtarlarını kullanmasını imkansız kılarak yazılımla zorunlu kılınan anahtar erişim denetimlerinin değerini artırmaktır.
Bağımsız anahtarlar
Bazı KeyMint güvenli donanımları, anahtar materyalini dahili olarak depolamayı ve şifrelenmiş anahtar materyali yerine tutma yerlerini döndürmeyi seçebilir. Ayrıca, güvenli olmayan veya güvenli başka bir dünya sistemi bileşeni kullanılabilir olana kadar anahtarların kullanılamayacağı başka durumlar da olabilir. KeyMint HAL, arayanın TAG::STANDALONE etiketi aracılığıyla anahtarın "bağımsız" olmasını istemesine olanak tanır. Bu, blob ve çalışan KeyMint sistemi dışında herhangi bir kaynağın gerekmediği anlamına gelir. Bir anahtarın bağımsız olup olmadığını görmek için anahtarla ilişkili etiketler incelenebilir. Şu anda yalnızca iki değer tanımlanmıştır:
KeyBlobUsageRequirements::STANDALONEKeyBlobUsageRequirements::REQUIRES_FILE_SYSTEM
Bu özellik uygulamalara sunulmaz.
Velocity
Oluşturulduğunda, maksimum kullanım hızı TAG::MIN_SECONDS_BETWEEN_OPS ile belirtilebilir.
TrustZone uygulamaları, bir işlem TAG::MIN_SECONDS_BETWEEN_OPS saniyeden daha kısa bir süre önce gerçekleştirildiyse bu anahtarla şifreleme işlemleri yapmayı reddeder.
Hız sınırlarını uygulamanın basit yolu, anahtar kimliklerinin ve son kullanım zaman damgalarının bulunduğu bir tablodur. Bu tablo sınırlı boyuttadır ancak en az 16 giriş içerebilir. Tablo doluysa ve girişler güncellenemiyor veya silinemiyorsa güvenli donanım uygulamaları, girişlerden birinin süresi dolana kadar tüm hız sınırlı anahtar işlemlerini reddetmeyi tercih ederek "güvenli başarısızlık" durumuna geçer. Tüm girişlerin yeniden başlatma işleminden sonra süresinin dolması kabul edilebilir.
Anahtarlar, TAG::MAX_USES_PER_BOOT ile önyükleme başına n kullanımla da sınırlanabilir. Bu işlem için en az dört anahtarı barındıran ve güvenli başarısızlık sağlayan bir izleme tablosu da gerekir. Uygulamaların, her yeniden başlatma için sınırlı anahtarlar oluşturamayacağını unutmayın. Bu özellik, Keystore üzerinden kullanılamaz ve sistem işlemleri için ayrılmıştır.
Bu özellik uygulamalara sunulmaz.
Rastgele sayı oluşturucuyu yeniden başlatma
Güvenli donanım, anahtar materyali ve başlatma vektörleri (IV'ler) için rastgele sayılar oluşturduğundan ve donanım rastgele sayı üreteçleri her zaman tamamen güvenilir olmayabileceğinden KeyMint HAL, istemcinin ek entropi sağlamasına olanak tanıyan bir arayüz sunar. Bu entropi, oluşturulan rastgele sayılarla karıştırılır.
Birincil başlangıç kaynağı olarak donanım tabanlı rastgele sayı oluşturucu kullanın. Harici API aracılığıyla sağlanan başlangıç verileri, sayı oluşturma için kullanılan rastgeleliğin tek kaynağı olamaz. Ayrıca, kullanılan karıştırma işlemi, rastgele çıkışın tohum kaynaklarından herhangi biri tahmin edilemezse tahmin edilemez olmasını sağlamalıdır.