Keymaster Yetkilendirme Etiketleri

Bu sayfada, Keymaster HAL'leri uygulayıcılara yardımcı olacak bilgiler verilmektedir. HAL'deki her bir etiketi kapsar. Bu etiketin kullanılabildiği Keymaster sürümü ve etiketin tekrarlanabilir olup olmadığı gibi bilgileri içerir. Etiket açıklamalarında belirtilenler dışında, Aşağıdaki etiketlerin tümü, anahtar oluşturma sırasında anahtarı belirtmek için kullanılır özellikler.

Keymaster 4 için etiketler platform/hardware/interfaces/keymaster/keymaster-version/types.hal, örneğin: Keymaster 3 ve için 3.0/types.hal Keymaster 4 için 4.0/types.hal. Keymaster 2 ve önceki sürümler için etiketler platform/hardware/libhardware/include/hardware/keymaster_defs.h

İşlevler için Keymaster İşlevleri sayfası.

Etiket::ACTIVE_DATETIME

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Anahtarın etkin olacağı tarihi ve saati belirtir. Bundan önce anahtar kullanma girişimleri, ErrorCode::KEY_NOT_YET_VALID

Bu değer, 1 Ocak'tan itibaren milisaniye cinsinden temsil eden 64 bitlik bir tam sayıdır. 1970.

Etiket::ALGORITHM

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Anahtarın birlikte kullanıldığı şifreleme algoritmasını belirtir.

Olası değerler aşağıdaki numaralandırmayla tanımlanır:

Anahtar Yöneticisi 3
enum class Algorithm : uint32_t {
    RSA = 1,
    EC = 3,
    AES = 32,
    HMAC = 128,
};
Keymaster 2 ve önceki sürümler
typedef enum {
    KM_ALGORITHM_RSA = 1,
    KM_ALGORITHM_EC = 3,
    KM_ALGORITHM_AES = 32,
    KM_ALGORITHM_HMAC = 128,
} keymaster_algorithm_t;

Etiket::ALL_APPLICATIONS

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

İleride kullanılmak üzere ayrılmıştır.

Etiket::ALLOW_WHILE_ON_BODY

Sürüm: 2, 3, 4

Tekrarlanabilir mi? Hayır

Bu etiket yalnızca üzerinde sensörleri olan Android Wear cihazlar için geçerlidir. Kuyruklu a işareti bir TEE hesabının güvenli erişim sağlaması beklenmemektedir. sensörlerin üzerinizde olduğunu ya da üzerinizdeki sensörlerin çok güvenli olduğunu, dolayısıyla bu tamamen yazılım destekli bir özellik olması bekleniyor.

Etiket::ALL_USERS

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

İleride kullanılmak üzere ayrılmıştır.

Etiket::APPLICATION_DATA

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Şuna sağlandığında: generateKey veya importKey ise bu etiket, anahtarın tüm kullanımları sırasında gerekli olan verileri belirtir. İçinde özellikle de exportKey ve getKeyCharacteristics aynı değeri clientId parametresine sağlaması gerekir ve başlamak için bu etiket ve inParams parçasıyla aynı ilişkili veriler ayarlandı. Doğru veriler sağlanmazsa işlev, ErrorCode::INVALID_KEY_BLOB

Bu etiketin içeriği anahtara şifrelenmiş olarak bağlıdır, Diğer bir deyişle, Güvenli Arama'nın tüm özelliklerine erişimi olan bir saldırgan ancak güvenliklerinin şifresini çözmek için etiket içeriğine erişimi yoktur. kodunu tıklamanızı sağlar. Bu, uygulamaların yeterince yüksek entropili içerik belirtmek.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::APPLICATION_ID

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Şuna sağlandığında: generateKey veya importKey ise bu etiket, anahtarın tüm kullanımları sırasında gerekli olan verileri belirtir. İçinde özellikle de exportKey ve getKeyCharacteristics clientId parametresinde aynı değeri sağlamalı ve başlatma bu etiketi ve inParams set. Doğru veriler sağlanmazsa, fonksiyon ErrorCode::INVALID_KEY_BLOB değerini döndürür.

Bu etiketin içeriği anahtara şifrelenmiş olarak bağlıdır, Bu, dünyanın tüm güvenli sırlarına erişebilen düşman bir kişi olduğu anlamına geliyor. etiket içeriğine erişimi yoksa ve anahtarı (etiket içeriğini kabartma zorlamadan).

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ASSOCIATED_DATA

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

"İlişkili veriler" değerini sağlar veya şifre çözme API'sini kullanıma sokabilir. Bu etiket güncellemek ve şifrelenmemiş/şifresi çözülemeyen ancak bilgi işlemde kullanılan verileri belirtir GCM etiketi oluşturabilirsiniz.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_APPLICATION_ID

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Bunlardan hangisinin olası uygulamalarını belirlemek için kullanılır? anahtar onayı başlattı.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_CHALLENGE

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Onayda sorgulama sağlamak için kullanılır.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_ID_BRAND

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Build.BRAND tarafından belirtildiği şekliyle cihazın marka adını belirtir bazı yolları da görmüştük. Bu alan yalnızca için de geçerlidir.

