Bu sayfada, Android 6.0 ve sonraki sürümlerde Keystore'un kriptografik özellikleri hakkında bilgiler verilmektedir.
Temel şifreleme işlemleri
Anahtar mağazası aşağıdaki işlem kategorilerini sağlar:
- Anahtar oluşturma
- Asimetrik anahtarları içe ve dışa aktarma (anahtar sarmalama yok)
- Ham simetrik anahtarları içe aktarma (anahtar sarmalama yok)
- Uygun dolgu modlarıyla asimetrik şifreleme ve şifre çözme
- Özetleme ve uygun dolgu modlarıyla asimetrik imzalama ve doğrulama
- AEAD modu da dahil olmak üzere uygun modlarda simetrik şifreleme ve şifre çözme
- Simetrik mesaj doğrulama kodlarının oluşturulması ve doğrulanması
Amaç, mod ve dolgu gibi protokol öğeleri ile erişim denetimi 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ılamamasını sağlar.
Yukarıdaki listeye ek olarak, Keymaster uygulamalarının sağladığı ancak API olarak kullanıma sunulmayan bir hizmet daha vardır: Rastgele sayı oluşturma. Bu, anahtar oluşturma, başlatma vektörleri (IV'ler), rastgele dolgu ve güvenli protokollerin rastgelelik gerektiren diğer öğeleri için dahili olarak kullanılır.
Gerekli temel öğeler
Tüm Keymaster uygulamaları şunları sağlar:
- RSA
- 2048, 3072 ve 4096 bit anahtar desteği
- Herkese açık üs F4 (2^16+1) desteği
- RSA imzalama için dolgu modları:
- RSASSA-PSS (
PaddingMode::RSA_PSS
) - RSASSA-PKCS1-v1_5 (
PaddingMode::RSA_PKCS1_1_5_SIGN
)
- RSASSA-PSS (
- RSA imzalama için özet modları:
- SHA-256
- RSA şifreleme/şifre çözme için dolgu modları:
- Yastıklı değil
- 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 desteklenir
- ECDSA için özet modları:
- Özet yok (desteği sonlandırıldı, gelecekte kaldırılacak)
- SHA-256
- AES
- 128 ve 256 bit anahtarlar desteklenir
- CBC, TO, ECB ve GCM. GCM uygulaması, 96 bitten küçük etiketlerin veya 96 bit dışında tek seferlik anahtar uzunluklarının kullanılmasına izin vermez.
- CBC ve ECB modları için
PaddingMode::NONE
vePaddingMode::PKCS7
dolgu modları desteklenir. Giriş, blok boyutunun katı değilse dolgu olmadan CBC veya ECB modu şifrelemesi başarısız olur.
- HMAC SHA-256, en az 32 bayta kadar herhangi bir anahtar boyutu
Anahtar yöneticisi uygulamalarında SHA1 ve SHA2 ailesinin diğer üyeleri (SHA-224, SHA384 ve SHA512) kullanılması önemle tavsiye edilir. Donanım Keymaster uygulaması bunları sağlamıyorsa Keystore bunları yazılımda sağlar.
Diğer sistemlerle birlikte çalışabilmek için bazı primitifler de önerilir:
- RSA için daha küçük anahtar boyutları
- RSA için rastgele herkese açık üsler
Anahtar erişim denetimi
Cihazdan hiçbir zaman çıkarılamayan donanım tabanlı anahtarlar, bir saldırgan bunları istediği zaman kullanabiliyorsa fazla güvenlik sağlamaz (ancak çıkarılabilen anahtarlardan daha güvenlidir). Bu nedenle, anahtar deposunun erişim denetimlerini uygulaması çok önemlidir.
Erişim denetimleri, etiket/değer çiftlerinin "yetkilendirme listesi" olarak tanımlanır. Yetkilendirme etiketleri 32 bit tam sayılardır ve değerler çeşitli türlerdedir. Bazı etiketler, birden fazla değer belirtmek için tekrarlanabilir. Bir etiketin tekrarlanıp tekrarlanamayacağı KeyMint (eski adıyla Keymaster) HAL arayüzünde belirtilir. Bir anahtar oluşturulduğunda, arayan bir yetkilendirme listesi belirtir. Keystore'un temel aldığı Keymaster 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'una kodlanmış bir "nihai" yetkilendirme listesi döndürür. Nihai 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 grubu keymaster_authorization_tag_t
listesinde tanımlanır ve kalıcı olarak sabitlenir (ancak uzatılabilir).
Adların önüne KM_TAG
eklenmiştir. Tür, etiket kimliklerinin ilk dört biti kullanılarak belirtilir.
Keymaster 3, KM_TAG
ön ekini Tag::
olarak değiştirdi.
Olası türler şunlardır:
ENUM
: Birçok etiketin değeri, listelemelerde tanımlanır. Örneğin, TAG::PURPOSE
değerinin olası değerleri keymaster_purpose_t
aralığında tanımlanır.
ENUM_REP
: Etiketin yetkilendirme listesinde tekrarlanabilmesi dışında ENUM
ile aynıdır. Tekrar, birden fazla yetkili değeri gösterir. Örneğin, bir şifreleme anahtarında muhtemelen KeyPurpose::ENCRYPT
ve KeyPurpose::DECRYPT
bulunur.
UINT
: 32 bitlik işaretsiz tam sayılar. Örnek:
TAG::KEY_SIZE
UINT_REP
: Etiketin yetkilendirme listesinde tekrarlanabilmesi dışında UINT
ile aynıdır. Tekrar, birden fazla yetkili değeri gösterir.
ULONG
: 64 bit işaretsiz tam sayılar. Örnek:
TAG::RSA_PUBLIC_EXPONENT
ULONG_REP
: Etiketin yetkilendirme listesinde tekrarlanabilmesi dışında ULONG
ile aynıdır. Tekrar, birden fazla yetkili değeri gösterir.
DATE
: 1 Ocak 1970'den itibaren milisaniye cinsinden ifade edilen tarih/saat değerleri.
Örnek: TAG::PRIVKEY_EXPIRE_DATETIME
BOOL
: Doğru veya yanlış. BOOL
türündeki bir etiketin mevcut olmaması durumunda "false", mevcut olması durumunda ise "true" olduğu varsayılır. Örnek: TAG::ROLLBACK_RESISTANT
BIGNUM
: İsteğe bağlı uzunlukta tam sayılar. Büyük endian düzeninde bir bayt dizisi olarak ifade edilir. Örnek:
TAG::RSA_PUBLIC_EXPONENT
BYTES
: Bayt dizisi. Örnek:
TAG::ROOT_OF_TRUST
Donanım ve yazılım yaptırımı
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 denetimi yaptırımı ya da donanım ve yazılım yaptırımı arasında ayrım yapar.
Tüm uygulamalar:
- Tüm yetkilendirmelerin tam eşleşmesini zorunlu kılın (zorunlu kılınmaz). Anahtar blob'larındaki yetkilendirme listeleri, sıralama dahil olmak üzere anahtar oluşturma sırasında döndürülen yetkilendirmelerle tam olarak eşleşir. Herhangi bir uyuşmazlık, hata teşhisine neden olur.
- Anlamsal değerleri zorunlu kılınan yetkilendirmeleri belirtin.
Donanımla zorunlu kılınan yetkilendirmeleri beyan etmek için kullanılan API mekanizması keymaster_key_characteristics_t
yapısındadır. Yetkilendirme listesini hw_enforced
ve sw_enforced
olmak üzere iki alt listeye ayırır. Güvenli donanım, her birine uygun değerleri yerleştirmekten sorumludur.
Ayrıca Anahtar Deposu, güvenli donanım tarafından zorunlu kılınmış olsun veya olmasın tüm yetkilendirmelerin yazılım tabanlı yaptırımını uygular.
Örneğin, anahtar süresinin dolmasını desteklemeyen TrustZone tabanlı bir uygulamayı düşünün. Kullanım süresi sonu olan bir anahtar oluşturulabilir. Bu anahtarın yetkilendirme listesinde, geçerlilik bitiş tarihiyle birlikte TAG::ORIGINATION_EXPIRE_DATETIME
etiketi yer alır. Anahtar özellikleri için Keystore'a gönderilen bir istek, bu etiketi sw_enforced
listesinde bulur ve güvenli donanım, süre sonu koşulunu uygulamaz. Ancak anahtarın süresi dolduktan sonra kullanılmasına Keystore tarafından izin verilmez.
Daha sonra cihaz, geçerlilik süresini destekleyen güvenli donanımla yükseltilirse anahtar özellikleri isteği hw_enforced
listesinde TAG::ORIGINATION_EXPIRE_DATETIME
'ü bulur ve anahtar deposu bozulmuş veya atlanmış olsa bile geçerlilik süresi dolduktan sonra anahtarı kullanma girişimleri başarısız olur.
Anahtarların donanım destekli olup olmadığını belirleme hakkında daha fazla bilgi için Anahtar doğrulaması başlıklı makaleyi inceleyin.
Şifreleme mesajı oluşturma yetkileri
İlişkili anahtarı kullanan işlemlerin kriptografik özelliklerini tanımlamak için şu etiketler kullanılır: TAG::ALGORITHM
,
TAG::KEY_SIZE
, TAG::BLOCK_MODE
,
TAG::PADDING
, TAG::CALLER_NONCE
ve TAG::DIGEST
TAG::PADDING
, TAG::DIGEST
ve PaddingMode::BLOCK_MODE
tekrarlanabilir. Yani tek bir anahtarla birden çok değer ilişkilendirilebilir ve kullanılacak değer işlem sırasında belirtilir.
Amaç
Anahtarlar, nasıl kullanılabileceklerini tanımlayan TAG::PURPOSE
etiketine sahip bir veya daha fazla yetkilendirme girişi olarak ifade edilen ilişkili bir amaç grubuna sahiptir. Amaçlarımız:
KeyPurpose::ENCRYPT
KeyPurpose::DECRYPT
KeyPurpose::SIGN
KeyPurpose::VERIFY
Herhangi bir anahtar bu amaçların herhangi bir alt kümesine sahip olabilir. Bazı kombinasyonların güvenlik sorunları oluşturduğunu 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.
İçe ve dışa aktarma
Anahtar Yöneticisi, yalnızca X.509 biçiminde ortak anahtarların dışa aktarılmasını ve aşağıdakilerin içe aktarılmasını destekler:
- Şifre tabanlı şifreleme olmadan DER kodlamalı PKCS#8 biçiminde genel ve özel anahtar çiftleri
- Ham bayt olarak simetrik anahtarlar
İçe aktarılan anahtarların güvenli ş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 KeyOrigin::GENERATED
değerine sahip TAG::ORIGIN
, anahtar özelliklerinin hw_enforced
listesinde bulunur. Güvenli donanıma aktarılan bir anahtar için ise KeyOrigin::IMPORTED
değeri bulunur.
Kullanıcı kimlik doğrulaması
Güvenli Ana Anahtar Master uygulamalarında kullanıcı kimlik doğrulaması uygulanmaz ancak bu işlemi yapan diğer güvenilir uygulamalara ihtiyaç duyulur. Bu uygulamaların uyguladığı arayüz için Güvenlik Bekçisi sayfasına bakın.
Kullanıcı kimlik doğrulama şartları iki etiket grubu aracılığıyla belirtilir. İlk grup, anahtarı hangi kullanıcının kullanabileceğini belirtir:
TAG::ALL_USERS
, anahtarın tüm kullanıcılar tarafından kullanılabileceğini belirtir. MevcutsaTAG::USER_ID
veTAG::USER_SECURE_ID
mevcut değildir.TAG::USER_ID
, yetkili kullanıcının kimliğini belirten sayısal bir değere sahiptir. Bunun uygulama UID'si değil, Android kullanıcı kimliği (çoklu kullanıcı için) olduğunu ve yalnızca güvenli olmayan yazılımlar tarafından zorunlu kılındığını unutmayın. VarsaTAG::ALL_USERS
mevcut değildir.TAG::USER_SECURE_ID
, anahtarın kullanımını açmak için güvenli kimlik doğrulama jetonunda sağlanan güvenli kullanıcı kimliğini belirten 64 bitlik bir sayısal değere sahiptir. Tekrarlanan anahtar, değerlerden herhangi biri güvenli bir kimlik doğrulama jetonunda sağlanırsa kullanılabilir.
İkinci grup, kullanıcının kimliğinin doğrulanıp doğrulanmaması gerektiğini ve ne zaman doğrulanması gerektiğini belirtir.
Bu etiketlerden hiçbiri mevcut değilse ancak TAG::USER_SECURE_ID
varsa anahtarın her kullanımı için kimlik doğrulaması gerekir.
NO_AUTHENTICATION_REQUIRED
, kullanıcı kimlik doğrulamasının gerekli olmadığını gösterir.TAG::USER_ID
TAG::AUTH_TIMEOUT
, anahtar kullanımına yetki vermek için kullanıcı kimlik doğrulamasının ne kadar güncel olması gerektiğini saniye cinsinden belirten bir sayısal değerdir. Bu durum yalnızca özel/gizli anahtar işlemleri için geçerlidir. Ortak anahtar işlemleri kimlik doğrulama gerektirmez. Zaman aşımları yeniden başlatma işlemlerini etkilemez. Yeniden başlatma işleminden sonra tüm anahtarların kimliği hiçbir zaman doğrulanmaz. Kimlik doğrulamanın her önyükleme işleminde bir kez gerekli olduğunu belirtmek için zaman aşımı 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).
Kilidi açık bir cihaz kullanılmasını zorunlu kıl
TAG::UNLOCKED_DEVICE_REQUIRED
içeren anahtarlar yalnızca cihazın kilidi açıkken kullanılabilir. Ayrıntılı anlamlar için
KeyProtection.Builder#setUnlockedDeviceRequired(boolean)
başlıklı makaleyi inceleyin.
UNLOCKED_DEVICE_REQUIRED
, Keymaster tarafından değil, Keystore tarafından zorunlu tutulur. Ancak Android 12 ve sonraki sürümlerde Anahtar Deposu, cihaz kilitliyken Anahtar Deposu'nun güvenliği ihlal edilse bile çoğu durumda UNLOCKED_DEVICE_REQUIRED
anahtarlarının kullanılamamasını sağlamak için cihaz kilitliyken UNLOCKED_DEVICE_REQUIRED
anahtarlarını kriptografik olarak korur.
Anahtar Kasası, bu amaca ulaşmak için tüm UNLOCKED_DEVICE_REQUIRED
anahtarlarını veritabanında depolamadan önce "süper şifreler" ve mümkün olduğunda cihaz kilitliyken süper şifreleme anahtarlarını (süper anahtarlar) yalnızca başarılı bir cihaz kilidi açma işlemiyle kurtarılabilecek şekilde korur. ("Süper şifreleme" terimi, bu şifreleme katmanı Keymaster'ın tüm anahtarlar için zaten uyguladığı şifreleme katmanına ek olarak uygulandığı için kullanılır.)
Her kullanıcı (profiller dahil) UNLOCKED_DEVICE_REQUIRED
ile ilişkili iki süper anahtara sahiptir:
- 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 veya oluşturulan
UNLOCKED_DEVICE_REQUIRED
anahtarlarını şifreler. - UnlockedDeviceRequired asimetrik süper anahtarı. Bu bir ECDH
P‑521 anahtar çiftidir. Cihaz kilitliyken kullanıcı için içe aktarılan veya oluşturulan
UNLOCKED_DEVICE_REQUIRED
anahtarları şifreler. Bu asimetrik anahtarla şifrelenen anahtarlar, ilk kullanımda (yalnızca cihazın kilidi açıkken gerçekleşebilir) simetrik anahtarla yeniden şifrelenir.
Anahtar deposu, bu süper anahtarları kullanıcı oluşturulurken oluşturur ve kullanıcının sentetik şifresiyle şifrelenmiş olarak veritabanında depolar. Bu sayede PIN, desen veya şifre eşdeğeri kullanılarak kurtarılabilir.
Anahtar mağazası, bu süper anahtarları bellekte önbelleğe alarak UNLOCKED_DEVICE_REQUIRED
anahtarlarında çalışmasını sağlar. 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 Keystore, mümkünse bu süper anahtarların gizli bölümlerinin önbelleğe alınmış kopyasını sıfırlar. Daha açık belirtmek gerekirse, cihaz kullanıcı için kilitlendiğinde Keystore, kullanıcının UnlockedDeviceRequired süper anahtarları için üç koruma seviyesinden birini seçip uygular:
- Kullanıcı yalnızca PIN, desen veya şifreyi etkinleştirdiyse 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 üzerinden kurtarılabilir. Bu kopyanın şifresi ise yalnızca PIN, desen veya şifre eşdeğeri ile çözülebilir.
- Kullanıcının yalnızca 3. sınıf ("güçlü") biyometrisi varsa ve PIN, desen veya şifre etkinse Anahtar Deposu, PIN, desen veya şifre eşdeğerine alternatif olarak süper anahtarların kullanıcının kayıtlı 3. sınıf biyometrilerinden (genellikle parmak izi) herhangi biri tarafından 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ı Keymaster'a biyometrik kimlik doğrulamanın son 15 saniye içinde başarılı olmasını gerektiren biyometrik bağlı bir anahtar olarak aktarır ve tüm bu anahtarların şifrelenmemiş kopyalarını sıfıra getirir.
- Kullanıcının 1. sınıf ("kolaylık") biyometrik, 2. sınıf ("zayıf") biyometrik veya etkin kilit açma güven aracısı varsa Keystore, süper anahtarları açık metinde önbelleğe alır. Bu durumda,
UNLOCKED_DEVICE_REQUIRED
anahtarları için kriptografik güvenlik sağlanmaz. Kullanıcılar bu kilit açma yöntemlerini etkinleştirmeyerek bu daha az güvenli yedek yöntemden kaçınabilir. Bu kategorilere giren en yaygın kilit açma yöntemleri, birçok cihazda yüz tanıma kilidi ve eşlenen bir akıllı saatle kilit açmadı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 şifre eşdeğeri kilit açma işleminde, bu anahtarların veritabanında depolanan kopyasının şifresini çözer. Aksi takdirde, bu anahtarların biyometrik bağlı bir anahtarla şifrelenmiş bir kopyasının kaydedilip kaydedilmediğini kontrol eder ve kaydedilmişse şifresini çözmeye çalışır. Bu işlem yalnızca kullanıcının son 15 saniye içinde Keymaster tarafından zorunlu kılınan (Keystore tarafından değil) 3. sınıf bir biyometrik ile kimliğini başarıyla doğrulaması durumunda başarılı olur.
İstemci bağlama
İstemci bağlama, bir anahtarın belirli bir istemci uygulamasıyla ilişkilendirilmesidir ve 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. Anahtar mağazası 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ım için sunulmasını ve bayt bayt aynı olmasını sağlar. İstemci bağlama verileri Keymaster tarafından döndürülmez. Arayan kişinin anahtarı kullanabilmesi için bu kodu bilmesi gerekir.
Bu özellik uygulamalara gösterilmez.
Son Geçerlilik Tarihi
Anahtar mağazası, anahtar kullanımını tarihe göre kısıtlamayı destekler. Anahtar geçerlilik başlangıcı ve anahtar geçerlilik bitiş tarihi bir anahtarla ilişkilendirilebilir. Mevcut tarih/saat geçerli aralık dışındaysa Keymaster 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" ile "kullanım" arasındaki ayrım, anahtarın yeni bir şifrelenmiş metin/imza/vb. "oluşturmak" için mi yoksa mevcut bir şifrelenmiş metni/imzayı/vb. "kullanmak" için mi kullanıldığına bağlıdı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ığından, süre sonu ile ilgili etiketlerin donanım tarafından zorunlu kılınan listede yer alması olası değildir. Süre sonunun donanımla zorunlu kılınması, güvenli dünyanın bir şekilde güvenilir zaman ve veri elde etmesini gerektirir. Örneğin, güvenilir bir uzak zaman sunucusu içeren bir istek yanıtı protokolü aracılığıyla.
Güven kökü bağlama
Anahtar mağazası, anahtarların bir güven köküne bağlanmasını gerektirir. Bu güven kökü, tercihen önyükleyici tarafından başlatma sırasında Keymaster güvenli donanımına sağlanan bir bit dizesidir. Bu bit dizesi, Keymaster tarafından yönetilen her anahtara kriptografik olarak bağlıdır.
Güven kökü, önyükleme resmindeki imzayı ve cihazın kilit durumunu doğrulamak için kullanılan ortak anahtardan oluşur. Herkese açık anahtar, farklı bir sistem görüntüsünün kullanılmasına izin verecek şekilde değiştirilirse veya kilit durumu değiştirilirse önceki güven kökü geri yüklenmediği ve bu anahtarla imzalanan bir sistem başlatılmadığı sürece önceki sistem tarafından oluşturulan Keymaster korumalı anahtarların hiçbiri kullanılamaz. Amaç, saldırgan tarafından yüklenen bir işletim sisteminin Keymaster anahtarlarını kullanmasını imkansız hale getirerek yazılımla zorunlu kılınan anahtar erişim denetimlerinin değerini artırmaktır.
Bağımsız anahtarlar
Bazı Keymaster güvenli donanımları, anahtar materyalini dahili olarak depolayabilir ve şifrelenmiş anahtar materyali yerine tutamaç döndürebilir. Ayrıca, güvenli olmayan veya güvenli bir dünya sistemi bileşeni kullanılabilene kadar anahtarların kullanılamadığı başka durumlar da olabilir. Keymaster HAL, TAG::STANDALONE
etiketi aracılığıyla anahtarın "bağımsız" olmasını istemenize olanak tanır. Bu, blob ve çalışan Keymaster sistemi dışında hiçbir kaynak gerekmediği anlamına gelir. Anahtarları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::STANDALONE
KeyBlobUsageRequirements::REQUIRES_FILE_SYSTEM
Bu özellik uygulamalara gösterilmez.
Hız
Oluşturulurken maksimum kullanım hızı TAG::MIN_SECONDS_BETWEEN_OPS
ile belirtilebilir.
TrustZone uygulamaları, TAG::MIN_SECONDS_BETWEEN_OPS
saniyeden kısa bir süre önce bir işlem gerçekleştirildiyse söz konusu anahtarla şifreleme işlemlerini gerçekleştirmeyi reddeder.
Hız sınırlarını uygulamanın basit yaklaşımı, anahtar kimlikleri ve son kullanım zaman damgaları tablosudur. Bu tablonun boyutu sınırlıdır ancak en az 16 girişi barındırır. Tablonun dolu olması ve hiçbir girişin güncellenememesi veya atılabilmesi durumunda güvenli donanım uygulamaları "güvenli şekilde başarısız olur" ve girişlerden biri sona erene kadar hız sınırlı tüm anahtar işlemlerini reddetmeyi tercih eder. Tüm girişlerin yeniden başlatıldığında geçerlilik 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 hata durumunda güvenli olan bir izleme tablosu da gerekir. Uygulamaların, önyükleme başına sınırlı anahtar oluşturamayacağını unutmayın. Bu özellik, Keystore üzerinden gösterilmez ve sistem işlemleri için ayrılmıştır.
Bu özellik uygulamalara gösterilmez.
Rastgele sayı üreteci için yeniden tohumlama
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ı oluşturucular her zaman tam olarak güvenilir olmayabileceğinden Keymaster HAL, istemcinin oluşturulan rastgele sayılara karıştırılacak ek entropi sağlamasına olanak tanıyan bir arayüz sağlar.
Birincil tohum kaynağı olarak donanım rastgele sayı oluşturucu kullanın. Harici API üzerinden sağlanan başlangıç verileri, sayı oluşturmak için kullanılan tek rastgelelik kaynağı olamaz. Ayrıca, kullanılan karıştırma işleminin, başlangıç kaynaklarından herhangi biri tahmin edilemezse rastgele çıktının tahmin edilemez olmasını sağlaması gerekir.
Bu özellik uygulamalara gösterilmez ancak çerçeve tarafından kullanılır. Çerçeve, Java SecureRandom örneğinden alınan ek entropiyi düzenli olarak güvenli donanıma sağlar.