ডিআরএম

অ্যান্ড্রয়েড ডিআরএম এইচএএল আইকন

এই পৃষ্ঠাটি অ্যান্ড্রয়েড ডিজিটাল রাইটস ম্যানেজমেন্ট (ডিআরএম) ফ্রেমওয়ার্কের একটি সংক্ষিপ্ত বিবরণ প্রদান করে এবং একটি ডিআরএম প্লাগইনকে অবশ্যই যে ইন্টারফেসগুলো বাস্তবায়ন করতে হবে, সেগুলোর সাথে পরিচয় করিয়ে দেয়। এই পৃষ্ঠাটি কোনো ডিআরএম স্কিম দ্বারা সংজ্ঞায়িত হতে পারে এমন দৃঢ়তা বিধি বা সম্মতি বিধি বর্ণনা করে না।

কাঠামো

অ্যান্ড্রয়েড প্ল্যাটফর্ম একটি সম্প্রসারণযোগ্য ডিআরএম ফ্রেমওয়ার্ক প্রদান করে, যা অ্যাপগুলোকে কন্টেন্টের সাথে যুক্ত লাইসেন্সের সীমাবদ্ধতা অনুসারে অধিকার-সুরক্ষিত কন্টেন্ট পরিচালনা করতে দেয়। ডিআরএম ফ্রেমওয়ার্কটি অনেক ডিআরএম স্কিম সমর্থন করে; ডিভাইস নির্মাতা নির্ধারণ করে যে একটি ডিভাইস কোন কোন ডিআরএম স্কিম সমর্থন করবে। ডিআরএম ফ্রেমওয়ার্কটি অ্যাপ ডেভেলপারদের জন্য একটি সমন্বিত ইন্টারফেস প্রদান করে এবং ডিআরএম অপারেশনের জটিলতা গোপন রাখে। ডিআরএম ফ্রেমওয়ার্কটি সুরক্ষিত এবং অ-সুরক্ষিত কন্টেন্টের জন্য একটি সামঞ্জস্যপূর্ণ অপারেশন মোড প্রদান করে। ডিআরএম স্কিমগুলো লাইসেন্স মেটাডেটার মাধ্যমে জটিল ব্যবহারের মডেল সংজ্ঞায়িত করতে পারে। ডিআরএম ফ্রেমওয়ার্কটি ডিআরএম কন্টেন্ট এবং লাইসেন্সের মধ্যে সংযোগ স্থাপন করে এবং অধিকার ব্যবস্থাপনা পরিচালনা করে। এটি মিডিয়া প্লেয়ারকে ডিআরএম-সুরক্ষিত বা অ-সুরক্ষিত কন্টেন্ট থেকে বিমূর্ত থাকতে সক্ষম করে। সুরক্ষিত মিডিয়া স্ট্রিম ডিক্রিপ্ট করার জন্য কী (key) পেতে MediaDrm ক্লাসটি দেখুন।

চিত্র ১-এ অ্যান্ড্রয়েড ১১-এর পূর্ববর্তী ডিআরএম হার্ডওয়্যার নিষ্কাশন স্তরটি দেখানো হয়েছে, এবং চিত্র ২-এ অ্যান্ড্রয়েড ১১ ও তার পরবর্তী সংস্করণগুলোর স্তরটি দেখানো হয়েছে:

অ্যান্ড্রয়েড ডিআরএম এইচএএল

চিত্র ১. অ্যান্ড্রয়েড ১১-এর পূর্ববর্তী ডিআরএম হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার।

অ্যান্ড্রয়েড ১১ থেকে অ্যান্ড্রয়েড ডিআরএম এইচএএল চালু হচ্ছে

চিত্র ২. অ্যান্ড্রয়েড ১১ থেকে শুরু হওয়া ডিআরএম হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার।

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

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

স্থাপত্য

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

অ্যান্ড্রয়েড ডিআরএম ফ্রেমওয়ার্কটি দুটি স্থাপত্য স্তরে বাস্তবায়িত হয়:

  • একটি ডিআরএম ফ্রেমওয়ার্ক এপিআই, যা অ্যান্ড্রয়েড অ্যাপ ফ্রেমওয়ার্কের মাধ্যমে অ্যাপগুলিতে উন্মুক্ত করা হয়।
  • একটি নেটিভ কোড ডিআরএম ফ্রেমওয়ার্ক, যা বিভিন্ন ডিআরএম স্কিমের জন্য রাইটস ম্যানেজমেন্ট ও ডিক্রিপশন পরিচালনার উদ্দেশ্যে ডিআরএম প্লাগইন (এজেন্ট)-এর জন্য একটি ইন্টারফেস উন্মুক্ত করে।

চিত্র ৩-এ অ্যান্ড্রয়েড ১১-এর আগের ডিআরএম ফ্রেমওয়ার্ক এবং চিত্র ৪-এ অ্যান্ড্রয়েড ১১ ও তার পরবর্তী সংস্করণগুলোর ফ্রেমওয়ার্ক দেখানো হয়েছে:

অ্যান্ড্রয়েড ডিআরএম ফ্রেমওয়ার্ক