Cihaz, kimlik onayını (veya destroyAttestationIds() daha önce arandı ve cihaz şu işlemleri yapabilir: kimlik doğrulamasından geçmiş veriler) içeren bir anahtar onay isteği bu etiket ErrorCode::CANNOT_ATTEST_IDS ile başarısız oluyor.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_ID_DEVICE

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Build.DEVICE tarafından döndürüldüğü şekliyle cihazın cihaz adını belirtir bazı yolları da görmüştük. Bu alan yalnızca için de geçerlidir.

Cihaz, kimlik onayını (veya destroyAttestationIds() daha önce arandı ve cihaz şu işlemleri yapabilir: kimlik doğrulamasından geçmiş veriler) içeren bir anahtar onay isteği bu etiket ErrorCode::CANNOT_ATTEST_IDS ile başarısız oluyor.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_ID_IMEI

Sürüm: 3, 4

Tekrarlanabilir mi? Evet

Cihazdaki tüm radyoların IMEI'lerini sağlar. Bu alan yalnızca ayarlandı onay istenir.

Cihaz, kimlik onayını (veya destroyAttestationIds() daha önce arandı ve cihaz şu işlemleri yapabilir: kimlik doğrulamasından geçmiş veriler) içeren bir anahtar onay isteği bu etiket ErrorCode::CANNOT_ATTEST_IDS ile başarısız oluyor.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_ID_MANUFACTURER

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Cihazın üretici adını belirtir. Android'de Build.MANUFACTURER. Bu alan yalnızca cihaz tanımlayıcılarının onayını isteme.

Cihaz, kimlik onayını (veya destroyAttestationIds() daha önce arandı ve cihaz şu işlemleri yapabilir: kimlik doğrulamasından geçmiş veriler) içeren bir anahtar onay isteği bu etiket ErrorCode::CANNOT_ATTEST_IDS ile başarısız oluyor.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_ID_MEID

Sürüm: 3, 4

Tekrarlanabilir mi? Evet

Cihazdaki tüm radyolar için MEID'leri sağlar. Bu alan yalnızca ayarlanır onay istenir.

Cihaz, kimlik onayını (veya destroyAttestationIds() daha önce arandı ve cihaz şu işlemleri yapabilir: kimlik doğrulamasından geçmiş veriler) içeren bir anahtar onay isteği bu etiket ErrorCode::CANNOT_ATTEST_IDS ile başarısız oluyor.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_ID_MODEL

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Cihazın model adını belirtir. Android'de Build.MODEL. Bu alan yalnızca cihaz tanımlayıcılarının onayını isteme.

Cihaz, kimlik onayını (veya destroyAttestationIds() daha önce arandı ve cihaz şu işlemleri yapabilir: kimlik doğrulamasından geçmiş veriler) içeren bir anahtar onay isteği bu etiket ErrorCode::CANNOT_ATTEST_IDS ile başarısız oluyor.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_ID_PRODUCT

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Cihazın ürün adını belirtir. Android'de Build.PRODUCT. Bu alan yalnızca cihaz tanımlayıcılarının onayını isteme.

Cihaz, kimlik onayını (veya destroyAttestationIds() daha önce arandı ve cihaz şu işlemleri yapabilir: kimlik doğrulamasından geçmiş veriler) içeren bir anahtar onay isteği bu etiket ErrorCode::CANNOT_ATTEST_IDS ile başarısız oluyor.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::ATTESTATION_ID_SERIAL

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Cihazın seri numarasını sağlar. Bu alan yalnızca cihaz tanımlayıcılarının onayını isteme.

