ক্যারিয়ার ওয়াই-ফাই হলো অ্যান্ড্রয়েড ৯ এবং এর পরবর্তী সংস্করণগুলোতে উপলব্ধ একটি স্বয়ংক্রিয় সংযোগের বৈশিষ্ট্য (যা এনক্রিপ্টেড IMSI ব্যবহার করে), যা ডিভাইসগুলোকে ক্যারিয়ার-পরিচালিত ওয়াই-ফাই নেটওয়ার্কে স্বয়ংক্রিয়ভাবে সংযুক্ত হতে দেয়। স্টেডিয়াম বা পাতাল রেল স্টেশনের মতো অধিক ভিড়যুক্ত বা স্বল্প সেল কভারেজের এলাকায়, ক্যারিয়ার ওয়াই-ফাই ব্যবহারকারীদের সংযোগের অভিজ্ঞতা উন্নত করতে এবং ট্র্যাফিকের চাপ কমাতে পারে।
ক্যারিয়ার ওয়াই-ফাই বৈশিষ্ট্যযুক্ত ডিভাইসগুলি কনফিগার করা ক্যারিয়ার ওয়াই-ফাই নেটওয়ার্কগুলিতে (পাবলিক কী সার্টিফিকেটযুক্ত নেটওয়ার্ক) স্বয়ংক্রিয়ভাবে সংযুক্ত হয়। যখন কোনো ব্যবহারকারী ম্যানুয়ালি একটি ক্যারিয়ার ওয়াই-ফাই নেটওয়ার্ক থেকে সংযোগ বিচ্ছিন্ন করেন, তখন নেটওয়ার্কটি ২৪ ঘন্টার জন্য ডিনাইলিস্টেড হয়ে যায় (কোনো স্বয়ংক্রিয় সংযোগ হয় না)। ব্যবহারকারীরা যেকোনো সময় ডিনাইলিস্টেড নেটওয়ার্কগুলিতে ম্যানুয়ালি সংযোগ করতে পারেন।
বাস্তবায়ন
ক্যারিয়ার ওয়াই-ফাই বাস্তবায়নের জন্য ডিভাইস নির্মাতা এবং ক্যারিয়ারদের অবশ্যই নিম্নলিখিত কাজগুলো করতে হবে।
নির্মাতারা
অ্যান্ড্রয়েড ১১ এবং তার পরবর্তী সংস্করণে চালিত ডিভাইসগুলোর জন্য, প্রতিটি ক্যারিয়ারের ওয়াই-ফাই প্রোফাইল যোগ করতে ওয়াই-ফাই সাজেশন এপিআই ব্যবহার করুন।
অ্যান্ড্রয়েড ১০ বা তার নিম্ন সংস্করণে চালিত ডিভাইসগুলোর জন্য, ক্যারিয়ার কনফিগ ম্যানেজার- এ প্রতিটি ক্যারিয়ারের জন্য carrier_wifi_string_array প্যারামিটারটি কনফিগার করে ওয়াই-ফাই প্রোফাইল যোগ করুন।
carrier_wifi_string_array:একটি স্ট্রিং অ্যারে, যেখানে প্রতিটি স্ট্রিং এন্ট্রি হলো একটি Base64-এনকোডেড Wi-Fi SSID এবং একটি EAP টাইপ, যা কমা দ্বারা পৃথক করা থাকে এবং EAP টাইপটি একটি পূর্ণসংখ্যা ( Extensible Authentication Protocol (EAP) Registry দেখুন)। উদাহরণস্বরূপ, নিম্নলিখিত কনফিগারেশনটি হলো 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 (বিট ০ সেট করা), নাকি উভয়ের (বিট ০ এবং বিট ১ উভয়ই সেট করা) জন্য উপলব্ধ আছে। উদাহরণস্বরূপ, নিম্নলিখিত কনফিগারেশনটি নির্দেশ করে যে IMSI এনক্রিপশন WLAN-এর জন্য উপলব্ধ কিন্তু EPDG-এর জন্য নয়:
config { key: "imsi_key_availability_int" int_value: 2 }imsi_key_download_url_string:যে URL থেকে IMSI এনক্রিপশনের জন্য ব্যবহৃত ক্যারিয়ারের পাবলিক কী ধারণকারী প্রোটোটি ডাউনলোড করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত কনফিগারেশনটি একটি নির্দিষ্ট 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) গোপনীয়তা রক্ষা করে। অ্যান্ড্রয়েড ওয়াই-ফাই এর জন্য IMSI গোপনীয়তা সুরক্ষার ক্ষেত্রে ওয়্যারলেস ব্রডব্যান্ড অ্যালায়েন্স (WBA) স্পেসিফিকেশন বাস্তবায়ন করে। যখন কোনো সংযোগের জন্য IMSI গোপনীয়তা সুরক্ষা সক্রিয় করা হয়, তখন গ্রাহকের স্থায়ী পরিচয়টি সরাসরি বাতাসে প্রেরণ করা হয় না।
স্থায়ী পরিচয় এনক্রিপশন
এনক্রিপ্টেড স্থায়ী পরিচয়ের ফর্ম্যাটটি নিম্নরূপ:
- স্থায়ী পরিচয়টি
<EAP-Method><IMSI>@<NAI realm>ফরম্যাটে থাকে। - EAP-Method প্রিফিক্স হলো একটি একক অক্টেট যা প্রমাণীকরণের জন্য ব্যবহৃত EAP পদ্ধতিকে সংজ্ঞায়িত করে:
-
0: ইএপি-একেএ -
1: ইএপি-সিম -
6: ইএপি-একেএ'
-
- 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 । যদি কী আইডেন্টিফায়ারটি প্রদান করা হয়, তবে এটি অথেনটিকেশন প্রক্রিয়ার অংশ হিসেবে কোনো তথ্য ছাড়াই পাঠানো হয়।
SIM-ভিত্তিক 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 তে সেট করা থাকে, তাহলে EAP এক্সচেঞ্জ শুরু হওয়ার আগে আইডেন্টিটির প্রথম অক্ষরটি ( anonymous এর আগে) ব্যবহৃত EAP মেথডের ধরন সম্পর্কে সার্ভারকে অবহিত করে।
-
0: ইএপি-একেএ -
1: ইএপি-সিম -
6: ইএপি-একেএ'
যদি ক্যারিয়ার কনফিগারেশন ' 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: ইএপি-একেএ -
1: ইএপি-সিম -
6: ইএপি-একেএ'
কী আইডেন্টিফায়ার অ্যাট্রিবিউট ভ্যালু পেয়ারটি ঐচ্ছিক এবং ব্যবহৃত না হলে এনক্রিপ্টেড পার্মানেন্ট আইডেন্টিটির শেষে যুক্ত করা হয় না।
এই পর্যায়ে, সার্ভারটি কী আইডেন্টিফায়ার (যদি সরবরাহ করা থাকে) থেকে প্রাইভেট কী-টি খুঁজে বের করে, ক্যারিয়ার প্রাইভেট কী ব্যবহার করে এনক্রিপ্টেড আইডেন্টিটি ডিক্রিপ্ট করে এবং স্বাভাবিক EAP প্রবাহ অব্যাহত রাখে।
সফলভাবে প্রমাণীকরণের পর, সার্ভার একটি দ্রুত পুনঃপ্রমাণীকরণ পরিচয় বা একটি অস্থায়ী পরিচয় (ছদ্মনাম) প্রদান করতে পারে, যা পরবর্তী সংযোগগুলিতে ব্যবহৃত হয়। যদি সার্ভার কোনো অস্থায়ী পরিচয় প্রদান না করে, তবে সিস্টেমটি পরবর্তী সংযোগে এনক্রিপ্ট করা পরিচয়টি পাঠিয়ে দেয়।
ক্যারিয়ার সার্টিফিকেট পুনরুদ্ধার, মেয়াদোত্তীর্ণ এবং বাতিলকরণ
সিস্টেমে কোনো সার্টিফিকেট ইনস্টল করা না থাকলে, সিস্টেমটি HTTP GET মেথড ব্যবহার করে সার্টিফিকেট ডাউনলোড করার জন্য imsi_key_download_url_string ক্যারিয়ার কনফিগারেশনে দেওয়া URL-টি ব্যবহার করে। সিস্টেমটি শুধুমাত্র তখনই সেলুলার ডেটা ব্যবহার করে, যখন allow_metered_network_for_cert_download_bool ক্যারিয়ার কনফিগারেশনটি true তে সেট করা থাকে। অন্যথায়, সিস্টেমটি কেবল তখনই সার্টিফিকেটটি ডাউনলোড করে যখন একটি Wi-Fi সংযোগ উপলব্ধ থাকে।
সার্টিফিকেটের মেয়াদোত্তীর্ণ হওয়া সিস্টেম দ্বারা কার্যকর করা হয়। সিস্টেমটি সার্টিফিকেটের মেয়াদ শেষ হওয়ার ২১ দিন আগে থেকে সার্টিফিকেট নবায়ন করার চেষ্টা শুরু করে এবং নতুন সার্টিফিকেট ডাউনলোড করার জন্য একই URL ব্যবহার করে।
যদি সার্ভার এনক্রিপ্ট করা পরিচয়টি ডিক্রিপ্ট করতে না পারে, তাহলে EAP বিনিময়টি বন্ধ করার জন্য সার্ভারটি AT_NOTIFICATION কোড General Failure (16384) সহ একটি EAP-Request/AKA-Notification বার্তা পাঠায়।
যদি সার্টিফিকেটটি বাতিল বা মেয়াদোত্তীর্ণ হয়ে যায়, তাহলে সার্ভার EAP বিনিময় বন্ধ করার জন্য AT_NOTIFICATION কোড Certificate Replacement Required (16385) সহ একটি EAP-Request/AKA-Notification বার্তা পাঠায়। এর প্রতিক্রিয়ায়, সিস্টেমটি সার্টিফিকেটটি সরিয়ে ফেলবে কিনা এবং একই URL থেকে একটি নতুন সার্টিফিকেট ডাউনলোড করার চেষ্টা করবে কিনা তা নির্ধারণ করতে অভ্যন্তরীণ হিউরিস্টিকস প্রয়োগ করে।
পাবলিক কী প্রদান করুন
ক্যারিয়ারের সার্টিফিকেট হোস্ট করে এমন একটি সার্ভারের পাবলিক URL প্রদান করুন, বিশেষত HTTP over TLS ব্যবহার করে, যেখানে:
- সার্টিফিকেট থেকে পাবলিক কী এবং মেয়াদোত্তীর্ণের তারিখ বের করা যেতে পারে।
সার্ভার থেকে প্রাপ্ত তথ্যগুলো নিম্নরূপ 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-----" } ] }