চিত্র ৩. অ্যান্ড্রয়েড ১১-এর পূর্ববর্তী ডিআরএম কাঠামো।

অ্যান্ড্রয়েড ১১ থেকে শুরু হওয়া অ্যান্ড্রয়েড ডিআরএম ফ্রেমওয়ার্ক

চিত্র ৪. অ্যান্ড্রয়েড ১১ থেকে শুরু হওয়া ডিআরএম ফ্রেমওয়ার্ক।

আরও বিস্তারিত জানতে MediaDrm এবং MediaCrypto দেখুন।

ডিআরএম প্লাগইন

সিস্টেম চালুর সময়, ডিআরএম ফ্রেমওয়ার্ক .rc ফাইলে বর্ণিত HAL ইনস্ট্যান্স ও সার্ভিসগুলো স্ক্যান করে এবং প্লাগইনগুলো খুঁজে বের করে। মিডিয়া ডিআরএম সার্ভার ( mediadrmserver ) CryptoHal এবং DrmHal উভয় অবজেক্ট তৈরি করে। এরপর CryptoHal এবং DrmHal ভেন্ডর-নির্দিষ্ট ইমপ্লিমেন্টেশন ব্যবহার করে প্লাগইনগুলোকে কল করে।

প্লাগইনগুলিতে বাইন্ডারাইজড HAL প্রয়োগ করা উচিত। বাইন্ডারাইজড HAL-গুলি অ্যান্ড্রয়েড ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (AIDL) ব্যবহার করে, যা HAL-গুলি পুনরায় তৈরি না করেই ফ্রেমওয়ার্কটি প্রতিস্থাপন করার সুযোগ দেয়।

প্লাগইনগুলি ভেন্ডর বা এসওসি নির্মাতাদের দ্বারা তৈরি করা হয় এবং ডিভাইসের /vendor পার্টিশনে রাখা হয়। অ্যান্ড্রয়েড ১৩ বা তার উচ্চতর সংস্করণ সহ চালু হওয়া সমস্ত ডিভাইসকে অবশ্যই AIDL ভাষায় লেখা বাইন্ডারাইজড HAL সমর্থন করতে হবে।

বাস্তবায়ন

একটি প্লাগইনের মাধ্যমে নতুন ডিআরএম ফ্রেমওয়ার্ক এপিআই প্রয়োগ করতে:

  1. ডিভাইসের বিল্ড ফাইলগুলোতে প্লাগইন সার্ভিস যোগ করুন।
  2. ডিভাইস ম্যানিফেস্ট আপডেট করুন।
  3. SELinux অনুমতি যোগ করুন।
  4. /vendor অধীনে একটি .rc ফাইল তৈরি করুন।
  5. প্লাগইনটি প্রয়োগ করুন।

IDrmPlugin.aidl , ICryptoPlugin.aidl , IDrmFactory.aidl , এবং ICryptoFactory.aidl এর প্রতিটি সংস্করণে API-গুলো সংজ্ঞায়িত করা আছে।

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

ডিভাইস বিল্ড ফাইলে প্লাগইন পরিষেবা যোগ করুন

উদাহরণস্বরূপ, AIDL ইন্টারফেস সমর্থন যোগ করতে, VENDOR DEVICE /device.mk ফাইলে অবশ্যই android.hardware.drm-service.* প্যাকেজগুলো অন্তর্ভুক্ত থাকতে হবে:

  PRODUCT_PACKAGES += \
    android.hardware.drm-service.clearkey \
    android.hardware.drm-service.widevine

ডিভাইস ম্যানিফেস্ট আপডেট করুন

ডিভাইসটির vendor manifest.xml ) ফাইলে নিম্নলিখিত এন্ট্রিগুলো অবশ্যই অন্তর্ভুক্ত থাকতে হবে:

  <hal format="aidl">
    <name>android.hardware.drm</name>
    <version>STABLE AIDL VERSION</version>
      <fqname>ICryptoFactory/clearkey</fqname>
      <fqname>IDrmFactory/clearkey</fqname>
      <fqname>ICryptoFactory/widevine</fqname>
      <fqname>IDrmFactory/widevine</fqname>
  </hal>

স্থিতিশীল AIDL সংস্করণ হলো প্রতিটি AIDL API রিলিজের সংস্করণ নম্বর (উদাহরণস্বরূপ, ১, ২)। বিকল্পভাবে, আমরা vintf_fragments ব্যবহার করার পরামর্শ দিই।

SELinux অনুমতি যোগ করুন

  1. VENDOR DEVICE /sepolicy/vendor/file.te তে অনুমতি যোগ করুন:
    type mediadrm_vendor_data_file, file_type, data_file_type;
  2. VENDOR DEVICE /sepolicy/vendor/file_contexts এ অনুমতি যোগ করুন:
        /vendor/bin/hw/android\.hardware\.drm-service\.clearkey  u:object_r:hal_drm_clearkey_exec:s0
    /data/vendor/mediadrm(/.*)? u:object_r:mediadrm_vendor_data_file:s0
  3. device/sepolicy/vendor/hal_drm_clearkey.te তে অনুমতি যোগ করুন:
        vndbinder_use(hal_drm_clearkey)
        allow hal_drm_clearkey servicemanager:binder { call transfer };
        allow hal_drm_clearkey hal_drm_service:service_manager add;
        allow hal_drm_clearkey { appdomain -isolated_app }:fd use;
        get_prop(ramdump, public_vendor_default_prop)
        

