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 3enum class Algorithm : uint32_t { RSA = 1, EC = 3, AES = 32, HMAC = 128, };Keymaster 2 ve öncesi
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
cihaz tanımlayıcılarını kullanır.
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ülen cihazın 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ı 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_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ı 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_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ı 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_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ı 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::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 3enum class KeyBlobUsageRequirements : uint32_t { STANDALONE = 0, REQUIRES_FILE_SYSTEM = 1, };Keymaster 2 ve öncesi
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 3enum class BlockMode : uint32_t { ECB = 1, CBC = 2, CTR = 3, GCM = 32, };Keymaster 2 ve öncesi
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 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, };Keymaster 2 ve öncesi
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 3enum class EcCurve : uint32_t { P_224 = 0, P_256 = 1, P_384 = 2, P_521 = 3, };Keymaster 2 ve öncesi
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 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, };. Keymaster 2 ve öncesi
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 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, };Keymaster 2 ve öncesi
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 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 };Keymaster 2 ve öncesi
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 3enum class HardwareAuthenticatorType : uint32_t { NONE = 0u, // 0 PASSWORD = 1 << 0, FINGERPRINT = 1 << 1, ANY = UINT32_MAX, };Keymaster 2 ve öncesi
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ı 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.