ডিজিটাল পরিচয়পত্রের সশরীরে গ্রহণযোগ্যতা (অফলাইন)

এই নির্দেশিকাটি ব্যাখ্যা করে যে, কীভাবে রিলায়িং পার্টি (RP) এবং রিডার ডেভেলপাররা আন্তর্জাতিক ISO/IEC 18013-5 স্ট্যান্ডার্ড অনুযায়ী গুগল ওয়ালেট থেকে উপস্থাপিত ডিজিটাল ক্রেডেনশিয়ালের সশরীরে (অফলাইন) যাচাইকরণ বাস্তবায়ন করতে পারে।

গুগল ওয়ালেটে থাকা ডিজিটাল পরিচয়পত্রগুলো উপস্থাপনের সময় সক্রিয় ইন্টারনেট সংযোগের প্রয়োজন ছাড়াই বিভিন্ন ভৌত পরিবেশে (যেমন পয়েন্ট-অফ-সেল টার্মিনাল, অনুষ্ঠানস্থল, ট্রানজিট গেট, আইন প্রয়োগকারী সংস্থার রিডার এবং মোবাইল রিডার অ্যাপ) নিরাপদে যাচাই করা যায়।

অফলাইন উপস্থাপনার সংক্ষিপ্ত বিবরণ (আইএসও/আইইসি ১৮০১৩-৫)

ISO/IEC 18013-5 স্ট্যান্ডার্ডটি হোল্ডার (গুগল ওয়ালেট চালিত ব্যবহারকারীর মোবাইল ডিভাইস) এবং রিডার/ভেরিফায়ার (একটি ভৌত ​​টার্মিনাল বা সহযোগী মোবাইল অ্যাপ)-এর মধ্যে অফলাইন উপস্থাপনার জন্য একটি প্রমিত, আন্তঃকার্যকরী প্রোটোকল সংজ্ঞায়িত করে।

উপস্থাপনার প্রবাহটি কয়েকটি স্বতন্ত্র পর্যায়ে সংঘটিত হয়:

  1. ডিভাইস এনগেজমেন্ট: রিডার এবং ওয়ালেট NFC ট্যাপ (স্ট্যাটিক বা নেগোশিয়েটেড হ্যান্ডওভার) অথবা QR কোড স্ক্যানের মাধ্যমে প্রাথমিক সংযোগ স্থাপন করে। এই পর্যায়ে, ডিভাইস এনগেজমেন্ট মেটাডেটা এবং রিডারের ক্ষণস্থায়ী পাবলিক কী ( EReaderKey ) বিনিময় করা হয়।
  2. ডেটা পরিবহন সংযোগ: একটি সুরক্ষিত, এনক্রিপ্টেড ব্লুটুথ লো এনার্জি (BLE) চ্যানেল নির্ধারিত হয় (রিডারটি সেন্ট্রাল ক্লায়েন্ট বা পেরিফেরাল সার্ভার মোডে কাজ করার সময়)।
  3. ডিভাইস অনুরোধ: রিডার একটি CBOR-এনকোডেড DeviceRequest প্রেরণ করে, যেখানে অনুরোধকৃত ডকুমেন্টের ধরন (যেমন org.iso.18013.5.1.mDL ) এবং অনুরোধকৃত নির্দিষ্ট নেমস্পেস ও ডেটা এলিমেন্টগুলো উল্লেখ করা থাকে।
  4. ব্যবহারকারীর সম্মতি ও ডিভাইস যাচাইকরণ: গুগল ওয়ালেট ব্যবহারকারীকে অনুরোধ করা ডেটা উপাদানগুলো পর্যালোচনা করতে এবং বায়োমেট্রিক যাচাইকরণ বা স্ক্রিন লক ব্যবহার করে শেয়ার করা নিশ্চিত করতে বলে।
  5. ডিভাইস রেসপন্স ও ক্রিপ্টোগ্রাফিক ভেরিফিকেশন: ওয়ালেটটি একটি CBOR-এনকোডেড DeviceResponse ফেরত পাঠায়, যাতে স্বাক্ষরিত মোবাইল সিকিউরিটি অবজেক্ট (MSO) এবং ডিভাইস-স্বাক্ষরিত ডেটা এলিমেন্টগুলো থাকে। রিডার বিশ্বস্ত রুট সার্টিফিকেটের সাথে ক্রিপ্টোগ্রাফিক সিগনেচারগুলো যাচাই করে।

