কী প্রত্যয়ন সহ হার্ডওয়্যার-সমর্থিত কী জোড়া যাচাই করুন

কী প্রত্যয়ন আপনাকে আরও আত্মবিশ্বাস দেয় যে আপনি আপনার অ্যাপে যে কীগুলি ব্যবহার করেন তা একটি ডিভাইসের হার্ডওয়্যার-ব্যাকড কীস্টোরে সংরক্ষণ করা হয়৷ নিম্নলিখিত বিভাগগুলি বর্ণনা করে যে কীভাবে হার্ডওয়্যার-ব্যাকড কীগুলির বৈশিষ্ট্যগুলি যাচাই করা যায় এবং কীভাবে প্রত্যয়ন শংসাপত্রের এক্সটেনশন ডেটা ব্যাখ্যা করা যায়৷

দ্রষ্টব্য: আপনি একটি উত্পাদন-স্তরের পরিবেশে একটি ডিভাইসের হার্ডওয়্যার-ব্যাকড কীগুলির বৈশিষ্ট্যগুলি যাচাই করার আগে, নিশ্চিত করুন যে ডিভাইসটি হার্ডওয়্যার-স্তরের কী প্রত্যয়ন সমর্থন করে৷ এটি করার জন্য, যাচাইকরণ শংসাপত্রের চেইনে একটি রুট শংসাপত্র রয়েছে যা Google প্রত্যয়ন রুট কী দিয়ে স্বাক্ষরিত এবং মূল বিবরণের ডেটা কাঠামোর মধ্যে attestationSecurityLevel উপাদানটি TrustedEnvironment নিরাপত্তা স্তর বা StrongBox নিরাপত্তা স্তরে সেট করা আছে কিনা তা পরীক্ষা করুন৷

এছাড়াও, শংসাপত্রের চেইনে স্বাক্ষরগুলি যাচাই করা এবং শংসাপত্র প্রত্যাহার স্থিতি তালিকা চেক করে চেইনের কোনো কী প্রত্যাহার করা হয়নি তা নিশ্চিত করা গুরুত্বপূর্ণ৷ সবগুলো বৈধ না হলে এবং রুটটি Google রুট কী না হলে, প্রত্যয়নকে পুরোপুরি বিশ্বাস করবেন না। দ্রষ্টব্য, যাইহোক, প্রত্যাহার করা শংসাপত্র ধারণকারী ডিভাইসগুলি এখনও কেবলমাত্র সফ্টওয়্যার প্রত্যয়ন সমর্থনকারী ডিভাইসগুলির মতোই বিশ্বাসযোগ্য। একটি সম্পূর্ণ বৈধ প্রত্যয়ন একটি শক্তিশালী ইতিবাচক সূচক। একটি না থাকা একটি নিরপেক্ষ - নেতিবাচক নয় - নির্দেশক৷

একটি হার্ডওয়্যার-ব্যাকড কী জোড়া পুনরুদ্ধার এবং যাচাই করুন

কী প্রত্যয়নের সময়, আপনি একটি কী জোড়ার উপনাম নির্দিষ্ট করেন এবং এর শংসাপত্রের চেইন পুনরুদ্ধার করেন, যা আপনি সেই কী জোড়ার বৈশিষ্ট্য যাচাই করতে ব্যবহার করতে পারেন।

যদি ডিভাইসটি হার্ডওয়্যার-স্তরের কী প্রত্যয়ন সমর্থন করে, তাহলে এই চেইনের মধ্যে মূল শংসাপত্রটি একটি সত্যায়ন রুট কী ব্যবহার করে স্বাক্ষরিত হয় যা ডিভাইসের হার্ডওয়্যার-ব্যাকড কীস্টোরে সুরক্ষিতভাবে সরবরাহ করা হয়।

দ্রষ্টব্য: যে ডিভাইসগুলিতে হার্ডওয়্যার-স্তরের কী প্রত্যয়ন, Android 7.0 (API স্তর 24) বা উচ্চতর, এবং Google Play পরিষেবাগুলি পাঠানো হয়, রুট শংসাপত্রটি Google সত্যায়ন রুট কী দিয়ে স্বাক্ষরিত হয়৷ যাচাই করুন যে এই রুট সার্টিফিকেটটি রুট সার্টিফিকেটের বিভাগে তালিকাভুক্তদের মধ্যে রয়েছে।

