ডিভাইস শনাক্তকারী

Android 10 ডিভাইস শনাক্তকারীদের জন্য অনুমতি পরিবর্তন করে যাতে সমস্ত ডিভাইস শনাক্তকারী এখন READ_PRIVILEGED_PHONE_STATE অনুমতি দ্বারা সুরক্ষিত থাকে। Android 10-এর আগে, READ_PHONE_STATE রানটাইম অনুমতির পিছনে স্থায়ী ডিভাইস শনাক্তকারী (IMEI/MEID, IMSI, SIM এবং বিল্ড সিরিয়াল) সুরক্ষিত ছিল। READ_PRIVILEGED_PHONE_STATE অনুমতি শুধুমাত্র প্ল্যাটফর্ম কী এবং সুবিধাপ্রাপ্ত সিস্টেম অ্যাপগুলির সাথে স্বাক্ষরিত অ্যাপগুলিতে দেওয়া হয়।

নতুন অনুমতির প্রয়োজনীয়তার জন্য আরও তথ্য TelephonyManager.java এবং Build.java- এর Javadoc পৃষ্ঠাগুলিতে পাওয়া যাবে।

এই পরিবর্তনটি নিম্নলিখিত APIগুলিকে প্রভাবিত করে:

  • TelephonyManager#getDeviceId
  • টেলিফোনি ম্যানেজার#getImei
  • টেলিফোনি ম্যানেজার#getMeid
  • টেলিফোনি ম্যানেজার#getSimSerialNumber
  • TelephonyManager#getSubscriberId
  • #getSerial তৈরি করুন

READ_PRIVILEGED_PHONE_STATE অনুমতি ছাড়াই ক্যারিয়ার অ্যাপের অ্যাক্সেস

READ_PRIVILEGED_PHONE_STATE অনুমতির জন্য যোগ্য নয় এমন প্রিলোড করা ক্যারিয়ার অ্যাপগুলি নীচের সারণীতে বিকল্পগুলির একটি বাস্তবায়ন করতে পারে৷

অপশন বর্ণনা সীমাবদ্ধতা
UICC ক্যারিয়ারের বিশেষাধিকার অ্যান্ড্রয়েড প্ল্যাটফর্ম UICC-তে সঞ্চিত শংসাপত্রগুলি লোড করে এবং বিশেষ পদ্ধতিতে কল করার জন্য এই শংসাপত্রগুলির দ্বারা স্বাক্ষরিত অ্যাপগুলিকে অনুমতি দেয়৷ লিগ্যাসি ক্যারিয়ারগুলির একটি বড়, প্রতিষ্ঠিত সিম জনসংখ্যা রয়েছে, যা সহজে আপডেট করা যায় না। এছাড়াও, যে সমস্ত ক্যারিয়ারের নতুন সিমের অথরিং অধিকার নেই (উদাহরণস্বরূপ, MVNO যেগুলি MNO থেকে সিম ইস্যু করেছে) তারা সিমে শংসাপত্র যোগ বা আপডেট করতে পারবে না।
OEM অনুমোদিত তালিকা OEM গুলি OP_READ_DEVICE_IDENTIFIER ব্যবহার করে অনুমোদিত তালিকাভুক্ত ক্যারিয়ার অ্যাপে ডিভাইস শনাক্তকারী প্রদান করতে পারে। এই সমাধানটি সমস্ত ক্যারিয়ারের জন্য মাপযোগ্য নয়।
টাইপ অ্যালোকেশন কোড (TAC) Android 10-এ চালু করা getTypeAllocationCode পদ্ধতি ব্যবহার করুন, TAC প্রকাশ করতে যা প্রস্তুতকারক এবং মডেলের তথ্য প্রদান করে। TAC-তে তথ্য একটি নির্দিষ্ট ডিভাইস সনাক্ত করার জন্য অপর্যাপ্ত।
MSISDN ক্যারিয়াররা তাদের ব্যাকএন্ড সিস্টেমে IMEI খোঁজার জন্য ফোন নম্বর (MSISDN) ব্যবহার করতে পারে, যা PHONE অনুমতি গোষ্ঠীর সাথে TelephonyManager এর অধীনে উপলব্ধ। এর জন্য ক্যারিয়ারের জন্য উল্লেখযোগ্য বিনিয়োগ প্রয়োজন। যে ক্যারিয়ারগুলি IMSI ব্যবহার করে তাদের নেটওয়ার্ক কীগুলি ম্যাপ করে তাদের MSISDN- এ স্যুইচ করার জন্য উল্লেখযোগ্য প্রযুক্তিগত সংস্থান প্রয়োজন৷