মাল্টিপাজ ওপেন-সোর্স এসডিকে

একটি রিডার বা ভেরিফায়ার অ্যাপ্লিকেশন বাস্তবায়নের জন্য, গুগল মাল্টিপাজ (Multipaz) ব্যবহারের সুপারিশ করে, যা মূলত গুগল কর্তৃক তৈরি এবং ওপেনওয়ালেট ফাউন্ডেশন (OWF)- কে প্রদান করা একটি ওপেন-সোর্স কোটলিন মাল্টিপ্ল্যাটফর্ম (KMP) SDK।

মাল্টিপাজ ISO/IEC 18013-5 রিডার ও ওয়ালেট প্রোটোকল, ক্রিপ্টোগ্রাফিক ভেরিফিকেশন পাইপলাইন, CBOR এনকোডিং/ডিকোডিং এবং এক্সটেনসিবল ডকুমেন্ট টাইপ স্কিমার একটি প্রোডাকশন-রেডি ইমপ্লিমেন্টেশন প্রদান করে।

আপনার রিডার অ্যাপে মাল্টিপাজকে একীভূত করা

নিম্নলিখিত ধাপগুলিতে দেখানো হয়েছে কিভাবে একটি অ্যান্ড্রয়েড রিডার অ্যাপ্লিকেশনে মাল্টিপাজ এসডিকে (Multipaz SDK) সংহত করতে হয়।

ধাপ ১: নির্ভরতা যোগ করুন

মাল্টিপাজ লাইব্রেরিগুলো মেভেন সেন্ট্রালে প্রকাশিত হয়। আপনার অ্যাপ্লিকেশনের build.gradle.kts ফাইলে প্রয়োজনীয় মডিউলগুলো যোগ করুন:

// build.gradle.kts
dependencies {
    // Core Multipaz library (protocol engine, CBOR, crypto)
    implementation("org.multipaz:multipaz:0.100.0")

    // Android-specific platform bindings (NFC, BLE, Keystore)
    implementation("org.multipaz:multipaz-android:0.100.0")

    // Standardized document types (mDL, EU PID, etc.)
    implementation("org.multipaz:multipaz-doctypes:0.100.0")
}

ধাপ ২: অ্যান্ড্রয়েড অনুমতি কনফিগার করুন

সশরীরে যাচাইকরণের জন্য NFC এনগেজমেন্ট, ক্যামেরা স্ক্যানিং (QR এনগেজমেন্টের জন্য), এবং ব্লুটুথ লো এনার্জি ডেটা ট্রান্সপোর্টের জন্য হার্ডওয়্যার পারমিশন প্রয়োজন। আপনার AndroidManifest.xml এ নিম্নলিখিত পারমিশনগুলো যোগ করুন:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- NFC Engagement -->
    <uses-permission android:name="android.permission.NFC" />
    <uses-feature android:name="android.hardware.nfc" android:required="false" />

    <!-- Camera for QR Code Engagement -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" android:required="false" />

    <!-- Bluetooth Low Energy Transport (Android 12+) -->
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN"
                     android:usesPermissionFlags="neverForLocation" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />

    <!-- Legacy Bluetooth Permissions for Android 11 and lower -->
    <uses-permission android:name="android.permission.BLUETOOTH"
                     android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
                     android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="30" />
</manifest>

ধাপ ৩: ভেরিফিকেশন ইঞ্জিন চালু করুন

এনগেজমেন্ট ইভেন্টগুলি পরিচালনা করতে এবং BLE কমিউনিকেশন লাইফসাইকেল ম্যানেজ করতে মাল্টিপাজ-এর VerificationHelper বা রিডার কানেকশন অ্যাবস্ট্রাকশন ব্যবহার করুন:

import org.multipaz.verification.VerificationHelper
import org.multipaz.cbor.Cbor
import org.multipaz.crypto.Crypto

class ReaderManager(private val context: android.content.Context) {

    private var verificationHelper: VerificationHelper? = null