/vendor এর অধীনে একটি RC ফাইল তৈরি করুন

কোনো সার্ভিস চালু করার সময় কী কী পদক্ষেপ নেওয়া হবে, তা .rc ফাইলে নির্দিষ্ট করা থাকে।

বিস্তারিত জানতে অ্যান্ড্রয়েড ইনিট ল্যাঙ্গুয়েজ দেখুন।

প্লাগইনটি প্রয়োগ করুন

  1. প্লাগইন সার্ভিসের service.cpp ফাইলে main() এন্ট্রি পয়েন্টটি প্রয়োগ করুন।
  2. ICryptoPlugin , IDrmPlugin , ICryptoFactory , এবং IDrmFactory বাস্তবায়ন করুন।
  3. প্লাগইনটিতে নতুন এপিআইগুলো প্রয়োগ করুন।

ডিআরএম প্লাগইনের বিবরণ

ডিআরএম প্লাগইন বিক্রেতারা DrmFactory , CryptoFactory এবং ডিআরএম প্লাগইন বাস্তবায়ন করে।

DrmFactory ক্লাস

DrmHal ক্লাসটি DrmFactory ক্লাসের মাধ্যমে নিবন্ধিত DRM প্লাগইন পরিষেবাগুলি অনুসন্ধান করে এবং একটি নির্দিষ্ট ক্রিপ্টো স্কিম সমর্থনকারী সংশ্লিষ্ট প্লাগইনগুলি তৈরি করে।

IDrmFactory হলো createPlugin মেথডের মাধ্যমে কোনো ভেন্ডরের DRM HAL-এর সাথে ইন্টারঅ্যাক্ট করার প্রধান এন্ট্রি পয়েন্ট। IDrmPlugin ইনস্ট্যান্স তৈরি করতে এই মেথডটি ব্যবহার করুন।

::ndk::ScopedAStatus getSupportedCryptoSchemes(
    std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);

getSupportedCryptoSchemes AIDL DRM HAL ইনস্ট্যান্সের জন্য সমর্থিত ক্রিপ্টো স্কিমগুলির একটি তালিকা ফেরত দেয়। এই ক্রমটি নির্ধারণ করে যে প্লাগইন ফ্যাক্টরিটি একটি নির্দিষ্ট ক্রিপ্টো স্কিম সমর্থন করে এমন DRM প্লাগইন তৈরি করতে পারবে কি না, যা একটি UUID দ্বারা নির্দিষ্ট করা থাকে।

::ndk::ScopedAStatus isCryptoSchemeSupported(
    const ::aidl::android::hardware::drm::Uuid& in_uuid,
    const std::string& in_mimeType,
    ::aidl::android::hardware::drm::SecurityLevel in_securityLevel,
    bool* _aidl_return);

এই ক্রমটি নির্ধারণ করে যে প্লাগইন ফ্যাক্টরিটি mimeType দ্বারা নির্দিষ্ট একটি প্রদত্ত মিডিয়া কন্টেইনার ফরম্যাট সমর্থন করে এমন DRM প্লাগইন তৈরি করতে পারবে কি না।

::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType,
    bool* _aidl_return);

এই অনুক্রমটি UUID দ্বারা নির্দিষ্ট ক্রিপ্টো স্কিমের জন্য একটি DRM প্লাগইন তৈরি করে:

::ndk::ScopedAStatus createPlugin(
    const ::aidl::android::hardware::drm::Uuid& in_uuid,
    const std::string& in_appPackageName,
    std::shared_ptr<::aidl::android::hardware::drm::IDrmPlugin>* _aidl_return);

ক্রিপ্টোফ্যাক্টরি ক্লাস

CryptoHal ক্লাসটি CryptoFactory ক্লাসের মাধ্যমে নিবন্ধিত DRM প্লাগইন পরিষেবাগুলি অনুসন্ধান করে এবং একটি নির্দিষ্ট ক্রিপ্টো স্কিম সমর্থন করে এমন সংশ্লিষ্ট প্লাগইনগুলি তৈরি করে।

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

::ndk::ScopedAStatus isCryptoSchemeSupported(
    const ::aidl::android::hardware::drm::Uuid& in_uuid,
    bool* _aidl_return);

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

::ndk::ScopedAStatus createPlugin(
    const ::aidl::android::hardware::drm::Uuid& in_uuid,
    const std::vector<uint8_t>& in_initData,
    std::shared_ptr<::aidl::android::hardware::drm::ICryptoPlugin>* _aidl_return);

ডিআরএম প্লাগইন এপিআই

এপিআইগুলো hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION /android/hardware/drm/IDrmPlugin.aidl -এ সংজ্ঞায়িত করা আছে। বিল্ডের out/Soong ফোল্ডারে সংশ্লিষ্ট IDrmPlugin.h ফাইলটি পাওয়া যাবে।