OpenID for Verifiable Credential Issuance (OpenID4VCI) স্পেসিফিকেশন ব্যবহার করে একটি সাধারণ ডিজিটাল ক্রেডেনশিয়াল ইস্যু করার প্রক্রিয়ায়, ইস্যুকারীকে জানতে হয় যে স্বাক্ষরিতব্য ক্রেডেনশিয়ালের ভেতরের কী-টি একটি সুরক্ষিত স্থানে সংরক্ষিত আছে। android_keystore_attestation প্রুফ টাইপ—যা OpenID4VCI-এর সাথে ব্যবহারের জন্য একটি ফরম্যাট— অ্যান্ড্রয়েড কীস্টোর থেকে একটি হার্ডওয়্যার-স্বাক্ষরিত রিপোর্ট প্রদান করে, যা নিশ্চিত করে যে কী-টি একটি Trusted Execution Environment (TEE) বা StrongBox-এ লক করা আছে এবং এটি এক্সপোর্ট বা ক্লোন করা যাবে না।
হার্ডওয়্যার অ্যাটেস্টেশন ওভারভিউ
যখন অ্যান্ড্রয়েড কীস্টোরে একটি কী তৈরি করা হয়, তখন সিস্টেম একটি অ্যাটেস্টেশন সার্টিফিকেট তৈরি করতে পারে। এই সার্টিফিকেটটি ডিভাইসের হার্ডওয়্যার দ্বারা সুরক্ষিত একটি কী দিয়ে স্বাক্ষরিত হয়, যা গুগলের মালিকানাধীন একটি রুট অফ ট্রাস্টের সাথে সংযুক্ত থাকে।
android_keystore_attestation প্রুফটি হলো X.509 সার্টিফিকেট চেইনের একটি অ্যারে। প্রতিটি চেইন একটি একক অথেনটিকেশন কী-কে প্রতিনিধিত্ব করে এবং এটি একটি লিফ সার্টিফিকেট ও তার পরে থাকা ইন্টারমিডিয়েট সার্টিফিকেটগুলো দ্বারা গঠিত।
- লিফ সার্টিফিকেট : এতে কী এবং একটি অ্যান্ড্রয়েড-নির্দিষ্ট অ্যাটেস্টেশন এক্সটেনশন থাকে।
- অন্তর্বর্তী সার্টিফিকেট : লিফটিকে অ্যান্ড্রয়েড রুটের সাথে সংযুক্ত করুন।
যাচাইকরণের ধাপসমূহ
ইস্যুকারীদের প্রত্যয়নপত্রটির উপর একাধিক যাচাইকরণ সম্পাদন করা উচিত।
- চেইনের মধ্যে সেই সার্টিফিকেটটি খুঁজুন যেটিতে অ্যান্ড্রয়েড অ্যাটেস্টেশন এক্সটেনশন রয়েছে (সাধারণত লিফ সার্টিফিকেট)। এই সার্টিফিকেটটিতে অ্যান্ড্রয়েড কীস্টোর দ্বারা তৈরি করা কী-এর অ্যাটেস্টেশন ডেটা থাকে।
- রিপ্লে অ্যাটাক প্রতিরোধ করার জন্য, এক্সটেনশনের
attestationChallengeফিল্ডটি প্রোটোকল দ্বারা প্রদত্তc_nonceএর সাথে মেলে কিনা তা যাচাই করুন।
- আপনার আগ্রহের এক্সটেনশনগুলোতে থাকা সমস্ত অ্যাসারশনের মান যাচাই করুন।
- অ্যান্ড্রয়েড কীস্টোর সার্টিফিকেটগুলোর বাতিলকরণ যাচাই করুন।
প্রত্যয়ন প্রমাণের মানগুলো বিভিন্ন উৎস থেকে আসে:
- ইস্যুকারী: ইস্যুকারী বিভিন্ন মান সরবরাহ করে থাকে, এবং উপস্থাপনার সময় ফিল্টারিং করার সুবিধার জন্য সবচেয়ে প্রচলিত মানগুলো ইস্যুকারী মেটাডেটা ফরম্যাটে রাখা হয়।
- ধারক: প্যাকেজের নাম এবং স্বাক্ষরের মতো মানগুলি ধারকের কাছ থেকে আসে। এগুলি সাধারণ ইস্যু করার পদ্ধতির মাধ্যমে শেয়ার করা হয় না এবং ধারকের কাছ থেকে স্বাধীনভাবে সংগ্রহ করতে হয়।
- প্রোটোকল:
attestationChallengeসহ ননসের মতো মানগুলো প্রোটোকল থেকে আসে।
প্রত্যয়ন ডেটা যাচাই করার বিষয়ে আরও বিস্তারিত নির্দেশাবলীর জন্য, নিম্নলিখিত উৎসগুলি দেখুন:
- কী অ্যাটেস্টেশনের মাধ্যমে হার্ডওয়্যার-সমর্থিত কী পেয়ার যাচাই করুন।
- কী এবং আইডি অ্যাটেস্টেশন এক্সটেনশন ফরম্যাট
- মূল প্রত্যয়ন লাইব্রেরি
সত্যায়ন প্রমাণের ফর্ম্যাট
একটি ক্রেডেনশিয়াল অনুরোধে, android_keystore_attestation প্রুফটি নিম্নলিখিত উদাহরণে অন্তর্ভুক্ত করা হয়েছে:
{
"type": "array",
"description": "An array of certificate chains. Each chain attests a single key.",
"items": {
"type": "array",
"description": "An X.509 certificate chain. Each certificate is a Base64-encoded string. The first element in the chain is the leaf certificate with the extension, the last is the Android Keystore root certificate.",
"items": {
"type": "string",
"description": "A single X.509 certificate (Base64-NoWrap padded DER encoded)."
},
"minItems": 1
},
"minItems": 1
}
এরপর এটি একটি ক্রেডেনশিয়াল রিকোয়েস্টের proofs অবজেক্টে সংরক্ষিত হয়।
{
"credential_configuration_id": "org.iso.18013.5.1.mDL",
"proofs": {
"android_keystore_attestation": [
[
"MII...", // Leaf certificate (contains Keystore extension)
"MII...", // Intermediate certificate
"MII..." // Android Root certificate
],
[ "MII...", "MII...", "MII..." ] // second proof
]
}
}
ইস্যুকারী মেটাডেটা ফরম্যাট
একটি ইস্যুকারী কোনো নির্দিষ্ট ক্রেডেনশিয়াল কনফিগারেশনের জন্য proof_types_supported অবজেক্টের মধ্যে android_keystore_attestation অবজেক্টটি অন্তর্ভুক্ত করার মাধ্যমে তার সমর্থিত প্রমাণের ধরণগুলো নির্দেশ করে।
এটি ইস্যুকারীদের জন্য android_keystore_attestation অবজেক্টের একটি উদাহরণ:
{
"type": "object",
"properties": {
"proof_signing_alg_values_supported": {
"type": "array",
"description": "REQUIRED. As defined in OpenID4VCI 1.0 Section 12.2.4.",
"items": {
"type": "string",
"description": "Cryptographic algorithm identifiers used in the proof_signing_alg_values_supported Credential Issuer metadata parameter for this proof type are case sensitive strings and SHOULD be one of those defined in [IANA.JOSE]."
},
"minItems": 1
},
"key_attestations_required": {
"type": "object",
"description": "OPTIONAL. Specifies the minimum attestation requirements.",
"properties": {
"key_mint_security_level": {
"type": "string",
"description": "OPTIONAL. Minimum accepted keyMintSecurityLevel. Values defined in https://source.android.com/docs/security/features/keystore/attestation#securitylevel-values.",
"enum": ["Software", "TrustedEnvironment", "StrongBox"],
"default": "TrustedEnvironment"
},
"user_auth_types": {
"type": "array",
"description": "OPTIONAL. A list of authentication types which can authorize the use of the key. If empty, no authentication is required. If multiple, any are allowed.",
"items": {
"type": "string",
"description": "Allowed values are 'LSKF' and 'BIOMETRIC'. These values are meant to mimic the values used during the key generation process here.",
"enum": ["LSKF", "BIOMETRIC"]
},
"default": []
}
}
}
},
"required": ["proof_signing_alg_values_supported"]
}
এটি হলো বাইরের proof_types_supported অবজেক্টটির একটি উদাহরণ:
{
"credential_configurations_supported": {
"org.iso.18013.5.1.mDL": {
"format": "mso_mdoc",
"doctype": "org.iso.18013.5.1.mDL",
"cryptographic_binding_methods_supported": [
"cose_key"
],
"credential_signing_alg_values_supported": [
-7, -9
],
"proof_types_supported": {
"android_keystore_attestation": {
"proof_signing_alg_values_supported": [
"ES256" // ecdsaWithSHA256
],
"key_attestations_required" : {
// OPTIONAL String - Representing the minimum accepted value for keyMintSecurityLevel values
// defined here ("Software"|"TrustedEnvironment"|"StrongBox"). Default value: "TrustedEnvironment"
"key_mint_security_level": "TrustedEnvironment",
// OPTIONAL List of Strings - Representing all allowed values for userAuthType values defined here.
// [] value will represent noAuthRequired. Default value: [].
"user_auth_types": ["LSKF", "BIOMETRIC"]
}
}
}
}
}
}
VCI অ্যাটেস্টেশন দাবিগুলোকে অ্যান্ড্রয়েড কীস্টোরে ম্যাপ করা হচ্ছে
এই সারণিটি একটি তথ্যমূলক ম্যাপিং প্রদান করে, যা স্ট্যান্ডার্ড OpenID4VCI অ্যাটেস্টেশন প্রুফ টাইপের সাথে পরিচিত প্রতিষ্ঠানগুলোকে অ্যান্ড্রয়েড কীস্টোর অ্যাটেস্টেশনের মধ্যে অনুরূপ ধারণাগুলো কোথায় অবস্থিত তা বুঝতে সাহায্য করে।
VCI প্রত্যয়ন দাবি | | প্রত্যাশিত মানের অবস্থান |
আইএসএস | কীস্টোর রুট সার্টিফিকেটের পাবলিক কী | প্রযোজ্য নয় |
আইএটি | অ্যাটেস্টেশন এক্সটেনশনে | প্রযোজ্য নয় |
অভিজ্ঞতা | পাতার সার্টিফিকেটে | প্রযোজ্য নয় |
সত্যায়িত_চাবি | প্রতিটি চেইনের লিফ সার্টিফিকেটে পাবলিক কী অন্তর্ভুক্ত থাকে। | প্রযোজ্য নয় |
কী_স্টোরেজ | অ্যাটেস্টেশন এক্সটেনশনে | ইস্যুকারী নির্বাচিত: ইস্যুকারী মেটাডেটাতে |
ব্যবহারকারী প্রমাণীকরণ | অ্যাটেস্টেশন এক্সটেনশনে | ইস্যুকারী নির্বাচিত: ইস্যুকারী মেটাডেটার |
ননস | অ্যাটেস্টেশন এক্সটেনশনে | প্রোটোকল থেকে: VCI-তে বর্ণিত ননস এন্ডপয়েন্ট থেকে |
সার্টিফিকেশন | প্রযোজ্য নয় | প্রযোজ্য নয় |
অবস্থা | প্রযোজ্য নয় | প্রযোজ্য নয় |