Keymaster yetkilendirme etiketleri

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

Keymaster 4 için etiketler platform/hardware/interfaces/keymaster/keymaster-version/types.hal içinde tanımlanır. Örneğin, Keymaster 3 için 3.0/types.hal ve 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. Bu tarihten önce anahtarı kullanma girişimleri ErrorCode::KEY_NOT_YET_VALID ile başarısız olur.

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

Etiket::ALGORİTMA

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 listeyle tanımlanır:

Keymaster 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

Gelecekte 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'nin güvenli erişim sağlaması beklenmemektedir. sensöre duyarlı olduğunu veya üzerinizde bulunan 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

Gelecekte kullanılmak üzere ayrılmıştır.

Etiket::APPLICATION_DATA

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

Tekrarlanabilir mi? Hayır

generateKey veya importKey işlevlerine sağlandığında bu etiket, anahtarın tüm kullanımları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 öğesinin parçası olarak 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 verilerin şifresini çözmek için etiket içeriğine erişimleri tuşunu kullanarak yeterince yüksek entropili içerik belirtmek.

Değer, rastgele uzunlukta bir bayt dizisi olan bir 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. Özellikle, exportKey ve getKeyCharacteristics çağrılarının clientId parametresinde aynı değeri sağlaması, begin çağrılarının ise bu etiketi ve inParams kümesinin bir parçası olarak aynı ilişkili verileri sağlaması gerekir. Doğru veriler sağlanmazsa işlev ErrorCode::INVALID_KEY_BLOB 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 bir blob'dur.

Etiket::ASSOCIATED_DATA

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

Tekrarlanabilir mi? Hayır

AES-GCM şifreleme veya şifre çözme için "ilişkili verileri" sağlar. Bu etiket, güncelleme için sağlanır ve şifrelenmemiş/şifre çözme işlemi uygulanmamış ancak GCM etiketinin hesaplanmasında kullanılan verileri belirtir.

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

Etiket::ATTESTATION_APPLICATION_ID

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Anahtar tasdiki başlatmış olabilecek uygulama grubunu tanımlamak için kullanılır.

Değer, rastgele uzunlukta bir bayt dizisi olan bir 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 doğrulamayı desteklemiyorsa (veya destroyAttestationIds() daha önce çağrıldıysa ve cihaz artık kimliklerini doğrulayamıyorsa) bu etiketi içeren tüm anahtar doğrulama istekleri ErrorCode::CANNOT_ATTEST_IDS ile başarısız olur.

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

Etiket::ATTESTATION_ID_DEVICE

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Android'de Build.DEVICE tarafından döndürülen cihaz adını sağlar. Bu alan yalnızca için de geçerlidir.

Cihaz kimlik doğrulamayı desteklemiyorsa (veya destroyAttestationIds() daha önce çağrıldıysa ve cihaz artık kimliklerini doğrulayamıyorsa) bu etiketi içeren tüm anahtar doğrulama istekleri ErrorCode::CANNOT_ATTEST_IDS ile başarısız olur.

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 cihazın tanımlayıcılarının doğrulanması istendiğinde ayarlanır.