মূল প্রত্যয়ন বাস্তবায়ন করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. হার্ডওয়্যার-ব্যাকড কীস্টোরের সাথে যুক্ত X.509 শংসাপত্রের চেইনের রেফারেন্স পেতে একটি KeyStore অবজেক্টের getCertificateChain() পদ্ধতি ব্যবহার করুন।
  2. শংসাপত্রগুলিকে একটি পৃথক সার্ভারে পাঠান যা আপনি বৈধতার জন্য বিশ্বাস করেন৷

    সতর্কতা: কীস্টোরের মতো একই ডিভাইসে নিম্নলিখিত যাচাইকরণ প্রক্রিয়াটি সম্পূর্ণ করবেন না। যদি সেই ডিভাইসের অ্যান্ড্রয়েড সিস্টেমের সাথে আপোস করা হয়, তাহলে এটি বৈধকরণ প্রক্রিয়াটিকে এমন কিছু বিশ্বাস করতে পারে যা অবিশ্বস্ত।

  3. আপনার টুলসেটের জন্য সবচেয়ে উপযুক্ত X.509 সার্টিফিকেট চেইন পার্সিং এবং বৈধতা লাইব্রেরির একটি রেফারেন্স পান। যাচাই করুন যে রুট পাবলিক সার্টিফিকেট বিশ্বস্ত এবং প্রতিটি শংসাপত্র চেইনের পরবর্তী শংসাপত্রে স্বাক্ষর করে।

  4. কোনো শংসাপত্র প্রত্যাহার করা হয়নি তা নিশ্চিত করতে প্রতিটি শংসাপত্রের প্রত্যাহার স্থিতি পরীক্ষা করুন৷

  5. ঐচ্ছিকভাবে, প্রভিশনিং ইনফরমেশন সার্টিফিকেট এক্সটেনশন পরিদর্শন করুন যা শুধুমাত্র নতুন শংসাপত্র চেইনে উপস্থিত থাকে।

    CBOR পার্সার লাইব্রেরির একটি রেফারেন্স পান যা আপনার টুলসেটের জন্য সবচেয়ে উপযুক্ত। প্রোভিশনিং ইনফরমেশন সার্টিফিকেট এক্সটেনশন রয়েছে এমন রুটের নিকটতম সার্টিফিকেট খুঁজুন। সেই সার্টিফিকেট থেকে প্রভিশনিং ইনফরমেশন সার্টিফিকেট এক্সটেনশন ডেটা বের করতে পার্সার ব্যবহার করুন।

    আরও বিশদ বিবরণের জন্য প্রভিশনিং ইনফরমেশন এক্সটেনশন ডেটা স্কিমা সম্পর্কে বিভাগটি দেখুন।

  6. ASN.1 পার্সার লাইব্রেরির একটি রেফারেন্স পান যা আপনার টুলসেটের জন্য সবচেয়ে উপযুক্ত। মূল প্রত্যয়ন শংসাপত্রের এক্সটেনশনটি ধারণ করে মূলের নিকটতম শংসাপত্রটি খুঁজুন। প্রভিশনিং ইনফরমেশন সার্টিফিকেট এক্সটেনশন উপস্থিত থাকলে, মূল প্রত্যয়ন শংসাপত্রের এক্সটেনশনটি অবিলম্বে পরবর্তী শংসাপত্রে থাকতে হবে। সেই সার্টিফিকেট থেকে মূল প্রত্যয়ন শংসাপত্র এক্সটেনশন ডেটা বের করতে পার্সার ব্যবহার করুন।

    সতর্কতা: অনুমান করবেন না যে মূল প্রত্যয়ন শংসাপত্রের এক্সটেনশনটি চেইনের পাতার শংসাপত্রে রয়েছে। শৃঙ্খলে এক্সটেনশনের শুধুমাত্র প্রথম ঘটনাটি বিশ্বাস করা যেতে পারে। এক্সটেনশনের আরও কোনো দৃষ্টান্ত নিরাপদ হার্ডওয়্যার দ্বারা জারি করা হয়নি এবং অবিশ্বস্ত কীগুলির জন্য জাল প্রত্যয়ন তৈরি করার চেষ্টা করার সময় চেইন প্রসারিতকারী আক্রমণকারী দ্বারা জারি করা হতে পারে।

    মূল প্রত্যয়ন নমুনা একটি সত্যায়ন শংসাপত্রের এক্সটেনশন ডেটা বের করতে বাউন্সি ক্যাসল থেকে ASN.1 পার্সার ব্যবহার করে। আপনি আপনার নিজের পার্সার তৈরি করার জন্য একটি রেফারেন্স হিসাবে এই নমুনা ব্যবহার করতে পারেন।

    আরও বিশদ বিবরণের জন্য মূল প্রত্যয়ন এক্সটেনশন ডেটা স্কিমা সম্পর্কে বিভাগটি দেখুন।

  7. সামঞ্জস্যের জন্য আপনি পূর্ববর্তী ধাপে যে এক্সটেনশন ডেটা পুনরুদ্ধার করেছেন তা পরীক্ষা করুন এবং হার্ডওয়্যার-ব্যাকড কী ধারণ করার আশা করা মানগুলির সেটের সাথে তুলনা করুন।

রুট সার্টিফিকেট

প্রত্যয়নের বিশ্বাসযোগ্যতা চেইনের মূল শংসাপত্রের উপর নির্ভর করে। যে অ্যান্ড্রয়েড ডিভাইসগুলি Google Play সহ Google স্যুট অ্যাপগুলির জন্য প্রয়োজনীয় পরীক্ষায় উত্তীর্ণ হয়েছে এবং যেগুলি Android 7.0 (API স্তর 24) বা উচ্চতর সংস্করণের সাথে লঞ্চ হয়েছে তাদের Google Hardware Attestation Root সার্টিফিকেট দ্বারা স্বাক্ষরিত সত্যায়ন কীগুলি ব্যবহার করা উচিত৷ মনে রাখবেন যে Android 8.0 (API লেভেল 26) পর্যন্ত প্রত্যয়নের প্রয়োজন ছিল না। রুট পাবলিক কী নিম্নরূপ:

  -----BEGIN PUBLIC KEY-----
  MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xU
  FmOr75gvMsd/dTEDDJdSSxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5j
  lRfdnJLmN0pTy/4lj4/7tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y
  //0rb+T+W8a9nsNL/ggjnar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73X
  pXyTqRxB/M0n1n/W9nGqC4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYI
  mQQcHtGl/m00QLVWutHQoVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB
  +TxywElgS70vE0XmLD+OJtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7q
  uvmag8jfPioyKvxnK/EgsTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgp
  Zrt3i5MIlCaY504LzSRiigHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7
  gLiMm0jhO2B6tUXHI/+MRPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82
  ixPvZtXQpUpuL12ab+9EaDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+
  NpUFgNPN9PvQi8WEg5UmAGMCAwEAAQ==
  -----END PUBLIC KEY-----