    fun startListeningForEngagement() {
        verificationHelper = VerificationHelper.Builder(
            context = context,
            listener = object : VerificationHelper.Listener {
                override fun onDeviceConnected() {
                    // BLE channel established, send request
                    sendDeviceRequest()
                }

                override fun onResponseReceived(deviceResponseBytes: ByteArray) {
                    // Process and verify the received credential payload
                    handleDeviceResponse(deviceResponseBytes)
                }

                override fun onError(error: Throwable) {
                    // Handle transport or protocol errors
                }

                override fun onDeviceDisconnected(transportTransportSpecificTermination: Boolean) {
                    // Connection closed
                }
            }
        ).build()
    }
}

ধাপ ৪: ডিভাইস রিকোয়েস্ট তৈরি করুন

আপনার অ্যাপ্লিকেশনকে যে নথির ধরন এবং স্বতন্ত্র ডেটা উপাদানগুলো যাচাই করতে হবে, তা নির্দিষ্ট করুন। সর্বদা ন্যূনতম তথ্য প্রকাশের নীতি অনুসরণ করুন (যেমন, বয়স যাচাই করার সময় সম্পূর্ণ birth_date পরিবর্তে শুধু age_over_21 অনুরোধ করা):

fun sendDeviceRequest() {
    // Specify the DocType and requested elements
    val docType = "org.iso.18013.5.1.mDL"
    val namespace = "org.iso.18013.5.1"

    // Map of requested elements: elementName -> intentToRetain
    val requestedElements = mapOf(
        "family_name" to false,
        "given_name" to false,
        "age_over_21" to false,
        "portrait" to false,
        "driving_privileges" to false
    )

    // Build ISO/IEC 18013-5 DeviceRequest structure
    val deviceRequestBytes = verificationHelper?.buildDeviceRequest(
        docType = docType,
        itemsToRequest = mapOf(namespace to requestedElements)
    )

    if (deviceRequestBytes != null) {
        verificationHelper?.sendDeviceRequest(deviceRequestBytes)
    }
}

অতিরিক্ত নথির প্রকার (ডকটাইপ) সমর্থন করা

মাল্টিপাজ স্বয়ংক্রিয়ভাবে প্রমিত ক্রেডেনশিয়াল সমর্থন করে এবং কাস্টম বা ডোমেন-নির্দিষ্ট ডকুমেন্ট টাইপের অনুরোধ করার জন্য একটি সম্প্রসারণযোগ্য আর্কিটেকচার প্রদান করে।

১. অন্তর্নির্মিত স্ট্যান্ডার্ড ডকুমেন্টের প্রকারভেদ

multipaz-doctypes লাইব্রেরিটি স্ট্যান্ডার্ড ক্রেডেনশিয়ালের জন্য পূর্বনির্ধারিত স্কিমা মডেল সরবরাহ করে:

নথির প্রকার শনাক্তকারী মানদণ্ড / পরিধি সাধারণ নেমস্পেস সাধারণ উপাদান
org.iso.18013.5.1.mDL ISO/IEC 18013-5 মোবাইল ড্রাইভার লাইসেন্স org.iso.18013.5.1 family_name , given_name , birth_date , issue_date , expiry_date , issuing_authority , document_number , portrait , driving_privileges , age_over_18 , age_over_21
eu.europa.ec.eudi.pid.1 ইইউ ডিজিটাল আইডেন্টিটি ওয়ালেট (EUDIW) ব্যক্তি শনাক্তকরণ ডেটা eu.europa.ec.eudi.pid.1 family_name , first_name , birth_date , nationality , issuing_country , issuing_authority , personal_administrative_number
com.google.wallet.idcard.1 গুগল ওয়ালেট আইডি পাস / টেস্ট আইডি com.google.wallet.idcard.1 given_name , family_name , birth_date , document_number , portrait

২. কাস্টম ডকুমেন্ট টাইপের জন্য অনুরোধ

কাস্টম ডকুমেন্ট টাইপের অনুরোধ করতে, DeviceRequest তৈরি করার সময় টার্গেট docType স্ট্রিং এবং সংশ্লিষ্ট নেমস্পেস ম্যাপিং সংজ্ঞায়িত করুন:

// Example: Requesting a custom event ticket credential
val customDocType = "com.example.events.ticket"
val customNamespace = "com.example.events.ticket.1"

