Overview

নিরাপদ ব্রাউজিং অবলিভিয়্যাস HTTP গেটওয়ে API

দ্রষ্টব্য: এই ডকুমেন্টেশনটি এখনও বিকাশাধীন। অদূর ভবিষ্যতে উন্নতি আশা করুন.

সেফ ব্রাউজিং অবলিভিয়াস এইচটিটিপি গেটওয়ে এপিআই হল একটি গোপনীয়তা সংরক্ষণকারী এপিআই যা আইইটিএফ আরএফসি প্রোটোকলের উপরে অবলিভিয়স HTTP , RFC 9458 নামে তৈরি করা হয়েছে।

ওভারভিউ

সেফ ব্রাউজিং অবলিভিয়াস এইচটিটিপি গেটওয়ে এপিআই হল একটি Google পরিষেবা যা ক্লায়েন্ট অ্যাপ্লিকেশনগুলিকে অতিরিক্ত গোপনীয়তা সুরক্ষা সহ Google-এর ক্রমাগত আপডেট হওয়া অনিরাপদ ওয়েব সংস্থানগুলির তালিকার বিরুদ্ধে URL গুলি পরীক্ষা করতে দেয়৷

এটি একটি হালকা ওজনের প্রোটোকলের মাধ্যমে অর্জন করা হয় যাকে বলা হয় অবলিভিয়াস HTTP বা সংক্ষেপে OHTTP । এটি একটি স্টেটলেস প্রোটোকল যা সেফ ব্রাউজিং ক্লায়েন্টরা Google সেফ ব্রাউজিং V5 এপিআই অ্যাক্সেস করতে, ব্যবহারকারীদের গোপনীয়তার সাথে আপস না করে শক্তিশালী সুরক্ষা এবং বর্ধিত কভারেজ পেতে ব্যবহার করতে পারে।

দ্রষ্টব্য: Google নিরাপদ ব্রাউজিং V4 API এই পরিষেবার মাধ্যমে অ্যাক্সেস করা যাবে না।

নিরাপদ ব্রাউজিং বিস্মৃত HTTP প্রোটোকল

RFC প্রোটোকল

অবলিভিয়াস HTTP হল RFC 9458 -এ সংজ্ঞায়িত একটি হালকা প্রোটোকল, যা একটি ক্লায়েন্ট থেকে লক্ষ্য সার্ভারে HTTP বার্তা এনক্রিপ্ট এবং পাঠানোর জন্য ব্যবহৃত হয়। এটি এমনভাবে একটি বিশ্বস্ত রিলে পরিষেবা ব্যবহার করে যা লক্ষ্য সার্ভারের মেটাডেটা যেমন IP ঠিকানা এবং ক্লায়েন্ট শনাক্তকরণের জন্য সংযোগ তথ্যের ব্যবহার হ্রাস করে, সরল HTTP/S প্রোটোকলের উপরে গোপনীয়তা এবং নিরাপত্তা প্রদান করে। প্রোটোকল HTTP অনুরোধ/প্রতিক্রিয়া এনকোড/ডিকোড করতে RFC 9292-এ সংজ্ঞায়িত বাইনারি HTTP ব্যবহার করে।

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

পরিষেবার সামগ্রিক আর্কিটেকচার।
চিত্র : OHTTP প্রবাহ।

ক্লায়েন্টরা পরিষেবার সাথে একীভূত করার জন্য যেকোনো রিলে প্রদানকারীকে (যেমন, দ্রুত ) বেছে নিতে পারেন। পরিষেবাটি অ্যাক্সেস করার জন্য রিলেকে অবশ্যই নিম্নলিখিত অনুমোদনের সুযোগ সহ Oauth 2.0 প্রমাণীকরণ ব্যবহার করতে হবে।


// OAuth Authorization scope: https://www.googleapis.com/auth/3p-relay-safe-browsing
এপিআই এন্ডপয়েন্ট
OHTTP পাবলিক কী

এই এন্ডপয়েন্টটি RFC 9458 এ উল্লেখিত OHTTP পাবলিক কী কনফিগারেশন প্রদান করবে, যা ক্লায়েন্ট OHTTP অনুরোধ এনক্রিপ্ট করতে ব্যবহার করবে।


GET https://safebrowsingohttpgateway.googleapis.com/v1/ohttp/hpkekeyconfig?key=<API key>

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

গোপনীয়তা সুপারিশ বিভাগে যেমন বলা হয়েছে, মূল সামঞ্জস্যপূর্ণ লক্ষ্যগুলি পূরণ করার জন্য, ক্লায়েন্ট বিক্রেতাদের এই শেষ পয়েন্ট থেকে কী আনার জন্য এবং পরবর্তীতে তাদের ক্লায়েন্ট অ্যাপ্লিকেশনগুলিতে বিতরণ করার জন্য একটি কেন্দ্রীভূত কী বিতরণ পরিকাঠামো সেট আপ করার সুপারিশ করা হয়।

কী ব্যবস্থাপনা নির্দেশিকা অনুসারে, সার্ভারে কীগুলি নিয়মিত ঘোরানো হয়। ক্লায়েন্টদের কী রিফ্রেশ করা উচিত, অর্থাৎ, ডিক্রিপশন ব্যর্থতা এড়াতে প্রায়ই কীটির স্থানীয় অনুলিপি আনতে এবং আপডেট করতে হবে।