পূর্বে ইস্যু করা রুট সার্টিফিকেট
    -----BEGIN CERTIFICATE-----
    MIIFYDCCA0igAwIBAgIJAOj6GWMU0voYMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
    BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTYwNTI2MTYyODUyWhcNMjYwNTI0MTYy
    ODUyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
    AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
    Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
    tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
    nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
    C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
    oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
    JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
    sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
    igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
    RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
    aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
    AGMCAwEAAaOBpjCBozAdBgNVHQ4EFgQUNmHhAHyIBQlRi0RsR/8aTMnqTxIwHwYD
    VR0jBBgwFoAUNmHhAHyIBQlRi0RsR/8aTMnqTxIwDwYDVR0TAQH/BAUwAwEB/zAO
    BgNVHQ8BAf8EBAMCAYYwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cHM6Ly9hbmRyb2lk
    Lmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8wDQYJKoZIhvcNAQELBQAD
    ggIBACDIw41L3KlXG0aMiS//cqrG+EShHUGo8HNsw30W1kJtjn6UBwRM6jnmiwfB
    Pb8VA91chb2vssAtX2zbTvqBJ9+LBPGCdw/E53Rbf86qhxKaiAHOjpvAy5Y3m00m
    qC0w/Zwvju1twb4vhLaJ5NkUJYsUS7rmJKHHBnETLi8GFqiEsqTWpG/6ibYCv7rY
    DBJDcR9W62BW9jfIoBQcxUCUJouMPH25lLNcDc1ssqvC2v7iUgI9LeoM1sNovqPm
    QUiG9rHli1vXxzCyaMTjwftkJLkf6724DFhuKug2jITV0QkXvaJWF4nUaHOTNA4u
    JU9WDvZLI1j83A+/xnAJUucIv/zGJ1AMH2boHqF8CY16LpsYgBt6tKxxWH00XcyD
    CdW2KlBCeqbQPcsFmWyWugxdcekhYsAWyoSf818NUsZdBWBaR/OukXrNLfkQ79Iy
    ZohZbvabO/X+MVT3rriAoKc8oE2Uws6DF+60PV7/WIPjNvXySdqspImSN78mflxD
    qwLqRBYkA3I75qppLGG9rp7UCdRjxMl8ZDBld+7yvHVgt1cVzJx9xnyGCC23Uaic
    MDSXYrB4I4WHXPGjxhZuCuPBLTdOLU8YRvMYdEvYebWHMpvwGCF6bAx3JBpIeOQ1
    wDB5y0USicV3YgYGmi+NZfhA4URSh77Yd6uuJOJENRaNVTzk
    -----END CERTIFICATE-----
  
    -----BEGIN CERTIFICATE-----
    MIIFHDCCAwSgAwIBAgIJANUP8luj8tazMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
    BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTkxMTIyMjAzNzU4WhcNMzQxMTE4MjAz
    NzU4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
    AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
    Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
    tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
    nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
    C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
    oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
    JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
    sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
    igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
    RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
    aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
    AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
    IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
    VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBOMaBc8oumXb2voc7XCWnu
    XKhBBK3e2KMGz39t7lA3XXRe2ZLLAkLM5y3J7tURkf5a1SutfdOyXAmeE6SRo83U
    h6WszodmMkxK5GM4JGrnt4pBisu5igXEydaW7qq2CdC6DOGjG+mEkN8/TA6p3cno
    L/sPyz6evdjLlSeJ8rFBH6xWyIZCbrcpYEJzXaUOEaxxXxgYz5/cTiVKN2M1G2ok
    QBUIYSY6bjEL4aUN5cfo7ogP3UvliEo3Eo0YgwuzR2v0KR6C1cZqZJSTnghIC/vA
    D32KdNQ+c3N+vl2OTsUVMC1GiWkngNx1OO1+kXW+YTnnTUOtOIswUP/Vqd5SYgAI
    mMAfY8U9/iIgkQj6T2W6FsScy94IN9fFhE1UtzmLoBIuUFsVXJMTz+Jucth+IqoW
    Fua9v1R93/k98p41pjtFX+H8DslVgfP097vju4KDlqN64xV1grw3ZLl4CiOe/A91
    oeLm2UHOq6wn3esB4r2EIQKb6jTVGu5sYCcdWpXr0AUVqcABPdgL+H7qJguBw09o
    jm6xNIrw2OocrDKsudk/okr/AwqEyPKw9WnMlQgLIKw1rODG2NvU9oR3GVGdMkUB
    ZutL8VuFkERQGt6vQ2OCw0sV47VMkuYbacK/xyZFiRcrPJPb41zgbQj9XAEyLKCH
    ex0SdDrx+tWUDqG8At2JHA==
    -----END CERTIFICATE-----
  
    -----BEGIN CERTIFICATE-----
    MIIFHDCCAwSgAwIBAgIJAMNrfES5rhgxMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
    BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMjExMTE3MjMxMDQyWhcNMzYxMTEzMjMx
    MDQyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
    AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
    Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
    tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
    nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
    C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
    oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
    JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
    sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
    igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
    RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
    aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
    AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
    IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
    VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBTNNZe5cuf8oiq+jV0itTG
    zWVhSTjOBEk2FQvh11J3o3lna0o7rd8RFHnN00q4hi6TapFhh4qaw/iG6Xg+xOan
    63niLWIC5GOPFgPeYXM9+nBb3zZzC8ABypYuCusWCmt6Tn3+Pjbz3MTVhRGXuT/T
    QH4KGFY4PhvzAyXwdjTOCXID+aHud4RLcSySr0Fq/L+R8TWalvM1wJJPhyRjqRCJ
    erGtfBagiALzvhnmY7U1qFcS0NCnKjoO7oFedKdWlZz0YAfu3aGCJd4KHT0MsGiL
    Zez9WP81xYSrKMNEsDK+zK5fVzw6jA7cxmpXcARTnmAuGUeI7VVDhDzKeVOctf3a
    0qQLwC+d0+xrETZ4r2fRGNw2YEs2W8Qj6oDcfPvq9JySe7pJ6wcHnl5EZ0lwc4xH
    7Y4Dx9RA1JlfooLMw3tOdJZH0enxPXaydfAD3YifeZpFaUzicHeLzVJLt9dvGB0b
    HQLE4+EqKFgOZv2EoP686DQqbVS1u+9k0p2xbMA105TBIk7npraa8VM0fnrRKi7w
    lZKwdH+aNAyhbXRW9xsnODJ+g8eF452zvbiKKngEKirK5LGieoXBX7tZ9D1GNBH2
    Ob3bKOwwIWdEFle/YF/h6zWgdeoaNGDqVBrLr2+0DtWoiB1aDEjLWl9FmyIUyUm7
    mD/vFDkzF+wm7cyWpQpCVQ==
    -----END CERTIFICATE-----
  
    -----BEGIN CERTIFICATE-----
    MIIFHDCCAwSgAwIBAgIJAPHBcqaZ6vUdMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
    BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMjIwMzIwMTgwNzQ4WhcNNDIwMzE1MTgw
    NzQ4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
    AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
    Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
    tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
    nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
    C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
    oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
    JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
    sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
    igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
    RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
    aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
    AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
    IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
    VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQB8cMqTllHc8U+qCrOlg3H7
    174lmaCsbo/bJ0C17JEgMLb4kvrqsXZs01U3mB/qABg/1t5Pd5AORHARs1hhqGIC
    W/nKMav574f9rZN4PC2ZlufGXb7sIdJpGiO9ctRhiLuYuly10JccUZGEHpHSYM2G
    tkgYbZba6lsCPYAAP83cyDV+1aOkTf1RCp/lM0PKvmxYN10RYsK631jrleGdcdkx
    oSK//mSQbgcWnmAEZrzHoF1/0gso1HZgIn0YLzVhLSA/iXCX4QT2h3J5z3znluKG
    1nv8NQdxei2DIIhASWfu804CA96cQKTTlaae2fweqXjdN1/v2nqOhngNyz1361mF
    mr4XmaKH/ItTwOe72NI9ZcwS1lVaCvsIkTDCEXdm9rCNPAY10iTunIHFXRh+7KPz
    lHGewCq/8TOohBRn0/NNfh7uRslOSZ/xKbN9tMBtw37Z8d2vvnXq/YWdsm1+JLVw
    n6yYD/yacNJBlwpddla8eaVMjsF6nBnIgQOf9zKSe06nSTqvgwUHosgOECZJZ1Eu
    zbH4yswbt02tKtKEFhx+v+OTge/06V+jGsqTWLsfrOCNLuA8H++z+pUENmpqnnHo
    vaI47gC+TNpkgYGkkBT6B/m/U01BuOBBTzhIlMEZq9qkDWuM2cA5kW5V3FJUcfHn
    w1IdYIg2Wxg7yHcQZemFQg==
    -----END CERTIFICATE-----
  

যদি আপনি প্রাপ্ত প্রত্যয়ন চেইনের মূল শংসাপত্রটিতে এই সর্বজনীন কী থাকে এবং চেইনের কোনো শংসাপত্র প্রত্যাহার করা হয়নি, আপনি জানেন যে:

  1. আপনার কী হার্ডওয়্যারে রয়েছে যা Google নিরাপদ বলে বিশ্বাস করে; এবং
  2. এটির প্রত্যয়ন সনদে বর্ণিত বৈশিষ্ট্য রয়েছে।