val customRequestedItems = mapOf(
    "ticket_id" to false,
    "event_name" to false,
    "seat_section" to false,
    "vip_access" to false
)

val multiDocRequestBytes = verificationHelper?.buildMultiDocDeviceRequest(
    documents = listOf(
        DocumentRequest(
            docType = customDocType,
            namespaces = mapOf(customNamespace to customRequestedItems)
        )
    )
)

ক্রিপ্টোগ্রাফিক যাচাইকরণ এবং বিশ্বাস ব্যবস্থাপনা

প্রতিক্রিয়া পেলোড গ্রহণ করা কেবল প্রথম ধাপ। উপস্থাপিত পরিচয়পত্রের সত্যতা ও অখণ্ডতা যাচাই করার জন্য পাঠকদের অবশ্যই চার-ধাপের একটি ক্রিপ্টোগ্রাফিক যাচাইকরণ সম্পন্ন করতে হবে।

যাচাইকরণ ধাপ যাচাইকরণ লক্ষ্য
১. ইস্যুকারীর প্রমাণীকরণ বিশ্বস্ত IACA রুট সার্টিফিকেটের সাথে IssuerAuth ( COSE_Sign1 ) যাচাই করুন।
২. বৈধতার সময়সীমা যাচাই নিশ্চিত করুন validFrom বর্তমান সময়ের সমান বা validUntil
৩. ডেটার অখণ্ডতা যাচাই ফেরত আসা উপাদানগুলির SHA-256 ডাইজেস্ট গণনা করুন এবং MSO ValueDigests সাথে মেলান।
৪. ডিভাইস প্রমাণীকরণ SessionTranscript এর সাথে সংযুক্ত DeviceKey ব্যবহার করে DeviceSigned সিগনেচার বা MAC যাচাই করুন।

১. ৪-ধাপের যাচাইকরণ পাইপলাইন

  1. ইস্যুকারী প্রমাণীকরণ ( IssuerAuth ):
    • মোবাইল সিকিউরিটি অবজেক্ট (MSO) ইস্যুকারী কর্তৃপক্ষ ( IssuerAuth পেলোড) দ্বারা স্বাক্ষরিত হয়।
    • রিডার ডকুমেন্ট সাইনার সার্টিফিকেট ব্যবহার করে COSE_Sign1 স্বাক্ষরটি যাচাই করে এবং নিশ্চিত করে যে সার্টিফিকেটটি একটি বিশ্বস্ত ইস্যুয়িং অথরিটি সিএ (IACA) রুট সার্টিফিকেট পর্যন্ত চেইনবদ্ধ।
  2. বৈধতার সময়সীমা যাচাইকরণ:
    • ক্রেডেনশিয়ালটির মেয়াদ শেষ হয়ে যায়নি তা নিশ্চিত করার জন্য, রিডার তার বর্তমান ঘড়ির সাথে MSO-তে থাকা validityInfo.validFrom এবং validityInfo.validUntil টাইমস্ট্যাম্পগুলো মিলিয়ে দেখে।
  3. ডেটা অখণ্ডতা যাচাইকরণ ( ValueDigests ):
    • প্রাপ্ত প্রতিটি IssuerSignedItem জন্য, রিডার তার ডাইজেস্ট (যেমন SHA-256) গণনা করে এবং যাচাই করে যে এটি MSO-এর ValueDigests ডিকশনারিতে থাকা সংশ্লিষ্ট হ্যাশ এন্ট্রির সাথে মেলে কিনা।
  4. ডিভাইস প্রমাণীকরণ ( DeviceSigned ):
    • রিডার যাচাই করে যে, ক্রেডেনশিয়াল উপস্থাপনকারী ডিভাইসটিতে স্বাক্ষরিত MSO-এর অভ্যন্তরে প্রকাশিত DeviceKey এর সাথে সঙ্গতিপূর্ণ প্রাইভেট কী-টি রয়েছে।
    • SessionTranscript মাধ্যমে DeviceAuth ( DeviceSignature অথবা DeviceMac ) যাচাই করে, সেশনটিকে রিডারের ক্ষণস্থায়ী কী-এর সাথে আবদ্ধ করে এবং রিপ্লে ও ম্যান-ইন-দ্য-মিডল আক্রমণ প্রতিরোধ করার মাধ্যমে এটি সম্পন্ন করা হয়।

