Bu sayfa, Android 6.0 ve üzeri sürümlerde Keystore'un şifreleme özellikleri hakkında bilgi içerir.
Kriptografik ilkeller
Anahtar deposu aşağıdaki işlem kategorilerini sağlar:
- Anahtar üretimi
- Asimetrik anahtarların içe ve dışa aktarımı (anahtar kaydırma yok)
- Ham simetrik anahtarların içe aktarılması (anahtar kaydırma yok)
- Uygun doldurma modlarıyla asimetrik şifreleme ve şifre çözme
- Özetleme ve uygun doldurma modlarıyla asimetrik imzalama ve doğrulama
- AEAD modu da dahil olmak üzere uygun modlarda simetrik şifreleme ve şifre çözme
- Simetrik mesaj kimlik doğrulama kodlarının oluşturulması ve doğrulanması
Amaç, mod ve dolgunun yanı sıra erişim kontrolü kısıtlamaları gibi protokol öğeleri, anahtarlar oluşturulduğunda veya içe aktarıldığında belirtilir ve anahtara kalıcı olarak bağlanarak anahtarın başka bir şekilde kullanılamaması sağlanır.
Yukarıdaki listeye ek olarak Keymaster uygulamalarının sağladığı ancak API olarak gösterilmeyen bir hizmet daha vardır: Rastgele sayı üretimi. Bu, dahili olarak anahtarların, Başlatma Vektörlerinin (IV'ler), rastgele doldurmanın ve rastgelelik gerektiren güvenli protokollerin diğer öğelerinin oluşturulması için kullanılır.
Gerekli ilkeller
Tüm Keymaster uygulamaları şunları sağlar:
- RSA
- 2048, 3072 ve 4096 bit anahtar desteği
- Genel üslü 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 imzalamaya yönelik ö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 desteklenir
- 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 , TO, ECB ve GCM. GCM uygulaması, 96 bitten küçük etiketlerin veya 96 bitten farklı uzunluklardaki etiketlerin kullanımına izin vermez.
- Dolgu modları
PaddingMode::NONE
vePaddingMode::PKCS7
CBC ve ECB modları için desteklenir. Dolgu olmadan, giriş blok boyutunun katı değilse CBC veya ECB modu şifrelemesi başarısız olur.
- HMAC SHA-256 , en az 32 bayta kadar herhangi bir anahtar boyutuyla.
Keymaster uygulamaları için SHA1 ve SHA2 ailesinin diğer üyeleri (SHA-224, SHA384 ve SHA512) şiddetle tavsiye edilir. Donanım Keymaster uygulaması bunları sağlamıyorsa, Keystore bunları 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 keyfi genel üsler
Anahtar erişim kontrolü
Cihazdan hiçbir zaman çıkarılamayan donanım tabanlı anahtarlar, bir saldırganın bunları istediği zaman kullanması durumunda fazla güvenlik sağlamaz (gerçi bunlar, sızdırılabilen anahtarlardan daha güvenlidir). Bu nedenle Keystore'un erişim kontrollerini uygulaması çok önemlidir.
Erişim kontrolleri, etiket/değer çiftlerinden oluşan bir "yetkilendirme listesi" olarak tanımlanır. Yetkilendirme etiketleri 32 bitlik 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ğı , etiketin belgelerinde belirtilir. Bir anahtar oluşturulduğunda arayan kişi bir yetkilendirme listesi belirtir. Anahtar Deposunun temelindeki Keymaster uygulaması, anahtarın geri alma korumasına sahip olup olmadığı gibi bazı ek bilgileri belirtmek ve döndürülen anahtar bloğuna kodlanmış bir "son" yetkilendirme listesi döndürmek için listeyi değiştirir. Nihai yetkilendirme listesi değiştirilirse, anahtarı herhangi bir şifreleme işlemi için kullanma girişimi başarısız olur.
Keymaster 2 ve öncesi için, olası etiketlerin kümesi keymaster_authorization_tag_t
numaralandırmasında tanımlanır ve kalıcı olarak sabitlenir (gerçi genişletilebilir). İsimlerin önüne KM_TAG
eklendi. Etiket kimliklerinin ilk dört biti türü belirtmek için kullanılır.
Keymaster 3, KM_TAG
önekini Tag::
olarak değiştirdi.
Olası türler şunları içerir:
ENUM
: Numaralandırmalarda birçok etiketin değeri tanımlanmıştır. Örneğin, TAG::PURPOSE
olası değerleri enum keymaster_purpose_t
içinde tanımlanır.
ENUM_REP
: Etiketin bir yetkilendirme listesinde tekrarlanabilmesi dışında ENUM
ile aynıdır. Tekrarlama birden fazla yetkili değeri belirtir. Örneğin, bir şifreleme anahtarında muhtemelen KeyPurpose::ENCRYPT
ve KeyPurpose::DECRYPT
bulunur.
UINT
: 32 bit işaretsiz tamsayılar. Örnek: TAG::KEY_SIZE
UINT_REP
: Etiketin bir yetkilendirme listesinde tekrarlanabilmesi dışında UINT
ile aynıdır. Tekrarlama birden fazla yetkili değeri belirtir.
ULONG
: 64 bit işaretsiz tamsayılar. Örnek: TAG::RSA_PUBLIC_EXPONENT
ULONG_REP
: Etiketin bir yetkilendirme listesinde tekrarlanabilmesi dışında ULONG
ile aynıdır. Tekrarlama birden fazla yetkili değeri belirtir.
DATE
: 1 Ocak 1970'den bu yana milisaniye cinsinden ifade edilen tarih/saat değerleri. Örnek: TAG::PRIVKEY_EXPIRE_DATETIME
BOOL
: Doğru veya yanlış. BOOL
türündeki bir etiketin, etiket mevcut değilse "false", mevcutsa "true" olduğu varsayılır. Örnek: TAG::ROLLBACK_RESISTANT
BIGNUM
: Big-endian düzeninde bir bayt dizisi olarak ifade edilen rastgele uzunluktaki tamsayılar. Örnek: TAG::RSA_PUBLIC_EXPONENT
BYTES
: Bir 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. Çeşitli yaklaşımları desteklemek için Keymaster, sırasıyla güvenli ve güvenli olmayan dünya erişim kontrolü uygulaması veya donanım ve yazılım uygulaması arasında ayrım yapar.
Tüm uygulamalar:
- Tüm yetkilendirmelerin tam eşleşmesini (uygulanmasını değil) zorunlu kılın. Anahtar bloblarındaki yetkilendirme listeleri, sipariş verme de dahil olmak üzere anahtar oluşturma sırasında döndürülen yetkilerle tam olarak eşleşir. Herhangi bir uyumsuzluk hata teşhisine neden olur.
- Anlamsal değerleri uygulanan yetkileri bildirin.
Donanım tarafından zorlanan yetkilendirmelerin bildirilmesine yönelik API mekanizması keymaster_key_characteristics_t
yapısındadır. Yetkilendirme listesini hw_enforced
ve sw_enforced
üzere iki alt listeye ayırır. Güvenli donanım, neyi uygulayabileceğine bağlı olarak her birine uygun değerleri yerleştirmekten sorumludur.
Ek olarak Keystore, güvenli donanım tarafından uygulansın ya da uygulanmasın, tüm yetkilendirmelerin yazılım tabanlı yaptırımını uygular.
Örneğin, anahtarın geçerlilik süresinin dolmasını desteklemeyen TrustZone tabanlı bir uygulamayı düşünün. Son kullanma tarihi olan bir anahtar yine de oluşturulabilir. Bu anahtarın yetkilendirme listesi, son kullanma tarihiyle birlikte TAG::ORIGINATION_EXPIRE_DATETIME
etiketini içerecektir. Anahtar özellikler için Anahtar Deposu'na yapılan bir istek, bu etiketi sw_enforced
listesinde bulacaktır ve güvenli donanım, süre sonu gereksinimini uygulamayacaktır. Ancak anahtarın süresi dolduktan sonra kullanılma girişimleri Anahtar Deposu tarafından reddedilecektir.
Cihaz daha sonra son kullanma tarihini destekleyen güvenli bir donanımla yükseltilirse, anahtar özelliklerine yönelik bir istek hw_enforced
listesinde TAG::ORIGINATION_EXPIRE_DATETIME
değerini bulacaktır ve anahtar deposu bir şekilde bozulsa veya atlansa bile süre sona erdikten sonra anahtarı kullanma girişimleri başarısız olacaktır. .
Anahtarların donanım destekli olup olmadığını belirleme hakkında daha fazla bilgi için bkz.
Kriptografik mesaj oluşturma yetkileri
İlgili anahtarı kullanan işlemlerin şifreleme özelliklerini tanımlamak için aşağıdaki 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
tekrarlanabilirdir; bu, birden fazla değerin tek bir anahtarla ilişkilendirilebileceği ve kullanılacak değerin işlem sırasında belirlenebileceği anlamına gelir.
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ı vardır. Amaçlar şunlardır:
-
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ı yarattığını unutmayın. Örneğin, hem şifrelemek hem de imzalamak için kullanılabilen bir RSA anahtarı, sistemi imza oluşturmak için rastgele verilerin şifresini çözmeye ikna edebilen bir saldırgana olanak tanır.
İthalat ve ihracat
Keymaster yalnızca genel anahtarların X.509 formatında dışa aktarılmasını ve aşağıdakilerin içe aktarılmasını destekler:
- DER kodlu PKCS#8 formatında, parola tabanlı şifreleme olmadan genel ve özel anahtar çiftleri
- Ham bayt olarak simetrik anahtarlar
İçe aktarılan anahtarların güvenli bir şekilde oluşturulan anahtarlardan ayırt edilebilmesini sağlamak için TAG::ORIGIN
, uygun anahtar yetkilendirme listesine dahil edilir. Örneğin, bir anahtar güvenli donanımda oluşturulduysa, anahtar özelliklerin hw_enforced
listesinde KeyOrigin::GENERATED
değerine sahip TAG::ORIGIN
bulunacaktır; güvenli donanıma aktarılan bir anahtar ise KeyOrigin::IMPORTED
değerine sahip olacaktır. KeyOrigin::IMPORTED
Kullanıcı doğrulama
Secure Keymaster 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ına bakın.
Kullanıcı kimlik doğrulama gereksinimleri iki etiket kümesi aracılığıyla belirtilir. İlk grup, anahtarı hangi kullanıcının kullanabileceğini gösterir:
-
TAG::ALL_USERS
anahtarın tüm kullanıcılar tarafından kullanılabileceğini belirtir. VarsaTAG::USER_ID
veTAG::USER_SECURE_ID
mevcut değil. -
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ım tarafından zorlandığını unutmayın. VarsaTAG::ALL_USERS
mevcut değil. -
TAG::USER_SECURE_ID
anahtarın kullanımının kilidini açmak için güvenli bir kimlik doğrulama belirtecinde sağlanan güvenli kullanıcı kimliğini belirten 64 bitlik bir sayısal değere sahiptir. Tekrarlanırsa, değerlerden herhangi birinin güvenli bir kimlik doğrulama belirtecinde sağlanması durumunda anahtar kullanılabilir.
İkinci grup, kullanıcının kimliğinin doğrulanması gerekip gerekmediğini ve ne zaman doğrulanması gerektiğini gösterir. Bu etiketlerin hiçbiri mevcut değilse ancak TAG::USER_SECURE_ID
varsa, anahtarın her kullanımında kimlik doğrulaması gerekir.
-
NO_AUTHENTICATION_REQUIRED
kullanıcı kimlik doğrulamasının gerekli olmadığını belirtir; ancak anahtar yine de yalnızcaTAG::USER_ID
tarafından belirtilen kullanıcı(lar) olarak çalışan uygulamalar tarafından kullanılabilir. -
TAG::AUTH_TIMEOUT
, anahtar kullanımını yetkilendirmek için kullanıcı kimlik doğrulamasının ne kadar yeni olması gerektiğini saniye cinsinden belirten sayısal bir değerdir. Bu yalnızca özel/gizli anahtar işlemleri için geçerlidir. Ortak anahtar işlemleri kimlik doğrulama gerektirmez. Zaman aşımları yeniden başlatmalarla kesişmez; yeniden başlatmanın ardından tüm anahtarların kimliği hiçbir zaman doğrulanmaz. Zaman aşımı, kimlik doğrulamanın önyükleme başına bir kez gerekli olduğunu belirtmek için büyük bir değere ayarlanabilir (2^32 saniye ~136 yıldır; muhtemelen Android cihazlar bundan daha sık yeniden başlatılır).
İstemci bağlama
Bir anahtarın belirli bir istemci uygulamasıyla ilişkilendirilmesi olan istemci bağlama, 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 deposu bu değerleri opak bloblar olarak ele alır ve yalnızca anahtar oluşturma/içe aktarma sırasında sunulan aynı blobların her kullanım için sunulmasını ve bayt bazında aynı olmasını sağlar. İstemci bağlama verileri Keymaster tarafından döndürülmez. Arayanın anahtarı kullanabilmesi için bunu bilmesi gerekir.
Bu özellik uygulamalara açık değildir.
Son
Anahtar deposu, anahtar kullanımının tarihe göre kısıtlanmasını destekler. Anahtar geçerliliğinin başlangıcı ve anahtar sona erme tarihleri bir anahtarla ilişkilendirilebilir ve geçerli tarih/saat geçerli aralığın 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" 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 bağlıdır. Bu ayrımın uygulamalara açık olmadığını unutmayın.
TAG::ACTIVE_DATETIME
, TAG::ORIGINATION_EXPIRE_DATETIME
ve TAG::USAGE_EXPIRE_DATETIME
etiketleri isteğe bağlıdır. Etiketlerin olmaması durumunda, söz konusu anahtarın her zaman mesajların şifresini çözmek/doğrulamak için kullanılabileceği varsayılır.
Duvar saati süresi güvenli olmayan dünya tarafından sağlandığı için, son kullanma tarihiyle ilgili etiketlerin donanım tarafından zorunlu tutulan listede yer alması pek olası değildir. Sona ermenin donanımsal olarak uygulanması, güvenli dünyanın bir şekilde güvenilir zaman ve veri elde etmesini gerektirir; örneğin güvenilir bir uzak zaman sunucusuyla bir sorgulama yanıt protokolü yoluyla.
Güven bağlamanın kökü
Anahtar deposu, anahtarların, başlatma sırasında Keymaster güvenli donanımına tercihen önyükleyici tarafından sağlanan bir bit dizisi olan bir güven köküne bağlanmasını gerektirir. Bu bit dizisi, Keymaster tarafından yönetilen her anahtara kriptografik olarak bağlıdır.
Güven kökü, önyükleme görüntüsündeki imzayı ve cihazın kilit durumunu doğrulamak için kullanılan genel anahtardan oluşur. Genel 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üklenmedikçe ve sistem yeniden kurulmadıkça, önceki sistem tarafından oluşturulan Keymaster korumalı anahtarların hiçbiri kullanılamaz. o anahtar tarafından imzalanan şey başlatılır. Amaç, saldırganın kurduğu işletim sisteminin Keymaster anahtarlarını kullanmasını imkansız hale getirerek yazılım tarafından uygulanan anahtar erişim kontrollerinin değerini artırmaktır.
Bağımsız tuşlar
Bazı Keymaster güvenli donanımları, anahtar materyalini dahili olarak saklamayı ve şifrelenmiş anahtar materyali yerine iade tanıtıcılarını tercih edebilir. Veya güvenli olmayan veya güvenli başka bir dünya sistemi bileşeni mevcut olana kadar anahtarların kullanılamadığı başka durumlar da olabilir. Keymaster HAL, arayanın TAG::STANDALONE
etiketi aracılığıyla bir anahtarın "bağımsız" olmasını istemesine olanak tanır; bu, blob ve çalışan Keymaster sistemi dışında hiçbir kaynağın gerekli olmadığı anlamına gelir. Bir anahtarla ilişkili etiketler, bir anahtarın bağımsız olup olmadığını görmek için incelenebilir. Şu anda yalnızca iki değer tanımlanmıştır:
-
KeyBlobUsageRequirements::STANDALONE
-
KeyBlobUsageRequirements::REQUIRES_FILE_SYSTEM
Bu özellik uygulamalara açık değildir.
Hız
Oluşturulduğunda maksimum kullanım hızı TAG::MIN_SECONDS_BETWEEN_OPS
ile belirtilebilir. TrustZone uygulamaları, bir işlemin TAG::MIN_SECONDS_BETWEEN_OPS
saniyeden daha kısa sürede gerçekleştirilmesi durumunda bu anahtarla şifreleme işlemleri gerçekleştirmeyi reddeder.
Hız sınırlarını uygulamaya yönelik basit yaklaşım, anahtar kimlikleri ve son kullanım zaman damgalarından oluşan bir tablodur. Bu tablonun boyutu muhtemelen sınırlı olacaktır ancak en az 16 girişi barındıracaktır. Tablonun dolu olması ve hiçbir girişin güncellenememesi veya atılamaması durumunda, 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 bir şekilde başarısız olur". Yeniden başlatma sonrasında tüm girişlerin süresinin dolması kabul edilebilir.
Anahtarlar ayrıca TAG::MAX_USES_PER_BOOT
ile önyükleme başına n kullanımla sınırlandırılabilir. Bu aynı zamanda en az dört anahtarı barındıran ve aynı zamanda güvenli olmayan bir izleme tablosu gerektirir. Uygulamaların önyükleme başına sınırlı anahtarlar oluşturamayacağını unutmayın. Bu özellik Anahtar Deposu aracılığıyla kullanıma sunulmaz ve sistem işlemleri için ayrılmıştır.
Bu özellik uygulamalara açık değildir.
Rastgele sayı üreteci yeniden tohumlama
Güvenli donanım, anahtar malzeme ve Başlatma Vektörleri (IV'ler) için rasgele sayılar ürettiğinden ve donanım rasgele sayı üreteçleri her zaman tamamen güvenilir olmayabileceğinden, Keymaster HAL, istemcinin rasgele vektörlere karıştırılacak ek entropi sağlamasına izin veren bir arayüz sağlar. üretilen sayılar.
Birincil tohum kaynağı olarak bir donanım rastgele sayı üreteci kullanın. Harici API aracılığıyla sağlanan çekirdek veriler, sayı oluşturmada kullanılan tek rastgelelik kaynağı olamaz. Ayrıca, kullanılan karıştırma işleminin, tohum kaynaklarından herhangi birinin öngörülemez olması halinde, rastgele çıktının öngörülemez olmasını sağlaması gerekir.
Bu özellik uygulamalara açık değildir ancak düzenli olarak Java SecureRandom örneğinden alınan ek entropiyi güvenli donanıma sağlayan çerçeve tarafından kullanılır.