ক্লায়েন্টদের প্রতিদিন একবার পাবলিক কী রিফ্রেশ (আনয়ন এবং আপডেট) করা উচিত। যদি একটি কেন্দ্রীভূত বন্টন প্রক্রিয়া ব্যবহার করা হয়, তাহলে এই প্রক্রিয়াটি নিশ্চিত করা উচিত যে প্রতিদিন একবার কীগুলি আনা এবং বিতরণ করা।

OHTTP এনক্যাপসুলেটেড অনুরোধ

এই এন্ডপয়েন্টটি POST অনুরোধের HTTP বডিতে অন্তর্ভুক্ত OHTTP অনুরোধটি পরিবেশন করবে, অনুরোধ ডিক্রিপশন সম্পাদন করে, এবং পরবর্তীতে HTTP প্রতিক্রিয়াতে রিলেতে ফেরত পাঠানোর জন্য OHTTP প্রতিক্রিয়া এনক্রিপ্ট করবে। ক্লায়েন্টকে অবশ্যই HTTP POST অনুরোধে বার্তা/ohttp-req হিসাবে সামগ্রী-প্রকার অনুরোধ শিরোনাম অন্তর্ভুক্ত করতে হবে।


POST https://safebrowsingohttpgateway.googleapis.com/v1/ohttp:handleOhttpEncapsulatedRequest?key=<API key>

দ্রষ্টব্য: RFC-এর নির্দেশিকা অনুসারে, বাইনারি HTTP প্রোটোকল, RFC 9292 ব্যবহার করে অভ্যন্তরীণ অনুরোধ (কীভাবে নিরাপদ ব্রাউজিং অনুরোধ তৈরি করতে হয় সে সম্পর্কে V5 ডকুমেন্টেশন পড়ুন) এনকোড করুন।

ক্লায়েন্ট লাইব্রেরি

OHTTP , এবং BHTTP প্রোটোকল উভয়ের জন্য Google Quiche-এর ক্লায়েন্ট সাইড ইমপ্লিমেন্টেশন রয়েছে। ক্লায়েন্টদের এই লাইব্রেরি ব্যবহার করার জন্য সুপারিশ করা হয়. API অ্যাক্সেস করার জন্য OHTTP অনুরোধগুলি কীভাবে তৈরি করতে হয় সে সম্পর্কে নীচে ছদ্ম-কোড পড়ুন।

নমুনা ক্লায়েন্ট সাইড বাস্তবায়ন

ক্লায়েন্টরা পাবলিক কী এন্ডপয়েন্ট থেকে অবলিভিয়াস HTTP পাবলিক কী নিয়ে আসে। পরবর্তীকালে এইভাবে quiche OHTTP কী কনফিগারেশন শুরু করুন এবং quiche OHTTP ক্লায়েন্ট আরম্ভ করুন।


auto ohttp_key_cfgs = quiche::ObliviousHttpKeyConfigs::ParseConcatenatedKeys(std::string public_key); auto key_config = ohttp_key_cfgs->PreferredConfig(); auto public_key = ohttp_key_cfgs->GetPublicKeyForId(key_config.GetKeyId()) auto ohttp_client = quiche::ObliviousHttpClient::Create(public_key, key_config);

এনক্রিপ্ট করার আগে প্রথম ধাপ হিসেবে BHTTP অনুরোধ তৈরি করতে ক্লায়েন্ট বাইনারি HTTP এনকোডিং ব্যবহার করবে।


quiche::BinaryHttpRequest::ControlData bhttp_ctrl_data{ .method = "POST", .scheme = "https", .authority = "safebrowsing.googleapis.com", .path = "/v5/hashes:search?key=<API key>&hashPrefixes=<HASH prefix 1>&hashPrefixes=<HASH prefix 2>", }; quiche::BinaryHttpRequest bhttp_request(bhttp_ctrl_data);

ক্লায়েন্ট পরবর্তীতে উপরের ধাপে তৈরি বাইনারি HTTP অনুরোধ এনক্রিপ্ট করবে।


auto bhttp_serialized = bhttp_request.Serialize(); auto ohttp_request = ohttp_client.CreateObliviousHttpRequest(*bhttp_serialized); // Client must include this in POST body, and add `Content-Type` header as "message/ohttp-req". auto payload_include_in_post_body = ohttp_request.EncapsulateAndSerialize();

একবার রিলে থেকে প্রতিক্রিয়া পাওয়া গেলে, ক্লায়েন্ট প্রতিক্রিয়াটি ডিক্রিপ্ট করবে। প্রতিক্রিয়াটিতে ohttp-res হিসাবে সামগ্রী-প্রকার প্রতিক্রিয়া শিরোনাম অন্তর্ভুক্ত থাকবে।


auto ctx = std::move(ohttp_request).ReleaseContext(); auto ohttp_response = ohttp_client.DecryptObliviousHttpResponse("data included in body of http_response", ctx);

OHTTP প্রতিক্রিয়া সফলভাবে ডিক্রিপ্ট করার পরে, বাইনারি HTTP ব্যবহার করে আউটপুট ডিকোড করুন।


auto bhttp_response = BinaryHttpResponse::Create(ohttp_response.GetPlaintextData()); if (bhttp_response.status_code() == 200) { auto http_response = bhttp_response.body(); auto response_headers = bhttp_response.GetHeaderFields(); }