যদি সত্যায়ন চেইনে অন্য কোনো রুট পাবলিক কী থাকে, তাহলে Google হার্ডওয়্যারের নিরাপত্তার বিষয়ে কোনো দাবি করে না। এর মানে এই নয় যে আপনার কী আপোস করা হয়েছে, শুধুমাত্র প্রত্যয়ন প্রমাণ করে না যে কীটি সুরক্ষিত হার্ডওয়্যারে রয়েছে। সেই অনুযায়ী আপনার নিরাপত্তা অনুমান সামঞ্জস্য করুন।

যদি রুট শংসাপত্রে এই পৃষ্ঠায় সর্বজনীন কী না থাকে, তাহলে দুটি সম্ভাব্য কারণ রয়েছে:

  • সম্ভবত, ডিভাইসটি 7.0 এর কম একটি Android সংস্করণের সাথে চালু হয়েছে এবং এটি হার্ডওয়্যার সত্যায়ন সমর্থন করে না। এই ক্ষেত্রে, অ্যান্ড্রয়েডে সত্যায়নের একটি সফ্টওয়্যার বাস্তবায়ন রয়েছে যা একই ধরণের প্রত্যয়ন শংসাপত্র তৈরি করে, কিন্তু Android সোর্স কোডে হার্ডকোড করা একটি কী দিয়ে স্বাক্ষরিত। যেহেতু এই সাইনিং কীটি গোপনীয় নয়, তাই হয়ত কোনো আক্রমণকারী সুরক্ষিত হার্ডওয়্যার প্রদানের ভান করে প্রত্যয়নটি তৈরি করেছে।
  • অন্য সম্ভাব্য কারণ হল ডিভাইসটি একটি Google Play ডিভাইস নয়। সেক্ষেত্রে, ডিভাইস প্রস্তুতকারক তাদের নিজস্ব রুট তৈরি করতে এবং প্রত্যয়নের অর্থ কী তা নিয়ে তাদের পছন্দমত দাবি করতে স্বাধীন। ডিভাইস প্রস্তুতকারকের ডকুমেন্টেশন পড়ুন। মনে রাখবেন যে এই লেখা পর্যন্ত Google এমন কোন ডিভাইস নির্মাতাদের সম্পর্কে অবগত নয় যারা এটি করেছে।

শংসাপত্র প্রত্যাহার অবস্থা তালিকা

অ্যাটেস্টেশন কীগুলি অনেক কারণে প্রত্যাহার করা যেতে পারে, যার মধ্যে কোনও আক্রমণকারীর দ্বারা ভুল ব্যবস্থাপনা বা সন্দেহজনক নিষ্কাশন সহ। অতএব, এটি অত্যন্ত গুরুত্বপূর্ণ যে একটি প্রত্যয়ন শৃঙ্খলে প্রতিটি শংসাপত্রের স্থিতি অফিসিয়াল শংসাপত্র প্রত্যাহার স্থিতি তালিকা (CRL) এর বিপরীতে পরীক্ষা করা। এই তালিকাটি Google দ্বারা রক্ষণাবেক্ষণ করা হয় এবং এখানে প্রকাশিত হয়: https://android.googleapis.com/attestation/status । HTTP প্রতিক্রিয়ার Cache-Control শিরোনামটি নির্ধারণ করে যে কত ঘন ঘন আপডেটগুলি পরীক্ষা করতে হবে তাই প্রতিটি শংসাপত্র যাচাইয়ের জন্য একটি নেটওয়ার্ক অনুরোধের প্রয়োজন হয় না। এই ইউআরএলটি একটি JSON ফাইল ফেরত দেয় যার মধ্যে যেকোনও সার্টিফিকেটের জন্য প্রত্যাহার স্থিতি রয়েছে যার স্বাভাবিক বৈধ স্থিতি নেই। JSON ফাইলের বিন্যাস নিম্নলিখিত JSON স্কিমা ( ড্রাফ্ট 07 ) সংজ্ঞা মেনে চলে:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "entries": {
      "description" : "Each entry represents the status of an attestation key. The dictionary-key is the certificate serial number in lowercase hex.",
      "type": "object",
      "propertyNames": {
        "pattern": "^[a-f1-9][a-f0-9]*$"
      },
      "additionalProperties": {
        "type": "object",
        "properties": {
          "status": {
            "description": "[REQUIRED] Current status of the key.",
            "type": "string",
            "enum": ["REVOKED", "SUSPENDED"]
          },
          "expires": {
            "description": "[OPTIONAL] UTC date when certificate expires in ISO8601 format (YYYY-MM-DD). Can be used to clear expired certificates from the status list.",
            "type": "string",
            "format": "date"
          },
          "reason": {
            "description": "[OPTIONAL] Reason for the current status.",
            "type": "string",
            "enum": ["UNSPECIFIED", "KEY_COMPROMISE", "CA_COMPROMISE", "SUPERSEDED", "SOFTWARE_FLAW"]
          },
          "comment": {
            "description": "[OPTIONAL] Free form comment about the key status.",
            "type": "string",
            "maxLength": 140
          }
        },
        "required": ["status"],
        "additionalProperties": false
      }
    }
  },
  "required": ["entries"],
  "additionalProperties": false
}

উদাহরণ CRL:

{
  "entries": {
    "2c8cdddfd5e03bfc": {
      "status": "REVOKED",
      "expires": "2020-11-13",
      "reason": "KEY_COMPROMISE",
      "comment": "Key stored on unsecure system"
    },
    "c8966fcb2fbb0d7a": {
      "status": "SUSPENDED",
      "reason": "SOFTWARE_FLAW",
      "comment": "Bug in keystore causes this key malfunction b/555555"
    }
  }
}

লিগ্যাসি CRLs

লিগ্যাসি প্রত্যয়ন শংসাপত্রে এমবেড করা CRL URLগুলি কাজ চালিয়ে যাচ্ছে৷ নতুন প্রত্যয়ন শংসাপত্রে আর একটি CRL URL এক্সটেনশন নেই৷ উত্তরাধিকার শংসাপত্রের স্থিতিটিও প্রত্যয়ন স্থিতি তালিকায় অন্তর্ভুক্ত করা হয়েছে, তাই বিকাশকারীরা নিরাপদে নতুন এবং উত্তরাধিকার শংসাপত্র উভয়ের জন্যই প্রত্যয়ন স্থিতি তালিকা ব্যবহার করতে পারেন৷ কীভাবে সঠিকভাবে অ্যান্ড্রয়েড প্রত্যয়ন কীগুলি যাচাই করতে হয় তার একটি উদাহরণ কী প্রত্যয়ন নমুনায় অন্তর্ভুক্ত করা হয়েছে৷

