Anahtar ve Kimlik Onayı

Anahtar deposu; şifreleme oluşturmak, depolamak ve kullanmak için daha güvenli bir yer sağlar kontrollü bir şekilde kullanılmasını sağlar. Donanım destekli anahtar depolama alanı mevcut olduğunda ve anahtar materyali, cihazdan çıkarılmaya karşı daha güvenlidir. Keymaster, yıkılması zor kısıtlamalar uygular.

Bununla birlikte, bu durum yalnızca anahtar deposu anahtarlarının donanım destekli depolama. Keymaster 1'de uygulamaların veya güvenilir bir şekilde doğrulamak için uzak sunuculara gönderin. Anahtar deposu arka plan programı mevcut anahtar denetleyicisi HAL'yi yüklediğinden ve HAL'nin konusunda yardımcı olabilir.

Bu sorunu düzeltmek için Keymaster, Android 7.0 (Keymaster 2) ve kimlikte anahtar onayını kullanıma sundu. onaylandığı anlamına gelir.

Anahtar onayı, başarılı bir şekilde asimetrik anahtar çiftinin donanım destekli olup olmadığını, ve kullanımına hangi kısıtlamaların uygulandığını öğrendik.

Kimlik onayı, cihazın donanım tanımlayıcılarına dair kanıt sağlamasına olanak tanır. (ör. seri numarası veya IMEI numarası)

Anahtar onayı

Anahtar onayını desteklemek için Android 7.0, Android 7.0'da yöntemini HAL'ye iletir.

Etiketler

  • Tag::ATTESTATION_CHALLENGE
  • Tag::INCLUDE_UNIQUE_ID
  • Tag::RESET_SINCE_ID_ROTATION

Tür

Keymaster 2 ve altı

typedef struct {
    keymaster_blob_t* entries;
    size_t entry_count;
} keymaster_cert_chain_t;

AttestKey yöntem

Anahtar Yöneticisi 3

    attestKey(vec<uint8_t> keyToAttest, vec<KeyParameter> attestParams)
        generates(ErrorCode error, vec<vec<uint8_t>> certChain);

Keymaster 2 ve altı

keymaster_error_t (*attest_key)(const struct keymaster2_device* dev,
        const keymaster_key_blob_t* key_to_attest,
        const keymaster_key_param_set_t* attest_params,
        keymaster_cert_chain_t* cert_chain);
  • dev, keymaster cihaz yapısıdır.
  • keyToAttest, şuradan döndürülen anahtar blob'u: Onayın oluşturulacağı generateKey.
  • attestParams, aşağıdakileri yapmak için gereken parametreleri içeren bir listedir: tasdik. Buna Tag::ATTESTATION_CHALLENGE ve Tag::RESET_SINCE_ID_ROTATION olabilir, ayrıca Tag::APPLICATION_ID ve Tag::APPLICATION_DATA. İlgili içeriği oluşturmak için kullanılan diğer ikisi, daha önce belirtilmişse anahtar blobunun şifresini çözmek için yardımcı olur.
  • certChain, bir dizi döndüren çıkış parametresidir ekleyebilirsiniz. Giriş 0, onay sertifikasıdır, yani anahtarı keyToAttest kaynağından onaylar ve onay uzantısı.

attestKey yöntemi, her zaman çağrılabileceği için ve teknik koşullardaki yetkilendirme kısıtlamaları Örneğin, onaylanmış anahtarda kullanıcı erişimi gerekiyorsa ve kullanıcı izni olmadan bir onay üretilebilir. kimlik doğrulama.

Onay sertifikası

Onay sertifikası standart bir X.509 sertifikasıdır ve isteğe bağlı onaylanan anahtarın açıklamasını içeren onay uzantısıdır. İlgili içeriği oluşturmak için kullanılan Sertifika, sertifikalı bir onay anahtarıyla imzalanır. Onay anahtarı test edilen anahtardan farklı bir algoritma kullanabilir.