২. বিশ্বস্ত IACA রুট সার্টিফিকেট পরিচালনা করা

প্রোডাকশন রিডারদের অবশ্যই একটি সুরক্ষিত, স্থানীয় ট্রাস্ট স্টোর বজায় রাখতে হবে, যেখানে বিশ্বস্ত IACA রুট সার্টিফিকেটগুলো থাকবে:

  • প্রোডাকশন IACA সার্টিফিকেট: অফিসিয়াল ইস্যুকারী কর্তৃপক্ষ থেকে রুট সার্টিফিকেট ডাউনলোড এবং কনফিগার করুন। আমাদের সমর্থিত ইস্যুকারী এবং IACA সার্টিফিকেটের তালিকা দেখুন।
  • AAMVA VICAL: মার্কিন এখতিয়ারভুক্ত অঞ্চলগুলোর জন্য, রিডার সিস্টেমগুলো আমেরিকান অ্যাসোসিয়েশন অফ মোটর ভেহিকেল অ্যাডমিনিস্ট্রেটরস (AAMVA)-এর ভেরিফায়েড ইস্যুয়ার সার্টিফিকেট অথরিটি লিস্ট (VICAL) পরিষেবার সাথে একীভূত হয়ে স্টেট ট্রাস্ট অ্যাঙ্করগুলোকে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ করতে পারে।
  • স্যান্ডবক্স টেস্টিং রুট: স্যান্ডবক্স ক্রেডেনশিয়ালের বিপরীতে পরীক্ষা করার সময়, নিশ্চিত করুন যে রিডার Google Sandbox IACA Root-কে বিশ্বাস করে।
import org.multipaz.crypto.X509Cert

// Configure trusted IACA certificates in the trust store
val trustedCertificates = mutableListOf<X509Cert>()

// Add official state IACA certificates
trustedCertificates.add(X509Cert.fromPem(sampleStateIacaPem))

// Add Google Sandbox IACA root certificate for testing
trustedCertificates.add(X509Cert.fromPem(googleSandboxIacaPem))

val verifier = MultipazVerifier(trustStore = trustedCertificates)
val verificationResult = verifier.verify(deviceResponseBytes, sessionTranscript)

if (verificationResult.isIssuerAuthorized && verificationResult.isDeviceAuthenticated) {
    // Credential is valid and authentic
} else {
    // Reject presentation: cryptographic validation failed
}

পাঠক প্রমাণীকরণ (প্রস্তাবিত)

রিডার অথেন্টিকেশন, একটি অনুমোদিত X.509 রিডার সার্টিফিকেট ব্যবহার করে ReaderAuthentication স্ট্রাকচারে স্বাক্ষর করার মাধ্যমে রিডার অ্যাপ্লিকেশনকে গুগল ওয়ালেটের কাছে ক্রিপ্টোগ্রাফিকভাবে তার পরিচয় প্রমাণ করার সুযোগ দেয়।

  • কেন এটি সুপারিশ করা হয়: রিডার অথেন্টিকেশন আপনার রিডার অ্যাপ বা টার্মিনালকে ব্যবহারকারীর কাছে একটি বিশ্বস্ত পরিচয় তুলে ধরতে সাহায্য করে। যদিও সাধারণ পাবলিক অ্যাট্রিবিউটের (যেমন, age_over_21 যাচাই করা) জন্য এটি ঐচ্ছিক, তবে ব্যবহারকারীর বিশ্বাসযোগ্যতা বাড়াতে রিডার ইন্টিগ্রেশনের জন্য এটি জোরালোভাবে সুপারিশ করা হয় এবং সংবেদনশীল অ্যাট্রিবিউট (যেমন সম্পূর্ণ সোশ্যাল সিকিউরিটি নম্বর, আবাসিক ঠিকানা, বা নির্দিষ্ট রাজ্যের অনুমোদন) অনুরোধ করার সময় এটি আইনগতভাবে বা নীতিগতভাবে বাধ্যতামূলক হতে পারে।
  • এটি যেভাবে কাজ করে: রিডার তার সার্টিফিকেট চেইন অন্তর্ভুক্ত করে এবং সেশন ট্রান্সক্রিপ্টে স্বাক্ষর করে। ডেটা প্রকাশের আগে, গুগল ওয়ালেট সম্মতি স্ক্রিনে ব্যবহারকারীকে রিডারের যাচাইকৃত পরিচয় এবং প্রতিষ্ঠানের নাম প্রদর্শন করে।

