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 3enum class Algorithm : uint32_t { RSA = 1, EC = 3, AES = 32, HMAC = 128, };
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 3enum class KeyBlobUsageRequirements : uint32_t { STANDALONE = 0, REQUIRES_FILE_SYSTEM = 1, };
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 3enum class BlockMode : uint32_t { ECB = 1, CBC = 2, CTR = 3, GCM = 32, };
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 3enum 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, };
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 3enum class EcCurve : uint32_t { P_224 = 0, P_256 = 1, P_384 = 2, P_521 = 3, };
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 3Olası 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, };
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 3enum 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, };
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 3enum class KeyPurpose : uint32_t { ENCRYPT = 0, DECRYPT = 1, SIGN = 2, VERIFY = 3, DERIVE_KEY = 4, // since 3.0 WRAP_KEY = 5, // since 3.0 };
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 3enum class HardwareAuthenticatorType : uint32_t { NONE = 0u, // 0 PASSWORD = 1 << 0, FINGERPRINT = 1 << 1, ANY = UINT32_MAX, };
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.