Özellikler

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 )
    • 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 ve PaddingMode::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. Varsa TAG::USER_ID ve TAG::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. Varsa TAG::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ızca TAG::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.