WebAuthn এর সাথে শক্তিশালী প্রমাণীকরণ সক্ষম করা হচ্ছে

সমস্যা

ফিশিং হল ওয়েবে শীর্ষ নিরাপত্তা সমস্যা: গত বছর হ্যাকিং-সম্পর্কিত অ্যাকাউন্ট লঙ্ঘনের 81% দুর্বল বা চুরি করা পাসওয়ার্ড ব্যবহার করেছে। এই সমস্যাটির জন্য শিল্পের সম্মিলিত প্রতিক্রিয়া হল মাল্টি-ফ্যাক্টর প্রমাণীকরণ, কিন্তু বাস্তবায়নগুলি খণ্ডিত এবং বেশিরভাগ এখনও ফিশিংকে পর্যাপ্তভাবে সম্বোধন করে না। আমরা 2013 সাল থেকে FIDO অ্যালায়েন্সের সাথে কাজ করছি এবং সম্প্রতি, W3C-এর সাথে একটি মানসম্মত ফিশিং-প্রতিরোধী প্রোটোকল বাস্তবায়ন করতে যা যেকোনো ওয়েব অ্যাপ্লিকেশন ব্যবহার করতে পারে।

WebAuthn কি?

ওয়েব প্রমাণীকরণ API ওয়েব অ্যাপ্লিকেশনগুলিকে প্রমাণীকরণকারীদের ব্যবহারকারী-এজেন্ট-মধ্যস্থিত অ্যাক্সেস দেয় – যা প্রায়শই হার্ডওয়্যার টোকেন যা ইউএসবি/বিএলই/এনএফসি বা সরাসরি প্ল্যাটফর্মে তৈরি মডিউলগুলির মাধ্যমে অ্যাক্সেস করা হয় - অ্যাপ্লিকেশন-স্কোপড (eTLD+k) তৈরি এবং চ্যালেঞ্জ করার উদ্দেশ্যে ) পাবলিক-কী শংসাপত্র। এটি বিভিন্ন ধরনের ব্যবহারের ক্ষেত্রে সক্ষম করে, যেমন:

  • কম ঘর্ষণ এবং ফিশিং-প্রতিরোধী 2FA (একটি পাসওয়ার্ডের সাথে ব্যবহার করা হবে)।
  • পাসওয়ার্ডহীন, বায়োমেট্রিক্স-ভিত্তিক পুনরায় অনুমোদন।
  • পাসওয়ার্ড ছাড়াই কম ঘর্ষণ এবং ফিশিং-প্রতিরোধী 2FA (পাসওয়ার্ডহীন অ্যাকাউন্টের জন্য ব্যবহার করা হবে)।

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

WebAuthn ক্রেডেনশিয়াল ম্যানেজমেন্ট API প্রসারিত করে এবং PublicKeyCredential নামে একটি নতুন শংসাপত্রের ধরন যোগ করে। WebAuthn ব্রাউজার এবং একটি প্রমাণীকরণকারীর মধ্যে যোগাযোগ বিমূর্ত করে এবং একজন ব্যবহারকারীকে অনুমতি দেয়:

  1. একটি ওয়েবসাইটের জন্য একটি পাবলিক কী শংসাপত্র তৈরি করুন এবং নিবন্ধন করুন৷
  2. সংশ্লিষ্ট ব্যক্তিগত কী-এর দখল প্রমাণ করে একটি ওয়েবসাইটে প্রমাণীকরণ করুন।

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

এটা কিভাবে কাজ করে

একটি মূল জোড়া তৈরি করা এবং একজন ব্যবহারকারী নিবন্ধন করা

যখন একজন ব্যবহারকারী একটি ওয়েবসাইটে একটি শংসাপত্র নিবন্ধন করতে চায় (WebAuthn দ্বারা "নির্ভরকারী পক্ষ" হিসাবে উল্লেখ করা হয়েছে):

  1. নির্ভরশীল দল একটি চ্যালেঞ্জ তৈরি করে।
  2. নির্ভরকারী পক্ষ ব্রাউজারকে, ক্রেডেনশিয়াল ম্যানেজার API-এর মাধ্যমে, নির্ভরকারী পক্ষের জন্য একটি নতুন শংসাপত্র তৈরি করতে বলে, ডিভাইসের ক্ষমতা নির্দিষ্ট করে, যেমন, ডিভাইসটি তার নিজস্ব ব্যবহারকারীর প্রমাণীকরণ (বায়োমেট্রিক্স, ইত্যাদি সহ) প্রদান করে কিনা।
  3. প্রমাণীকরণকারী ব্যবহারকারীর সম্মতি পাওয়ার পরে, প্রমাণীকরণকারী একটি কী জোড়া তৈরি করে এবং সর্বজনীন কী এবং ঐচ্ছিক স্বাক্ষরিত প্রত্যয়ন ওয়েবসাইটে ফেরত দেয়।
  4. ওয়েব অ্যাপ সার্ভারে পাবলিক কী ফরোয়ার্ড করে।
  5. সার্ভার ভবিষ্যতের প্রমাণীকরণের জন্য শংসাপত্র মনে রাখার জন্য ব্যবহারকারীর পরিচয়ের সাথে পাবলিক কী সংরক্ষণ করে।
