ক্যারিয়ার ওয়াই-ফাই হল একটি অটোমেটিক কানেকশন ফিচার (এনক্রিপ্ট করা IMSI ব্যবহার করে) যা Android 9 এবং এর পরের যেকোনও ভার্সনে উপলভ্য। এটি ডিভাইসগুলিকে ক্যারিয়ার-ইমপ্লিমেন্টেড ওয়াই-ফাই নেটওয়ার্কের সাথে অটোমেটিক কানেক্ট করতে দেয়। স্টেডিয়াম বা আন্ডারগ্রাউন্ড ট্রেন স্টেশনের মতো যেসব জায়গায় খুব বেশি ভিড় হয় বা সেল কভারেজ খুব কম থাকে, সেখানে ক্যারিয়ার ওয়াই-ফাই ব্যবহারকারীদের কানেক্টিভিটির অভিজ্ঞতা উন্নত করতে এবং ট্রাফিক অফলোড করতে পারে।
পরিষেবা প্রদানকারীর ওয়াই-ফাই ফিচার সহ ডিভাইসগুলি কনফিগার করা পরিষেবা প্রদানকারীর ওয়াই-ফাই নেটওয়ার্কের (সর্বজনীন কী সার্টিফিকেট সহ নেটওয়ার্ক) সাথে অটোমেটিক কানেক্ট হয়। কোনও ব্যবহারকারী ম্যানুয়ালি কোনও ক্যারিয়ার ওয়াই-ফাই নেটওয়ার্ক থেকে ডিসকানেক্ট করলে, ২৪ ঘণ্টার জন্য নেটওয়ার্কটি ডিনাইলিস্টেড হয়ে যায় (অটোমেটিক কানেক্ট হয় না)। ব্যবহারকারী যেকোনও সময় ম্যানুয়ালি ডিনাইলিস্টেড নেটওয়ার্কে কানেক্ট করতে পারবেন।
প্রয়োগ
ক্যারিয়ার ওয়াই-ফাই প্রয়োগ করতে ডিভাইস প্রস্তুতকারক ও ক্যারিয়ারকে নিম্নলিখিত কাজগুলি করতে হবে।
প্রস্তুতকারক
Android 11 ও এর পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসের জন্য, প্রতিটি পরিষেবা প্রদানকারীর ওয়াই-ফাই প্রোফাইল যোগ করতে, ওয়াই-ফাই সাজেশন API ব্যবহার করুন।
Android 10 বা তার আগের যেকোনও ভার্সনে চলা ডিভাইসের জন্য, ওয়াই-ফাই প্রোফাইল যোগ করতে
ক্যারিয়ার কনফিগার ম্যানেজার-এ প্রতিটি ক্যারিয়ারের জন্য carrier_wifi_string_array প্যারামিটার
কনফিগার করুন।
carrier_wifi_string_array:একটি স্ট্রিং অ্যারে যেখানে প্রতিটি স্ট্রিং এন্ট্রি হল একটি Base64-এনকোড করা ওয়াই-ফাই SSID এবং একটি কমা দিয়ে আলাদা করা EAP ধরন, যেখানে EAP ধরন হল একটি পূর্ণসংখ্যা (এর ব্যাপারে এক্সটেনসিবল অথেন্টিকেশন প্রোটোকল (EAP) রেজিস্ট্রি থেকে জানুন)। যেমন, নিম্নলিখিত কনফিগারেশন EAP-AKA ব্যবহার করে SOME_SSID_NAME এবং EAP-SIM ব্যবহার করে Some_Other_SSID-এর জন্য:
config { key: "carrier_wifi_string_array" text_array { item: "U09NRV9TU0lEX05BTUUK,23" item: "U29tZV9PdGhlcl9TU0lECg==,18" } }
ক্যারিয়ার কনফিগারেশন ম্যানেজারে, প্রতিটি ক্যারিয়ারের জন্য নিম্নলিখিত প্যারামিটার কনফিগার করুন:
imsi_key_availability_int:IMSI এনক্রিপশনের জন্য ব্যবহৃত কী WLAN (বিট ১ সেট করা আছে), EPDG (বিট ০ সেট করা আছে) বা দুটির (বিট ০ ও বিট ১ দুটিই সেট করা আছে) জন্য উপলভ্য কিনা তা শনাক্ত করে। যেমন, নিচের কনফিগারেশন থেকে বোঝা যায় যে WLAN-এর জন্য IMSI এনক্রিপশন উপলভ্য থাকলেও EPDG-এর জন্য উপলভ্য নেই:
config { key: "imsi_key_availability_int" int_value: 2 }imsi_key_download_url_string:IMSI এনক্রিপশনের জন্য ব্যবহৃত ক্যারিয়ারের পাবলিক কী সহ প্রোটো যে URL থেকে ডাউনলোড করা হয়। যেমন, নিম্নলিখিত কনফিগারেশন একটি নির্দিষ্ট URL প্রদান করে:
config { key: "imsi_key_download_url_string" text_value: "https://www.some_company_name.com:5555/some_directory_name/some_filename.json" }allow_metered_network_for_cert_download_bool: একটি ফ্ল্যাগ যা নির্দেশ করে যে মিটার করা (সেলুলার) নেটওয়ার্কের মাধ্যমে ক্যারিয়ারের সর্বজনীন কী ডাউনলোড করার অনুমতি দেওয়া হবে কিনা। এই ফ্ল্যাগ সেট করা না থাকলে, ওয়াই-ফাই কানেক্টিভিটি নেই এমন নতুন ডিভাইস, পরিষেবা প্রদানকারীর ওয়াই-ফাই নেটওয়ার্কের সাথে কানেক্ট করতে পারবে না, কারণ এটি কী ডাউনলোড করার অনুমতি পাবে না।config { key: "allow_metered_network_for_cert_download_bool" bool_value: true }
পরিষেবা প্রদানকারী
ক্যারিয়ার ওয়াই-ফাই প্রয়োগ করতে, ক্যারিয়ারকে অবশ্যই IMSI গোপনীয়তা সুরক্ষা চালু করতে হবে এবং একটি সর্বজনীন কী প্রদান করতে হবে।
IMSI গোপনীয়তা সুরক্ষা
Android, পাবলিক কী ক্রিপ্টোগ্রাফি ব্যবহার করে গ্রাহকের স্থায়ী পরিচয় (IMSI)-এর গোপনীয়তা রক্ষা করে। Android, ওয়াই-ফাইয়ের জন্য IMSI গোপনীয়তা সুরক্ষার জন্য Wireless Broadband Alliance (WBA) স্পেসিফিকেশন প্রয়োগ করে। কোনও কানেকশনের জন্য IMSI গোপনীয়তা সুরক্ষা চালু করা হলে, স্থায়ী সাবস্ক্রাইবার পরিচয় এয়ারে স্পষ্টভাবে ট্রান্সমিট করা হয় না।
স্থায়ী পরিচয় এনক্রিপশন
এনক্রিপ্ট করা স্থায়ী পরিচয়ের ফর্ম্যাট নিচে দেওয়া হল:
- স্থায়ী পরিচয়টি
<EAP-Method><IMSI>@<NAI realm>ফর্ম্যাটে থাকে। - EAP-Method প্রিফিক্স হল একটি অক্টেট যা যাচাইকরণের জন্য ব্যবহৃত EAP পদ্ধতিকে
সংজ্ঞায়িত করে:
0: EAP-AKA1: EAP-SIM6: EAP-AKA'
- NAI রিয়েম ফর্ম্যাট হল
wlan.mnc<var>XXX</var>.mcc<var>YYY</var>.3gppnetwork.orgযেখানেXXXসিম কার্ডের মোবাইল নেটওয়ার্ক কোড (MNC) দ্বারা এবংYYYমোবাইল কান্ট্রি কোড (MCC) দ্বারা প্রতিস্থাপিত হয়। - স্থায়ী পরিচয়টি ক্যারিয়ারের দেওয়া RSA পাবলিক কী ব্যবহার করে এনক্রিপ্ট করা হয়। সর্বজনীন 'কী' X.509 সার্টিফিকেটে অন্তর্ভুক্ত থাকে।
- এনক্রিপশন স্কিম হল RSAES-OAEP, যেখানে SHA-256 হল ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন। এই এনক্রিপশন স্কিমটি প্রতিবার ব্যবহার করার সময় একটি অনন্য সাইফার টেক্সট নিশ্চিত করে, ফলে ট্র্যাক করা যায় এমন আরেকটি স্থায়ী পরিচয় এড়ানো যায়।
- RSA কী-এর দৈর্ঘ্য ২০৪৮ বিট।
- এনক্রিপশন বাফার ২৫৬ বাইট।
- Base64 দিয়ে সাইফার টেক্সট এনকোড করা হয়।
- আউটপুটে এনক্রিপ্ট করা স্থায়ী পরিচয়ের দৈর্ঘ্য ৩৪৪ বাইট।
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
কী শনাক্তকারী
কী শনাক্তকারী হল একটি ঐচ্ছিক অ্যাট্রিবিউট ভ্যালু পেয়ার যা যাচাইকরণের সময়
সার্ভারকে সঠিক প্রাইভেট কী খুঁজে পেতে সাহায্য করার জন্য
ক্যারিয়ার সার্টিফিকেটের সাথে যুক্ত করে। কী শনাক্তকারীর একটি উদাহরণ হল
CertificateSerialNumber=123456। কী আইডেন্টিফায়ার প্রদান করা হলে, যাচাইকরণ প্রসেসের অংশ হিসেবে
এটি এনক্রিপ্ট না করেই পাঠানো হয়।
সিম কার্ড ভিত্তিক EAP যাচাইকরণ পদ্ধতিতে পরিবর্তন
কোনও কানেকশনে IMSI গোপনীয়তা সুরক্ষা চালু করা থাকলে, সিস্টেম EAP-Request/Identity পাওয়ার পরে স্থায়ী পরিচয় পাঠায় না, পরিবর্তে এটি একটি বেনামী লগ-ইন দিয়ে উত্তর দেয়:
SERVER: EAP-Request/Identity
UE: EAP-Response/Identity AT_IDENTITY=<prefix>|anonymous@<NAI Realm>
<prefix> ঐচ্ছিক। enable_eap_method_prefix_boolক্যারিয়ার
কনফিগারেশন true হিসেবে সেট করা থাকলে, আইডেন্টিটির প্রথম অক্ষর (anonymous-এর আগে) EAP এক্সচেঞ্জ শুরু হওয়ার আগে ব্যবহৃত EAP পদ্ধতির ধরন সম্পর্কে সার্ভারকে
নোটিফাই করে।
0: EAP-AKA1: EAP-SIM6: EAP-AKA'
পরিষেবা প্রদানকারীর কনফিগারেশন false-এ সেট করা থাকলে, এই প্রিফিক্স মেসেজে
অন্তর্ভুক্ত করা হয় না।
এর উত্তরে, সার্ভার একটি EAP-Request/AKA-Identity মেসেজ পাঠায় এবং
সিস্টেম নিম্নলিখিত ফর্ম্যাটে উত্তর দেয়:
SERVER: EAP-Request/AKA-Identity AT_ANY_ID_REQ
UE: EAP-Response/AKA-Identity AT_IDENTITY=<prefix>|<Encrypted Permanent Identity>|","|"<attribute>=<value>"
পরিচয়ের প্রথম অক্ষর সার্ভারকে জানায় যে এনক্রিপ্ট করা পরিচয় ব্যবহার করা হয়েছে অথবা কনফিগার করা EAP পদ্ধতির ধরন:
\0: এনক্রিপ্ট করা স্থায়ী পরিচয়0: EAP-AKA1: EAP-SIM6: EAP-AKA'
কী শনাক্তকারী অ্যাট্রিবিউট ভ্যালু পেয়ার ঐচ্ছিক এবং ব্যবহার না করা হলে এনক্রিপ্ট করা স্থায়ী পরিচয়ের শেষে যোগ করা হয় না।
এই পর্যায়ে, সার্ভার কী শনাক্তকারী থেকে প্রাইভেট কী খুঁজে নেয় (যদি প্রদান করা হয়), পরিষেবা প্রদানকারীর প্রাইভেট কী ব্যবহার করে এনক্রিপ্ট করা পরিচয় ডিক্রিপ্ট করে এবং সাধারণ EAP ফ্লো চালিয়ে যায়।
সফলভাবে যাচাইকরণ হয়ে গেলে, সার্ভার একটি দ্রুত পুনরায় যাচাইকরণ পরিচয় বা একটি সাময়িক পরিচয় (ছদ্মনাম) প্রদান করতে পারে, যা পরবর্তী কানেকশনে ব্যবহার করা হয়। সার্ভার কোনও সাময়িক পরিচয় প্রদান না করলে, সিস্টেম পরবর্তী কানেকশনে এনক্রিপ্ট করা পরিচয় পাঠায়।
ক্যারিয়ার সার্টিফিকেট পাওয়া, মেয়াদ শেষ হওয়া ও তুলে নেওয়া
সিস্টেমে কোনও সার্টিফিকেট ইনস্টল করা না থাকলে, সিস্টেম HTTP GET পদ্ধতি ব্যবহার করে
সার্টিফিকেট ডাউনলোড করার জন্য imsi_key_download_url_string পরিষেবা প্রদানকারীর কনফিগারেশনে
প্রদান করা URL ব্যবহার করে। সিস্টেম শুধুমাত্র তখনই সেলুলার ডেটা ব্যবহার করে, যদি
allow_metered_network_for_cert_download_bool পরিষেবা প্রদানকারীর কনফিগারেশন true
হিসেবে সেট করা থাকে। অন্যথায়, ওয়াই-ফাই কানেকশন
উপলভ্য থাকলেই সিস্টেম সার্টিফিকেট ডাউনলোড করে।
সিস্টেমের মাধ্যমে সার্টিফিকেটের মেয়াদ শেষ হওয়ার বিষয়টি প্রয়োগ করা হয়। সার্টিফিকেটের মেয়াদ শেষ হওয়ার ২১ দিন আগে থেকে সিস্টেম সার্টিফিকেট রিনিউ করার চেষ্টা শুরু করে এবং নতুন সার্টিফিকেট ডাউনলোড করার জন্য একই URL ব্যবহার করে।
সার্ভার এনক্রিপ্টেড পরিচয় ডিক্রিপ্ট করতে না পারলে, EAP এক্সচেঞ্জ বন্ধ করার জন্য সার্ভার একটি
EAP-Request/AKA-Notification মেসেজ সহ AT_NOTIFICATION কোড
General Failure (16384) পাঠায়।
সার্টিফিকেট প্রত্যাহার করা হলে বা মেয়াদ শেষ হয়ে গেলে, EAP এক্সচেঞ্জ বন্ধ করার জন্য সার্ভার একটি
EAP-Request/AKA-Notification মেসেজ সহ AT_NOTIFICATION কোড
Certificate Replacement Required (16385) পাঠায়। উত্তরে, সার্টিফিকেটটি সরিয়ে দেওয়া হবে কিনা এবং একই URL থেকে নতুন সার্টিফিকেট ডাউনলোড করার চেষ্টা করা হবে কিনা তা নির্ধারণ করতে
সিস্টেম ইন্টার্নাল হিউরিস্টিক প্রয়োগ করে।
পাবলিক কী প্রদান করুন
TLS-এর মাধ্যমে HTTP ব্যবহার করে এমন একটি সার্ভারের পাবলিক URL দিন, যা ক্যারিয়ারের সার্টিফিকেট হোস্ট করে যেখানে:
- সার্টিফিকেট থেকে সর্বজনীন কী ও মেয়াদ শেষ হওয়ার তারিখ এক্সট্র্যাক্ট করা যেতে পারে।
সার্ভার থেকে পাওয়া তথ্য JSON ফর্ম্যাটে থাকে, যেমন:
Property: key-identifier Type: String Encoding: UTF-8 Description: Specifies an identifier that the carrier would like to attach to the certificate. Optional: Yes Property: certificate Property alternative name: public-key Type: String Encoding: Base64 Description: The content of the carrier's X.509 certificate. Optional: No Property: key-type Type: String Encoding: UTF-8 Description: Specifies the module that will use the key. The value for type must be either WLAN or EPDG. Optional: Yes. If the key-type property isn't included, then its value defaults to WLAN.নিচে সর্বজনীন কী-এর একটি উদাহরণ দেওয়া হল।
{ "carrier-keys" : [ { "key-identifier" : "CertificateSerialNumber=5xxe06d4", "public-key" : "-----BEGIN CERTIFICATE-----\r\nTIIDRTCCAi2gAwIBAgIEVR4G1DANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJVUzELMAkGA1UE\r\nCBMCTkExCzAJBgNVBAcTAk5BMQswCQYDVQQKEwJOQTELMAkGA1UECxMCTkExEDAOBgNVBAMTB1Rl\r\nc3RiT6N1/w==\r\n-----END CERTIFICATE-----" } ] }