ক্যারিয়ার অ্যাপের সাইনিং সার্টিফিকেট হ্যাশের সাথে CarrierConfig.xml ফাইল আপডেট করার মাধ্যমে সমস্ত ক্যারিয়ার অ্যাপ ডিভাইস শনাক্তকারী অ্যাক্সেস করতে পারে। যখন ক্যারিয়ার অ্যাপটি বিশেষ সুবিধাপ্রাপ্ত তথ্য পড়ার জন্য একটি পদ্ধতি কল করে, তখন প্ল্যাটফর্মটি CarrierConfig.xml ফাইলে অ্যাপের স্বাক্ষরকারী শংসাপত্র হ্যাশের (SHA-1 বা শংসাপত্রের SHA-256 স্বাক্ষর) একটি মিল খোঁজে। যদি একটি মিল পাওয়া যায়, অনুরোধ করা তথ্য ফেরত দেওয়া হয়. যদি কোন মিল পাওয়া না যায়, একটি নিরাপত্তা ব্যতিক্রম ফিরে আসে।

এই সমাধানটি বাস্তবায়ন করতে, ক্যারিয়ারদের অবশ্যই এই পদক্ষেপগুলি অনুসরণ করতে হবে:

  1. ক্যারিয়ার অ্যাপের সাইনিং সার্টিফিকেট হ্যাশ সহ CarrierConfig.xml আপডেট করুন এবং একটি প্যাচ জমা দিন
  2. QPR1+ (প্রস্তাবিত) অথবা এই প্রয়োজনীয় প্ল্যাটফর্ম প্যাচগুলি এবং উপরের ধাপ 1 থেকে আপডেট হওয়া CarrierConfig.xml ফাইল ধারণকারী প্যাচগুলির সাথে তাদের বিল্ড আপডেট করার জন্য OEM-কে অনুরোধ করুন৷

বাস্তবায়ন

ডিভাইস শনাক্তকারীর অ্যাক্সেস প্রয়োজন এমন বিশেষ সুবিধাপ্রাপ্ত অ্যাপগুলিকে READ_PRIVILEGED_PHONE_STATE অনুমতি দেওয়ার জন্য আপনার বিশেষাধিকারপ্রাপ্ত অনুমতির অনুমতি তালিকা আপডেট করুন।

মঞ্জুরি তালিকা সম্পর্কে আরও জানতে, প্রিভিলেজড পারমিশন অ্যালোলিস্টিং পড়ুন।

প্রভাবিত API গুলি চালু করতে, একটি অ্যাপকে অবশ্যই নিম্নলিখিত প্রয়োজনীয়তার একটি পূরণ করতে হবে:

  • অ্যাপটি যদি আগে থেকে লোড করা বিশেষ সুবিধাপ্রাপ্ত অ্যাপ হয়, তাহলে এটির AndroidManifest.xml-এ ঘোষিত READ_PRIVILEGED_PHONE_STATE অনুমতি প্রয়োজন। অ্যাপটিকেও এই বিশেষাধিকারপ্রাপ্ত অনুমতির তালিকা করতে হবে।
  • Google Play এর মাধ্যমে বিতরণ করা অ্যাপগুলির ক্যারিয়ারের বিশেষাধিকার প্রয়োজন৷ UICC ক্যারিয়ারের বিশেষাধিকার পৃষ্ঠায় ক্যারিয়ারের বিশেষাধিকার প্রদান সম্পর্কে আরও জানুন।
  • একটি ডিভাইস বা প্রোফাইল মালিকের অ্যাপ যা READ_PHONE_STATE অনুমতি দেওয়া হয়েছে।