Cihaz, kimlik onayını (veya destroyAttestationIds() daha önce arandı ve cihaz şu işlemleri yapabilir: kimlik doğrulamasından geçmiş veriler) içeren bir anahtar onay isteği bu etiket ErrorCode::CANNOT_ATTEST_IDS ile başarısız oluyor.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::AUTH_TIMEOUT

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Anahtarın kullanım için yetkilendirildiği süreyi saniye cinsinden belirtir. kimlik doğrulama. Etiket: USER_SECURE_ID varsa ve bu etiket yoksa anahtarın her bir etiket için (bkz. başlangıcı (işlem başına kimlik doğrulama akışının ayrıntılarını) girin.

Bu değer, Tag::USER_SECURE_ID tarafından belirtilen, kimlik doğrulama yöntemiyle başarılı kimlik doğrulama Etiket::USER_AUTH_TYPE tarafından belirtilen anahtarın kullanılır.

Etiket::AUTH_TOKEN

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Sağlar: kimlik doğrulama jeton'u başlatmak, güncelleyin veya bitleyin, gereken bir anahtar işleminde kullanıcı kimlik doğrulamasını kanıtlamak için (anahtarda Tag::USER_SECURE_ID değeri bulunur).

Değer, hw_auth_token_t yapısı içeren bir blob.

Etiket::BLOB_USAGE_REQUIREMENTS

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Oluşturulan büyük bir alan vardır.

Olası değerler aşağıdaki numaralandırmayla tanımlanır:

Anahtar Yöneticisi 3
enum class KeyBlobUsageRequirements : uint32_t {
    STANDALONE = 0,
    REQUIRES_FILE_SYSTEM = 1,
};
Keymaster 2 ve önceki sürümler
typedef enum {
    KM_BLOB_STANDALONE = 0,
    KM_BLOB_REQUIRES_FILE_SYSTEM = 1,
} keymaster_key_blob_usage_requirements_t;

Bu etiket, anahtar oluşturma sırasında anahtarın belirtilen koşulda kullanılabilir. Bu öğenin, anahtarla birlikte geri verilmesi gerekir şu özelliklerden generateKey ve getKeyCharacteristics özelliği hakkında daha fazla bilgi edinin. Arayan, Tag::BLOB_USAGE_REQUIREMENTS öğesini değer KeyBlobUsageRequirements::STANDALONE, güvenilir sertifika bir anahtar blob'u döndürür kullanabileceğiniz bir kaynaktır. Bu adım, cihazlar için dosya sistemi o zamana kadar kullanılamayabilir. Keymaster anahtarı kullanıldığında diskin şifresini çözmek için kullanılır.

Etiket::BLOCK_MODE

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Evet

Anahtarın kullanılabileceği blok şifresi modlarını belirtir. Bu etiket yalnızca AES anahtarlarıyla ilgilidir.

Olası değerler aşağıdaki numaralandırmayla tanımlanır:

Anahtar Yöneticisi 3
enum class BlockMode : uint32_t {
    ECB = 1,
    CBC = 2,
    CTR = 3,
    GCM = 32,
};
Keymaster 2 ve önceki sürümler
typedef enum {
    KM_MODE_ECB = 1,
    KM_MODE_CBC = 2,
    KM_MODE_CTR = 3,
    KM_MODE_GCM = 32,
} keymaster_block_mode_t;

Bu etiket tekrarlanabilir ve AES anahtar işlemleri için additionalParams bağımsız değişkeni başla. Belirtilen mod anahtarla ilişkilendirilmiş modlarda değilse, işlem ErrorCode::INCOMPATIBLE_BLOCK_MODE ile başarısız oluyor.

Etiket::BOOT_PATCHLEVEL

Sürüm: 4

Etiket::BOOT_PATCHLEVEL, başlatma görüntüsü (çekirdek) güvenlik yaması düzeyini belirtir ne ile birlikte kullanılabileceğini gösterir. Bu etiket hiçbir zaman keymaster TA'ya gönderilmez, anahtarı, donanım tarafından zorunlu kılınan yetkilendirme listesine eklenir. Şuna yönelik herhangi bir girişim: şundan farklı bir Tag::BOOT_PATCHLEVEL değerine sahip bir anahtar kullanın: şu anda çalışan sistem yama düzeyi begin() neden oluyor, İade için getKeyCharacteristics() veya exportKey() ErrorCode::KEY_REQUIRES_UPGRADE. Bkz. upgradeKey() inceleyebilirsiniz.

Etiketin değeri, YYYYAAGG biçiminde bir tam sayıdır; burada YYYY, DD, son güncellemenin dört basamaklı yılı, AA iki basamaklı ayı, GG ise son güncellemenin iki basamaklı günü. Örneğin, Android cihazın son güncellenme tarihi: 5 Haziran 2018. Değer 20180605 olur. Gün bilinmiyorsa 00 değeri değiştirilebilir.

Her başlatma sırasında bootloader, başlatma görüntüsünün yama düzeyini sağlamalıdır değer atfeder (mekanizma, uygulama tanımlıdır).

Donanımla zorunlu kılınmalıdır.

Etiket::BOOTLOADER_ONLY

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Yalnızca bootloader'ın anahtarı kullanabileceğini belirtir.

Bu etiket boole'dir, dolayısıyla olası değerler doğrudur (etiket mevcutsa) ve false (etiket mevcut değilse).

Tag::BOOTLOADER_ONLY Android sistemi ErrorCode::INVALID_KEY_BLOB ile başarısız oluyor.

Etiket::CALLER_NONCE

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Çağrının, gerekli olmayan işlemler için bir tek seferlik rastgele sayı sağlayabileceğini belirtir.

Bu etiket boole'dir, dolayısıyla olası değerler doğrudur (etiket mevcutsa) ve false (etiket mevcut değilse).

Bu etiket yalnızca AES anahtarları için kullanılır ve sadece CBC, TO ve GCM ile alakalıdır engelleyebilirsiniz. Etiket burada mevcut değilse uygulamalar, Tag::NONCE değerini sağlayan işlem başlangıç ErrorCode::CALLER_NONCE_PROHIBITED ile.

Etiket::CREATION_DATETIME

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Anahtarın oluşturulduğu tarihi ve saati (milisaniye cinsinden) belirtir. 1 Ocak 1970. Bu etiket isteğe bağlıdır ve yalnızca bilgilendirme amaçlıdır.

Etiket::DIGEST

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Evet

Aşağıdaki işlemlerde anahtarla kullanılabilecek özet algoritmalarını belirtir: işlemleri için kullanılır. Bu etiket RSA, ECDSA ve HMAC anahtarları.

Olası değerler aşağıdaki numaralandırmayla tanımlanır:

Anahtar Yöneticisi 3
enum class Digest : uint32_t {
    NONE = 0,
    MD5 = 1,
    SHA1 = 2,
    SHA_2_224 = 3,
    SHA_2_256 = 4,
    SHA_2_384 = 5,
    SHA_2_512 = 6,
};
Keymaster 2 ve önceki sürümler
typedef enum {
    KM_DIGEST_NONE = 0,
    KM_DIGEST_MD5 = 1,
    KM_DIGEST_SHA1 = 2,
    KM_DIGEST_SHA_2_224 = 3,
    KM_DIGEST_SHA_2_256 = 4,
    KM_DIGEST_SHA_2_384 = 5,
    KM_DIGEST_SHA_2_512 = 6,
}
keymaster_digest_t;

Bu etiket tekrarlanabilir. İmzalama ve doğrulama işlemleri için additionalParams bağımsız değişkenindeki bir özet başla. Belirtilen özet, anahtarla ilişkili özetlerde yer almıyorsa işlem ErrorCode::INCOMPATIBLE_DIGEST ile başarısız oluyor.

Etiket::EC_CURVE

Sürüm: 2, 3, 4

Tekrarlanabilir mi? Hayır

Keymaster 1'de EC anahtarları için kullanılan eğri, belirtilen anahtardan tahmin edildi seçin. Keymaster 2, gelecekte esnekliği artırmak için açıkça yöntemini kullanın. EC anahtarı oluşturma isteklerinde Tag::EC_CURVE, Tag::KEY_SIZE veya her ikisi.

Olası değerler aşağıdaki numaralandırmayla tanımlanır:

Anahtar Yöneticisi 3
enum class EcCurve : uint32_t {
    P_224 = 0,
    P_256 = 1,
    P_384 = 2,
    P_521 = 3,
};
Keymaster 2 ve önceki sürümler
enum class EcCurve : uint32_t {
    P_224 = 0,
    P_256 = 1,
    P_384 = 2,
P_521 = 3,
};

Oluşturma isteği yalnızca Tag::KEY_SIZE içeriyorsa Keymaster 1 mantığına geçerek uygun NIST eğrisini seçer.

İstek yalnızca Tag::EC_CURVE içeriyorsa sağlanan eğriyi gösterir. Keymaster 3 ve sonraki sürümler için eğriler şu şekilde tanımlanır: EcCurve Keymaster 2 ve önceki modeller için eğriler tanımlanır keymaster_ec_curve_t içinde.

İstek her ikisini de içeriyorsa Tag::EC_CURVE ve belirtilen anahtar boyutunun şu olduğunu doğrulayın: o eğriye uygun mu? Değilse geri dönün ErrorCode::INVALID_ARGUMENT

Etiket::INCLUDE_UNIQUE_ID

Sürüm: 2, 3, 4

Tekrarlanabilir mi? Hayır

Bu etiket, anahtar oluşturma sırasında bir onayın oluşturulan anahtarın sertifikası, uygulama kapsamlı ve belirtilen zaman sınırlamalı cihaza özgü kimlik Etiket::UNIQUE_ID.

Bu etiket boole'dir, dolayısıyla olası değerler doğrudur (etiket mevcutsa) ve false (etiket mevcut değilse).

Etiket::KEY_SIZE

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Anahtarın boyutunu bit cinsinden belirtir ve anahtar algoritması. Örneğin, RSA anahtarları için Tag::KEY_SIZE, değeri halka açık modülün boyutuna da bağlıdır. AES anahtarları için uzunluğu belirtir. öğreneceğiz.

Etiket::MAC_LENGTH

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

MAC veya GCM kimlik doğrulama etiketinin istenen uzunluğunu bit cinsinden sağlar.

Değer, bit cinsinden MAC uzunluğudur. 8'in katıdır ve en az Etiket::MIN_MAC_LENGTH değeri kadar büyük anahtarla ilişkilendirilir.

Etiket::MAX_USES_PER_BOOT

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Bir anahtarın sistem arasında maksimum kaç kez kullanılabileceğini belirtir yeniden başlatılır. Bu, anahtar kullanımını hız sınırlamasıyla sınırlamak için kullanılan başka bir mekanizmadır.

Değer, başlatma başına kullanımları temsil eden 32 bitlik bir tam sayıdır.

Bir işlemde bu etikete sahip bir anahtar kullanıldığında, anahtarla ilişkilendirilmiş bir sayaç begin çağrısına gönderin. Anahtardan sonra sayaç bu değeri aştı, anahtarı kullanmak için sonraki tüm denemeler başarısız oldu ErrorCode::MAX_OPS_EXCEEDED ile devam edin. Bu, güvenilir bir güvenirde bu parametreye sahip anahtarlar için kullanım sayaçlarının yer aldığı bir tablo olduğu anlamına gelir. kapanış etiketinin hemen öncesine yapıştırın. Keymaster belleği genellikle sınırlı olduğundan bu tabloda sabit bir ve Keymaster, anahtarları bu etiketi kullanabilirsiniz. Tablonun en az 16 anahtar barındırması gerekir. Tablo dolu olduğu için bir işlem başarısız olursa Keymaster ErrorCode::TOO_MANY_OPERATIONS

Etiket::MIN_MAC_LENGTH

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Bu etiket, istenebilecek minimum MAC uzunluğunu belirtir veya GCM modunu destekleyen HMAC anahtarları ve AES anahtarları için bu anahtarla doğrulandı.

Bu değer, bit cinsinden minimum MAC uzunluğudur. 8'in katıdır. Örneğin, HMAC anahtarları için değer en az 64'tür. GCM anahtarları için değer en az 96'dır ve en fazla 128.

Etiket::MIN_SECONDS_BETWEEN_OPS

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

İzin verilen uygulamalar arasında geçen minimum süreyi belirtir işlemleri gerçekleştirmez. Bu, bağlamlarda anahtarların kullanım hızını sınırlandırmak için kullanılabilir sınırsız kullanım kaba kuvvet saldırılarına imkan verebilir.

Değer, izin verilen değerler arasındaki saniyeleri temsil eden 32 bitlik bir tam sayıdır. anlamına gelir.

Bir işlemde bu etikete sahip bir anahtar kullanıldığında zamanlayıcı başlatın biti veya çağrısı iptal edin. Herhangi biri başlangıç çağrısı, değeri, zaman çizelgesi tarafından belirlenen zaman aralığı Tag::MIN_SECONDS_BETWEEN_OPS, geçen süre zarfında başarısız oldu: ErrorCode::KEY_RATE_LIMIT_EXCEEDED. Bu Bu, bir güvenilir setinde bu etikete sahip anahtarlar için kullanım sayaçları tablosunun bulunduğunu ifade eder. Keymaster belleği genellikle sınırlı olduğundan bu tabloda sabit bir maksimum değer olabilir boyut ve Keymaster, bu etiketle anahtarları kullanmaya çalışan işlemlerde başarısız olabilir yeni bir e-posta alırsınız. Tablonun kullanımda en az 32 öğe içermesi gerekir anahtarları ve temel minimum kullanım aralıkları sona erdiğinde tablo alanlarını agresif bir şekilde yeniden kullanır. Tablo dolu olduğu için bir işlem başarısız olursa Keymaster ErrorCode::TOO_MANY_OPERATIONS

Etiket::NO_AUTH_REQUIRED

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Bu anahtarı kullanmak için kimlik doğrulamanın gerekmediğini belirtir. Bu etiket Tag::USER_SECURE_ID ile birlikte hariç tutulur.

Bu etiket boole'dir, dolayısıyla olası değerler doğrudur (etiket mevcutsa) ve false (etiket mevcut değilse).

Etiket::NONCE

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

AES GCM, CBC için bir tek seferlik rastgele sayı veya Başlatma Vektörü (IV) sağlar ya da döndürür. ya da TO şifrelemesi veya şifre çözme. Bu etiket, başla şifreleme ve şifre çözme işlemleri sırasında kullanılabilmesini sağlar. Yalnızca başla anahtarda Tag::CALLER_NONCE etiketi varsa Sağlanmamışsa rastgele bir rastgele sayı, uygun bir tek seferlik rastgele sayı veya IV rastgele oluşturulur Keymaster ve başlangıçtan geri döndü.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur. İzin verilen uzunluklar moda bağlıdır: GCM nonce'un uzunluğu 12 bayttır; CBC ve TO IV'ler 16'dır bayt uzunluğunda olabilir.

Etiket::SOURCE

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Biliniyorsa anahtarın nerede oluşturulduğunu belirtir. Bu etiket belirtilemez Anahtar oluşturma veya içe aktarma sırasında ele alınır ve temel özelliklere eklenmelidir. güvenilir test sağlayıcıdır.

Anahtar Yöneticisi 3

Olası değerler şurada tanımlanmıştır: android::hardware::keymaster::v3_0::KeyOrigin:

enum class KeyOrigin : uint32_t {
    GENERATED = 0,
    DERIVED = 1,
    IMPORTED = 2,
    UNKNOWN = 3,
};
Keymaster 2 ve önceki sürümler

Olası değerler keymaster_origin_t içinde tanımlanmıştır:

typedef enum {
    KM_ORIGIN_GENERATED = 0,
    KM_ORIGIN_IMPORTED = 2,
    KM_ORIGIN_UNKNOWN = 3,
} keymaster_key_origin_t

Değerin tam anlamı yalnızca değere değil, aynı zamanda donanımla zorlanan veya yazılım tarafından zorlanan özellikler listesinde bulunur.

GENERATED, anahtarı Keymaster'ın oluşturduğunu gösterir. Donanım tarafından zorunlu kılınan listede yer alıyorsa Anahtar, güvenli bir donanımda oluşturulmuştur ve kalıcı olarak donanıma bağlıdır. Eğer listesindeyse anahtar SoftKeymaster'da oluşturulmuştur ve bağlı değildir.

DERIVED, anahtarın Keymaster'da türetildiğini gösterir. Cihaz dışında bulunması muhtemeldir.

IMPORTED, anahtarın ve içe aktarılmalıdır. Keymaster. Donanımla zorunlu kılınan listede yer alıyorsa kalıcı olarak donanıma bağlı demektir. ancak güvenli donanım dışında kopyalar bulunabilir. yazılım yaptırımları listesine başvurduğunda, anahtar SoftKeymaster'a aktarılmıştır ve donanımla bağlantılı.

UNKNOWN, yalnızca donanım tarafından zorunlu kılınan uygulamalar listesinde görünmelidir. Bu, anahtarın donanım bağlı, ancak anahtarın orijinal olarak ya da içe aktarılmıştır. Bu durum yalnızca keymaster0 donanımının keymaster1 hizmetlerine emüle etmek için kullanılır.

Etiket::originATION_EXPIRE_DATETIME

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Anahtarın imzalama ve nedeniyle de kullanılamaz. Bu tarihten sonra KeyIntent::SIGN veya KeyIntent::ŞİRKET sağlandı başlama başarısız ErrorCode::KEY_EXPIRED ile.

Değer, milisaniye cinsinden 64 bitlik bir tam sayıdır ve 1 Ocak 1970.

Etiket::OS_PATCHLEVEL

Sürüm: 2, 3, 4

Tekrarlanabilir mi? Hayır

Bu etiket hiçbir zaman keymaster TA'ya gönderilmez, donanım tarafından zorunlu kılınan yetkilendirme listesini içerir.

Etiketin değeri, YYYYAA biçiminde bir tam sayıdır; burada YYYY, son güncellemenin dört basamaklı yılı, MM ise son güncellemenin iki basamaklı ayıdır güncelleyin. Örneğin, bir Android cihazda oluşturulan bir anahtarın son güncellenme tarihi: Aralık 2015'te ise değer 201512 olur.

Mevcut yama düzeyinden farklı bir yama düzeyine sahip anahtarlar buna dahil değildir yardımcı olur. Böyle temel amaçları kullanmaya yönelik girişim begin, getKeyCharacteristics, veya exportKey ErrorCode::KEY_REQUIRES_UPGRADE değerini döndürmek için. Görüntüleyin Daha fazlası için Sürüm Bağlama bolca fırsat sunuyor.

Etiket::OS_VERSION

Sürüm: 2, 3, 4

Tekrarlanabilir mi? Hayır

Bu etiket hiçbir zaman keymaster TA'ya gönderilmez, donanım tarafından zorunlu kılınan yetkilendirme listesini içerir.

Etiketin değeri, MMmmss biçiminde bir tam sayıdır ve burada en büyük değer AA'dır. sürüm numarası; mm alt sürüm numarası, ss ise alt sürüm numarasıdır sayı. Örneğin, Android 4.0.3 sürümünde oluşturulan bir anahtarın değeri 040003 olur.

Etiket::PADDING

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Evet

Anahtarla kullanılabilecek dolgu modlarını belirtir. Bu etiket için de kullanılabilir.

Olası değerler aşağıdaki numaralandırmayla tanımlanır:

Anahtar Yöneticisi 3
enum class PaddingMode : uint32_t {
    NONE = 1,
    RSA_OAEP = 2,
    RSA_PSS = 3,
    RSA_PKCS1_1_5_ENCRYPT = 4,
    RSA_PKCS1_1_5_SIGN = 5,
    PKCS7 = 64,
};
Keymaster 2 ve önceki sürümler
typedef enum {
    KM_PAD_NONE = 1,
    KM_PAD_RSA_OAEP = 2,
    KM_PAD_RSA_PSS = 3,
    KM_PAD_RSA_PKCS1_1_5_ENCRYPT = 4,
    KM_PAD_RSA_PKCS1_1_5_SIGN = 5,
    KM_PAD_PKCS7 = 64,
} keymaster_padding_t;

PaddingMode::RSA_OAEP ve PaddingMode::RSA_PKCS1_1_5_ENCRYPT kullanılıyor yalnızca RSA şifrelemesi/şifre çözme anahtarları için ve RSA PKCS#1v2 OAEP belirtin dolgu ve RSA PKCS#1 v1.5 rastgele dolgu. PaddingMode::RSA_PSS ve PaddingMode::RSA_PKCS1_1_5_SIGN yalnızca duyarlı arama ağı reklamı için kullanılır imzalama/doğrulama anahtarlarını kontrol edin ve RSA PKCS#1v2 PSS'yi belirtin. dolgu ve RSA PKCS#1 v1.5 belirleyici dolgu.

PaddingMode::NONE, RSA veya AES anahtarları. AES anahtarları için PaddingMode::NONE kullanılıyorsa ECB veya CBC ile blok modu ve şifrelenecek ya da şifresi çözülecek veriler AES blok boyutunun katları olmadığını; bitiş çağrısının ErrorCode::INVALID_INPUT_LENGTH ile başarısız oluyor.

PaddingMode::PKCS7 yalnızca AES anahtarlarıyla kullanılabilir ve yalnızca ECB ve CBC modlarında kullanılabilir.

Bu etiket tekrarlanabilir. Çağrıda bir dolgu modu belirtilmelidir begin. Belirtilen mod anahtar için yetkilendirilmemişse işlem başarısız olur ErrorCode::INCOMPATIBLE_BLOCK_MODE ile birlikte.

Etiket::PURPOSE

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Evet

Anahtarın ne amaçla kullanılabileceğini belirtir.

Olası değerler aşağıdaki numaralandırmayla tanımlanır:

Anahtar Yöneticisi 3
enum class KeyPurpose : uint32_t {
    ENCRYPT = 0,
    DECRYPT = 1,
    SIGN = 2,
    VERIFY = 3,
    DERIVE_KEY = 4,  // since 3.0
    WRAP_KEY = 5,    // since 3.0
};
Keymaster 2 ve önceki sürümler
typedef enum {
    KM_PURPOSE_ENCRYPT = 0,
    KM_PURPOSE_DECRYPT = 1,
    KM_PURPOSE_SIGN = 2,
    KM_PURPOSE_VERIFY = 3,
} keymaster_purpose_t;

Bu etiket tekrarlanabilir; anahtarlar birden çok değerle oluşturulabilir, ancak operasyonun tek bir amacı var. begin işlevi çağrılır bir işlem başlatmak için işlemin amacı belirtilir. İşlemde belirtilen amaç anahtarı, işlem ErrorCode::INCOMPATIBLE_PURPOSE ile başarısız olur.

Etiket::RESET_SINCE_ID_ROTATION

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Cihazın fabrika ayarlarına sıfırlanıp sıfırlanmadığını belirtir son benzersiz kimlik rotasyonundan bu yana. Anahtar onayı için kullanılır.

Bu etiket boole'dir, dolayısıyla olası değerler doğrudur (etiket mevcutsa) ve false (etiket mevcut değilse).

Etiket::ROLLBACK_RESISTANT

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Anahtarın geri almaya dirençli olduğunu, yani silindiğinde deleteKey veya deleteAllKeys, anahtarın kalıcı olarak silineceği ve kullanılamaz hale geleceği garanti edilir. Bu mümkün bu etikete sahip olmayan anahtarların silinip daha sonra yedekten geri yükleneceğini hatırlatmak isteriz.

Bu etiket boole'dir, dolayısıyla olası değerler doğrudur (etiket mevcutsa) ve false (etiket mevcut değilse).

Etiket::ROOT_OF_TRUST

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Doğrulanmış başlatma tarafından şu işlemler için kullanılan güven kökü'nü belirtir: işletim sisteminin başlatıldığını (varsa) doğrulayın. Bu etiket hiç sağlanmadı veya Keymaster'dan geri döndüklerinden emin olun.

Etiket::RSA_PUBLIC_EXPONENT

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

RSA anahtar çiftinin ortak üssün değerini belirtir. Bu etiket Yalnızca RSA anahtarlarıyla alakalı ve tüm RSA anahtarları için gereklidir.

Değer, RSA'nın herkese açık üssü. Bu değer asal sayı olmalıdır. Trustlets, 2^16+1 değerini alır ve diğer makul değerleri, özellikle de 3 değerini destekleyebilir. Üs belirtilmemişse veya belirtilen üs desteklenmiyorsa anahtar oluşturma işlemi ErrorCode::INVALID_ARGUMENT ile başarısız oluyor.

Etiket::UNIQUE_ID

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Onayda benzersiz kimlik sağlamak için kullanılır.

Değer, rastgele uzunlukta bir bayt dizisi olan blob'dur.

Etiket::USAGE_EXPIRE_DATETIME

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Anahtarın doğrulama için süresinin dolacağı tarih ve saati belirtir şifresini çözer. Bu tarihten sonra KeyPurpose::VERIFY veya KeyAmaç::DECRYPT hedefi begin başarısız olur ErrorCode::KEY_EXPIRED ile.

Değer, milisaniye cinsinden 64 bitlik bir tam sayıdır ve 1 Ocak 1970.

Etiket::USER_AUTH_TYPE

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Bunu yetkilendirmek için kullanılabilecek kullanıcı kimlik doğrulayıcı türlerini belirtir tuşuna basın. Keymaster'ın bu komutla bir anahtarla işlem yapması istendiğinde etiketi, bir kimlik doğrulama jetonu alır ve jetonun authenticator_type alanının etiketteki değerle eşleşmesi gerekir. Örneğin, (ntoh(token.authenticator_type) & auth_type_tag_value) != 0; burada ntoh ağ sırasına göre tam sayıları ana makine tarafından sıralı tam sayılara dönüştürür ve auth_type_tag_value bu etiketin değeridir.

Değer, numaralandırmadaki değerlerin 32 bitlik tam sayı bit maskesidir:

Anahtar Yöneticisi 3
enum class HardwareAuthenticatorType : uint32_t {
    NONE = 0u, // 0
    PASSWORD = 1 << 0,
    FINGERPRINT = 1 << 1,
    ANY = UINT32_MAX,
};
Keymaster 2 ve önceki sürümler
typedef enum {
    HW_AUTH_NONE = 0,
    HW_AUTH_PASSWORD = 1 << 0,
    HW_AUTH_FINGERPRINT = 1 << 1,
    // Additional entries should be powers of 2.
    HW_AUTH_ANY = UINT32_MAX,
} hw_authenticator_type_t;

Etiket::USER_SECURE_ID

Sürüm: 1, 2, 3, 4

Tekrarlanabilir mi? Hayır

Bir anahtarın yalnızca belirli bir güvenli kullanıcı tarafından kullanılabileceğini belirtir kimlik doğrulama durumuna getirin. Bu etiket birlikte kullanılamaz Etiket::NO_AUTH_REQUIRED ile değiştirin.

Değer, kimlik doğrulama politikası durumunu belirten 64 bitlik bir tam sayıdır bir kimlik doğrulama jetonunda bulunması gereken değer ( şununla başlar: Etiket::AUTH_TOKEN) oluşturun. Herhangi biri başlangıç çağrısı çalışmayan bir anahtarla kimlik doğrulama jetonu sağlar veya Eşleşen bir politika durumu değerine sahip olmayan kimlik doğrulama jetonu, başarısız.

Bu etiket tekrarlanabilir. Sağlanan değerlerden herhangi biri bir politikayla eşleşiyorsa durum değeri kullanıldığından, anahtarın kullanım için yetkilendirildiğine dikkat edin. Aksi takdirde işlem ErrorCode::KEY_USER_NOT_AUTHENTICATED

Etiket::VENDOR_PATCHLEVEL

Sürüm: 4

Bu etiket, anahtarın kullandığı tedarikçi görüntüsü güvenlik yaması düzeyini belirtir kullanılabilir. Bu etiket hiçbir zaman keymaster TA'ya gönderilmez, donanım tarafından zorunlu kılınan yetkilendirme listesini içerir. Tag::VENDOR_PATCHLEVEL değeri şu anda yürütülen değerden farklı sistem yama düzeyi şuna neden olmalıdır: begin() İade için getKeyCharacteristics() veya exportKey() ErrorCode::KEY_REQUIRES_UPGRADE. Bkz. upgradeKey() inceleyebilirsiniz.

Etiketin değeri, YYYYAAGG biçiminde bir tam sayıdır; burada YYYY, DD, son güncellemenin dört basamaklı yılı, AA iki basamaklı ayı, GG ise son güncellemenin iki basamaklı günü. Örneğin, Android cihazın son güncellenme tarihi: 5 Haziran 2018. Değer 20180605 olur.

IKeymasterDevice HAL, sistemden mevcut tedarikçi yama düzeyini okumalıdır özelliğini ro.vendor.build.security_patch kullanmak ve güvenli bir ortam yaratmak için (mekanizma tanımlanabilir). Güvenli ortam başka bir bir sonraki başlatma işlemine kadar sürdürür.

Donanımla zorunlu kılınmalıdır.