কীস্টোর একটি নিয়ন্ত্রিত উপায়ে ক্রিপ্টোগ্রাফিক কী তৈরি, সঞ্চয় এবং ব্যবহার করার জন্য আরও নিরাপদ স্থান প্রদান করে। যখন হার্ডওয়্যার-ব্যাকড কী স্টোরেজ পাওয়া যায় এবং ব্যবহার করা হয়, তখন মূল উপাদান ডিভাইস থেকে নিষ্কাশনের বিরুদ্ধে আরও সুরক্ষিত, এবং KeyMint (পূর্বে কীমাস্টার) বিধিনিষেধ প্রয়োগ করে যেগুলি বিকৃত করা কঠিন।
যাইহোক, এটি শুধুমাত্র তখনই সত্য যদি কীস্টোর কীগুলি হার্ডওয়্যার-ব্যাকড স্টোরেজে বলে জানা যায়। Keymaster 1-এ, অ্যাপস বা রিমোট সার্ভারের জন্য এই ঘটনাটি ছিল কিনা তা নির্ভরযোগ্যভাবে যাচাই করার কোনো উপায় ছিল না। কীস্টোর ডেমন উপলব্ধ কীমাস্টার হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) লোড করেছে এবং কীগুলির হার্ডওয়্যার ব্যাকিংয়ের ক্ষেত্রে HAL যা বলেছে তা বিশ্বাস করে।
এর প্রতিকারের জন্য, Android 7.0 (Keymaster 2) এ কী প্রত্যয়ন চালু করা হয়েছিল এবং Android 8.0 (Keymaster 3) এ আইডি প্রত্যয়ন চালু করা হয়েছিল।
কী প্রত্যয়নের লক্ষ্য হল একটি অপ্রতিসম কী জোড়া হার্ডওয়্যার-সমর্থিত কিনা, কীটির বৈশিষ্ট্যগুলি কী এবং এর ব্যবহারে কোন সীমাবদ্ধতাগুলি প্রয়োগ করা হয়েছে তা দৃঢ়ভাবে নির্ধারণ করার একটি উপায় প্রদান করা।
আইডি প্রত্যয়ন ডিভাইসটিকে তার হার্ডওয়্যার শনাক্তকারীর প্রমাণ প্রদান করতে দেয়, যেমন সিরিয়াল নম্বর বা IMEI।
মূল প্রত্যয়ন
মূল প্রত্যয়ন সমর্থন করার জন্য, Android 7.0 HAL-তে ট্যাগ, টাইপ এবং পদ্ধতির একটি সেট প্রবর্তন করেছে।
ট্যাগ
-
Tag::ATTESTATION_CHALLENGE -
Tag::INCLUDE_UNIQUE_ID -
Tag::RESET_SINCE_ID_ROTATION
টাইপ
কীমাস্টার 2 এবং নীচে
typedef struct {
keymaster_blob_t* entries;
size_t entry_count;
} keymaster_cert_chain_t;
AttestKey পদ্ধতি
কীমাস্টার 3
attestKey(vec<uint8_t> keyToAttest, vec<KeyParameter> attestParams)
generates(ErrorCode error, vec<vec<uint8_t>> certChain);কীমাস্টার 2 এবং নীচে
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হল কীমাস্টার ডিভাইস স্ট্রাকচার। -
keyToAttestহলgenerateKeyথেকে ফিরে আসা কী ব্লব যার জন্য প্রত্যয়ন তৈরি করা হয়েছে। -
attestParamsহল প্রত্যয়নের জন্য প্রয়োজনীয় যে কোনো পরামিতির একটি তালিকা। এর মধ্যে রয়েছেTag::ATTESTATION_CHALLENGEএবং সম্ভবতTag::RESET_SINCE_ID_ROTATION, সেইসাথেTag::APPLICATION_IDএবংTag::APPLICATION_DATA। পরবর্তী দুটি কী ব্লব ডিক্রিপ্ট করার জন্য প্রয়োজনীয় যদি সেগুলি কী তৈরির সময় নির্দিষ্ট করা হয়। -
certChainহল আউটপুট প্যারামিটার, যা শংসাপত্রের একটি অ্যারে প্রদান করে। এন্ট্রি 0 হল প্রত্যয়ন শংসাপত্র, যার অর্থ এটিkeyToAttestথেকে কীটি প্রত্যয়িত করে এবং এতে প্রত্যয়ন এক্সটেনশন রয়েছে।
attestKey পদ্ধতিটি সত্যায়িত কী-তে একটি সর্বজনীন কী অপারেশন হিসাবে বিবেচিত হয়, কারণ এটি যে কোনও সময় কল করা যেতে পারে এবং অনুমোদনের সীমাবদ্ধতা পূরণের প্রয়োজন নেই। উদাহরণস্বরূপ, যদি সত্যায়িত কীটির ব্যবহারের জন্য ব্যবহারকারীর প্রমাণীকরণের প্রয়োজন হয়, তবে ব্যবহারকারীর প্রমাণীকরণ ছাড়াই একটি প্রমাণীকরণ তৈরি করা যেতে পারে।
প্রত্যয়ন সনদ
প্রত্যয়ন শংসাপত্র হল একটি প্রমিত X.509 শংসাপত্র, একটি ঐচ্ছিক প্রত্যয়ন এক্সটেনশন সহ যা প্রত্যয়িত কীটির একটি বিবরণ ধারণ করে। শংসাপত্রটি একটি প্রত্যয়িত সত্যায়ন কী দিয়ে স্বাক্ষরিত। প্রত্যয়ন কী প্রত্যয়িত কী থেকে আলাদা অ্যালগরিদম ব্যবহার করতে পারে।
প্রত্যয়ন শংসাপত্রে নীচের সারণীতে ক্ষেত্র রয়েছে এবং এতে কোনো অতিরিক্ত ক্ষেত্র থাকতে পারে না। কিছু ক্ষেত্র একটি নির্দিষ্ট ক্ষেত্রের মান নির্দিষ্ট করে। CTS পরীক্ষাগুলি যাচাই করে যে শংসাপত্রের বিষয়বস্তু ঠিক যেমন সংজ্ঞায়িত করা হয়েছে।
সার্টিফিকেট ক্রম
| ক্ষেত্রের নাম ( RFC 5280 দেখুন) | মান |
|---|---|
| tbs সার্টিফিকেট | টিবিএসসি সার্টিফিকেট সিকোয়েন্স |
| স্বাক্ষর অ্যালগরিদম | অ্যালগরিদমের অ্যালগরিদম আইডেন্টিফায়ার কী সাইন ইন করতে ব্যবহৃত হয়: EC কীগুলির জন্য ECDSA, RSA কীগুলির জন্য RSA৷ |
| স্বাক্ষর মান | BIT STRING, ASN.1 DER-এনকোডেড tbs সার্টিফিকেটের স্বাক্ষর গণনা করা হয়েছে। |
টিবিএসসি সার্টিফিকেট সিকোয়েন্স
| ক্ষেত্রের নাম ( RFC 5280 দেখুন) | মান |
|---|---|
version | পূর্ণসংখ্যা 2 (মানে v3 শংসাপত্র) |
serialNumber | পূর্ণসংখ্যা 1 (নির্দিষ্ট মান: সমস্ত শংসাপত্রে একই) |
signature | অ্যালগরিদমের অ্যালগরিদম আইডেন্টিফায়ার কী সাইন ইন করতে ব্যবহৃত হয়: EC কীগুলির জন্য ECDSA, RSA কীগুলির জন্য RSA৷ |
issuer | ব্যাচের প্রত্যয়ন কী-এর বিষয় ক্ষেত্রের মতোই। |
validity | Tag::ACTIVE_DATETIME এবং Tag::USAGE_EXPIRE_DATETIME এর মান সমন্বিত দুটি তারিখের SEQUENCE। এই মানগুলি 1 জানুয়ারী, 1970 থেকে মিলিসেকেন্ডে রয়েছে৷ সার্টিফিকেটগুলিতে সঠিক তারিখ উপস্থাপনের জন্য RFC 5280 দেখুন৷যদি Tag::ACTIVE_DATETIME উপস্থিত না থাকে, Tag::CREATION_DATETIME এর মান ব্যবহার করুন। Tag::USAGE_EXPIRE_DATETIME উপস্থিত না থাকলে, ব্যাচের প্রত্যয়ন কী শংসাপত্রের মেয়াদ শেষ হওয়ার তারিখ ব্যবহার করুন। |
subject | CN = "অ্যান্ড্রয়েড কীস্টোর কী" (নির্দিষ্ট মান: সমস্ত শংসাপত্রে একই) |
subjectPublicKeyInfo | SubjectPublicKeyInfo সত্যায়িত সর্বজনীন কী ধারণকারী। |
extensions/Key Usage | digitalSignature: সেট করুন যদি কীটির উদ্দেশ্য থাকে KeyPurpose::SIGN বা KeyPurpose::VERIFY । অন্য সব বিট সেট করা নেই। |
extensions/CRL Distribution Points | মান TBD |
extensions/"attestation" | OID হল 1.3.6.1.4.1.11129.2.1.17; বিষয়বস্তু নীচের প্রত্যয়ন এক্সটেনশন বিভাগে সংজ্ঞায়িত করা হয়েছে. সমস্ত X.509 শংসাপত্রের এক্সটেনশনগুলির মতো, বিষয়বস্তুটি একটি OCTET_STRING হিসাবে উপস্থাপন করা হয়েছে যাতে প্রত্যয়ন SEQUENCE এর একটি DER এনকোডিং রয়েছে৷ |
প্রত্যয়ন এক্সটেনশন
attestation এক্সটেনশনে OID 1.3.6.1.4.1.11129.2.1.17 রয়েছে। এতে কী যুগলের সত্যায়িত হওয়া এবং কী প্রজন্মের সময় ডিভাইসের অবস্থা সম্পর্কে তথ্য রয়েছে।
AIDL ইন্টারফেস স্পেসিফিকেশনে সংজ্ঞায়িত Keymaster/KeyMint ট্যাগের ধরনগুলিকে নিম্নরূপ ASN.1 প্রকারে অনুবাদ করা হয়েছে:
| KeyMint বা Keymaster প্রকার | ASN.1 প্রকার | নোট |
|---|---|---|
ENUM | INTEGER | |
ENUM_REP | SET of INTEGER | |
UINT | INTEGER | |
UINT_REP | SET of INTEGER | |
ULONG | INTEGER | |
ULONG_REP | SET of INTEGER | |
DATE | INTEGER | 1 জানুয়ারী, 1970 00:00:00 GMT থেকে মিলিসেকেন্ড। |
BOOL | NULL | ট্যাগ উপস্থিতি মানে সত্য, অনুপস্থিতি মানে মিথ্যা। |
BIGNUM | কোন ট্যাগ এই ধরনের নেই, তাই কোন ম্যাপিং সংজ্ঞায়িত করা হয় না. | |
BYTES | OCTET_STRING |
স্কিমা
প্রত্যয়ন এক্সটেনশন বিষয়বস্তু নিম্নলিখিত ASN.1 স্কিমা দ্বারা বর্ণনা করা হয়েছে:
সংস্করণ 400
KeyDescription ::= SEQUENCE {
attestationVersion INTEGER, # Value 400
attestationSecurityLevel SecurityLevel,
keyMintVersion INTEGER, # Value 400
keyMintSecurityLevel SecurityLevel,
attestationChallenge OCTET_STRING,
uniqueId OCTET_STRING,
softwareEnforced AuthorizationList,
hardwareEnforced 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,
blockMode [4] EXPLICIT SET OF INTEGER OPTIONAL,
digest [5] EXPLICIT SET OF INTEGER OPTIONAL,
padding [6] EXPLICIT SET OF INTEGER OPTIONAL,
callerNonce [7] EXPLICIT NULL OPTIONAL,
minMacLength [8] EXPLICIT INTEGER OPTIONAL,
ecCurve [10] EXPLICIT INTEGER OPTIONAL,
rsaPublicExponent [200] EXPLICIT INTEGER OPTIONAL,
mgfDigest [203] EXPLICIT SET OF INTEGER OPTIONAL,
rollbackResistance [303] EXPLICIT NULL OPTIONAL,
earlyBootOnly [305] EXPLICIT NULL OPTIONAL,
activeDateTime [400] EXPLICIT INTEGER OPTIONAL,
originationExpireDateTime [401] EXPLICIT INTEGER OPTIONAL,
usageExpireDateTime [402] EXPLICIT INTEGER OPTIONAL,
usageCountLimit [405] EXPLICIT INTEGER OPTIONAL,
userSecureId [502] EXPLICIT INTEGER OPTIONAL,
noAuthRequired [503] EXPLICIT NULL OPTIONAL,
userAuthType [504] EXPLICIT INTEGER OPTIONAL,
authTimeout [505] EXPLICIT INTEGER OPTIONAL,
allowWhileOnBody [506] EXPLICIT NULL OPTIONAL,
trustedUserPresenceReq [507] EXPLICIT NULL OPTIONAL,
trustedConfirmationReq [508] EXPLICIT NULL OPTIONAL,
unlockedDeviceReq [509] EXPLICIT NULL OPTIONAL,
creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
origin [702] EXPLICIT INTEGER OPTIONAL,
rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
osVersion [705] EXPLICIT INTEGER OPTIONAL,
osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdBrand [710] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdDevice [711] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdProduct [712] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdSerial [713] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdImei [714] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdMeid [715] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdManufacturer [716] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdModel [717] EXPLICIT OCTET_STRING OPTIONAL,
vendorPatchLevel [718] EXPLICIT INTEGER OPTIONAL,
bootPatchLevel [719] EXPLICIT INTEGER OPTIONAL,
deviceUniqueAttestation [720] EXPLICIT NULL OPTIONAL,
attestationIdSecondImei [723] EXPLICIT OCTET_STRING OPTIONAL,
moduleHash [724] EXPLICIT OCTET_STRING OPTIONAL,
}
Modules ::= SET OF Module
Module ::= SEQUENCE {
packageName OCTET_STRING,
version INTEGER,
}
RootOfTrust ::= SEQUENCE {
verifiedBootKey OCTET_STRING,
deviceLocked BOOLEAN,
verifiedBootState VerifiedBootState,
verifiedBootHash OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
Verified (0),
SelfSigned (1),
Unverified (2),
Failed (3),
}
সংস্করণ 300
KeyDescription ::= SEQUENCE {
attestationVersion INTEGER, # Value 300
attestationSecurityLevel SecurityLevel,
keyMintVersion INTEGER, # Value 300
keymintSecurityLevel SecurityLevel,
attestationChallenge OCTET_STRING,
uniqueId OCTET_STRING,
softwareEnforced AuthorizationList,
hardwareEnforced 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,
blockMode [4] EXPLICIT SET OF INTEGER OPTIONAL,
digest [5] EXPLICIT SET OF INTEGER OPTIONAL,
padding [6] EXPLICIT SET OF INTEGER OPTIONAL,
callerNonce [7] EXPLICIT NULL OPTIONAL,
minMacLength [8] EXPLICIT INTEGER OPTIONAL,
ecCurve [10] EXPLICIT INTEGER OPTIONAL,
rsaPublicExponent [200] EXPLICIT INTEGER OPTIONAL,
mgfDigest [203] EXPLICIT SET OF INTEGER OPTIONAL,
rollbackResistance [303] EXPLICIT NULL OPTIONAL,
earlyBootOnly [305] EXPLICIT NULL OPTIONAL,
activeDateTime [400] EXPLICIT INTEGER OPTIONAL,
originationExpireDateTime [401] EXPLICIT INTEGER OPTIONAL,
usageExpireDateTime [402] EXPLICIT INTEGER OPTIONAL,
usageCountLimit [405] EXPLICIT INTEGER OPTIONAL,
userSecureId [502] EXPLICIT INTEGER OPTIONAL,
noAuthRequired [503] EXPLICIT NULL OPTIONAL,
userAuthType [504] EXPLICIT INTEGER OPTIONAL,
authTimeout [505] EXPLICIT INTEGER OPTIONAL,
allowWhileOnBody [506] EXPLICIT NULL OPTIONAL,
trustedUserPresenceReq [507] EXPLICIT NULL OPTIONAL,
trustedConfirmationReq [508] EXPLICIT NULL OPTIONAL,
unlockedDeviceReq [509] EXPLICIT NULL OPTIONAL,
creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
origin [702] EXPLICIT INTEGER OPTIONAL,
rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
osVersion [705] EXPLICIT INTEGER OPTIONAL,
osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdBrand [710] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdDevice [711] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdProduct [712] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdSerial [713] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdImei [714] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdMeid [715] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdManufacturer [716] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdModel [717] EXPLICIT OCTET_STRING OPTIONAL,
vendorPatchLevel [718] EXPLICIT INTEGER OPTIONAL,
bootPatchLevel [719] EXPLICIT INTEGER OPTIONAL,
deviceUniqueAttestation [720] EXPLICIT NULL OPTIONAL,
attestationIdSecondImei [723] EXPLICIT OCTET_STRING OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
verifiedBootKey OCTET_STRING,
deviceLocked BOOLEAN,
verifiedBootState VerifiedBootState,
verifiedBootHash OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
Verified (0),
SelfSigned (1),
Unverified (2),
Failed (3),
}
সংস্করণ 200
KeyDescription ::= SEQUENCE {
attestationVersion INTEGER, # Value 200
attestationSecurityLevel SecurityLevel,
keyMintVersion INTEGER, # Value 200
keymintSecurityLevel SecurityLevel,
attestationChallenge OCTET_STRING,
uniqueId OCTET_STRING,
softwareEnforced AuthorizationList,
hardwareEnforced 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,
mgfDigest [203] EXPLICIT SET OF INTEGER OPTIONAL,
rollbackResistance [303] EXPLICIT NULL OPTIONAL,
earlyBootOnly [305] EXPLICIT NULL OPTIONAL,
activeDateTime [400] EXPLICIT INTEGER OPTIONAL,
originationExpireDateTime [401] EXPLICIT INTEGER OPTIONAL,
usageExpireDateTime [402] EXPLICIT INTEGER OPTIONAL,
usageCountLimit [405] EXPLICIT INTEGER OPTIONAL,
noAuthRequired [503] EXPLICIT NULL OPTIONAL,
userAuthType [504] EXPLICIT INTEGER OPTIONAL,
authTimeout [505] EXPLICIT INTEGER OPTIONAL,
allowWhileOnBody [506] EXPLICIT NULL OPTIONAL,
trustedUserPresenceReq [507] EXPLICIT NULL OPTIONAL,
trustedConfirmationReq [508] EXPLICIT NULL OPTIONAL,
unlockedDeviceReq [509] EXPLICIT NULL OPTIONAL,
creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
origin [702] EXPLICIT INTEGER OPTIONAL,
rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
osVersion [705] EXPLICIT INTEGER OPTIONAL,
osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdBrand [710] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdDevice [711] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdProduct [712] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdSerial [713] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdImei [714] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdMeid [715] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdManufacturer [716] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdModel [717] EXPLICIT OCTET_STRING OPTIONAL,
vendorPatchLevel [718] EXPLICIT INTEGER OPTIONAL,
bootPatchLevel [719] EXPLICIT INTEGER OPTIONAL,
deviceUniqueAttestation [720] EXPLICIT NULL OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
verifiedBootKey OCTET_STRING,
deviceLocked BOOLEAN,
verifiedBootState VerifiedBootState,
verifiedBootHash OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
Verified (0),
SelfSigned (1),
Unverified (2),
Failed (3),
}
সংস্করণ 100
KeyDescription ::= SEQUENCE {
attestationVersion INTEGER, # Value 100
attestationSecurityLevel SecurityLevel,
keyMintVersion INTEGER, # Value 100
keymintSecurityLevel SecurityLevel,
attestationChallenge OCTET_STRING,
uniqueId OCTET_STRING,
softwareEnforced AuthorizationList,
hardwareEnforced 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,
mgfDigest [203] EXPLICIT SET OF INTEGER OPTIONAL,
rollbackResistance [303] EXPLICIT NULL OPTIONAL,
earlyBootOnly [305] EXPLICIT NULL OPTIONAL,
activeDateTime [400] EXPLICIT INTEGER OPTIONAL,
originationExpireDateTime [401] EXPLICIT INTEGER OPTIONAL,
usageExpireDateTime [402] EXPLICIT INTEGER OPTIONAL,
usageCountLimit [405] EXPLICIT INTEGER OPTIONAL,
noAuthRequired [503] EXPLICIT NULL OPTIONAL,
userAuthType [504] EXPLICIT INTEGER OPTIONAL,
authTimeout [505] EXPLICIT INTEGER OPTIONAL,
allowWhileOnBody [506] EXPLICIT NULL OPTIONAL,
trustedUserPresenceReq [507] EXPLICIT NULL OPTIONAL,
trustedConfirmationReq [508] EXPLICIT NULL OPTIONAL,
unlockedDeviceReq [509] EXPLICIT NULL OPTIONAL,
creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
origin [702] EXPLICIT INTEGER OPTIONAL,
rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
osVersion [705] EXPLICIT INTEGER OPTIONAL,
osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdBrand [710] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdDevice [711] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdProduct [712] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdSerial [713] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdImei [714] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdMeid [715] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdManufacturer [716] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdModel [717] EXPLICIT OCTET_STRING OPTIONAL,
vendorPatchLevel [718] EXPLICIT INTEGER OPTIONAL,
bootPatchLevel [719] EXPLICIT INTEGER OPTIONAL,
deviceUniqueAttestation [720] EXPLICIT NULL OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
verifiedBootKey OCTET_STRING,
deviceLocked BOOLEAN,
verifiedBootState VerifiedBootState,
verifiedBootHash OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
Verified (0),
SelfSigned (1),
Unverified (2),
Failed (3),
}
সংস্করণ 4
KeyDescription ::= SEQUENCE {
attestationVersion INTEGER, # Value 4
attestationSecurityLevel SecurityLevel,
keymasterVersion INTEGER, # Value 41
keymasterSecurityLevel SecurityLevel,
attestationChallenge OCTET_STRING,
uniqueId OCTET_STRING,
softwareEnforced AuthorizationList,
hardwareEnforced 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,
blockMode [4] EXPLICIT SET OF INTEGER OPTIONAL,
digest [5] EXPLICIT SET OF INTEGER OPTIONAL,
padding [6] EXPLICIT SET OF INTEGER OPTIONAL,
callerNonce [7] EXPLICIT NULL OPTIONAL,
minMacLength [8] EXPLICIT INTEGER OPTIONAL,
ecCurve [10] EXPLICIT INTEGER OPTIONAL,
rsaPublicExponent [200] EXPLICIT INTEGER OPTIONAL,
rollbackResistance [303] EXPLICIT NULL OPTIONAL,
activeDateTime [400] EXPLICIT INTEGER OPTIONAL,
originationExpireDateTime [401] EXPLICIT INTEGER OPTIONAL,
usageExpireDateTime [402] EXPLICIT INTEGER OPTIONAL,
userSecureId [502] EXPLICIT INTEGER OPTIONAL,
noAuthRequired [503] EXPLICIT NULL OPTIONAL,
userAuthType [504] EXPLICIT INTEGER OPTIONAL,
authTimeout [505] EXPLICIT INTEGER OPTIONAL,
allowWhileOnBody [506] EXPLICIT NULL OPTIONAL,
trustedUserPresenceReq [507] EXPLICIT NULL OPTIONAL,
trustedConfirmationReq [508] EXPLICIT NULL OPTIONAL,
unlockedDeviceReq [509] EXPLICIT NULL OPTIONAL,
creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
origin [702] EXPLICIT INTEGER OPTIONAL,
rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
osVersion [705] EXPLICIT INTEGER OPTIONAL,
osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdBrand [710] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdDevice [711] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdProduct [712] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdSerial [713] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdImei [714] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdMeid [715] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdManufacturer [716] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdModel [717] EXPLICIT OCTET_STRING OPTIONAL,
vendorPatchLevel [718] EXPLICIT INTEGER OPTIONAL,
bootPatchLevel [719] EXPLICIT INTEGER OPTIONAL,
deviceUniqueAttestation [720] EXPLICIT NULL OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
verifiedBootKey OCTET_STRING,
deviceLocked BOOLEAN,
verifiedBootState VerifiedBootState,
verifiedBootHash OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
Verified (0),
SelfSigned (1),
Unverified (2),
Failed (3),
}
সংস্করণ 3
KeyDescription ::= SEQUENCE {
attestationVersion INTEGER, # Value 3
attestationSecurityLevel SecurityLevel,
keymasterVersion INTEGER, # Value 4
keymasterSecurityLevel SecurityLevel,
attestationChallenge OCTET_STRING,
uniqueId OCTET_STRING,
softwareEnforced AuthorizationList,
hardwareEnforced 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,
blockMode [4] EXPLICIT SET OF INTEGER OPTIONAL,
digest [5] EXPLICIT SET OF INTEGER OPTIONAL,
padding [6] EXPLICIT SET OF INTEGER OPTIONAL,
callerNonce [7] EXPLICIT NULL OPTIONAL,
minMacLength [8] EXPLICIT INTEGER OPTIONAL,
ecCurve [10] EXPLICIT INTEGER OPTIONAL,
rsaPublicExponent [200] EXPLICIT INTEGER OPTIONAL,
rollbackResistance [303] EXPLICIT NULL OPTIONAL,
activeDateTime [400] EXPLICIT INTEGER OPTIONAL,
originationExpireDateTime [401] EXPLICIT INTEGER OPTIONAL,
usageExpireDateTime [402] EXPLICIT INTEGER OPTIONAL,
userSecureId [502] EXPLICIT INTEGER OPTIONAL,
noAuthRequired [503] EXPLICIT NULL OPTIONAL,
userAuthType [504] EXPLICIT INTEGER OPTIONAL,
authTimeout [505] EXPLICIT INTEGER OPTIONAL,
allowWhileOnBody [506] EXPLICIT NULL OPTIONAL,
trustedUserPresenceReq [507] EXPLICIT NULL OPTIONAL,
trustedConfirmationReq [508] EXPLICIT NULL OPTIONAL,
unlockedDeviceReq [509] EXPLICIT NULL OPTIONAL,
creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
origin [702] EXPLICIT INTEGER OPTIONAL,
rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
osVersion [705] EXPLICIT INTEGER OPTIONAL,
osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdBrand [710] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdDevice [711] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdProduct [712] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdSerial [713] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdImei [714] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdMeid [715] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdManufacturer [716] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdModel [717] EXPLICIT OCTET_STRING OPTIONAL,
vendorPatchLevel [718] EXPLICIT INTEGER OPTIONAL,
bootPatchLevel [719] EXPLICIT INTEGER OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
verifiedBootKey OCTET_STRING,
deviceLocked BOOLEAN,
verifiedBootState VerifiedBootState,
verifiedBootHash OCTET_STRING,
}
VerifiedBootState ::= ENUMERATED {
Verified (0),
SelfSigned (1),
Unverified (2),
Failed (3),
}
সংস্করণ 2
KeyDescription ::= SEQUENCE {
attestationVersion INTEGER, # Value 2
attestationSecurityLevel SecurityLevel,
keymasterVersion INTEGER, # Value 3
keymasterSecurityLevel SecurityLevel,
attestationChallenge OCTET_STRING,
uniqueId OCTET_STRING,
softwareEnforced AuthorizationList,
hardwareEnforced AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
Software (0),
TrustedEnvironment (1),
}
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,
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,
allApplications [600] EXPLICIT NULL OPTIONAL,
creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
origin [702] EXPLICIT INTEGER OPTIONAL,
rollbackResistant [703] EXPLICIT NULL OPTIONAL,
rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
osVersion [705] EXPLICIT INTEGER OPTIONAL,
osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdBrand [710] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdDevice [711] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdProduct [712] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdSerial [713] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdImei [714] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdMeid [715] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdManufacturer [716] EXPLICIT OCTET_STRING OPTIONAL,
attestationIdModel [717] EXPLICIT OCTET_STRING OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
verifiedBootKey OCTET_STRING,
deviceLocked BOOLEAN,
verifiedBootState VerifiedBootState,
}
VerifiedBootState ::= ENUMERATED {
Verified (0),
SelfSigned (1),
Unverified (2),
Failed (3),
}
সংস্করণ 1
KeyDescription ::= SEQUENCE {
attestationVersion INTEGER, # Value 1
attestationSecurityLevel SecurityLevel,
keymasterVersion INTEGER, # Value 2
keymasterSecurityLevel SecurityLevel,
attestationChallenge OCTET_STRING,
uniqueId OCTET_STRING,
softwareEnforced AuthorizationList,
hardwareEnforced AuthorizationList,
}
SecurityLevel ::= ENUMERATED {
Software (0),
TrustedEnvironment (1),
}
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,
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,
allApplications [600] EXPLICIT NULL OPTIONAL,
creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
origin [702] EXPLICIT INTEGER OPTIONAL,
rollbackResistant [703] EXPLICIT NULL OPTIONAL,
rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
osVersion [705] EXPLICIT INTEGER OPTIONAL,
osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
}
RootOfTrust ::= SEQUENCE {
verifiedBootKey OCTET_STRING,
deviceLocked BOOLEAN,
verifiedBootState VerifiedBootState,
}
VerifiedBootState ::= ENUMERATED {
Verified (0),
SelfSigned (1),
Unverified (2),
Failed (3),
}
কী বর্ণনা ক্ষেত্র
-
attestationVersion - ASN.1 স্কিমা সংস্করণ।
মান KeyMint বা Keymaster সংস্করণ 1 কীমাস্টার সংস্করণ 2.0 2 কীমাস্টার সংস্করণ 3.0 3 কীমাস্টার সংস্করণ 4.0 4 কীমাস্টার সংস্করণ 4.1 100 KeyMint সংস্করণ 1.0 200 কীমিন্ট সংস্করণ 2.0 300 KeyMint সংস্করণ 3.0 400 KeyMint সংস্করণ 4.0 -
attestationSecurityLevel অবস্থানের নিরাপত্তা স্তর যেখানে সত্যায়িত কী সংরক্ষণ করা হয়।
-
keymasterVersion/keyMintVersion - KeyMint বা Keymaster HAL বাস্তবায়নের সংস্করণ।
মান KeyMint বা Keymaster সংস্করণ 2 কীমাস্টার সংস্করণ 2.0 3 কীমাস্টার সংস্করণ 3.0 4 কীমাস্টার সংস্করণ 4.0 41 কীমাস্টার সংস্করণ 4.1 100 KeyMint সংস্করণ 1.0 200 KeyMint সংস্করণ 2.0 300 KeyMint সংস্করণ 3.0 400 KeyMint সংস্করণ 4.0 -
keymasterSecurityLevel/keyMintSecurityLevel - KeyMint বা Keymaster বাস্তবায়নের নিরাপত্তা স্তর ।
-
attestationChallenge - চ্যালেঞ্জ কি প্রজন্মের সময় প্রদান করা হয়.
-
uniqueId - একটি গোপনীয়তা-সংবেদনশীল ডিভাইস শনাক্তকারী যা সিস্টেম অ্যাপগুলি মূল প্রজন্মের সময়ে অনুরোধ করতে পারে। যদি অনন্য আইডি অনুরোধ না করা হয়, এই ক্ষেত্রটি খালি। বিস্তারিত জানার জন্য, অনন্য আইডি বিভাগটি দেখুন।
-
softwareEnforced - কীমিন্ট বা কীমাস্টার অনুমোদনের তালিকা যা Android সিস্টেম দ্বারা প্রয়োগ করা হয়। এই তথ্য প্ল্যাটফর্মে কোড দ্বারা সংগ্রহ বা উত্পন্ন হয়। যতক্ষণ পর্যন্ত ডিভাইসটি অ্যান্ড্রয়েড প্ল্যাটফর্ম সিকিউরিটি মডেল (অর্থাৎ, ডিভাইসের বুটলোডার লক করা আছে এবং
verifiedBootStateবুটস্টেটVerifiedহয়েছে) সাথে সঙ্গতিপূর্ণ একটি অপারেটিং সিস্টেম চালাচ্ছে ততক্ষণ পর্যন্ত এটি বিশ্বাস করা যেতে পারে। -
hardwareEnforced - KeyMint বা কীমাস্টার অনুমোদনের তালিকা যা ডিভাইসের বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট (TEE) বা StrongBox দ্বারা প্রয়োগ করা হয়। এই তথ্যটি সুরক্ষিত হার্ডওয়্যারের কোড দ্বারা সংগ্রহ করা বা তৈরি করা হয় এবং প্ল্যাটফর্ম দ্বারা নিয়ন্ত্রিত হয় না। উদাহরণস্বরূপ, তথ্য বুটলোডার থেকে বা একটি সুরক্ষিত যোগাযোগ চ্যানেলের মাধ্যমে আসতে পারে যা প্ল্যাটফর্মের উপর আস্থা রাখে না।
নিরাপত্তা স্তরের মান
SecurityLevel মান নির্দেশ করে যে কী-স্টোর-সম্পর্কিত উপাদান (উদাহরণস্বরূপ, কী জোড়া এবং প্রত্যয়ন) আক্রমণের জন্য কতটা স্থিতিস্থাপক।
| মান | অর্থ |
|---|---|
Software | যতক্ষণ পর্যন্ত ডিভাইসের অ্যান্ড্রয়েড সিস্টেম অ্যান্ড্রয়েড প্ল্যাটফর্ম সিকিউরিটি মডেল (অর্থাৎ, ডিভাইসের বুটলোডার লক করা আছে এবং verifiedBootState বুটস্টেট Verified হয়েছে) ততক্ষণ পর্যন্ত নিরাপদ। |
TrustedEnvironment | যতক্ষণ না TEE আপস না করা হয় ততক্ষণ নিরাপদ। TEE-এর জন্য বিচ্ছিন্নতার প্রয়োজনীয়তাগুলি Android সামঞ্জস্যপূর্ণ সংজ্ঞা নথির অধ্যায় 9.11 [C-1-1] থেকে [C-1-4]- এ সংজ্ঞায়িত করা হয়েছে। TEE গুলি দূরবর্তী সমঝোতার জন্য অত্যন্ত প্রতিরোধী এবং সরাসরি হার্ডওয়্যার আক্রমণ দ্বারা আপস করার জন্য মাঝারিভাবে প্রতিরোধী। |
StrongBox | যতক্ষণ না StrongBox আপস না করা হয় ততক্ষণ নিরাপদ। StrongBox একটি হার্ডওয়্যার নিরাপত্তা মডিউল অনুরূপ একটি নিরাপদ উপাদান প্রয়োগ করা হয়. StrongBox-এর জন্য বাস্তবায়নের প্রয়োজনীয়তাগুলি Android সামঞ্জস্যতা সংজ্ঞা নথির অধ্যায় 9.11.2- এ সংজ্ঞায়িত করা হয়েছে৷ স্ট্রংবক্স সরাসরি হার্ডওয়্যার আক্রমণ (উদাহরণস্বরূপ, শারীরিক টেম্পারিং এবং পার্শ্ব-চ্যানেল আক্রমণ) দ্বারা দূরবর্তী আপস এবং আপস করার জন্য অত্যন্ত প্রতিরোধী। |
অনুমোদন তালিকা ক্ষেত্র
প্রতিটি ক্ষেত্র AIDL ইন্টারফেস স্পেসিফিকেশন থেকে একটি Keymaster/KeyMint অনুমোদন ট্যাগের সাথে মিলে যায়। স্পেসিফিকেশন হল অনুমোদন ট্যাগ সম্পর্কে সত্যের উৎস: তাদের অর্থ, তাদের বিষয়বস্তুর বিন্যাস, KeyDescription অবজেক্টের softwareEnforced বা hardwareEnforced এনফোর্সড ক্ষেত্রগুলিতে সেগুলি উপস্থিত হওয়ার আশা করা হচ্ছে কিনা, সেগুলি অন্যান্য ট্যাগের সাথে পারস্পরিক একচেটিয়া কিনা, ইত্যাদি। সমস্ত AuthorizationList ক্ষেত্র ঐচ্ছিক।
প্রতিটি ক্ষেত্রে KeyMint বা Keymaster ট্যাগ নম্বরের সমান একটি EXPLICIT প্রসঙ্গ-নির্দিষ্ট ট্যাগ রয়েছে, যা AuthorizationList এ ডেটার আরও কমপ্যাক্ট উপস্থাপনা সক্ষম করে। তাই ASN.1 পার্সারকে অবশ্যই প্রতিটি প্রসঙ্গ-নির্দিষ্ট ট্যাগের জন্য প্রত্যাশিত ডেটা টাইপ জানতে হবে। উদাহরণস্বরূপ, Tag::USER_AUTH_TYPE ENUM | 504 হিসাবে সংজ্ঞায়িত করা হয়েছে ENUM | 504 । প্রত্যয়ন এক্সটেনশন স্কিমাতে, AuthorizationList purpose ক্ষেত্রটি userAuthType [504] EXPLICIT INTEGER OPTIONAL হিসাবে নির্দিষ্ট করা হয়েছে। তাই এর ASN.1 এনকোডিং ASN.1 টাইপের INTEGER এর জন্য UNIVERSAL ক্লাস ট্যাগের পরিবর্তে প্রসঙ্গ-নির্দিষ্ট ট্যাগ 504 ধারণ করবে, যা 10 ।
-
purpose -
Tag::PURPOSEঅনুমোদন ট্যাগের সাথে সঙ্গতিপূর্ণ, যা 1 এর ট্যাগ আইডি মান ব্যবহার করে। -
algorithm Tag::ALGORITHMঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 2 এর ট্যাগ আইডি মান ব্যবহার করে।একটি প্রমাণীকরণ
AuthorizationListঅবজেক্টে, অ্যালগরিদম মান সর্বদাRSAবাECহয়।-
keySize -
Tag::KEY_SIZEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 3 এর ট্যাগ আইডি মান ব্যবহার করে। -
blockMode -
Tag::BLOCK_MODEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 4 এর ট্যাগ আইডি মান ব্যবহার করে। -
digest -
Tag::DIGESTঅনুমোদন ট্যাগের সাথে মিলে যায়, যেটি ট্যাগ আইডি মান 5 ব্যবহার করে। -
padding -
Tag::PADDINGঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 6 এর ট্যাগ আইডি মান ব্যবহার করে। -
callerNonce -
Tag::CALLER_NONCEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 7 এর ট্যাগ আইডি মান ব্যবহার করে। -
minMacLength -
Tag::MIN_MAC_LENGTHঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 8 এর ট্যাগ আইডি মান ব্যবহার করে। -
ecCurve Tag::EC_CURVEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 10 এর ট্যাগ আইডি মান ব্যবহার করে।একটি উপবৃত্তাকার বক্ররেখা (EC) কী জোড়া তৈরি করতে ব্যবহৃত প্যারামিটারের সেট, যা সাইনিং এবং যাচাইকরণের জন্য ECDSA ব্যবহার করে, Android সিস্টেম কীস্টোরের মধ্যে।
-
rsaPublicExponent -
Tag::RSA_PUBLIC_EXPONENTঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 200 এর ট্যাগ আইডি মান ব্যবহার করে। -
mgfDigest শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 100-এ উপস্থাপন করুন।
Tag::RSA_OAEP_MGF_DIGESTKeyMint অনুমোদন ট্যাগের সাথে মিলে যায়, যা 203 এর ট্যাগ আইডি মান ব্যবহার করে।-
rollbackResistance শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 3 উপস্থাপন করুন।
Tag::ROLLBACK_RESISTANCEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 303 এর ট্যাগ আইডি মান ব্যবহার করে।-
earlyBootOnly শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 4 উপস্থাপন করুন।
Tag::EARLY_BOOT_ONLYঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 305 এর ট্যাগ আইডি মান ব্যবহার করে।-
activeDateTime -
Tag::ACTIVE_DATETIMEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 400 এর ট্যাগ আইডি মান ব্যবহার করে। -
originationExpireDateTime -
Tag::ORIGINATION_EXPIRE_DATETIMEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 401 এর ট্যাগ আইডি মান ব্যবহার করে। -
usageExpireDateTime -
Tag::USAGE_EXPIRE_DATETIMEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 402 এর ট্যাগ আইডি মান ব্যবহার করে। -
usageCountLimit -
Tag::USAGE_COUNT_LIMITঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 405 এর ট্যাগ আইডি মান ব্যবহার করে। -
userSecureId -
Tag::USER_SECURE_IDঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 502 এর ট্যাগ আইডি মান ব্যবহার করে। -
noAuthRequired Tag::NO_AUTH_REQUIREDঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 503 এর ট্যাগ আইডি মান ব্যবহার করে।-
userAuthType -
Tag::USER_AUTH_TYPEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 504 এর ট্যাগ আইডি মান ব্যবহার করে। -
authTimeout -
Tag::AUTH_TIMEOUTঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 505 এর ট্যাগ আইডি মান ব্যবহার করে। -
allowWhileOnBody Tag::ALLOW_WHILE_ON_BODYঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 506 এর ট্যাগ আইডি মান ব্যবহার করে।ব্যবহারকারী যদি এখনও তাদের শরীরে ডিভাইসটি পরে থাকেন তবে তার প্রমাণীকরণের সময়সীমার পরে কী ব্যবহার করার অনুমতি দেয়৷ মনে রাখবেন যে একটি সুরক্ষিত অন-বডি সেন্সর নির্ধারণ করে যে ডিভাইসটি ব্যবহারকারীর শরীরে পরা হচ্ছে কিনা।
-
trustedUserPresenceReq শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 3 উপস্থাপন করুন।
Tag::TRUSTED_USER_PRESENCE_REQUIREDঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 507 এর ট্যাগ আইডি মান ব্যবহার করে।নির্দিষ্ট করে যে এই কীটি শুধুমাত্র তখনই ব্যবহারযোগ্য হবে যদি ব্যবহারকারী শারীরিক উপস্থিতির প্রমাণ প্রদান করে থাকে। বেশ কয়েকটি উদাহরণ নিম্নলিখিত অন্তর্ভুক্ত:
- একটি স্ট্রংবক্স কী-এর জন্য, একটি হার্ডওয়্যার বোতাম স্ট্রংবক্স ডিভাইসের একটি পিনে হার্ডওয়ারযুক্ত।
- একটি TEE কী-এর জন্য, আঙুলের ছাপ প্রমাণীকরণ উপস্থিতির প্রমাণ প্রদান করে যতক্ষণ না TEE স্ক্যানারের একচেটিয়া নিয়ন্ত্রণ থাকে এবং ফিঙ্গারপ্রিন্ট ম্যাচিং প্রক্রিয়াটি সম্পাদন করে।
-
trustedConfirmationReq শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 3 উপস্থাপন করুন।
Tag::TRUSTED_CONFIRMATION_REQUIREDঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 508 এর ট্যাগ আইডি মান ব্যবহার করে।নির্দিষ্ট করে যে কীটি শুধুমাত্র তখনই ব্যবহারযোগ্য হবে যদি ব্যবহারকারী একটি অনুমোদন টোকেন ব্যবহার করে সাইন ইন করা ডেটার নিশ্চিতকরণ প্রদান করে। ব্যবহারকারীর নিশ্চিতকরণ কিভাবে পেতে হয় সে সম্পর্কে আরও তথ্যের জন্য, Android Protected Confirmation দেখুন।
দ্রষ্টব্য: এই ট্যাগটি শুধুমাত্র সেই কীগুলির জন্য প্রযোজ্য যা
SIGNউদ্দেশ্য ব্যবহার করে৷-
unlockedDeviceReq শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 3 উপস্থাপন করুন।
Tag::UNLOCKED_DEVICE_REQUIREDঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 509 এর ট্যাগ আইডি মান ব্যবহার করে।-
creationDateTime -
Tag::CREATION_DATETIMEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 701 এর ট্যাগ আইডি মান ব্যবহার করে। -
origin Tag::ORIGINঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 702 এর ট্যাগ আইডি মান ব্যবহার করে।-
rootOfTrust Tag::ROOT_OF_TRUSTঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 704 এর ট্যাগ আইডি মান ব্যবহার করে।আরো বিস্তারিত জানার জন্য, RootOfTrust ডেটা স্ট্রাকচার বর্ণনাকারী বিভাগটি দেখুন।
-
osVersion Tag::OS_VERSIONঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 705 এর ট্যাগ আইডি মান ব্যবহার করে।কীমাস্টারের সাথে যুক্ত অ্যান্ড্রয়েড অপারেটিং সিস্টেমের সংস্করণ, একটি ছয়-সংখ্যার পূর্ণসংখ্যা হিসাবে নির্দিষ্ট করা হয়েছে। উদাহরণস্বরূপ, সংস্করণ 8.1.0 080100 হিসাবে উপস্থাপন করা হয়েছে।
শুধুমাত্র কীমাস্টার সংস্করণ 1.0 বা উচ্চতর অনুমোদনের তালিকায় এই মানটি অন্তর্ভুক্ত করে।
-
osPatchLevel Tag::PATCHLEVELঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 706 এর ট্যাগ আইডি মান ব্যবহার করে।ছয়-সংখ্যার পূর্ণসংখ্যা হিসাবে নির্দিষ্ট করা কীমাস্টারের মধ্যে ব্যবহৃত নিরাপত্তা প্যাচের সাথে সম্পর্কিত মাস এবং বছর। উদাহরণস্বরূপ, আগস্ট 2018 প্যাচটি 201808 হিসাবে উপস্থাপন করা হয়েছে।
শুধুমাত্র কীমাস্টার সংস্করণ 1.0 বা উচ্চতর অনুমোদনের তালিকায় এই মানটি অন্তর্ভুক্ত করে।
-
attestationApplicationId শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 2।
Tag::ATTESTATION_APPLICATION_IDঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 709-এর ট্যাগ আইডি মান ব্যবহার করে।আরও বিশদ বিবরণের জন্য, AttestationApplicationId ডেটা কাঠামো বর্ণনাকারী বিভাগটি দেখুন।
-
attestationIdBrand শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 2।
Tag::ATTESTATION_ID_BRANDঅনুমোদন ট্যাগের সাথে মিলে যায়, যেটি ট্যাগ আইডি মান 710 ব্যবহার করে।-
attestationIdDevice শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 2।
Tag::ATTESTATION_ID_DEVICEঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 711 এর ট্যাগ আইডি মান ব্যবহার করে।-
attestationIdProduct শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 2।
Tag::ATTESTATION_ID_PRODUCTঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 712 এর ট্যাগ আইডি মান ব্যবহার করে।-
attestationIdSerial শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 2।
Tag::ATTESTATION_ID_SERIALঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 713 এর ট্যাগ আইডি মান ব্যবহার করে।-
attestationIdImei শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 2।
Tag::ATTESTATION_ID_IMEIঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 714 এর ট্যাগ আইডি মান ব্যবহার করে।-
attestationIdMeid শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 2।
Tag::ATTESTATION_ID_MEIDঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 715 এর ট্যাগ আইডি মান ব্যবহার করে।-
attestationIdManufacturer শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 2।
Tag::ATTESTATION_ID_MANUFACTURERঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 716 এর ট্যাগ আইডি মান ব্যবহার করে।-
attestationIdModel শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 2।
Tag::ATTESTATION_ID_MODELঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 717 এর ট্যাগ আইডি মান ব্যবহার করে।-
vendorPatchLevel শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 3।
Tag::VENDOR_PATCHLEVELঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 718 এর ট্যাগ আইডি মান ব্যবহার করে।বিক্রেতা ইমেজ নিরাপত্তা প্যাচ স্তর নির্দিষ্ট করে যা এই কী ব্যবহার করার জন্য ডিভাইসে ইনস্টল করা আবশ্যক। মানটি YYYYMMDD আকারে প্রদর্শিত হয়, যা বিক্রেতা নিরাপত্তা প্যাচের তারিখের প্রতিনিধিত্ব করে। উদাহরণ স্বরূপ, যদি একটি Android ডিভাইসে একটি কী তৈরি করা হয় যাতে বিক্রেতার 1 আগস্ট, 2018 এর নিরাপত্তা প্যাচ ইনস্টল করা থাকে, তাহলে এই মানটি হবে 20180801৷
-
bootPatchLevel শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 3।
Tag::BOOT_PATCHLEVELঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 719 এর ট্যাগ আইডি মান ব্যবহার করে।কার্নেল ইমেজ নিরাপত্তা প্যাচ স্তর নির্দিষ্ট করে যা এই কী ব্যবহার করার জন্য ডিভাইসে ইনস্টল করা আবশ্যক। মানটি YYYYMMDD আকারে প্রদর্শিত হয়, যা সিস্টেম নিরাপত্তা প্যাচের তারিখের প্রতিনিধিত্ব করে। উদাহরণস্বরূপ, যদি সিস্টেমের 5 আগস্ট, 2018 নিরাপত্তা প্যাচ ইনস্টল করা একটি Android ডিভাইসে একটি কী তৈরি করা হয়, তাহলে এই মানটি হবে 20180805৷
-
deviceUniqueAttestation শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 4 উপস্থাপন করুন।
Tag::DEVICE_UNIQUE_ATTESTATIONঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 720 এর ট্যাগ আইডি মান ব্যবহার করে।-
attestationIdSecondImei শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 300।
Tag::ATTESTATION_ID_SECOND_IMEIঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 723 এর ট্যাগ আইডি মান ব্যবহার করে।-
moduleHash শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 400টিতে উপস্থাপন করুন।
Tag::MODULE_HASHঅনুমোদন ট্যাগের সাথে মিলে যায়, যা 724 এর ট্যাগ আইডি মান ব্যবহার করে।
RootOfTrust ক্ষেত্র
-
verifiedBootKey - ভেরিফাইড বুটের অংশ হিসাবে ডিভাইস বুট করার সময় কার্যকর করা সমস্ত কোডের অখণ্ডতা এবং সত্যতা যাচাই করতে ব্যবহৃত পাবলিক কী-এর একটি সুরক্ষিত হ্যাশ। SHA-256 সুপারিশ করা হয়।
-
deviceLocked - ডিভাইসের বুটলোডার লক করা আছে কিনা।
trueমানে ডিভাইসটি একটি স্বাক্ষরিত ছবি বুট করেছে যা যাচাইকৃত বুট দ্বারা সফলভাবে যাচাই করা হয়েছে। -
verifiedBootState - ডিভাইসের যাচাইকৃত বুট অবস্থা ।
-
verifiedBootHash - যাচাইকৃত বুট দ্বারা সুরক্ষিত সমস্ত ডেটার একটি ডাইজেস্ট। যে ডিভাইসগুলি Android যাচাইকৃত বুট রেফারেন্স বাস্তবায়ন ব্যবহার করে, এই ক্ষেত্রটিতে VBMeta ডাইজেস্ট রয়েছে।
যাচাইকৃত বুটস্টেট মান
| মান | অনুরূপ বুট অবস্থা | অর্থ |
|---|---|---|
Verified | GREEN | বিশ্বাসের একটি সম্পূর্ণ চেইন একটি হার্ডওয়্যার-সুরক্ষিত বিশ্বাসের মূল থেকে বুটলোডার এবং যাচাইকৃত বুট দ্বারা যাচাইকৃত সমস্ত পার্টিশন পর্যন্ত প্রসারিত। এই অবস্থায়, verifiedBootKey ফিল্ডে ট্রাস্টের এম্বেড করা রুটের হ্যাশ রয়েছে, যা কারখানায় ডিভাইস প্রস্তুতকারকের দ্বারা ডিভাইসের ROM-এ এমবেড করা শংসাপত্র। |
SelfSigned | YELLOW | Verified এর মতই, শুধুমাত্র ফ্যাক্টরিতে প্রস্তুতকারকের দ্বারা এমবেড করা বিশ্বাসের মূলের পরিবর্তে ব্যবহারকারীর দ্বারা কনফিগার করা ট্রাস্টের রুট ব্যবহার করে যাচাই করা হয়েছে। এই অবস্থায়, verifiedBootKey ক্ষেত্রে ব্যবহারকারীর দ্বারা কনফিগার করা সর্বজনীন কী-এর হ্যাশ রয়েছে। |
Unverified | ORANGE | ডিভাইসের বুটলোডার আনলক করা আছে, তাই বিশ্বাসের একটি চেইন স্থাপন করা যাবে না। ডিভাইসটি অবাধে পরিবর্তন করা যেতে পারে, তাই ডিভাইসের অখণ্ডতা অবশ্যই ব্যান্ডের বাইরের ব্যবহারকারী দ্বারা যাচাই করা উচিত। এই অবস্থায় verifiedBootKey ক্ষেত্রটিতে শূন্যের 32 বাইট রয়েছে। |
Failed | RED | ডিভাইসটি যাচাই করতে ব্যর্থ হয়েছে৷ এই অবস্থায়, অন্যান্য RootOfTrust ক্ষেত্রের বিষয়বস্তু সম্পর্কে কোন গ্যারান্টি নেই। |
অ্যাটেস্টেশন অ্যাপ্লিকেশান আইডি
এই ক্ষেত্রটি Android প্ল্যাটফর্মের বিশ্বাসকে প্রতিফলিত করে যে কোন অ্যাপগুলিকে প্রত্যয়নের অধীনে গোপন মূল উপাদান ব্যবহার করার অনুমতি দেওয়া হয়েছে৷ এটিতে একাধিক প্যাকেজ থাকতে পারে যদি এবং শুধুমাত্র যদি একাধিক প্যাকেজ একই UID ভাগ করে। AuthorizationList এ AttestationApplicationId ক্ষেত্রটি OCTET_STRING টাইপের এবং নিম্নলিখিত ASN.1 স্কিমা অনুসারে ফর্ম্যাট করা হয়েছে:
AttestationApplicationId ::= SEQUENCE {
package_infos SET OF AttestationPackageInfo,
signature_digests SET OF OCTET_STRING,
}
AttestationPackageInfo ::= SEQUENCE {
package_name OCTET_STRING,
version INTEGER,
}package_infos-
AttestationPackageInfoঅবজেক্টের একটি সেট, প্রতিটি প্যাকেজের নাম এবং সংস্করণ নম্বর প্রদান করে। -
signature_digests SHA-256-এর একটি সেট অ্যাপের স্বাক্ষরকারী শংসাপত্রগুলি হজম করে৷ একটি অ্যাপে একাধিক সাইনিং কী সার্টিফিকেট চেইন থাকতে পারে। প্রত্যেকের জন্য, "পাতা" শংসাপত্র হজম করা হয় এবং
signature_digestsক্ষেত্রে স্থাপন করা হয়। ক্ষেত্রের নামটি বিভ্রান্তিকর, যেহেতু হজম করা ডেটা অ্যাপের স্বাক্ষরকারী শংসাপত্র, অ্যাপের স্বাক্ষর নয়, কারণ এটিgetPackageInfo()এ একটি কল দ্বারা ফিরে আসাSignatureশ্রেণীর জন্য নামকরণ করা হয়েছে। নিম্নলিখিত কোড স্নিপেট একটি উদাহরণ সেট দেখায়:{SHA256(PackageInfo.signature[0]), SHA256(PackageInfo.signature[1]), ...}
তথ্য সম্প্রসারণ বিধান
প্রভিশনিং ইনফরমেশন এক্সটেনশনে OID 1.3.6.1.4.1.11129.2.1.30 আছে। এক্সটেনশনটি এমন তথ্য প্রদান করে যা প্রভিশনিং সার্ভার দ্বারা ডিভাইস সম্পর্কে জানা।
স্কিমা
এক্সটেনশন মানটি সংক্ষিপ্ত বাইনারি অবজেক্ট রিপ্রেজেন্টেশন (CBOR) ডেটা নিয়ে গঠিত যা এই সংক্ষিপ্ত ডেটা ডেফিনিশন ল্যাঙ্গুয়েজ (CDDL) স্কিমার সাথে সামঞ্জস্যপূর্ণ:
{
1 : int, ; certificates issued
4 : string, ; validated attested entity (STRONG_BOX/TEE)
}
মানচিত্রটি পরিবর্তন করা হয়নি এবং নতুন ঐচ্ছিক ক্ষেত্র যোগ করা যেতে পারে।
-
certs_issued গত 30 দিনে ডিভাইসে জারি করা শংসাপত্রের আনুমানিক সংখ্যা৷ এই মানটি সম্ভাব্য অপব্যবহারের জন্য একটি সংকেত হিসাবে ব্যবহার করা যেতে পারে যদি মান কিছু মাত্রার আদেশ দ্বারা গড় থেকে বেশি হয়।
-
validated_attested_entity যাচাইকৃত প্রত্যয়িত সত্তা হল এমন একটি স্ট্রিং যা প্রভিশনিং সার্ভার দ্বারা প্রত্যয়িত হওয়ার জন্য নিশ্চিত করা ডিভাইসের প্রকার বর্ণনা করে। উদাহরণস্বরূপ,
STRONG_BOXবাTEE।
প্রত্যয়ন কী
দুটি কী, একটি RSA এবং একটি ECDSA, এবং সংশ্লিষ্ট শংসাপত্র চেইনগুলি, সুরক্ষিতভাবে ডিভাইসে সরবরাহ করা হয়েছে৷
অ্যান্ড্রয়েড 12 রিমোট কী প্রভিশনিং প্রবর্তন করে, এবং অ্যান্ড্রয়েড 13-এর জন্য ডিভাইসগুলি এটি প্রয়োগ করা প্রয়োজন। রিমোট কী প্রভিশনিং প্রতি অ্যাপ, ECDSA P256 প্রত্যয়ন শংসাপত্র সহ ক্ষেত্রে ডিভাইসগুলি প্রদান করে। এই শংসাপত্রগুলি কারখানার প্রভিশনেড সার্টিফিকেটের তুলনায় স্বল্প মেয়াদী।
ইউনিক আইডি
ইউনিক আইডি হল একটি 128-বিট মান যা ডিভাইসটিকে শনাক্ত করে, কিন্তু শুধুমাত্র সীমিত সময়ের জন্য। মান এর সাথে গণনা করা হয়:
HMAC_SHA256(T || C || R, HBK)
কোথায়:
-
Tহল "টেম্পোরাল কাউন্টার ভ্যালু",Tag::CREATION_DATETIMEএর মানকে 2592000000 দ্বারা ভাগ করে, যে কোনো অবশিষ্টাংশ ফেলে দিয়ে গণনা করা হয়।Tপ্রতি 30 দিনে পরিবর্তিত হয় (2592000000 = 30 * 24 * 60 * 60 * 1000)। -
CহলTag::APPLICATION_IDএর মান -
Rহল 1 যদিTag::RESET_SINCE_ID_ROTATIONattest_key কলের attest_params প্যারামিটারে উপস্থিত থাকে, অথবা ট্যাগটি উপস্থিত না থাকলে 0 হয়। -
HBKএকটি অনন্য হার্ডওয়্যার-বাউন্ড সিক্রেট যা বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্টের কাছে পরিচিত এবং এটি কখনই প্রকাশ করে না। গোপনটিতে কমপক্ষে 128 বিট এনট্রপি রয়েছে এবং এটি পৃথক ডিভাইসের জন্য অনন্য (128 বিট এনট্রপি দেওয়া হলে সম্ভাব্য স্বতন্ত্রতা গ্রহণযোগ্য)। HBK HMAC বা AES_CMAC এর মাধ্যমে ফিউজড কী উপাদান থেকে প্রাপ্ত হওয়া উচিত।
HMAC_SHA256 আউটপুটকে 128 বিটে ছোট করুন।
একাধিক IMEI
অ্যান্ড্রয়েড 14 অ্যান্ড্রয়েড কী অ্যাটেস্টেশন রেকর্ডে একাধিক IMEI-এর জন্য সমর্থন যোগ করে। OEMs একটি দ্বিতীয় IMEI-এর জন্য একটি KeyMint ট্যাগ যোগ করে এই বৈশিষ্ট্যটি বাস্তবায়ন করতে পারে৷ ডিভাইসগুলিতে একাধিক সেলুলার রেডিও থাকা ক্রমশ সাধারণ হয়ে উঠছে এবং OEM এখন দুটি IMEI সহ ডিভাইসগুলিকে সমর্থন করতে পারে৷
OEM-দের একটি সেকেন্ডারি IMEI থাকতে হবে, যদি তাদের ডিভাইসে উপস্থিত থাকে, তাহলে KeyMint বাস্তবায়ন(গুলি) এর বিধান করা হবে যাতে সেই বাস্তবায়নগুলি প্রথম IMEI-তে যেভাবে প্রত্যয়িত করে সেভাবে এটিকে প্রত্যয়িত করতে পারে।
আইডি প্রত্যয়ন
Android 8.0-এ কীমাস্টার 3-এর সাথে ডিভাইসগুলির জন্য আইডি প্রত্যয়নের জন্য ঐচ্ছিক সমর্থন অন্তর্ভুক্ত রয়েছে। আইডি প্রত্যয়ন ডিভাইসটিকে তার হার্ডওয়্যার শনাক্তকারীর প্রমাণ প্রদান করতে দেয়, যেমন সিরিয়াল নম্বর বা IMEI। যদিও একটি ঐচ্ছিক বৈশিষ্ট্য, এটি অত্যন্ত বাঞ্ছনীয় যে সমস্ত Keymaster 3 বাস্তবায়ন এটির জন্য সমর্থন প্রদান করে কারণ ডিভাইসের পরিচয় প্রমাণ করতে সক্ষম হওয়া সত্য জিরো-টাচ রিমোট কনফিগারেশনের মতো ব্যবহারের ক্ষেত্রে আরও সুরক্ষিত হতে সক্ষম করে (কারণ দূরবর্তী দিকটি নিশ্চিত হতে পারে যে এটি সঠিক ডিভাইসের সাথে কথা বলছে, একটি ডিভাইস তার পরিচয় ফাঁকি দিচ্ছে না)।
আইডি প্রত্যয়ন ডিভাইসের হার্ডওয়্যার শনাক্তকারীর অনুলিপি তৈরি করে কাজ করে যা শুধুমাত্র TEE ডিভাইসটি কারখানা ছেড়ে যাওয়ার আগে অ্যাক্সেস করতে পারে। একজন ব্যবহারকারী ডিভাইসের বুটলোডার আনলক করতে পারে এবং সিস্টেম সফ্টওয়্যার এবং অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা রিপোর্ট করা শনাক্তকারী পরিবর্তন করতে পারে। TEE দ্বারা ধারণকৃত শনাক্তকারীর কপিগুলিকে এইভাবে ম্যানিপুলেট করা যাবে না, নিশ্চিত করে যে ডিভাইস আইডি প্রত্যয়ন শুধুমাত্র ডিভাইসের আসল হার্ডওয়্যার শনাক্তকারীকে প্রমাণ করে, যার ফলে স্পুফিং প্রচেষ্টা ব্যর্থ হয়।
আইডি প্রত্যয়নের জন্য প্রধান API পৃষ্ঠটি কীমাস্টার 2-এর সাথে প্রবর্তিত বিদ্যমান কী প্রত্যয়ন প্রক্রিয়ার উপরে তৈরি করে। কীমাস্টারের কাছে থাকা একটি কী-এর জন্য একটি সত্যায়ন শংসাপত্রের অনুরোধ করার সময়, কলকারী অনুরোধ করতে পারেন যে ডিভাইসের হার্ডওয়্যার শনাক্তকারীগুলিকে প্রত্যয়ন শংসাপত্রের মেটাডেটাতে অন্তর্ভুক্ত করতে হবে। যদি চাবিটি TEE-তে রাখা হয়, শংসাপত্রটি বিশ্বাসের একটি পরিচিত মূলে ফিরে আসে। এই ধরনের শংসাপত্রের প্রাপক যাচাই করতে পারেন যে সার্টিফিকেট এবং এর বিষয়বস্তু, হার্ডওয়্যার শনাক্তকারী সহ, TEE দ্বারা লেখা হয়েছে। প্রত্যয়ন শংসাপত্রে হার্ডওয়্যার শনাক্তকারী অন্তর্ভুক্ত করতে বলা হলে, TEE শুধুমাত্র ফ্যাক্টরির মেঝেতে থাকা তার স্টোরেজে রাখা শনাক্তকারীকে প্রমাণ করে।
স্টোরেজ বৈশিষ্ট্য
ডিভাইসের শনাক্তকারী ধারণ করা স্টোরেজে এই বৈশিষ্ট্য থাকা প্রয়োজন:
- ডিভাইসটির মূল শনাক্তকারী থেকে প্রাপ্ত মানগুলি ডিভাইসটি কারখানা ছেড়ে যাওয়ার আগে স্টোরেজে কপি করা হয়।
-
destroyAttestationIds()পদ্ধতি আইডেন্টিফায়ার থেকে প্রাপ্ত ডেটার এই কপিটিকে স্থায়ীভাবে ধ্বংস করতে পারে। স্থায়ী ধ্বংসের অর্থ হল ডেটা সম্পূর্ণরূপে মুছে ফেলা হয়েছে তাই কোনও ফ্যাক্টরি রিসেট বা ডিভাইসে সম্পাদিত অন্য কোনও পদ্ধতি এটি পুনরুদ্ধার করতে পারে না। এটি এমন ডিভাইসগুলির জন্য বিশেষভাবে গুরুত্বপূর্ণ যেখানে একজন ব্যবহারকারী বুটলোডার আনলক করেছে এবং সিস্টেম সফ্টওয়্যার পরিবর্তন করেছে এবং অ্যান্ড্রয়েড ফ্রেমওয়ার্ক দ্বারা ফিরে আসা শনাক্তকারীগুলিকে সংশোধন করেছে৷ - RMA সুবিধাগুলির হার্ডওয়্যার শনাক্তকারী থেকে প্রাপ্ত ডেটার নতুন কপি তৈরি করার ক্ষমতা থাকা উচিত। এইভাবে, RMA এর মধ্য দিয়ে যাওয়া একটি ডিভাইস আবার আইডি প্রত্যয়ন করতে পারে। RMA সুবিধাগুলির দ্বারা ব্যবহৃত প্রক্রিয়াটি অবশ্যই সুরক্ষিত থাকতে হবে যাতে ব্যবহারকারীরা নিজেরাই এটিকে আহ্বান করতে না পারে, কারণ এটি তাদের স্পুফড আইডিগুলির সত্যায়ন পেতে দেয়৷
- TEE-তে Keymaster বিশ্বস্ত অ্যাপ ছাড়া অন্য কোনো কোড স্টোরেজে রাখা আইডেন্টিফায়ার থেকে প্রাপ্ত ডেটা পড়তে সক্ষম নয়।
- সঞ্চয়স্থান হস্তক্ষেপ-প্রকাশ্য: যদি স্টোরেজের বিষয়বস্তু পরিবর্তন করা হয়, তাহলে TEE বিষয়বস্তুর অনুলিপিগুলিকে ধ্বংস করা হয়েছে এবং সমস্ত আইডি প্রত্যয়ন প্রচেষ্টা প্রত্যাখ্যান করে। নীচে বর্ণিত হিসাবে সঞ্চয়স্থান স্বাক্ষর বা MAC করে এটি বাস্তবায়িত হয়৷
- স্টোরেজ মূল শনাক্তকারী ধরে রাখে না। যেহেতু আইডি প্রত্যয়ন একটি চ্যালেঞ্জ জড়িত, কলকারী সর্বদা শনাক্তকারীকে সত্যায়িত করার জন্য সরবরাহ করে। TEE-কে শুধুমাত্র যাচাই করতে হবে যে এই মানগুলির সাথে তাদের আসল মানগুলি মেলে৷ মানের পরিবর্তে আসল মানগুলির সুরক্ষিত হ্যাশগুলি সংরক্ষণ করা এই যাচাইকরণকে সক্ষম করে৷
নির্মাণ
উপরে তালিকাভুক্ত বৈশিষ্ট্য রয়েছে এমন একটি বাস্তবায়ন তৈরি করতে, নিম্নলিখিত নির্মাণ S-এ ID-প্রাপ্ত মানগুলি সংরক্ষণ করুন। সিস্টেমের স্বাভাবিক স্থানগুলি ব্যতীত ID মানগুলির অন্যান্য অনুলিপি সংরক্ষণ করবেন না, যা একজন ডিভাইস মালিক রুট করার মাধ্যমে সংশোধন করতে পারেন:
S = D || HMAC(HBK, D)
কোথায়:
-
D = HMAC(HBK, ID 1 ) || HMAC(HBK, ID 2 ) || ... || HMAC(HBK, ID n ) -
HMACহল একটি উপযুক্ত সুরক্ষিত হ্যাশ সহ HMAC নির্মাণ (SHA-256 প্রস্তাবিত) -
HBKএকটি হার্ডওয়্যার-বাউন্ড কী অন্য কোনো উদ্দেশ্যে ব্যবহার করা হয় না -
ID 1 ...ID nহল আসল ID মান; একটি নির্দিষ্ট সূচকের সাথে একটি নির্দিষ্ট মানের সংযুক্তি হল বাস্তবায়ন-নির্ভর, কারণ বিভিন্ন ডিভাইসে বিভিন্ন সংখ্যক শনাক্তকারী থাকে -
||সংমিশ্রণ প্রতিনিধিত্ব করে
যেহেতু HMAC আউটপুটগুলি নির্দিষ্ট আকারের, তাই পৃথক আইডি হ্যাশ বা D-এর HMAC খুঁজে পাওয়ার জন্য কোনো শিরোনাম বা অন্য কাঠামোর প্রয়োজন হয় না। প্রত্যয়ন করার জন্য প্রদত্ত মানগুলি পরীক্ষা করার পাশাপাশি, বাস্তবায়নগুলিকে S থেকে D বের করে, HMAC(HBK, D) কম্পিউটিং করে S যাচাই করতে হবে এবং S-তে স্বতন্ত্র/মোড করা আইডি-র মান যাচাই করা হয়েছে এমন মানগুলির সাথে তুলনা করতে হবে। এছাড়াও, বাস্তবায়নে অবশ্যই সমস্ত স্বতন্ত্র ID উপাদানগুলির জন্য ধ্রুব-সময়ের তুলনা ব্যবহার করতে হবে এবং S-এর বৈধতা অবশ্যই প্রদত্ত আইডির সংখ্যা এবং পরীক্ষার যেকোনো অংশের সঠিক মিল নির্বিশেষে স্থির হতে হবে।
হার্ডওয়্যার শনাক্তকারী
আইডি প্রত্যয়ন নিম্নলিখিত হার্ডওয়্যার সনাক্তকারী সমর্থন করে:
- ব্র্যান্ডের নাম, যেমনটি Android-এ
Build.BRANDদ্বারা ফেরত দেওয়া হয়েছে - Android-এ
Build.DEVICEদ্বারা ফেরত দেওয়া ডিভাইসের নাম - Android-এ
Build.PRODUCTদ্বারা ফেরত দেওয়া পণ্যের নাম - নির্মাতার নাম, যেমনটি Android-এ
Build.MANUFACTURERদ্বারা ফেরত দেওয়া হয়েছে - মডেলের নাম, যেমনটি Android-এ
Build.MODELদ্বারা ফেরত দেওয়া হয়েছে৷ - সিরিয়াল নম্বর
- সমস্ত রেডিওর IMEI
- সমস্ত রেডিওর MEID
ডিভাইস আইডি প্রত্যয়ন সমর্থন করার জন্য, একটি ডিভাইস এই শনাক্তকারীদের প্রমাণ করে। অ্যান্ড্রয়েড চালিত সমস্ত ডিভাইসে প্রথম ছয়টি রয়েছে এবং এই বৈশিষ্ট্যটি কাজ করার জন্য সেগুলি প্রয়োজনীয়। ডিভাইসটিতে কোনো সমন্বিত সেলুলার রেডিও থাকলে, ডিভাইসটিকে অবশ্যই IMEI এবং/অথবা রেডিওগুলির MEID-এর জন্য প্রত্যয়ন সমর্থন করতে হবে।
একটি মূল প্রত্যয়ন সম্পাদন করে এবং অনুরোধে সত্যায়িত করার জন্য ডিভাইস শনাক্তকারী সহ আইডি প্রত্যয়ন অনুরোধ করা হয়। শনাক্তকারীকে ট্যাগ করা হয়েছে:
-
ATTESTATION_ID_BRAND -
ATTESTATION_ID_DEVICE -
ATTESTATION_ID_PRODUCT -
ATTESTATION_ID_MANUFACTURER -
ATTESTATION_ID_MODEL -
ATTESTATION_ID_SERIAL -
ATTESTATION_ID_IMEI -
ATTESTATION_ID_MEID
প্রত্যয়িত শনাক্তকারী একটি UTF-8 এনকোড করা বাইট স্ট্রিং। এই বিন্যাসটি সংখ্যাসূচক শনাক্তকারীর ক্ষেত্রেও প্রযোজ্য। প্রত্যয়িত প্রতিটি শনাক্তকারী একটি UTF-8 এনকোডেড স্ট্রিং হিসাবে প্রকাশ করা হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন না করে (অথবা destroyAttestationIds() আগে কল করা হয়েছিল এবং ডিভাইসটি আর তার আইডিগুলিকে সত্যায়িত করতে পারে না), তবে এই ট্যাগগুলির একটি বা একাধিক অন্তর্ভুক্ত যেকোন মূল প্রত্যয়ন অনুরোধ ErrorCode::CANNOT_ATTEST_IDS সাথে ব্যর্থ হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন করে এবং উপরের এক বা একাধিক ট্যাগ একটি মূল প্রত্যয়ন অনুরোধে অন্তর্ভুক্ত করা হয়, TEE যাচাই করে যে প্রতিটি ট্যাগের সাথে সরবরাহ করা শনাক্তকারী তার হার্ডওয়্যার শনাক্তকারীর অনুলিপির সাথে মেলে। যদি এক বা একাধিক শনাক্তকারী মেলে না, তাহলে ErrorCode::CANNOT_ATTEST_IDS সাথে সম্পূর্ণ প্রত্যয়ন ব্যর্থ হয়। একই ট্যাগ একাধিকবার সরবরাহ করার জন্য এটি বৈধ। এটি উপযোগী হতে পারে, উদাহরণস্বরূপ, IMEI গুলি প্রত্যয়িত করার সময়: একটি ডিভাইসে একাধিক IMEI সহ একাধিক রেডিও থাকতে পারে৷ যদি প্রতিটি ATTESTATION_ID_IMEI এর সাথে সরবরাহ করা মানটি ডিভাইসের একটি রেডিওর সাথে মেলে তবে একটি সত্যায়ন অনুরোধ বৈধ৷ একই অন্য সব ট্যাগ প্রযোজ্য.
প্রত্যয়ন সফল হলে, উপরে থেকে স্কিমা ব্যবহার করে জারি করা প্রত্যয়নপত্রের প্রত্যয়ন এক্সটেনশনে (OID 1.3.6.1.4.1.11129.2.1.17) সত্যায়িত আইডি যোগ করা হয়। Keymaster 2 প্রত্যয়ন স্কিমা থেকে পরিবর্তনগুলি মন্তব্য সহ বোল্ড করা হয়েছে৷
জাভা API
এই বিভাগটি শুধুমাত্র তথ্যমূলক। কীমাস্টার বাস্তবায়নকারীরা জাভা API প্রয়োগ বা ব্যবহার করে না। অ্যাপগুলি কীভাবে বৈশিষ্ট্যটি ব্যবহার করে তা বাস্তবায়নকারীদের বুঝতে সাহায্য করার জন্য এটি প্রদান করা হয়েছে। সিস্টেমের উপাদানগুলি এটিকে ভিন্নভাবে ব্যবহার করতে পারে, এই কারণেই এটি গুরুত্বপূর্ণ যে এই বিভাগটিকে আদর্শ হিসাবে বিবেচনা করা হবে না।