Özellikler

Bu sayfa, Android 6.0 ve sonraki sürümlerde Keystore'un şifreleme özellikleri hakkında bilgiler içerir.

kriptografik ilkeller

Anahtar deposu aşağıdaki işlem kategorilerini sağlar:

  • Anahtar oluşturma
  • Asimetrik anahtarların içe ve dışa aktarılması (anahtar sarma yok)
  • Ham simetrik anahtarların içe aktarılması (anahtar sarma yok)
  • Uygun doldurma modları ile 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 doğrulama kodlarının üretilmesi ve doğrulanması

Amaç, mod ve dolgu gibi protokol öğelerinin yanı sıra erişim denetimi kısıtlamaları , anahtarlar oluşturulduğunda veya içe aktarıldığında ve anahtara kalıcı olarak bağlandığında belirtilir ve 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ı oluşturma. Bu, anahtarların, Başlatma Vektörlerinin (IV'ler), rastgele doldurmanın ve rastgelelik gerektiren güvenli protokollerin diğer öğelerinin oluşturulması için dahili olarak kullanılır.

Gerekli ilkeller

Tüm Keymaster uygulamaları şunları sağlar:

  • RSA
    • 2048, 3072 ve 4096 bit anahtar desteği
    • Genel üs F4 desteği (2^16+1)
    • RSA imzalama için doldurma modları:
      • RSASSA-PSS ( PaddingMode::RSA_PSS )
      • RSASSA-PKCS1-v1_5 ( PaddingMode::RSA_PKCS1_1_5_SIGN )
    • RSA imzalama için özet modları:
      • SHA-256
    • RSA şifreleme/şifre çözme için doldurma 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ı uzunluklarda olmayan etiketlerin kullanımına izin vermez.
    • Doldurma modları PaddingMode::NONE ve PaddingMode::PKCS7 , CBC ve ECB modları için desteklenir. Doldurma 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.

SHA1 ve SHA2 ailesinin diğer üyeleri (SHA-224, SHA384 ve SHA512), Keymaster uygulamaları için şiddetle tavsiye edilir. Donanım Keymaster uygulaması bunları sağlamıyorsa, anahtar deposu 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ü

Aygıttan asla çıkarılamayan donanım tabanlı anahtarlar, bir saldırgan bunları istediği zaman kullanabilirse fazla güvenlik sağlamaz (gerçi bunlar , ele geçirilebilecek anahtarlardan daha güvenlidir). Bu nedenle, Anahtar Deposunun erişim denetimlerini zorlaması çok önemlidir.

Erişim kontrolleri, etiket/değer çiftlerinin bir "yetki listesi" olarak tanımlanır. Yetkilendirme etiketleri 32 bit tam sayılardır ve değerler çeşitli türlerdedir. Bazı etiketler, birden çok 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 altında yatan Keymaster uygulaması, anahtarın geri alma korumasına sahip olup olmadığı gibi bazı ek bilgileri belirtmek ve döndürülen anahtar blobuna kodlanmış bir "son" yetkilendirme listesi döndürmek için listeyi değiştirir. Son yetkilendirme listesi değiştirilirse, herhangi bir şifreleme işlemi için anahtarı kullanma girişimi başarısız olur.

Keymaster 2 ve önceki sürümler için, olası etiketler grubu keymaster_authorization_tag_t numaralandırmasında tanımlanır ve kalıcı olarak sabitlenir (genişletilebilir olsa da). Adların önüne KM_TAG . Etiket kimliklerinin en üstteki 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 : Birçok etiketin değeri numaralandırmalarda tanımlanır. Örneğin, TAG::PURPOSE öğesinin 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. Tekrar, birden çok yetkili değeri gösterir. Örneğin, bir şifreleme anahtarında büyük olasılıkla KeyPurpose::ENCRYPT ve KeyPurpose::DECRYPT vardır.

UINT : 32 bit işaretsiz tam sayılar. Örnek: TAG::KEY_SIZE

UINT_REP : Etiketin bir yetkilendirme listesinde tekrarlanabilmesi dışında UINT ile aynıdır. Tekrar, birden çok yetkili değeri gösterir.

ULONG : 64 bit işaretsiz tamsayılar. Örnek: TAG::RSA_PUBLIC_EXPONENT

ULONG_REP : Etiketin bir yetki listesinde tekrarlanabilmesi dışında ULONG ile aynıdır. Tekrar, birden çok yetkili değeri gösterir.

DATE : 1 Ocak 1970'den bu yana milisaniye olarak ifade edilen tarih/saat değerleri. Örnek: TAG::PRIVKEY_EXPIRE_DATETIME

BOOL : Doğru veya yanlış. BOOL türündeki bir etiket, etiket yoksa "yanlış" ve varsa "doğru" olarak kabul edilir. Örnek: TAG::ROLLBACK_RESISTANT

BIGNUM : Büyük endian düzende bir bayt dizisi olarak ifade edilen keyfi uzunlukta tam sayılar. Örnek: TAG::RSA_PUBLIC_EXPONENT

BYTES : Bir bayt dizisi. Örnek: TAG::ROOT_OF_TRUST

Donanım ve yazılım zorlaması

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 denetimi zorlaması veya donanım ve yazılım zorlaması arasında ayrım yapar.

Tüm uygulamalar:

  • Tüm yetkilendirmelerin tam eşleşmesini (zorlama değil) uygulayın. Anahtar bloblarındaki yetkilendirme listeleri, sipariş de dahil olmak üzere anahtar oluşturma sırasında döndürülen yetkilendirmelerle tam olarak eşleşir. Herhangi bir uyumsuzluk bir hata teşhisine neden olur.
  • Semantik değerleri zorunlu kılınan yetkileri bildirin.

Donanım tarafından zorlanan yetkileri bildirmek için API mekanizması keymaster_key_characteristics_t yapısındadır. Yetkilendirme listesini hw_enforced ve sw_enforced olmak üzere iki alt listeye böler. Güvenli donanım, uygulayabileceklerine bağlı olarak her birine uygun değerleri yerleştirmekten sorumludur.

Ayrıca, Keystore, güvenli donanım tarafından uygulansın veya uygulanmasın tüm yetkilendirmelerin yazılım tabanlı uygulamasını uygular.

Örneğin, anahtar süre sonunu desteklemeyen TrustZone tabanlı bir uygulama 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 bulur ve güvenli donanım, süre sonu gereksinimini zorlamaz. Ancak, süresi dolduktan sonra anahtarı kullanma girişimleri Anahtar Deposu tarafından reddedilecektir.

Cihaz daha sonra süre dolmasını destekleyen güvenli bir donanımla yükseltilirse, anahtar özellikler için bir istek hw_enforced listesinde TAG::ORIGINATION_EXPIRE_DATETIME öğesini bulur ve süre bitiminden sonra anahtarı kullanma girişimleri, anahtar deposu bir şekilde altüst edilmiş veya atlanmış olsa bile başarısız olur. .

Anahtarların donanım destekli olup olmadığını belirleme hakkında daha fazla bilgi için bkz. Anahtar onayı .

Şifreli mesaj oluşturma yetkileri

Aşağıdaki etiketler, ilişkili anahtarı kullanarak işlemlerin şifreleme özelliklerini tanımlamak için 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 birden çok değer tek bir anahtarla ilişkilendirilebilir ve kullanılacak değer çalışma zamanında belirtilir.

Amaç

Anahtarların, nasıl kullanılabileceğini tanımlayan TAG::PURPOSE etiketiyle bir veya daha fazla yetki girişi olarak ifade edilen ilişkili bir dizi amacı vardır. Amaçlar:

  • 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 izin verir.

İthalat ve ihracat

Keymaster, yalnızca genel anahtarların X.509 biçiminde dışa aktarılmasını ve aşağıdakilerin içe aktarılmasını destekler:

  • Parola tabanlı şifreleme olmadan DER kodlu PKCS#8 biçiminde genel ve özel anahtar çiftleri
  • Ham bayt olarak simetrik anahtarlar

İçe aktarılan anahtarların güvenli bir şekilde oluşturulmuş anahtarlardan ayırt edilebilmesini sağlamak için TAG::ORIGIN , uygun anahtar yetkilendirme listesine dahil edilmiştir. Örneğin, güvenli donanımda bir anahtar oluşturulmuşsa, KeyOrigin::GENERATED değerine sahip TAG::ORIGIN anahtar özelliklerin hw_enforced listesinde bulunurken, güvenli donanıma aktarılan bir anahtar KeyOrigin::IMPORTED değerine sahip olacaktır. KeyOrigin::IMPORTED

Kullanıcı doğrulama

Güvenli Keymaster uygulamaları, kullanıcı kimlik doğrulaması 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 grubu aracılığıyla belirlenir. İlk küme, hangi kullanıcının anahtarı kullanabileceğini gösterir:

  • TAG::ALL_USERS , anahtarın tüm kullanıcılar tarafından kullanılabilir olduğunu gösterir. Varsa, TAG::USER_ID ve TAG::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ım tarafından uygulandığını unutmayın. Varsa, TAG::ALL_USERS mevcut değildir.
  • 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 biri güvenli bir kimlik doğrulama belirtecinde sağlanırsa anahtar kullanılabilir.

İkinci küme, kullanıcının kimliğinin doğrulanmasının gerekip gerekmediğini ve ne zaman doğrulanacağını gösterir. Bu etiketlerin hiçbiri yoksa, ancak TAG::USER_SECURE_ID , anahtarın her kullanımı için kimlik doğrulama 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ına yetki vermek 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şlatmaları geçmez; yeniden başlatmanın ardından tüm anahtarlar "hiçbir zaman doğrulanmaz". Zaman aşımı, önyükleme başına bir kez kimlik doğrulamanın 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, yalnızca anahtar oluşturma/içe aktarma sırasında sunulan aynı blobları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 bunu bilmesi gerekir.

Bu özellik uygulamalara açık değildir.

Son

Anahtar deposu, anahtar kullanımını tarihe göre kısıtlamayı destekler. Anahtarın geçerlilik başlangıcı ve anahtar sona erme süreleri bir anahtarla ilişkilendirilebilir ve mevcut tarih/saat geçerli aralığın dışındaysa Keymaster anahtar işlemleri gerçekleştirmeyi reddeder. Anahtar geçerlilik aralığı TAG::ACTIVE_DATETIME , TAG::ORIGINATION_EXPIRE_DATETIME ve TAG::USAGE_EXPIRE_DATETIME etiketleriyle belirtilir. "Kaynak" 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. Etiketler yoksa, 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ığından, süre sonuyla ilgili etiketlerin donanım tarafından zorunlu kılınan listede olması pek olası değildir. Sona erme için donanım zorlaması, 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ü aracılığıyla.

Güven bağlamanın kökü

Anahtar deposu, anahtarların, başlatma sırasında, tercihen önyükleyici tarafından Keymaster güvenli donanımına 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 aygıtın kilit durumunu doğrulamak için kullanılan ortak anahtardan oluşur. Ortak 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 bir sistem yeniden kurulmadıkça önceki sistem tarafından oluşturulan Keymaster korumalı anahtarların hiçbiri kullanılamaz. bu anahtar tarafından imzalanan, önyüklenir. Amaç, saldırgan tarafından yüklenen bir işletim sisteminin Keymaster anahtarlarını kullanmasını imkansız hale getirerek, yazılım tarafından zorlanan anahtar erişim denetimlerinin değerini artırmaktır.

Bağımsız tuşlar

Bazı Keymaster güvenli donanımları, anahtar materyalini dahili olarak saklamayı ve şifreli anahtar materyali yerine tutamaçları iade etmeyi seçebilir. Veya başka bir güvenli olmayan veya güvenli dünya sistemi bileşeni mevcut olana kadar anahtarların kullanılamayacağı başka durumlar 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 sisteminden başka hiçbir kaynağa gerek 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. Bir işlem TAG::MIN_SECONDS_BETWEEN_OPS saniyeden daha kısa bir süre önce gerçekleştirilmişse, TrustZone uygulamaları bu anahtarla şifreleme işlemlerini gerçekleştirmeyi reddeder.

Hız sınırlarını uygulamaya yönelik basit yaklaşım, anahtar kimliklerin ve son kullanım zaman damgalarının bir tablosudur. Bu tablo muhtemelen sınırlı boyutta olacaktır, ancak en az 16 girişi barındıracaktır. Tablonun dolu olması ve hiçbir girişin güncellenemeyeceği veya atılamayacağı durumda, girişlerden birinin süresi dolana kadar tüm hız sınırlı anahtar işlemleri reddetmeyi tercih ederek, güvenli donanım uygulamaları "güvenli başarısız olur". Yeniden başlatmanın ardından 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 gösterilmez 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 tam olarak güvenilir olmayabileceğinden, Keymaster HAL, istemcinin rasgele ile karıştırılacak ek entropi sağlamasına izin veren bir arabirim sağlar. oluşturulan sayılar.

Birincil tohum kaynağı olarak bir donanım rastgele sayı üreteci kullanın. Harici API aracılığıyla sağlanan tohum verileri, sayı üretimi için kullanılan tek rastgelelik kaynağı olamaz. Ayrıca, kullanılan karıştırma işlemi, tohum kaynaklarından herhangi biri tahmin edilemezse rastgele çıktının tahmin edilemez olmasını sağlamalıdır.

Bu özellik uygulamalara açık değildir, ancak bir Java SecureRandom örneğinden güvenli donanıma düzenli olarak ek entropi sağlayan çerçeve tarafından kullanılır.