let credential = await navigator.credentials.create({ publicKey: {
  challenge: new Uint8Array([117, 61, 252, 231, 191, 241, ...]),
  rp: { id: "acme.com", name: "ACME Corporation" },
  user: {
    id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
    name: "jamiedoe",
    displayName: "Jamie Doe"
  },
  pubKeyCredParams: [ {type: "public-key", alg: -7} ]
}});

একটি ব্যবহারকারী প্রমাণীকরণ

যখন একটি ওয়েবসাইটকে প্রমাণ পেতে হবে যে এটি সঠিক ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করছে:

  1. নির্ভরকারী পক্ষ একটি চ্যালেঞ্জ তৈরি করে এবং ব্যবহারকারীর কাছে নিবন্ধিত শংসাপত্রগুলির একটি তালিকা সহ ব্রাউজারকে সরবরাহ করে। এটিও নির্দেশ করতে পারে যে শংসাপত্রটি কোথায় খুঁজতে হবে, যেমন, একটি স্থানীয় বিল্ট-ইন প্রমাণীকরণকারীতে, বা USB, BLE, ইত্যাদির মাধ্যমে বাইরের একটিতে।
  2. ব্রাউজার প্রমাণীকরণকারীকে চ্যালেঞ্জে স্বাক্ষর করতে বলে।
  3. যদি প্রমাণীকরণকারীতে প্রদত্ত শংসাপত্রগুলির মধ্যে একটি থাকে, তাহলে ব্যবহারকারীর সম্মতি পাওয়ার পরে প্রমাণীকরণকারী ওয়েব অ্যাপে একটি স্বাক্ষরিত দাবি ফেরত দেয়।
  4. ওয়েব অ্যাপটি যাচাই করার জন্য নির্ভরকারী পক্ষের জন্য স্বাক্ষরিত দাবিটি সার্ভারে ফরোয়ার্ড করে।
  5. একবার সার্ভার দ্বারা যাচাই করা হলে, প্রমাণীকরণ প্রবাহ সফল বলে বিবেচিত হয়।
let credential = await navigator.credentials.get({ publicKey: {
  challenge: new Uint8Array([139, 66, 181, 87, 7, 203, ...]),
  rpId: "acme.com",
  allowCredentials: [{
    type: "public-key",
    id: new Uint8Array([64, 66, 25, 78, 168, 226, 174, ...])
  }],
  userVerification: "required",
}});

https://webauthndemo.appspot.com/- এ নিজেই WebAuthn ব্যবহার করে দেখুন।

সামনে কি?

navigator.credentials.get({publicKey: ...}) এবং navigator.credentials.create({publicKey:... }) সমর্থন সহ Chrome 67 বিটা শিপ এবং ডেস্কটপে USB ট্রান্সপোর্টের মাধ্যমে U2F/CTAP 1 প্রমাণীকরণ ব্যবহার করতে সক্ষম করে।

আসন্ন প্রকাশগুলি BLE এবং NFC এবং নতুন CTAP 2 ওয়্যার প্রোটোকলের মতো আরও পরিবহনের জন্য সমর্থন যোগ করবে। আমরা CTAP 2 এবং WebAuthn দ্বারা সক্ষম আরও উন্নত প্রবাহের উপরও কাজ করছি, যেমন PIN সুরক্ষিত প্রমাণীকরণকারী, অ্যাকাউন্টের স্থানীয় নির্বাচন (একটি ব্যবহারকারীর নাম বা পাসওয়ার্ড টাইপ করার পরিবর্তে), এবং আঙ্গুলের ছাপ তালিকাভুক্তি।

মনে রাখবেন যে Microsoft Edge এছাড়াও API সমর্থন করে এবং Firefox Firefox 60 হিসাবে WebAuthn সমর্থন করছে

সম্পদ

আমরা আরো বিস্তারিত ডকুমেন্টেশন কাজ করছি:

Google I/O 2018-এ "ওয়েবে সাইন-আপ এবং সাইন-ইন সহ নতুন কী আছে" সেশনটি WebAuthn কভার করেছে।