একটি অ্যাপ যা এই প্রয়োজনীয়তাগুলির কোনোটি পূরণ করে না তার নিম্নলিখিত আচরণ রয়েছে:

  • যদি অ্যাপটি প্রি-কিউ-কে লক্ষ্য করে এবং READ_PHONE_STATE অনুমতি না থাকে, তাহলে SecurityException ট্রিগার করা হয়। এটি বর্তমান প্রি-কিউ আচরণ কারণ এই API গুলি চালু করার জন্য এই অনুমতি প্রয়োজন৷
  • যদি অ্যাপটি প্রি-কিউ টার্গেট করে এবং READ_PHONE_STATE অনুমতি দেওয়া থাকে, তাহলে এটি Build#getSerial পদ্ধতির জন্য সমস্ত TelephonyManager API এবং Build.UNKNOWN এর জন্য একটি শূন্য মান পায়।
  • অ্যাপটি যদি অ্যান্ড্রয়েড 10 বা তার উচ্চতর সংস্করণকে টার্গেট করে এবং নতুন কোনো প্রয়োজনীয়তা পূরণ না করে তাহলে এটি একটি সিকিউরিটি এক্সেপশন পায়।

বৈধতা এবং পরীক্ষা

কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) ক্যারিয়ারের বিশেষাধিকার, ডিভাইস এবং প্রোফাইল মালিকদের এবং যে অ্যাপগুলির ডিভাইস শনাক্তকারীর অ্যাক্সেস নেই বলে প্রত্যাশিত অ্যাপগুলির জন্য প্রত্যাশিত ডিভাইস শনাক্তকারী অ্যাক্সেস আচরণ যাচাই করার জন্য পরীক্ষাগুলি অন্তর্ভুক্ত করে৷

নিম্নলিখিত CTS পরীক্ষাগুলি এই বৈশিষ্ট্যের জন্য নির্দিষ্ট।

cts-tradefed run cts -m CtsCarrierApiTestCases -t
    android.carrierapi.cts.CarrierApiTest

cts-tradefed run cts -m CtsTelephonyTestCases -t
    android.telephony.cts.TelephonyManagerTest

cts-tradefed run cts -m CtsTelephony3TestCases

cts-tradefed run cts -m CtsPermissionTestCases -t
    android.permission.cts.TelephonyManagerPermissionTest

cts-tradefed run cts -m CtsDevicePolicyManagerTestCases -t
    com.android.cts.devicepolicy.DeviceOwnerTest#testDeviceOwnerCanGetDeviceIdentifiers

cts-tradefed run cts -m CtsDevicePolicyManagerTestCases -t
    com.android.cts.devicepolicy.ManagedProfileTest#testProfileOwnerCanGetDeviceIdentifiers

cts-tradefed run cts -m CtsDevicePolicyManagerTestCases -t
    com.android.cts.devicepolicy.ManagedProfileTest#testProfileOwnerCannotGetDeviceIdentifiersWithoutPermission

cts-tradefed run cts -m CtsDevicePolicyManagerTestCases -t
    com.android.cts.devicepolicy.DeviceOwnerTest#testDeviceOwnerCannotGetDeviceIdentifiersWithoutPermission

FAQs

একটি প্রদত্ত (MCC, MNC) জন্য CarrierConfig.xml এ কতগুলি অ্যাপ অনুমোদিত তালিকাভুক্ত হতে পারে?

