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. BunaTag::ATTESTATION_CHALLENGE
veTag::RESET_SINCE_ID_ROTATION
olabilir, ayrıcaTag::APPLICATION_ID
veTag::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
.
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 kalanT
her 30 günde bir değişir (2592000000 = 30 * 24 * 60 x 60 x 1.000).C
,Tag::APPLICATION_ID
değeridirTag::RESET_SINCE_ID_ROTATION
iseR
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ırID1...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:
Build.BRAND
tarafından Android'de döndürüldüğü şekliyle marka adı- Android'de
Build.DEVICE
tarafından döndürülen cihaz adı Build.PRODUCT
tarafından Android'de iade edildiği şekliyle ürün adı- Android'de
Build.MANUFACTURER
tarafından döndürülen üretici adı - Android'de
Build.MODEL
tarafından döndürüldüğü şekliyle model adı - Seri numarası
- Tüm radyoların IMEI'leri
- 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.