মূল প্রত্যয়ন এক্সটেনশন ডেটা স্কিমা

মূল প্রত্যয়ন এক্সটেনশনে OID 1.3.6.1.4.1.11129.2.1.17 রয়েছে। এক্সটেনশনটি একটি ASN.1 স্কিমা অনুযায়ী তথ্য সংরক্ষণ করে। আপনি যে সত্যায়িত সংস্করণটি ব্যবহার করছেন তার সাথে সম্পর্কিত স্কিমা দেখতে, নিম্নলিখিত স্কিমা তালিকায় উপযুক্ত ট্যাবটি নির্বাচন করুন:

সংস্করণ 300

KeyDescription ::= SEQUENCE {
    attestationVersion  300,
    attestationSecurityLevel  SecurityLevel,
    keyMintVersion  INTEGER,
    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,
    trustedUserPresenceRequired  [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationRequired  [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceRequired  [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  200,
    attestationSecurityLevel  SecurityLevel,
    keyMintVersion  INTEGER,
    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,
    trustedUserPresenceRequired  [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationRequired  [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceRequired  [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  100,
    attestationSecurityLevel  SecurityLevel,
    keyMintVersion  INTEGER,
    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,
    trustedUserPresenceRequired  [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationRequired  [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceRequired  [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  4,
    attestationSecurityLevel  SecurityLevel,
    keymasterVersion  INTEGER,
    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,
    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,
    earlyBootOnly  [305] EXPLICIT NULL 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,
    trustedUserPresenceRequired  [507] EXPLICIT NULL OPTIONAL,
    trustedConfirmationRequired  [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceRequired  [509] EXPLICIT NULL OPTIONAL,
    allApplications  [600] 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  3,
    attestationSecurityLevel  SecurityLevel,
    keymasterVersion  INTEGER,
    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,
    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,
    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,
    trustedConfirmationRequired  [508] EXPLICIT NULL OPTIONAL,
    unlockedDeviceRequired  [509] EXPLICIT NULL OPTIONAL,
    allApplications  [600] 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  2,
    attestationSecurityLevel  SecurityLevel,
    keymasterVersion  INTEGER,
    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  1,
    attestationSecurityLevel  SecurityLevel,
    keymasterVersion  INTEGER,
    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
মূল প্রত্যয়ন বৈশিষ্ট্য সংস্করণ.
মান সংস্করণ
1 কীমাস্টার সংস্করণ 2.0
2 কীমাস্টার সংস্করণ 3.0
3 কীমাস্টার সংস্করণ 4.0
4 কীমাস্টার সংস্করণ 4.1
100 KeyMint সংস্করণ 1.0
200 কীমিন্ট সংস্করণ 2.0
300 KeyMint সংস্করণ 3.0
attestationSecurityLevel

প্রত্যয়নের নিরাপত্তা স্তর

সতর্কতা: যদিও Android সিস্টেমে সংরক্ষিত কীগুলিকে প্রত্যয়ন করা সম্ভব—অর্থাৎ, যদি attestationSecurityLevel মান সফ্টওয়্যারে সেট করা থাকে—এন্ড্রয়েড সিস্টেমে আপস করা হলে আপনি এই প্রত্যয়নগুলিকে বিশ্বাস করতে পারবেন না৷

keymasterVersion / keyMintVersion
Keymaster বা KeyMint হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) এর সংস্করণ।
মান সংস্করণ
0 কীমাস্টার সংস্করণ 0.2 বা 0.3
1 কীমাস্টার সংস্করণ 1.0
2 কীমাস্টার সংস্করণ 2.0
3 কীমাস্টার সংস্করণ 3.0
4 কীমাস্টার সংস্করণ 4.0
41 কীমাস্টার সংস্করণ 4.1
100 KeyMint সংস্করণ 1.0
200 KeyMint সংস্করণ 2.0
300 KeyMint সংস্করণ 3.0
keymasterSecurityLevel / keyMintSecurityLevel
Keymaster/KeyMint বাস্তবায়নের নিরাপত্তা স্তর
attestationChallenge
মূল সৃষ্টির সময় প্রদান করা চ্যালেঞ্জ ধারণ করে। Tag::ATTESTATION_CHALLENGE অনুমোদন ট্যাগে সংরক্ষিত এই মানটি আপনার সার্ভারের প্রদত্ত মানের সাথে মেলে কিনা তা পরীক্ষা করুন। অন্যথায়, আপনার পরিষেবা পুরানো প্রত্যয়ন শংসাপত্র পুনরায় প্লে করার জন্য ঝুঁকিপূর্ণ হতে পারে।
uniqueId
এই মানটি ডিভাইসটিকে চিহ্নিত করে—কিন্তু শুধুমাত্র সীমিত সময়ের জন্য। এটি গণনা করা হয় এবং শুধুমাত্র সিস্টেম অ্যাপ দ্বারা ব্যবহৃত হয়। অন্য সব অ্যাপে uniqueId খালি।
softwareEnforced
ঐচ্ছিক। Keymaster / KeyMint অনুমোদনের তালিকা যা Android সিস্টেম দ্বারা প্রয়োগ করা হয়, ডিভাইসের বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট (TEE) দ্বারা নয়। এই অনুমোদন তালিকার তথ্য সংগ্রহ করা হয় বা কোড দ্বারা তৈরি করা হয় যা প্ল্যাটফর্মের অংশ এবং ডিভাইসের সিস্টেম পার্টিশনে সংরক্ষণ করা হয়। এই অনুমোদন তালিকার বিষয়বস্তু যতক্ষণ পর্যন্ত ডিভাইসটি Android প্ল্যাটফর্ম সুরক্ষা মডেলের সাথে সঙ্গতিপূর্ণ একটি অপারেটিং সিস্টেম চালাচ্ছে ততক্ষণ পর্যন্ত বিশ্বাস করা যেতে পারে৷ সমস্ত প্রত্যয়িত অ্যান্ড্রয়েড ডিভাইস এই নিরাপত্তা মডেল মেনে চলে, তাই যদি ডিভাইসটি লক করা থাকে এবং যাচাইকৃত বুট অবস্থা Verified হয়, তাহলে এখানকার মানগুলি নির্ভরযোগ্য হওয়া উচিত। একটি পরিবর্তিত ডিভাইসে, যেখানে বুটলোডারটি আনলক করা থাকে, ব্যবহারকারী একটি অপারেটিং সিস্টেম ইনস্টল করতে পারেন যা Android প্ল্যাটফর্ম সুরক্ষা মডেলের সাথে সঙ্গতিপূর্ণ নয়, তাই এই ক্ষেত্রের মানগুলি ব্যবহারকারীর দ্বারা ইচ্ছামত বেছে নেওয়া হতে পারে৷
hardwareEnforced
ঐচ্ছিক। Keymaster / KeyMint অনুমোদনের তালিকা যা ডিভাইসের বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট (TEE) দ্বারা প্রয়োগ করা হয়। এই অনুমোদন তালিকার তথ্য সংগৃহীত বা কোড দ্বারা তৈরি করা হয় যা সুরক্ষিত হার্ডওয়্যারের একটি অংশ এবং প্ল্যাটফর্ম দ্বারা নিয়ন্ত্রিত হয় না। উদাহরণস্বরূপ, এই অনুমোদন তালিকার তথ্য ডিভাইসের বুটলোডার বা ডিভাইসে চলমান TEE থেকে আসে। এই অনুমোদনের তালিকার ক্ষেত্রগুলি যেগুলি সরাসরি KeyMint দ্বারা সেট করা হয় না সেগুলি সুরক্ষিত হার্ডওয়্যারের অন্যান্য অংশ (উদাহরণস্বরূপ, বুটলোডার) দ্বারা সুরক্ষিত যোগাযোগের চ্যানেলগুলির মাধ্যমে সরবরাহ করা হয় যা প্ল্যাটফর্মের উপর আস্থা রাখা জড়িত নয়৷ সুরক্ষিত হার্ডওয়্যার এবং অ্যান্ড্রয়েড সিস্টেমের মধ্যে পার্থক্য হল যে ব্যবহারকারী নিরাপদ হার্ডওয়্যারে (ফার্মওয়্যার) চলমান কোডটি সংশোধন করতে পারে না তাই ব্যবহারকারী এই অনুমোদন তালিকার মানগুলিকে বিকৃত করতে পারে না।

নিরাপত্তা স্তর

এই ডেটা স্ট্রাকচার ডিভাইসের মধ্যে অবস্থানের উপর ভিত্তি করে একটি সফ্টওয়্যার বৈশিষ্ট্য, যেমন একটি কী জোড়া, সুরক্ষিত রয়েছে তা নির্দেশ করে।

যেহেতু ডেটা স্ট্রাকচারটি একটি গণনা, এটি নিম্নলিখিত মানগুলির মধ্যে ঠিক একটি গ্রহণ করে:

কীস্টোর
বৈশিষ্ট্যটি তৈরি এবং পরিচালনার যুক্তি Android সিস্টেমে প্রয়োগ করা হয়। কী জোড়া তৈরি এবং সঞ্চয় করার উদ্দেশ্যে, এই অবস্থানটি TEE-এর থেকে কম সুরক্ষিত কিন্তু আপনার অ্যাপের প্রসেস স্পেসের চেয়ে বেশি সুরক্ষিত৷
বিশ্বস্ত পরিবেশ
বৈশিষ্ট্যটি তৈরি এবং পরিচালনার যুক্তি নিরাপদ হার্ডওয়্যারে প্রয়োগ করা হয়, যেমন একটি TEE। কী জোড়া তৈরি এবং সঞ্চয় করার উদ্দেশ্যে, এই অবস্থানটি আরও নিরাপদ কারণ নিরাপদ হার্ডওয়্যার দূরবর্তী সমঝোতার জন্য অত্যন্ত প্রতিরোধী।
স্ট্রংবক্স
বৈশিষ্ট্যটি তৈরি এবং পরিচালনার যুক্তি একটি ডেডিকেটেড হার্ডওয়্যার সুরক্ষা মডিউলে প্রয়োগ করা হয়৷ কী জোড়া তৈরি এবং সংরক্ষণের উদ্দেশ্যে, এই অবস্থানটি আরও নিরাপদ কারণ এটি মডিউলের বিরুদ্ধে দূরবর্তী আপস এবং হার্ডওয়্যার আক্রমণের জন্য অত্যন্ত প্রতিরোধী।
সফটওয়্যার
বৈশিষ্ট্যটি তৈরি এবং পরিচালনার যুক্তি একটি KeyMint বা Keymaster বাস্তবায়নে প্রয়োগ করা হয় যা নিরাপদ পরিবেশে চলে না। কী জোড়া তৈরি এবং সঞ্চয় করার উদ্দেশ্যে, এই অবস্থানটি TEE-এর থেকে কম সুরক্ষিত কিন্তু আপনার অ্যাপের প্রসেস স্পেসের চেয়ে বেশি সুরক্ষিত৷

অনুমোদন তালিকা

এই ডাটা স্ট্রাকচারে কী পেয়ারের বৈশিষ্ট্য থাকে, যেমনটি Keymaster বা KeyMint হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) এ সংজ্ঞায়িত করা হয়েছে। আপনি এই মানগুলিকে ডিভাইসের বর্তমান অবস্থার সাথে বা প্রত্যাশিত মানগুলির একটি সেটের সাথে তুলনা করেন যে একটি কী জোড়া এখনও আপনার অ্যাপে ব্যবহারের জন্য বৈধ।

প্রতিটি ক্ষেত্রের নাম একইভাবে নামের Keymaster/KeyMint অনুমোদন ট্যাগের সাথে মিলে যায়। উদাহরণ স্বরূপ, একটি অনুমোদন তালিকার keySize ক্ষেত্রটি Tag::KEY_SIZE অনুমোদন ট্যাগের সাথে মিলে যায়।

AIDL ইন্টারফেস স্পেসিফিকেশন অনুমোদন ট্যাগ সম্পর্কে নিশ্চিত তথ্য ধারণ করে। এটি প্রতিটি ট্যাগের আইডি মান এবং প্রকারকে সংজ্ঞায়িত করে এবং এছাড়াও নির্দেশ করে যে প্রতিটি ট্যাগ hardwareEnforced অথরাইজেশন লিস্টে উপস্থিত থাকবে কিনা (ইঙ্গিত করে যে ট্যাগটি সুরক্ষিত পরিবেশে প্রয়োগ করা হয়েছে), বা softwareEnforced অনুমোদন তালিকায় (ইঙ্গিত করে যে ট্যাগটি Android দ্বারা প্রয়োগ করা হয়, সাধারণত কীস্টোর দ্বারা)।

নিম্নলিখিত তালিকার প্রতিটি ক্ষেত্র ঐচ্ছিক:

purpose
Tag::PURPOSE অনুমোদন ট্যাগের সাথে সঙ্গতিপূর্ণ, যা 1 এর ট্যাগ আইডি মান ব্যবহার করে।
algorithm

Tag::ALGORITHM অনুমোদন ট্যাগের সাথে মিলে যায়, যা 2 এর ট্যাগ আইডি মান ব্যবহার করে।

একটি প্রমাণীকরণ AuthorizationList অবজেক্টে, অ্যালগরিদম মান সর্বদা RSA বা EC হয়।

keySize
Tag::KEY_SIZE অনুমোদন ট্যাগের সাথে মিলে যায়, যা 3 এর ট্যাগ আইডি মান ব্যবহার করে।
digest
Tag::DIGEST অনুমোদন ট্যাগের সাথে মিলে যায়, যেটি ট্যাগ আইডি মান 5 ব্যবহার করে।
padding
Tag::PADDING অনুমোদন ট্যাগের সাথে মিলে যায়, যা 6 এর ট্যাগ আইডি মান ব্যবহার করে।
ecCurve

Tag::EC_CURVE অনুমোদন ট্যাগের সাথে মিলে যায়, যা 10 এর ট্যাগ আইডি মান ব্যবহার করে।

একটি উপবৃত্তাকার বক্ররেখা (EC) কী জোড়া তৈরি করতে ব্যবহৃত প্যারামিটারের সেট, যা সাইনিং এবং যাচাইকরণের জন্য ECDSA ব্যবহার করে, Android সিস্টেম কীস্টোরের মধ্যে।

rsaPublicExponent
Tag::RSA_PUBLIC_EXPONENT অনুমোদন ট্যাগের সাথে মিলে যায়, যা 200 এর ট্যাগ আইডি মান ব্যবহার করে।
mgfDigest

শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 100-এ উপস্থাপন করুন।

Tag::RSA_OAEP_MGF_DIGEST KeyMint অনুমোদন ট্যাগের সাথে মিলে যায়, যা 203 এর ট্যাগ আইডি মান ব্যবহার করে।
rollbackResistance

শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 3 উপস্থাপন করুন।

Tag::ROLLBACK_RESISTANT অনুমোদন ট্যাগের সাথে মিলে যায়, যা 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 এর ট্যাগ আইডি মান ব্যবহার করে।
noAuthRequired

Tag::NO_AUTH_REQUIRED অনুমোদন ট্যাগের সাথে মিলে যায়, যা 503 এর ট্যাগ আইডি মান ব্যবহার করে।

userAuthType
Tag::USER_AUTH_TYPE অনুমোদন ট্যাগের সাথে মিলে যায়, যা 504 এর ট্যাগ আইডি মান ব্যবহার করে।
authTimeout
Tag::AUTH_TIMEOUT অনুমোদন ট্যাগের সাথে মিলে যায়, যা 505 এর ট্যাগ আইডি মান ব্যবহার করে।
allowWhileOnBody

Tag::ALLOW_WHILE_ON_BODY অনুমোদন ট্যাগের সাথে মিলে যায়, যা 506 এর ট্যাগ আইডি মান ব্যবহার করে।

ব্যবহারকারী যদি এখনও তাদের শরীরে ডিভাইসটি পরে থাকেন তবে তার প্রমাণীকরণের সময়সীমার পরে কী ব্যবহার করার অনুমতি দেয়৷ মনে রাখবেন যে একটি সুরক্ষিত অন-বডি সেন্সর নির্ধারণ করে যে ডিভাইসটি ব্যবহারকারীর শরীরে পরা হচ্ছে কিনা।

trustedUserPresenceRequired

শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 3 উপস্থাপন করুন।

Tag::TRUSTED_USER_PRESENCE_REQUIRED অনুমোদন ট্যাগের সাথে মিলে যায়, যা 507 এর ট্যাগ আইডি মান ব্যবহার করে।

নির্দিষ্ট করে যে এই কীটি শুধুমাত্র তখনই ব্যবহারযোগ্য হবে যদি ব্যবহারকারী শারীরিক উপস্থিতির প্রমাণ প্রদান করে থাকে। বেশ কয়েকটি উদাহরণ নিম্নলিখিত অন্তর্ভুক্ত:

  • একটি স্ট্রংবক্স কী-এর জন্য, একটি হার্ডওয়্যার বোতাম স্ট্রংবক্স ডিভাইসের একটি পিনে হার্ডওয়ারযুক্ত।
  • একটি TEE কী-এর জন্য, আঙুলের ছাপ প্রমাণীকরণ উপস্থিতির প্রমাণ প্রদান করে যতক্ষণ না TEE স্ক্যানারের একচেটিয়া নিয়ন্ত্রণ থাকে এবং ফিঙ্গারপ্রিন্ট ম্যাচিং প্রক্রিয়াটি সম্পাদন করে।
trustedConfirmationRequired

শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 3 উপস্থাপন করুন।

Tag::TRUSTED_CONFIRMATION_REQUIRED অনুমোদন ট্যাগের সাথে মিলে যায়, যা 508 এর ট্যাগ আইডি মান ব্যবহার করে।

নির্দিষ্ট করে যে কীটি শুধুমাত্র তখনই ব্যবহারযোগ্য হবে যদি ব্যবহারকারী একটি অনুমোদন টোকেন ব্যবহার করে সাইন ইন করা ডেটার নিশ্চিতকরণ প্রদান করে। ব্যবহারকারীর নিশ্চিতকরণ কিভাবে পেতে হয় সে সম্পর্কে আরও তথ্যের জন্য, Android Protected Confirmation দেখুন।

দ্রষ্টব্য: এই ট্যাগটি শুধুমাত্র সেই কীগুলির জন্য প্রযোজ্য যা SIGN উদ্দেশ্য ব্যবহার করে৷

unlockedDeviceRequired

শুধুমাত্র মূল প্রত্যয়ন সংস্করণ >= 3 উপস্থাপন করুন।

Tag::UNLOCKED_DEVICE_REQUIRED অনুমোদন ট্যাগের সাথে মিলে যায়, যা 509 এর ট্যাগ আইডি মান ব্যবহার করে।

allApplications

Tag::ALL_APPLICATIONS অনুমোদন ট্যাগের সাথে মিলে যায়, যা 600 এর ট্যাগ আইডি মান ব্যবহার করে।

একটি ডিভাইসের সমস্ত অ্যাপ কী জোড়া অ্যাক্সেস করতে পারে কিনা তা নির্দেশ করে৷

applicationId
Tag::APPLICATION_ID অনুমোদন ট্যাগের সাথে মিলে যায়, যা 601 এর ট্যাগ আইডি মান ব্যবহার করে।
creationDateTime
Tag::CREATION_DATETIME অনুমোদন ট্যাগের সাথে মিলে যায়, যা 701 এর ট্যাগ আইডি মান ব্যবহার করে।
origin

Tag::ORIGIN অনুমোদন ট্যাগের সাথে মিলে যায়, যা 702 এর ট্যাগ আইডি মান ব্যবহার করে।

rollbackResistant

শুধুমাত্র মূল প্রত্যয়ন সংস্করণ 1 এবং 2 এ উপস্থাপন করুন৷

Tag::ROLLBACK_RESISTANT অনুমোদন ট্যাগের সাথে মিলে যায়, যা 703 এর ট্যাগ আইডি মান ব্যবহার করে।

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 এর ট্যাগ আইডি মান ব্যবহার করে।

রুটঅফট্রাস্ট

মানগুলির এই সংগ্রহটি ডিভাইসের স্থিতি সম্পর্কে মূল তথ্য সংজ্ঞায়িত করে।

নিম্নলিখিত তালিকার প্রতিটি ক্ষেত্র প্রয়োজন:

verifiedBootKey

কীটির একটি সুরক্ষিত হ্যাশ যা সিস্টেম ইমেজ যাচাই করে। এই হ্যাশের জন্য আপনাকে SHA-256 অ্যালগরিদম ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।

deviceLocked
ডিভাইসের বুটলোডার লক থাকলে সত্য, যা যাচাইকৃত বুট চেকিং সক্ষম করে এবং একটি স্বাক্ষরবিহীন ডিভাইসের ছবিকে ডিভাইসে ফ্ল্যাশ হতে বাধা দেয়। এই বৈশিষ্ট্য সম্পর্কে আরও তথ্যের জন্য, বুট যাচাইকরণ ডকুমেন্টেশন দেখুন।
verifiedBootState
যাচাইকৃত বুট বৈশিষ্ট্য অনুযায়ী ডিভাইসের বুট অবস্থা
verifiedBootHash

শুধুমাত্র মূল প্রত্যয়ন সংস্করণে উপস্থাপন করুন >= 3।

যাচাইকৃত বুট দ্বারা সুরক্ষিত সমস্ত ডেটার একটি ডাইজেস্ট। যে ডিভাইসগুলি ভেরিফাইড বুটের অ্যান্ড্রয়েড ভেরিফাইড বুট ইমপ্লিমেন্টেশন ব্যবহার করে, এই মানটিতে VBMeta স্ট্রাকচার বা যাচাইকৃত বুট মেটাডেটা স্ট্রাকচারের ডাইজেস্ট রয়েছে।

এই মানটি কীভাবে গণনা করা যায় সে সম্পর্কে আরও জানতে, ভিবিমেটা ডাইজেস্ট দেখুন।

যাচাইকৃত বুটস্টেট

এই ডেটা স্ট্রাকচারটি ডিভাইসের বর্তমান বুট অবস্থা প্রদান করে, যা ডিভাইসটি বুট করা শেষ হওয়ার পরে ব্যবহারকারী এবং অ্যাপকে প্রদত্ত সুরক্ষার স্তরকে উপস্থাপন করে। এই বৈশিষ্ট্য সম্পর্কে আরও তথ্যের জন্য, বুট স্টেট যাচাইকরণের ডকুমেন্টেশনের মধ্যে দেখুন।

এই ডেটা স্ট্রাকচারটি একটি গণনা, তাই এটি নিম্নলিখিত মানগুলির মধ্যে ঠিক একটি গ্রহণ করে:

যাচাই করা হয়েছে

বিশ্বাসের একটি সম্পূর্ণ চেইন নির্দেশ করে, যার মধ্যে বুটলোডার, বুট পার্টিশন এবং সমস্ত যাচাইকৃত পার্টিশন অন্তর্ভুক্ত রয়েছে।

যখন ডিভাইসটি এই বুট অবস্থায় থাকে, তখন verifiedBootKey হল ডিভাইস-এম্বেডেড সার্টিফিকেটের হ্যাশ, যা ডিভাইস নির্মাতা কারখানায় ডিভাইসের ROM-এ যোগ করে।

স্ব-স্বাক্ষরিত

নির্দেশ করে যে ডিভাইস-এম্বেডেড সার্টিফিকেট ডিভাইসের বুট পার্টিশন যাচাই করেছে এবং স্বাক্ষরটি বৈধ।

যখন ডিভাইসটি এই বুট অবস্থায় থাকে, তখন verifiedBootKey হল একটি ব্যবহারকারী-ইনস্টল করা শংসাপত্রের হ্যাশ, যা একটি বুট পার্টিশনে স্বাক্ষর করে যা ব্যবহারকারী আসল, প্রস্তুতকারক-প্রদত্ত বুট পার্টিশনের জায়গায় ডিভাইসে যোগ করে।

যাচাই করা হয়নি
নির্দেশ করে যে ব্যবহারকারী অবাধে ডিভাইসটি পরিবর্তন করতে পারে। অতএব, ব্যবহারকারী ডিভাইসের অখণ্ডতা যাচাই করার জন্য দায়ী।
ব্যর্থ হয়েছে
নির্দেশ করে যে ডিভাইসটি যাচাইকরণে ব্যর্থ হয়েছে৷ সত্যায়ন শংসাপত্রের কখনই এই মানটি VerifiedBootState এর জন্য ব্যবহার করা উচিত নয়।

অ্যাটেস্টেশন অ্যাপ্লিকেশান আইডি

এই ডেটা স্ট্রাকচার অ্যান্ড্রয়েড প্ল্যাটফর্মের বিশ্বাসকে প্রতিফলিত করে যে কোন অ্যাপগুলিকে প্রত্যয়নের অধীনে গোপন মূল উপাদান ব্যবহার করার অনুমতি দেওয়া হয়েছে। আইডিতে একাধিক প্যাকেজ থাকতে পারে যদি এবং শুধুমাত্র যদি একাধিক প্যাকেজ একই UID শেয়ার করে। অক্টেট স্ট্রিং নিজেই নিম্নলিখিত ASN.1 স্কিমা অনুযায়ী ফর্ম্যাট করা হয়েছে:

AttestationApplicationId ::= SEQUENCE {
    package_infos  SET OF AttestationPackageInfo,
    signature_digests  SET OF OCTET_STRING,
}

AttestationPackageInfo ::= SEQUENCE {
    package_name  OCTET_STRING,
    version  INTEGER,
}
প্যাকেজ_ইনফোস
AttestationPackageInfo অবজেক্টের একটি সেট, প্রতিটি প্যাকেজের নাম এবং সংস্করণ নম্বর প্রদান করে।
স্বাক্ষর_পাচন

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 আছে। এক্সটেনশনটি এমন তথ্য প্রদান করে যা প্রভিশনিং সার্ভার দ্বারা ডিভাইস সম্পর্কে জানা। এই এক্সটেনশনটি একটি CDDL স্কিমা অনুসরণ করে।

  {
        1 : int,   ; certificates issued
  }

মানচিত্রটি পরিবর্তন করা হয়নি এবং নতুন ঐচ্ছিক ক্ষেত্র যোগ করা যেতে পারে।

certs_issued

গত 30 দিনে ডিভাইসে জারি করা শংসাপত্রের আনুমানিক সংখ্যা৷ এই মানটি সম্ভাব্য অপব্যবহারের জন্য একটি সংকেত হিসাবে ব্যবহার করা যেতে পারে যদি মানটি মাত্রার কিছু আদেশ দ্বারা গড়ের চেয়ে বেশি হয়।