Cihaz, kimlik onayını desteklemiyorsa (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

Android'de Build.MANUFACTURER tarafından döndürülen cihazın üretici adını sağlar. Bu alan yalnızca cihazın tanımlayıcılarının doğrulanması istendiğinde ayarlanır.

Cihaz kimlik doğrulamayı desteklemiyorsa (veya destroyAttestationIds() daha önce çağrıldıysa ve cihaz artık kimliklerini doğrulayamıyorsa) bu etiketi içeren tüm anahtar doğrulama istekleri ErrorCode::CANNOT_ATTEST_IDS ile başarısız olur.

Değer, rastgele uzunlukta bir bayt dizisi olan bir 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 ayarlandı onay istenir.

Cihaz, kimlik onayını desteklemiyorsa (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ın tanımlayıcılarının doğrulanması istendiğinde ayarlanır.

Cihaz kimlik doğrulamayı desteklemiyorsa (veya destroyAttestationIds() daha önce çağrıldıysa ve cihaz artık kimliklerini doğrulayamıyorsa) bu etiketi içeren tüm anahtar doğrulama istekleri ErrorCode::CANNOT_ATTEST_IDS ile başarısız olur.

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

Etiket::ATTESTATION_ID_PRODUCT

Sürüm: 3, 4

Tekrarlanabilir mi? Hayır

Android'de Build.PRODUCT tarafından döndürülen cihazın ürün adını sağlar. Bu alan yalnızca cihaz tanımlayıcılarının onayını isteme.

Cihaz kimlik doğrulamayı desteklemiyorsa (veya destroyAttestationIds() daha önce çağrıldıysa ve cihaz artık kimliklerini doğrulayamıyorsa) bu etiketi içeren tüm anahtar doğrulama istekleri ErrorCode::CANNOT_ATTEST_IDS ile başarısız olur.

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ın tanımlayıcılarının doğrulanması istendiğinde ayarlanır.

Cihaz kimlik doğrulamayı desteklemiyorsa (veya destroyAttestationIds() daha önce çağrıldıysa ve cihaz artık kimliklerini doğrulayamıyorsa) bu etiketi içeren tüm anahtar doğrulama istekleri ErrorCode::CANNOT_ATTEST_IDS ile başarısız olur.

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

Tag::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. Tag::USER_SECURE_ID mevcutsa ve bu etiket yoksa anahtarın her kullanım için kimlik doğrulaması gerekir (işlem başına kimlik doğrulama akışının ayrıntıları için begin bölümüne bakın).

Değer, Tag::USER_SECURE_ID tarafından belirtilen kullanıcının Tag::USER_AUTH_TYPE tarafından belirtilen kimlik doğrulama yöntemiyle başarılı bir şekilde kimlik doğrulamasından sonra anahtarın kullanılabileceği saniye cinsinden süreyi belirten 32 bitlik bir tam sayıdır.

Etiket::AUTH_TOKEN

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

Tekrarlanabilir mi? Hayır

Kimlik doğrulama jetonu sağlar. Bu jeton, başlatma, güncelleme veya bitirme işlemlerinde kullanılır. Bu işlemler, kimlik doğrulamayı gerektiren bir anahtar işlemi için (anahtar Tag::USER_SECURE_ID değerine sahiptir) kullanıcı kimlik doğrulamasını kanıtlar.

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 anahtarın kullanılabilmesi için gerekli sistem ortamı koşullarını belirtir.

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

Keymaster 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ın belirtilen durumda kullanılmasını zorunlu kılmak için anahtar oluşturma sırasında belirtilebilir. generateKey ve getKeyCharacteristics'tan alınan anahtar özellikleriyle birlikte döndürülmelidir. 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; şifrelenmiş disklerde kullanılabilir. 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 şifre modlarını belirtir. Bu etiket yalnızca AES anahtarlarıyla ilgilidir.

Olası değerler aşağıdaki listeyle 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. AES anahtar işlemleri için begin işlevinin additionalParams bağımsız değişkeninde bir mod belirtin. Belirtilen mod, anahtarla ilişkili modlar arasında değilse işlem ErrorCode::INCOMPATIBLE_BLOCK_MODE ile başarısız olur.

Etiket::BOOT_PATCHLEVEL

Sürüm: 4

Etiket::BOOT_PATCHLEVEL, başlatma görüntüsü (çekirdek) güvenlik yaması düzeyini belirtir belirleneceğini konuşacağız. Bu etiket hiçbir zaman anahtar yöneticisi TA'ya gönderilmez ancak TA tarafından donanımla zorunlu kılınan yetkilendirme listesine eklenir. Mevcut sistemdeki yama düzeyinden farklı bir Tag::BOOT_PATCHLEVEL değerine sahip bir anahtar kullanma girişimi, begin(), getKeyCharacteristics() veya exportKey() işlevinin ErrorCode::KEY_REQUIRES_UPGRADE değerini döndürmesine neden olur. Ayrıntılar için upgradeKey() bölümüne bakın.

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.

Önyükleme yükleyici, her önyükleme sırasında güvenli ortama önyükleme resminin yama düzeyini sağlamalıdır (mekanizma uygulamaya göre tanımlanır).

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

Tag::BOOTLOADER_ONLY

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

Tekrarlanabilir mi? Hayır

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

Bu etiket boole olduğundan olası değerler true (doğru) (etiket varsa) ve false (yanlış) (etiket yoksa) şeklindedir.

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

Arayanın, tek seferlik sayı gerektiren işlemler için tek seferlik sayı sağlayabileceğini belirtir.

Bu etiket boole olduğundan olası değerler true (doğru) (etiket varsa) ve false (yanlış) (etiket yoksa) şeklindedir.

Bu etiket yalnızca AES anahtarları için kullanılır ve yalnızca CBC, CTR ve GCM blok modlarıyla ilgilidir. Etiket 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.

Tag::DIGEST

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

Tekrarlanabilir mi? Evet

İmzalama ve doğrulama işlemleri yapmak için anahtarla birlikte kullanılabilecek karma algoritmaları belirtir. Bu etiket RSA, ECDSA ve HMAC anahtarlarıyla ilgilidir.

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

Keymaster 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 yoksa işlem ErrorCode::INCOMPATIBLE_DIGEST hatasıyla başarısız olur.

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 belirtilen eğriyi kullanın. Keymaster 3 ve sonraki sürümlerde eğriler EcCurve içinde tanımlanır. 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, ortak modülün boyutunu belirtir. AES anahtarları için gizli anahtar materyalinin uzunluğunu belirtir.

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ı ve anahtarla ilişkili Tag::MIN_MAC_LENGTH değerinden en az büyüktür.

Etiket::MAX_USES_PER_BOOT

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

Tekrarlanabilir mi? Hayır

Bir anahtarın sistem yeniden başlatmaları arasında kullanılabileceği maksimum sayıyı belirtir. 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, önyükleme başına kullanım sayısını 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. Anahtar sayacı bu değeri aştıktan sonra, cihaz yeniden başlatılana kadar anahtarı kullanmaya yönelik tüm sonraki girişimler ErrorCode::MAX_OPS_EXCEEDED ile başarısız olur. 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 kullanın. Tabloda en az 16 anahtar bulunmalıdır. 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ı olmalıdır. Örneğin, HMAC anahtarları için değer en az 64'tür. GCM anahtarları için değer en az 96 ve en fazla 128 olmalıdır.

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, sınırsız kullanımın kaba kuvvet saldırılarını etkinleştirebileceği bağlamlarda anahtarların kullanımını hız sınırı ile sınırlamak için kullanılabilir.

Değer, izin verilen işlemler arasındaki saniyeleri temsil eden 32 bitlik bir tamsayıdır.

Bir işlemde bu etikete sahip bir anahtar kullanıldığında zamanlayıcı başlatın biti veya çağrısı iptal edin. Zamanlayıcı, Tag::MIN_SECONDS_BETWEEN_OPS tarafından belirtilen aralığın geçtiğini belirtmeden önce alınan tüm begin çağrıları ErrorCode::KEY_RATE_LIMIT_EXCEEDED ile başarısız olur. 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 tablonun sabit bir maksimum boyutu olabilir ve Keymaster, tablo doluyken bu etiketle anahtarları kullanmaya çalışan işlemleri başarısız kılabilir. Tablonun en az 32 kullanımdaki anahtarı barındırması ve anahtar minimum kullanım aralıkları sona erdiğinde tablo yuvalarını agresif bir şekilde yeniden kullanması gerekir. Tablo dolu olduğu için bir işlem başarısız olursa Keymaster ErrorCode::TOO_MANY_OPERATIONS döndürür.

Tag::NO_AUTH_REQUIRED

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

Tekrarlanabilir mi? Hayır

Bu anahtarı kullanmak için kimlik doğrulamanın gerekli olmadığını belirtir. Bu etiket, Tag::USER_SECURE_ID ile birlikte kullanılamaz.

Bu etiket boole olduğundan olası değerler true (doğru) (etiket varsa) ve false (yanlış) (etiket yoksa) şeklindedir.

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 veya ya da TO şifrelemesi veya şifre çözme. Bu etiket, şifreleme ve şifre çözme işlemleri sırasında başlamak için sağlanır. Yalnızca anahtarda Tag::CALLER_NONCE varsa başlamak için sağlanır. Sağlanmazsa Keymaster tarafından rastgele bir nonce veya IV oluşturulur ve begin'den döndürülür.

Değer, rastgele uzunlukta bir bayt dizisi olan bir blob'dur. İzin verilen uzunluklar moda bağlıdır: GCM tek seferlik anahtarları 12 bayt uzunluğundadır; CBC ve CTR IV'leri 16 bayt uzunluğundadır.

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ım veya yazılım tarafından zorlanan özellikler listesinde bulunur.

GENERATED, anahtarı Keymaster'ın oluşturduğunu gösterir. Donanımla zorunlu kılınan listedeyse anahtar güvenli 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ı olasıdır.

IMPORTED, anahtarın ve içe aktarılmalıdır. Keymaster. Donanımla zorunlu kılınanlar listesindeyse kalıcı olarak donanıma bağlıdır ancak güvenli donanımın dışında kopyaları olabilir. Yazılım tarafından zorunlu kılınan listedeyse anahtar SoftKeymaster'a içe aktarılmış ve donanıma bağlı değildir.

UNKNOWN yalnızca donanımla zorunlu kılınan listede görünmelidir. Anahtarın donanıma bağlı olduğunu gösterir ancak anahtarın orijinal olarak güvenli donanımda oluşturulup oluşturulmadığı veya içe aktarılıp aktarılmadığı bilinmez. Bu durum yalnızca keymaster0 donanımı, keymaster1 hizmetlerini taklit etmek için kullanıldığında ortaya çıkar.

Etiket::originATION_EXPIRE_DATETIME

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

Tekrarlanabilir mi? Hayır

Anahtarın imzalama ve nedeniyle de kullanılamaz. Bu sürenin ardından, başlamak için sağlanan KeyPurpose::SIGN veya KeyPurpose::ENCRYPT ile bir anahtar kullanma girişimi ErrorCode::KEY_EXPIRED ile başarısız olur.

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 anahtar yöneticisi TA'ya gönderilmez ancak TA tarafından donanımla zorunlu kılınan yetkilendirme listesine eklenir.

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 ve en son Aralık 2015'te güncellenen bir anahtar için değer 201512 olur.

Mevcut yama düzeyinden farklı bir yama düzeyine sahip anahtarlar yardımcı olur. Bu tür bir anahtarı kullanmaya çalışmak, begin, getKeyCharacteristics veya exportKey işlevinin ErrorCode::KEY_REQUIRES_UPGRADE değerini döndürmesine neden olur. Daha fazla bilgi için Sürüm Bağlama bölümüne bakın.

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. Burada MM ana sürüm numarasını, mm ara sürüm numarasını ve ss alt ara sürüm numarasını temsil eder. Örneğin, Android 4.0.3 sürümünde oluşturulan bir anahtar için değer 040003 olur.

Etiket::PADDING

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

Tekrarlanabilir mi? Evet

Anahtarla kullanılabilecek dolgu modlarını belirtir. Bu etiket RSA ve AES anahtarlarıyla ilgilidir.

Olası değerler aşağıdaki listeyle 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 yalnızca RSA şifreleme/şifre çözme anahtarları için kullanılır ve sırasıyla RSA PKCS#1 v2 OAEP dolgu ve RSA PKCS#1 v1.5 rastgele dolgu belirtir. PaddingMode::RSA_PSS ve PaddingMode::RSA_PKCS1_1_5_SIGN yalnızca RSA imzalama/doğrulama anahtarları için kullanılır ve sırasıyla RSA PKCS#1 v2 PSS dolgu ve RSA PKCS#1 v1.5 deterministik dolguyu belirtir.

PaddingMode::NONE, RSA veya RSA ile kullanılabilir 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.

Tag::PURPOSE

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

Tekrarlanabilir mi? Evet

Anahtarın kullanılabileceği amaç grubunu belirtir.

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

Keymaster 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. Bir işlemin tek bir amacı olsa da anahtarlar birden fazla değerle oluşturulabilir. 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

Son benzersiz kimlik rotasyonundan bu yana cihazın fabrika ayarlarına sıfırlanıp sıfırlanmadığını belirtir. Anahtar tasdiki 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).

Tag::ROLLBACK_RESISTANT

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

Tekrarlanabilir mi? Hayır

Anahtarın geri alma işlemine karşı dayanıklı olduğunu gösterir. Yani deleteKey veya deleteAllKeys tarafından silindiğinde anahtarın kalıcı olarak silineceği ve kullanılamayacağı garanti edilir. Bu etikete sahip olmayan anahtarlar silinip yedekten geri yüklenebilir.

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 anahtar olan güven kökünü belirtir: işletim sisteminin başlatıldığını (varsa) doğrulayın. Bu etiket, anahtar özelliklerinde Keymaster'a hiçbir zaman sağlanmaz veya Keymaster'dan döndürülmez.

Etiket::RSA_PUBLIC_EXPONENT

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

Tekrarlanabilir mi? Hayır

Bir RSA anahtar çifti için ortak üssün değerini belirtir. Bu etiket yalnızca RSA anahtarlarıyla ilgilidir 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. Trustlet'ler 2^16+1 değerini destekler ve özellikle 3 değerini olmak üzere diğer makul değerleri 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 bir 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 sürenin ardından, başlatma için sağlanan KeyPurpose::VERIFY veya KeyPurpose::DECRYPT ile bir anahtar kullanma girişimi ErrorCode::KEY_EXPIRED ile başarısız olur.

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

Bu anahtarı yetkilendirmek için kullanılabilecek kullanıcı kimlik doğrulayıcı türlerini belirtir. 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, listedeki değerlerin 32 bitlik tam sayı bit maskesidir:

Keymaster 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? Evet

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

Değer, kimlik doğrulama anahtarının kullanımına yetki vermek için kimlik doğrulama politikası durum değerini belirten 64 bitlik bir tam sayıdır (Tag::AUTH_TOKEN ile başlamalıdır). Bu etikete sahip bir anahtarla begin çağrısı, kimlik doğrulama jetonu sağlamayan veya eşleşen bir politika durumu değeri olmadan kimlik doğrulama jetonu sağlayan çağrılar başarısız olur.

Bu etiket tekrarlanabilir. Sağlanan değerlerden herhangi biri kimlik doğrulama jetonundaki bir politika durumu değeriyle eşleşirse anahtar kullanıma yetkilidir. Aksi takdirde işlem ErrorCode::KEY_USER_NOT_AUTHENTICATED hatasıyla başarısız olur.

Etiket::VENDOR_PATCHLEVEL

Sürüm: 4

Bu etiket, anahtarın Google tarafından sağlandığı tedarikçi firma görüntüsü güvenlik yaması düzeyini birlikte kullanılır. 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. Ayrıntılar için upgradeKey() sayfasına bakın.

Etiketin değeri, YYYYAAGG biçiminde bir tam sayıdır. Burada YYYY, son güncellemenin dört basamaklı yılıdır, AA iki basamaklı aydır ve GG, son güncellemenin iki basamaklı günüdür. Örneğin, son güncellemesi 5 Haziran 2018 olan bir Android cihazda oluşturulan anahtar için değer 20180605 olur.

IKeymasterDevice HAL, mevcut tedarikçi yama düzeyini ro.vendor.build.security_patch sistem mülkünden okumalı ve HAL ilk yüklendiğinde güvenli ortama iletmelidir (mekanizma uygulama tarafından tanımlanır). Güvenli ortam, bir sonraki önyükleme işlemine kadar başka bir düzeltme düzeyini kabul etmemelidir.

Donanım tarafından zorunlu kılınmalıdır.