পরীক্ষা ও উন্নয়ন সরঞ্জাম

ইন্টিগ্রেশন ত্বরান্বিত করতে, নিম্নলিখিত ডেভেলপার টুল এবং রেফারেন্স ইমপ্লিমেন্টেশনগুলো ব্যবহার করুন:

  1. মাল্টিপাজ রেফারেন্স অ্যাপস:
    • মাল্টিপাজ রিপোজিটরি ক্লোন করুন এবং ভৌত যাচাইকরণ প্রক্রিয়াগুলো পরীক্ষা করার জন্য IdentityReader অ্যান্ড্রয়েড স্যাম্পল অ্যাপটি চালান।
  2. গুগল ওয়ালেটে একটি টেস্ট আইডি তৈরি করুন:
  3. ওয়েব-ভিত্তিক যাচাইকারী পরীক্ষা:
    • CBOR অনুরোধগুলি পরিদর্শন করতে, ক্লেইম কোয়েরিগুলি অন্বেষণ করতে এবং W3C / ISO 18013-7 ওয়েব-ভিত্তিক উপস্থাপনাগুলি পরীক্ষা করতে verifier.multipaz.org ব্যবহার করুন।

সমস্যা সমাধান এবং ফিল্ড ডায়াগনস্টিকস

নিম্নলিখিত সারণিতে অফলাইন যাচাইকরণের সময় সম্মুখীন হওয়া সাধারণ সমস্যা এবং প্রস্তাবিত সমাধানগুলি তালিকাভুক্ত করা হলো:

সমস্যা / লক্ষণ মূল কারণ প্রস্তাবিত সমাধান
BLE সংযোগের সময়সীমা শেষ / সংযোগ স্থাপনে ব্যর্থতা
  • উচ্চ-ঘনত্বের পরিবেশে আরএফ হস্তক্ষেপ।
  • নির্দিষ্ট রিডার হার্ডওয়্যারে পেরিফেরাল ও সেন্ট্রাল মোডের মধ্যে অসামঞ্জস্যতা।
  • স্ক্যানিং টাইমআউট।
  • নিশ্চিত করুন যে রিডারটি BLE সেন্ট্রাল ক্লায়েন্ট এবং পেরিফেরাল সার্ভার উভয় মোডই সমর্থন করে।
  • সক্রিয় এনগেজমেন্টের সময় জোরালো স্ক্যানিংয়ের জন্য BLE স্ক্যান উইন্ডো এবং ইন্টারভাল অ্যাডজাস্ট করুন।
  • MTU সাইজ নেগোসিয়েশন সফলভাবে সম্পন্ন হয়েছে কিনা তা যাচাই করুন।
NFC ট্যাপ এনগেজমেন্ট ব্যর্থ হয় বা সংযোগ বিচ্ছিন্ন হয়ে যায়। BLE হ্যান্ডওভার রেকর্ডটি সম্পূর্ণরূপে স্থানান্তরিত হওয়ার আগেই ব্যবহারকারী মোবাইল ডিভাইসটি রিডার অ্যান্টেনা থেকে সরিয়ে নেন।
  • NFC সংযোগ শুরু হওয়ার সাথে সাথেই টার্মিনালে তাৎক্ষণিক দৃশ্যমান/শ্রাব্য/স্পর্শজনিত প্রতিক্রিয়া প্রদান করুন।
  • BLE সংযোগ স্থাপিত না হওয়া পর্যন্ত ফোনটি NFC টার্গেটের উপর স্থিরভাবে ধরে রাখতে ব্যবহারকারীদের নির্দেশ দিন।