Onay sertifikası aşağıdaki tabloda bulunan alanları içerdiği için dahil edin. Bazı alanlarda sabit bir alan değeri belirtilir. CTS testleri, sertifika içeriğinin tam olarak tanımlandığı gibi olduğunu doğrular.

Sertifika SEQUENCE

Alan adı (bkz. RFC 5280) girin. Değer
tbsCertificate TBSSertifika SEQUENCE
imzalamaAlgoritması
anahtarını imzalamak için kullanılan algoritmanın algoritma tanımlayıcısı EC anahtarları için ECDSA, RSA anahtarları için RSA.
signatureValue BIT STRING, ASN.1 DER kodlamalı tbsCertificate üzerinde hesaplanan imza.

TBSSertifika SEQUENCE

Alan adı (bkz. RFC 5280) girin. Değer
version 2. TAM SAYI (v3 sertifikası anlamına gelir)
serialNumber TAM SAYI 1 (sabit değer: tüm sertifikalarda aynı)
signature EC anahtarları için ECDSA anahtarı imzalamak amacıyla kullanılan algoritmanın algoritma tanımlayıcısı, RSA anahtarları için RSA.
issuer Toplu onay anahtarının konu alanıyla aynıdır.
validity Şu değerleri içeren iki tarihin SEQUENCE değeri: Etiket::ACTIVE_DATETIME ve Etiket::USAGE_EXPIRE_DATETIME. Bu değerler, 1 Ocak 1970 tarihinden itibaren milisaniye cinsindendir. Doğru bilgi için RFC 5280'e bakın göstermelerine yardımcı olur.
. Tag::ACTIVE_DATETIME yoksa değerini kullanın Tag::CREATION_DATETIME. Eğer Tag::USAGE_EXPIRE_DATETIME mevcut değil, son kullanma tarihini kullanın toplu onay anahtarı sertifikasının tarihi.
subject CN = "Android Anahtar Deposu Anahtarı" (sabit değer: tüm sertifikalarda aynı)
subjectPublicKeyInfo Onaylı ortak anahtarı içeren SubjectPublicKeyInfo.
extensions/Key Usage dijital imza: anahtarın amacı varsa ayarlayın KeyPurpose::SIGN veya KeyPurpose::VERIFY. Diğer tüm bit değerleri kaldırıldı.
extensions/CRL Distribution Points Değer HBD
extensions/"attestation" OID: 1.3.6.1.4.1.11129.2.1.17; içerik Onay Uzantısı bölümünü aşağıda görebilirsiniz. Her şeyde olduğu gibi X.509 sertifika uzantıları, içerik bir OCTET_STRING onay SEQUENCE onay sürecinin DER kodlamasını içerir.

Onay uzantısı

attestation uzantısı, keymaster'ın tam açıklamasını içerir yetkilendirmelere sahip olup anahtarla doğrudan ilişkili bir yapıda ve keymaster HAL'de kullanılan yetkilendirme listelerine eklenir. Her bir etiketin Yetkilendirme listesi ASN.1 ile temsil edilir. SEQUENCE giriş, açıkça keymaster etiket numarasıyla etiketlenmiş, ancak tür tanımlayıcısıyla (dört yüksek hariç tutularak) maskelenir.

Örneğin, Keymaster 3'te Tag::PURPOSE, type.hal değerini, ENUM_REP | 1 olarak belirleyin. Onay uzantısında ENUM_REP değeri kaldırılarak 1 etiketinden çıkılır. (Keymaster 2 ve önceki sürümler için KM_TAG_PURPOSE, keymaster_defs.h.)

Değerler, aşağıdaki tabloya göre ASN.1 türlerine doğrudan dönüştürülür:

Anahtar ana yöneticisi türü ASN.1 türü
ENUM TAM SAYI
ENUM_REP SET INTEGER
UINT TAM SAYI
UINT_REP SET INTEGER
ULONG TAM SAYI
ULONG_REP SET INTEGER
DATE INTEGER (1 Ocak 1970 00:00:00 GMT'den bu yana geçen milisaniye)
BOOL NULL (anahtar denetleyicisinde etiket mevcut olduğunda doğru, mevcut olmadığında yanlış anlamına gelir.
. ASN.1 kodlaması için de aynı anlamlar geçerlidir.)
BIGNUM Şu anda kullanılmadığı için herhangi bir eşleme tanımlanmadı
BYTES İKİNCİ_DİZE

Şema

Onay uzantısı içeriği, aşağıdaki ASN.1 şemasında açıklanmıştır.

KeyDescription ::= SEQUENCE {
  attestationVersion         INTEGER, # KM2 value is 1. KM3 value is 2. KM4 value is 3.
  attestationSecurityLevel   SecurityLevel,
  keymasterVersion           INTEGER,
  keymasterSecurityLevel     SecurityLevel,
  attestationChallenge       OCTET_STRING,
  uniqueId                   OCTET_STRING,
  softwareEnforced           AuthorizationList,
  teeEnforced                AuthorizationList,
}

SecurityLevel ::= ENUMERATED {
  Software                   (0),
  TrustedEnvironment         (1),
  StrongBox                  (2),
}

AuthorizationList ::= SEQUENCE {
  purpose                     [1] EXPLICIT SET OF INTEGER OPTIONAL,
  algorithm                   [2] EXPLICIT INTEGER OPTIONAL,
  keySize                     [3] EXPLICIT INTEGER OPTIONAL.
  digest                      [5] EXPLICIT SET OF INTEGER OPTIONAL,
  padding                     [6] EXPLICIT SET OF INTEGER OPTIONAL,
  ecCurve                     [10] EXPLICIT INTEGER OPTIONAL,
  rsaPublicExponent           [200] EXPLICIT INTEGER OPTIONAL,
  rollbackResistance          [303] EXPLICIT NULL OPTIONAL, # KM4
  activeDateTime              [400] EXPLICIT INTEGER OPTIONAL
  originationExpireDateTime   [401] EXPLICIT INTEGER OPTIONAL
  usageExpireDateTime         [402] EXPLICIT INTEGER OPTIONAL
  noAuthRequired              [503] EXPLICIT NULL OPTIONAL,
  userAuthType                [504] EXPLICIT INTEGER OPTIONAL,
  authTimeout                 [505] EXPLICIT INTEGER OPTIONAL,
  allowWhileOnBody            [506] EXPLICIT NULL OPTIONAL,
  trustedUserPresenceRequired [507] EXPLICIT NULL OPTIONAL, # KM4
  trustedConfirmationRequired [508] EXPLICIT NULL OPTIONAL, # KM4
  unlockedDeviceRequired      [509] EXPLICIT NULL OPTIONAL, # KM4
  allApplications             [600] EXPLICIT NULL OPTIONAL,
  creationDateTime            [701] EXPLICIT INTEGER OPTIONAL,
  origin                      [702] EXPLICIT INTEGER OPTIONAL,
  rollbackResistant           [703] EXPLICIT NULL OPTIONAL, # KM2 and KM3 only.
  rootOfTrust                 [704] EXPLICIT RootOfTrust OPTIONAL,
  osVersion                   [705] EXPLICIT INTEGER OPTIONAL,
  osPatchLevel                [706] EXPLICIT INTEGER OPTIONAL,
  attestationApplicationId    [709] EXPLICIT OCTET_STRING OPTIONAL, # KM3
  attestationIdBrand          [710] EXPLICIT OCTET_STRING OPTIONAL, # KM3
  attestationIdDevice         [711] EXPLICIT OCTET_STRING OPTIONAL, # KM3
  attestationIdProduct        [712] EXPLICIT OCTET_STRING OPTIONAL, # KM3
  attestationIdSerial         [713] EXPLICIT OCTET_STRING OPTIONAL, # KM3
  attestationIdImei           [714] EXPLICIT OCTET_STRING OPTIONAL, # KM3
  attestationIdMeid           [715] EXPLICIT OCTET_STRING OPTIONAL, # KM3
  attestationIdManufacturer   [716] EXPLICIT OCTET_STRING OPTIONAL, # KM3
  attestationIdModel          [717] EXPLICIT OCTET_STRING OPTIONAL, # KM3
  vendorPatchLevel            [718] EXPLICIT INTEGER OPTIONAL, # KM4
  bootPatchLevel              [719] EXPLICIT INTEGER OPTIONAL, # KM4
}

RootOfTrust ::= SEQUENCE {
  verifiedBootKey            OCTET_STRING,
  deviceLocked               BOOLEAN,
  verifiedBootState          VerifiedBootState,
  verifiedBootHash           OCTET_STRING, # KM4
}

VerifiedBootState ::= ENUMERATED {
  Verified                   (0),
  SelfSigned                 (1),
  Unverified                 (2),
  Failed                     (3),
}

KeyDescription alanları

keymasterVersion ve attestationChallenge alanlar tanımlandı konuma göre konumlandıracağı için, kodlanmış biçimdeki etiketler yalnızca alan türü. Diğer alanlar, şema.

Alan adı Tür Değer
attestationVersion TAM SAYI Onay şemasının sürümü: 1, 2 veya 3.
attestationSecurity Güvenlik Seviyesi Bu onayın güvenlik düzeyi. Yazılım edinmek mümkün onayları ile birlikte çalışır. Android sisteminin güvenliği ihlal edildi.
keymasterVersion TAM SAYI Keymaster cihazının sürümü: 0, 1, 2, 3 veya 4.
keymasterSecurity Güvenlik Seviyesi Keymaster uygulamasının güvenlik düzeyi.
attestationChallenge İKİNCİ_DİZE Onay isteğinde belirtilen Tag::ATTESTATION_CHALLENGE değeri.
uniqueId İKİNCİ_DİZE İsteğe bağlı benzersiz kimlik (anahtar varsa gösterilir) Tag::INCLUDE_UNIQUE_ID.
softwareEnforced Yetkilendirme Listesi İsteğe bağlı olarak, TEE tarafından zorunlu kılınmayan anahtar yöneticisi yetkilendirmeleri herhangi.
teeEnforced Yetkilendirme Listesi İsteğe bağlı; varsa TEE tarafından zorunlu kılınan Keymaster yetkilendirmeleri.

AuthorizationList alanları

AuthorizationList alanlarının tümü isteğe bağlıdır ve tanımlanmıştır keymaster etiket değerine göre, tür bitleri maskelenmiş şekilde. Açık etiketleme, alanların aynı zamanda bir için ASN.1 türünü kullanır.

Her alanın değerleriyle ilgili ayrıntılar için Keymaster 3 için types.hal ve Keymaster 2 ve önceki sürümler için keymaster_defs.h. Keymaster etiket adları KM_TAG atlanarak alan adlarına dönüştürüldü önekini kullanarak büyük/küçük harf düzenine bakalım. Böylece, Tag::KEY_SIZE haline geldi. keySize.

ziyaret edin.

RootOfTrust alanları

RootOfTrust alanları konumsal olarak tanımlanır.

Alan adı Tür Değer
verifiedBootKey İKİNCİ_DİZE Sistem görüntüsünü doğrulamak için kullanılan anahtarın güvenli bir karması. SHA-256 önerilir.
deviceLocked BOOLE Bootloader kilitliyse "True" (doğru) değerini alır; yani yalnızca imzalı resimler ve doğrulanmış başlatma kontrolünün yapıldığını görürsünüz.
verifiedBootState Doğrulanmış Başlatma Durumu Doğrulanmış başlatmanın durumu.
verifiedBootHash İKİNCİ_DİZE Doğrulanmış Başlatma ile korunan tüm verilerin özeti. Aşağıdaki cihazlarda Android Doğrulanmış Başlatma uygulaması, bu değer VBMeta struct veya Doğrulanmış Başlatma'nın özetini içerir meta veri yapısı. Bu değeri hesaplama hakkında daha fazla bilgi edinmek için VBMeta Digest

VerifiedBootState değerleri

verifiedBootState değerleri şu anlamlara sahiptir:

Değer Anlamı
Verified Bootloader'dan doğrulanmış bir güven zincirine doğru uzanan tam bir güven zincirini gösterir Bootloader, önyükleme bölümü ve doğrulanan tüm bölümler dahil her bölüm için geçerlidir.
. Bu durumda, verifiedBootKey değeri yerleştirilmiş sertifikası, yani ROM'da yerleşik olarak bulunan değiştirilemeyen sertifika anlamına gelir.
. Bu durum, doğrulanmış önyükleme akışı dokümanlarını inceleyin.
SelfSigned Önyükleme bölümünün yerleşik ve imza geçerli olduğundan emin olun. Bootloader bir uyarı görüntüler ve ve önyükleme işleminin devam etmesine izin vermeden önce ortak anahtarın parmak izini kaldırın.
. Bu durumda, verifiedBootKey değeri kendi kendine imzalayanın karmasıdır sertifikası.
. Bu durum, doğrulanmış önyükleme akışı dokümanlarını inceleyin.
Unverified Cihazın serbestçe değiştirilebileceğini belirtir. Cihaz bütünlüğü kullanıcının bant dışı olduğunu doğrulaması gerekir. Bootloader, kullanıcıya bir uyarı gösterir .
. Bu durumda verifiedBootKey değeri boş olur.
. Bu durum, doğrulanmış önyükleme akışı dokümanlarını inceleyin.
Failed Cihazın doğrulanamadığını gösterir. Onay sertifikası yok aslında bu değeri içerir. Çünkü bu durumda, bootloader duracaktır. İnsanların eksik olmadığından emin olun.
. Bu durum, doğrulanmış önyükleme akışı dokümanlarını inceleyin.

SecurityLevel değerleri

securityLevel değerleri şu anlamlara sahiptir:

Değer Anlamı
Software İlgili öğeyi (onay veya anahtarı) kullanılan bir uygulama olup bu sistemde olabilir.
TrustedEnvironment İlgili öğeyi (onay veya anahtarı) Güvenilir Yürütme Ortamı'nda (TEE) uygulandığından emin olun. Bu, belki de güvenlik ihlali yapılmışsa ancak TEE uzaktan kumandaya karşı son derece dirençlidir güvenlik ihlaline neden olan ve doğrudan donanım saldırısından
StrongBox İlgili öğeyi (onay veya anahtarı) özel bir donanım güvenlik modülünde uygulanır. Bu, belki de donanım güvenlik modülünün güvenliği ihlal edilmişse değiştirilir, ancak bu, Uzaktan uzlaşmaya karşı dirençli, doğrudan izlenecek uzlaşmaya karşı ise son derece dirençlidir donanım saldırısı.

Benzersiz kimlik

Benzersiz Kimlik, cihazı tanımlayan 128 bitlik bir değerdir ancak yalnızca bir süre söz konusu olabilir. Değer şu şekilde hesaplanır:

HMAC_SHA256(T || C || R, HBK)

Nerede:

  • T, Tag::CREATION_DATETIME değerini 2592000000 olarak güncelleyip kalan T her 30 günde bir değişir (2592000000 = 30 * 24 * 60 x 60 x 1.000).
  • C, Tag::APPLICATION_ID değeridir
  • Tag::RESET_SINCE_ID_ROTATION ise R 1'dir attest_key çağrısına attest_params parametresinde veya etiketi yoktur.
  • HBK, Güvenilir uygulamalar arasında bilinen benzersiz, donanıma bağlı bir gizli anahtardır Yürütme Ortamı ve hiçbir zaman bu ortam tarafından gösterilmez. Gizli anahtar en az 128 bit entropi ve cihaza özgü (olasılık 128 bit entropi göz önüne alındığında kabul edilebilir olan benzersizlik). HBK, HMAC veya AES_CMAC aracılığıyla çok kaynaklı anahtar materyalinden türetilir.

HMAC_SHA256 çıkışını 128 bit olarak kısaltın.

Onay anahtarları ve sertifikalar

Bir RSA, bir ECDSA ve ilgili sertifika zincirleri olmak üzere iki anahtar güvenli bir şekilde sağlaması gerekir.

Android 12'de Uzaktan Anahtar Temel Hazırlığı'nı kullanıma sunarken Android 13'te ise cihaz kullanmanız gerekir. uygulayacaksınız. Uzaktan Anahtar Temel Hazırlığı, sahadaki cihazlara ECDSA P256 onay sertifikaları. Bu sertifikalar sertifikalardan daha kısa ömürlü olabilir.

Birden fazla IMEI

Android 14'e eklenen birden fazla IMEI: Android Anahtar Onayı kaydı. OEM'ler, ikinci bir IMEI için KeyMint etiketi ekleyerek bu özelliği uygulayabilir. Cihazlarda birden fazla hücresel radyonun olması giderek daha yaygın hale geliyor ve OEM'ler artık iki IMEI'ye sahip cihazları destekleyebiliyor.

OEM'lerin, cihaz sahibi olmaları için cihazlarında ikincil bir IMEI olması gerekir emin olmak için KeyMint uygulamalarına aynı şekilde ilk IMEI'yi onayladığından emin olun.

Kimlik onayı

Android 8.0, Keymaster 3. Kimlik onayı, cihazın donanımına dair kanıt sağlamasına olanak tanır tanımlayıcıları (ör. seri numarası veya IMEI) İsteğe bağlı bir özellik olsa da Tüm Keymaster 3 uygulamalarının bunun için destek sağlaması önerilir. Çünkü cihazın kimliğini kanıtlamak, kullanıcıların verilerini koruyacak daha güvenli hale getirmek için (uzak tarafın adres sahteciliği yapan bir cihazla değil, doğru cihazla konuştuğundan emin olmak kimliği).

Kimlik onayı, cihazın donanım tanımlayıcılarının kopyalarını oluşturarak çalışır cihazdan önce yalnızca Güvenilir Yürütme Ortamı'nın (TEE) erişebildiği fabrikadan çıkar. Kullanıcı, cihazın bootloader'ının kilidini açabilir ve sistem yazılımı ve Android çerçeveleri tarafından bildirilen tanımlayıcılar. İlgili içeriği oluşturmak için kullanılan TEE'de bulunan tanımlayıcıların kopyaları bu şekilde değiştirilemez, yalnızca cihaz kimliği onayının yalnızca cihazın ve böylece adres sahteciliği girişimlerini engelleyebilir.

Kimlik onayı için mevcut anahtarın üzerine yapılan ana API yüzeyi Keymaster 2'de kullanıma sunulan onay mekanizması Bir keymaster tarafından tutulan bir anahtarın onay sertifikası varsa çağrıyı yapan kişi, cihazın donanım tanımlayıcılarının onaya dahil edildiğinden emin olun. otomatik olarak ekler. Anahtar TEE'de tutulursa sertifika ve bilinen bir güven kaynağına dönüştürmenizi sağlar. Bu tür bir sertifikanın alıcısı donanım da dahil olmak üzere sertifikanın ve içeriğinin TEE tarafından yazılmıştır. Donanım eklemeniz istendiğinde onay sertifikasında yer almaması halinde, TEE yalnızca ve fabrika katında doldurulduğu şekilde depolama alanında yer alan tanımlayıcılar.

Depolama özellikleri

Cihaz tanımlayıcılarının bulunduğu depolama alanı şu özelliklere sahip olmalıdır:

  • Cihazın orijinal tanımlayıcılarından türetilen değerler depolama alanını azaltmaya çalışın.
  • destroyAttestationIds() yöntemi kalıcı olarak kaldırabilir tanımlayıcıdan türetilmiş verilerin bu kopyasına erişebilirsiniz. Kalıcı imha, tamamen kaldırılır. Bu nedenle, ne fabrika ayarlarına ne de başka cihazda gerçekleştirilen prosedür geri yükleyebilir. Bu, özellikle Kullanıcının bootloader'ın kilidini açtığı ve Android tarafından döndürülen tanımlayıcıları değiştirerek çerçeveleri.
  • RMA tesisleri; Donanım tanımlayıcısından türetilmiş verilerin yeni kopyalarını oluşturmalıdır. Bu şekilde ekip RMA\'dan geçen cihaz tekrar kimlik onayını alabilir. İlgili içeriği oluşturmak için kullanılan RMA tesisleri tarafından kullanılan mekanizma, kullanıcıların geri bildirim verememesi için çağrılarını kendileri çağırır. Bu şekilde onların onaylarını alabilirler. sahte kimlikler gibi.
  • TEE'deki Keymaster güvenilir uygulamasından başka hiçbir kod depoda tutulan tanımlayıcıdan türetilmiş verilerdir.
  • Depolama alanında değişiklik yapılamaz: Depolama alanının içeriği TEE, bu içeriğin kopyalarını kullanılmış gibi davranırsa yok ve tüm kimlik onay girişimlerini reddediyor. Uygulandı depolama alanını açıklandığı şekilde imzalayın veya MAC adresi ile kaydedin inceleyin.
  • Depolama alanında orijinal tanımlayıcılar bulunmaz. Çünkü kimlik onayı bir meydan okuma içeriyorsa arayan, gerekir. TEE'nin yalnızca, bu verilerin kendi değerleri ile sahipti. değerleri, bu doğrulamayı sağlar.

İnşaat

Yukarıda listelenen özelliklere sahip bir uygulama oluşturmak için Aşağıdaki yapı S'deki kimlikten türetilmiş değerler: Şu dokümanların diğer kopyalarını saklamayın: cihaz sahibinin sistemde kayıtlı olduğu normal yerler hariç, rootlama ile değiştirilebilir:

S = D || HMAC(HBK, D)

burada:

  • D = HMAC(HBK, ID1) || HMAC(HBK, ID2) || ... || HMAC(HBK, IDn)
  • HMAC, uygun bir güvenli karmaya sahip HMAC yapısıdır (SHA-256 önerilir)
  • HBK, başka hiçbir amaçla kullanılmayan donanıma bağlı bir anahtardır
  • ID1...IDn, orijinal kimlik değerleridir; ilişkilendirmesi belirli bir dizin için belirli bir değer uygulamaya bağlıdır, farklı cihazlarda farklı sayıda tanımlayıcı olur
  • ||, birleştirmeyi temsil eder

HMAC çıkışlarının boyutu sabit olduğundan, üst bilgi veya başka bir yapıda bağımsız kimlik karmalarını veya D'nin HMAC'sini bulabilmek için gereklidir. Ayrıca onay gerçekleştirmek için sağlanan değerleri kontrol etmeye kadar, uygulamaların S'den D'yi çıkarıp HMAC(HBK, D) kodlayıcıyı hesaplayarak ve bunu değerini girin. Ayrıca, uygulamalar, tüm bağımsız kimlikler için sabit süreli karşılaştırmalar kullanmalıdır öğeleri ve S'nin doğrulanması. Karşılaştırma zamanı ne olursa olsun sabit olmalıdır: verilen kimliklerin sayısı ve testin herhangi bir bölümünün doğru eşleşmesi.

Donanım tanımlayıcıları

Kimlik onayı, aşağıdaki donanım tanımlayıcılarını destekler:

  1. Build.BRAND tarafından Android'de döndürüldüğü şekliyle marka adı
  2. Android'de Build.DEVICE tarafından döndürülen cihaz adı
  3. Build.PRODUCT tarafından Android'de iade edildiği şekliyle ürün adı
  4. Android'de Build.MANUFACTURER tarafından döndürülen üretici adı
  5. Android'de Build.MODEL tarafından döndürüldüğü şekliyle model adı
  6. Seri numarası
  7. Tüm radyoların IMEI'leri
  8. Tüm radyoların MEID'leri

Cihaz kimliği onayını desteklemek için cihaz bu tanımlayıcıları onaylar. Tümü Android çalıştıran cihazlarda ilk altı uygulama vardır ve bunun için çok zor olabiliyor. Cihazda entegre hücresel radyo varsa onayları ayrıca radyoların IMEI ve/veya MEID'lerinin onayını desteklemelidir.

Kimlik onayı, bir anahtar onayı gerçekleştirerek ve istekte onaylanacak cihaz tanımlayıcıları bulunur. Tanımlayıcılar şu şekilde etiketlenir:

  • ATTESTATION_ID_BRAND
  • ATTESTATION_ID_DEVICE
  • ATTESTATION_ID_PRODUCT
  • ATTESTATION_ID_MANUFACTURER
  • ATTESTATION_ID_MODEL
  • ATTESTATION_ID_SERIAL
  • ATTESTATION_ID_IMEI
  • ATTESTATION_ID_MEID

Onaylanacak tanımlayıcı, UTF-8 olarak kodlanmış bir bayt dizesidir. Bu biçim, sayısal tanımlayıcıları da içerir. Onaylanacak her tanımlayıcı UTF-8 olarak kodlanmış dize.

Cihaz, kimlik onayını (veya destroyAttestationIds() daha önce arandı ve cihaz şu işlemleri yapamaz: daha uzun doğrulamayı) gerektirir. bu etiketler ErrorCode::CANNOT_ATTEST_IDS ile başarısız oluyor.

Cihaz, kimlik onayını destekliyorsa ve yukarıdaki etiketlerden en az birinde anahtar onay isteğine dahil edilmişse TEE, tanımlayıcıyı doğrular. donanım tanımlayıcılarının kopyasıyla eşleştiğinden emin olun. Eğer eşleşmediği için onayın tamamı başarısız olursa ErrorCode::CANNOT_ATTEST_IDS Aynı etiketin birden fazla kez girildi. Bu, örneğin IMEI'leri onaylarken yararlı olabilir: Bir cihazda, birden fazla IMEI'ye sahip birden fazla radyo olabilir. Onay isteği her bir ATTESTATION_ID_IMEI ile sağlanan değer eşleşirse geçerlidir cihazın radyolarından biri olarak ilişkilendirilmiş. Aynı durum diğer tüm etiketler için de geçerlidir.

Onay başarılı olursa onaylanan kimlikler onay uzantısı (OID 1.3.6.1.4.1.11129.2.1.17) gönderilen onay sertifikasının yukarıdaki şemayı kullanarak. Keymaster 2'deki değişiklikler onay şeması, yorumlarla birlikte kalın harflerle gösterilmiştir.

Java API'sı

Bu bölüm yalnızca bilgilendirme amaçlıdır. Keymaster uygulayanlar için de uygulama veya kullanma konusunda yardımcı olabilir. Bu bilgiler, katılımcıların ve özelliğin uygulamalar tarafından nasıl kullanıldığı. Sistem bileşenleri bunu kullanabilir Bu nedenle, bu bölümün normatif kabul edilmemesi çok önemlidir.