অ্যারেতে অন্তর্ভুক্ত সার্টিফিকেট হ্যাশের সংখ্যার কোন সীমা নেই।

একটি অ্যাপকে অনুমতি দেওয়ার জন্য CarrierConfig.xml এ কোন CarrierConfig প্যারামিটার ব্যবহার করতে হবে?

আপনি যে AOSP বিকল্পগুলি কনফিগার করছেন তা থেকে নির্দিষ্ট CarrierConfig.xml এর মধ্যে নিম্নলিখিত শীর্ষ-স্তরের কনফিগারেশন আইটেমটি ব্যবহার করুন:

<string-array name="carrier_certificate_string_array" num="2">
    <item value="BF02262E5EF59FDD53E57059082F1A7914F284B"/>
    <item value="9F3868A3E1DD19A5311D511A60CF94D975A344B"/>
</string-array>

একটি বেস CarrierConfig টেমপ্লেট আছে যা আমি ব্যবহার করতে পারি?

নিম্নলিখিত টেমপ্লেট ব্যবহার করুন. এটি প্রাসঙ্গিক সম্পদ যোগ করা উচিত.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<carrier_config>
    <string-array name="carrier_certificate_string_array"
num="1">
        <item value="CERTIFICATE_HASH_HERE"/>
    </string-array>
</carrier_config>

ডিভাইস শনাক্তকারী অ্যাক্সেস করার জন্য কি ক্যারিয়ারের সিম ডিভাইসে থাকতে হবে?

CarrierConfig.xml যেটি ব্যবহার করা হয় তা বর্তমানে ঢোকানো সিমের উপর ভিত্তি করে নির্ধারিত হয়। এর মানে হল যে ক্যারিয়ার X-এর অ্যাপ ক্যারিয়ারের Y-এর সিম ঢোকানোর সময় অ্যাক্সেসের সুবিধা পাওয়ার চেষ্টা করলে, ডিভাইসটি হ্যাশের জন্য একটি মিল খুঁজে পাবে না এবং একটি নিরাপত্তা ব্যতিক্রম প্রদান করবে।

মাল্টি-সিম ডিভাইসে, ক্যারিয়ার #1-এর শুধুমাত্র সিম #1-এর অ্যাক্সেস সুবিধা রয়েছে এবং এর বিপরীতে।

কীভাবে ক্যারিয়ারগুলি একটি অ্যাপের স্বাক্ষর শংসাপত্রকে হ্যাশে রূপান্তর করে?

CarrierConfig.xml এ যোগ করার আগে সাইনিং সার্টিফিকেটগুলিকে হ্যাশে রূপান্তর করতে, নিম্নলিখিতগুলি করুন:

  1. toByteArray ব্যবহার করে স্বাক্ষরকারী শংসাপত্রের স্বাক্ষরটিকে একটি বাইট অ্যারেতে রূপান্তর করুন।
  2. বাইট অ্যারেকে বাইট[] টাইপের হ্যাশে রূপান্তর করতে MessageDigest ব্যবহার করুন।
  3. বাইট[] থেকে হ্যাশকে হেক্স স্ট্রিং ফরম্যাটে রূপান্তর করুন। একটি উদাহরণের জন্য, IccUtils.java দেখুন।

    List<String> certHashes = new ArrayList<>();
    PackageInfo pInfo; // Carrier app PackageInfo
    MessageDigest md =
    MessageDigest.getInstance("SHA-256");
    for (Signature signature : pInfo.signatures) {
        certHashes.add(bytesToHexString(md.digest(signature.toByteArray()));
    }
  4. যদি certHashes 12345 এবং 54321 এর মান সহ সাইজ 2 এর একটি অ্যারে হয় তবে ক্যারিয়ার কনফিগার ফাইলে নিম্নলিখিতটি যুক্ত করুন।

    <string-array name="carrier_certificate_string_array" num="2">
        <item value="12345"/>
        <item value="54321"/>
    </string-array>