UNTRUSTED_ISSUER / সার্টিফিকেট চেইন ব্যর্থতা ডকুমেন্ট সাইনার সার্টিফিকেটটি রিডারের লোকাল ট্রাস্ট স্টোরে থাকা কোনো বিশ্বস্ত IACA সার্টিফিকেটের সাথে চেইন করা থাকে না।
  • যাচাই করুন যে ইস্যুকারীর রুট সার্টিফিকেটটি রিডার ট্রাস্ট স্টোরে লোড করা আছে।
  • স্যান্ডবক্সে পরীক্ষা করার সময়, Google Sandbox IACA Root লোড হয়েছে কিনা তা যাচাই করুন।
  • আইএসিএ সার্টিফিকেট তালিকা (যেমন AAMVA VICAL) পর্যায়ক্রমে হালনাগাদ করা নিশ্চিত করুন।
INVALID_VALIDITY_INFO / মেয়াদোত্তীর্ণ MSO
  • রিডার সিস্টেমের ঘড়িটি অসঙ্গত।
  • MSO স্বাক্ষরটির মেয়াদ শেষ হয়ে গেছে।
  • রিডার ডিভাইসটি যেন NTP-এর মাধ্যমে নিয়মিত তার সিস্টেমের সময় সিঙ্ক্রোনাইজ করে, তা নিশ্চিত করুন।
  • ক্রেডেনশিয়াল টোকেন রিফ্রেশ করার জন্য, ইন্টারনেট সংযোগ থাকা অবস্থায় ব্যবহারকারীকে গুগল ওয়ালেট খুলতে অনুরোধ করুন।
DEVICE_AUTHENTICATION_FAILED রিডার এবং ওয়ালেটের মধ্যে সেশন ট্রান্সক্রিপ্টের অমিল, অথবা ডিভাইসের ক্ষণস্থায়ী স্বাক্ষরটি অবৈধ।
  • SessionTranscript কাঠামোতে DeviceEngagementBytes এবং EReaderKeyBytes এর সঠিক র বাইটগুলো পুনরায় এনকোড না করে সংরক্ষিত রাখা নিশ্চিত করুন।
অ্যান্ড্রয়েড ১২+ অনুমতি ক্র্যাশ অ্যাপ্লিকেশনটি রানটাইম অনুমতি ছাড়াই BLE-এর মাধ্যমে স্ক্যান বা প্রচার করার চেষ্টা করেছে।
  • রিডার সেশন শুরু করার আগে রানটাইমে BLUETOOTH_SCAN , BLUETOOTH_CONNECT এবং BLUETOOTH_ADVERTISE চেক করুন ও অনুরোধ জানান।

সরাসরি পাঠকদের জন্য ইউএক্স ও গোপনীয়তা নির্দেশিকা

ফিজিক্যাল রিডার এবং এর সহযোগী অ্যাপ ডিজাইন করার সময়:

  • ইউজার ইন্টারফেসে (UI) বাছাইকৃত তথ্য প্রকাশ করুন: অপারেটরের কাছে শুধুমাত্র সিদ্ধান্ত বা ন্যূনতম প্রয়োজনীয় বৈশিষ্ট্যটি প্রদর্শন করুন (যেমন, ব্যবহারকারীর সম্পূর্ণ জন্মতারিখ, ঠিকানা এবং লাইসেন্স নম্বর দেখানোর পরিবর্তে একটি সুস্পষ্ট সবুজ টিক চিহ্ন এবং " বয়স ২১+ যাচাইকৃত " লেখাটি দেখান)।
  • সুস্পষ্ট ভৌত মিথস্ক্রিয়া নির্দেশক: NFC টার্গেট জোনটিকে স্পষ্টভাবে চিহ্নিত করুন এবং প্রতিটি পর্যায় দেখানোর জন্য ভিজ্যুয়াল সংকেত (যেমন অ্যানিমেশন বা প্রোগ্রেস বার) প্রদর্শন করুন: ট্যাপ / স্ক্যান → সংযোগ হচ্ছে → যাচাই করা হচ্ছে → সম্পন্ন
  • ক্ষণস্থায়ী ডেটা পরিচালনা: ওয়ালেট থেকে প্রাপ্ত ব্যক্তিগত ডেটার উপাদানগুলি সংরক্ষণ বা লগ করবেন না, যদি না প্রযোজ্য আইন দ্বারা স্পষ্টভাবে প্রয়োজন হয় এবং intentToRetain = true এর মাধ্যমে প্রকাশ করা হয়।