ব্যবহারকারী যাচাইকরণ গভীর ডুব

এই ডকুমেন্টটি WebAuthn-এ userVerification কী এবং পাসকি তৈরি বা প্রমাণীকরণের সময় userVerification নির্দিষ্ট করার সময় ব্রাউজারের আচরণগুলি নিয়ে আলোচনা করে।

WebAuthn-এ "ব্যবহারকারী যাচাইকরণ" কী?

পাসকিগুলি পাবলিক কী ক্রিপ্টোগ্রাফির উপর ভিত্তি করে তৈরি। একটি পাসকি তৈরি করে, একটি পাবলিক-প্রাইভেট কী জোড়া তৈরি করা হয়, পাসকি প্রদানকারী প্রাইভেট কী সংরক্ষণ করে এবং পাবলিক কীটি নির্ভরশীল পক্ষের (RP) সার্ভারে সংরক্ষণের জন্য ফেরত পাঠানো হয়। সার্ভারটি জোড়াযুক্ত পাবলিক কী ব্যবহার করে একই পাসকি দ্বারা স্বাক্ষরিত একটি স্বাক্ষর যাচাই করে একজন ব্যবহারকারীকে প্রমাণীকরণ করতে পারে। একটি পাবলিক কী শংসাপত্রের "ব্যবহারকারী উপস্থিত" (UP) পতাকা প্রমাণ করে যে প্রমাণীকরণের সময় কেউ ডিভাইসের সাথে ইন্টারঅ্যাক্ট করেছে।

ব্যবহারকারী যাচাইকরণ হল নিরাপত্তার একটি ঐচ্ছিক স্তর যা নিশ্চিত করে যে প্রমাণীকরণের সময় সঠিক ব্যক্তি উপস্থিত ছিলেন, কেবল কোনও ব্যক্তি নয়, যেমন ব্যবহারকারীর উপস্থিতি দাবি করে। স্মার্টফোনে, এটি সাধারণত স্ক্রিন-লক প্রক্রিয়া ব্যবহার করে করা হয়, তা বায়োমেট্রিক হোক বা পিন বা পাসওয়ার্ড। ব্যবহারকারী যাচাইকরণ সম্পন্ন হয়েছে কিনা তা "UV" ফ্ল্যাগে রিপোর্ট করা হয় যা পাসকি নিবন্ধন এবং প্রমাণীকরণের সময় প্রমাণীকরণকারী ডেটাতে ফেরত পাঠানো হয়।

MacOS-এ iCloud Keychain-এ ব্যবহারকারী যাচাইকরণ ডায়ালগ। ডায়ালগটি ব্যবহারকারীকে টাচ আইডি ব্যবহার করে সাইন ইন করতে অনুরোধ করে, যা প্রমাণীকরণের অনুরোধকারী উৎস এবং ব্যবহারকারীর নাম প্রদর্শন করে। ডায়ালগের উপরের ডানদিকে 'বাতিল করুন' লেবেলযুক্ত একটি বোতাম রয়েছে।
অ্যান্ড্রয়েড ক্রোমে ব্যবহারকারী যাচাইকরণ ডায়ালগ। ডায়ালগটি ব্যবহারকারীকে মুখের স্বীকৃতি বা আঙুলের ছাপ সনাক্তকরণ ব্যবহার করে তাদের পরিচয় যাচাই করতে অনুরোধ করে এবং প্রমাণীকরণের অনুরোধকারী উৎস প্রদর্শন করে। নীচে বাম দিকে একটি পিন ব্যবহার করে যাচাই করার একটি বিকল্প রয়েছে।

সার্ভারে UP এবং UV কীভাবে যাচাই করা হয়

ব্যবহারকারীর উপস্থিতি (UP) এবং ব্যবহারকারী যাচাইকৃত (UV) বুলিয়ান পতাকাগুলি প্রমাণীকরণকারী ডেটা ক্ষেত্রে সার্ভারে সংকেতিত করা হয়। প্রমাণীকরণের সময়, সঞ্চিত পাবলিক কী ব্যবহার করে স্বাক্ষর যাচাই করে প্রমাণীকরণকারী ডেটা ক্ষেত্রের বিষয়বস্তু যাচাই করা যেতে পারে। যতক্ষণ স্বাক্ষরটি বৈধ থাকে, ততক্ষণ সার্ভার পতাকাগুলিকে আসল বলে বিবেচনা করতে পারে।

প্রমাণীকরণ ডেটা কাঠামোর একটি চিত্র।
একটি পাবলিক কী ক্রেডেনশিয়ালে প্রমাণীকরণকারী ডেটা ক্ষেত্র। বাম থেকে ডানে, ডেটা স্ট্রাকচারের প্রতিটি অংশে 'RP ID HASH' (32 বাইট), 'FLAGS' (1 বাইট), 'COUNTER' (4 বাইট, বড়-এন্ডিয়ান uint32), 'ATTESTE CRED. DATA' (যদি পরিবর্তনশীল দৈর্ঘ্য থাকে) এবং 'EXTENSIONS' (যদি পরিবর্তনশীল দৈর্ঘ্য থাকে (CBOR)) লেখা থাকে। 'FLAGS' বিভাগটি বাম থেকে ডানে লেবেলযুক্ত সম্ভাব্য পতাকাগুলির একটি তালিকা দেখানোর জন্য প্রসারিত করা হয়েছে: 'ED', 'AT', '0', 'BS', 'BE', 'UV', '0', এবং 'UP'।

পাসকি রেজিস্ট্রেশন এবং প্রমাণীকরণের সময়, সার্ভারের পরীক্ষা করা উচিত যে UP ফ্ল্যাগটি true নাকি false , এবং UV ফ্ল্যাগটি true নাকি false , প্রয়োজনীয়তার উপর নির্ভর করে।

userVerification প্যারামিটার নির্দিষ্ট করুন

WebAuthn স্পেসিফিকেশন অনুসারে, RP ক্রেডেনশিয়াল তৈরি এবং দাবি উভয় ক্ষেত্রেই userVerification প্যারামিটার ব্যবহার করে ব্যবহারকারী যাচাইকরণের অনুরোধ করতে পারে। এটি 'preferred' , 'required' , অথবা 'discouraged' গ্রহণ করে যার অর্থ যথাক্রমে:

  • 'preferred' (ডিফল্ট): ডিভাইসে ব্যবহারকারী যাচাইকরণ পদ্ধতি ব্যবহার করা পছন্দনীয় , তবে যদি এটি উপলব্ধ না হয় তবে এড়িয়ে যেতে পারে। প্রতিক্রিয়া শংসাপত্রে একটি UV পতাকা মান থাকে যা ব্যবহারকারী যাচাইকরণ সম্পন্ন হলে true এবং যদি UV সম্পন্ন না হয় তবে false
  • 'required' : ডিভাইসে উপলব্ধ একটি ব্যবহারকারী যাচাইকরণ পদ্ধতি ব্যবহার করা আবশ্যক। যদি একটি উপলব্ধ না থাকে, তাহলে অনুরোধটি স্থানীয়ভাবে ব্যর্থ হবে। এর অর্থ হল প্রতিক্রিয়া শংসাপত্র সর্বদা UV পতাকা true তে সেট করে ফিরে আসে।
  • 'discouraged' : ব্যবহারকারী যাচাইকরণ পদ্ধতি ব্যবহার করা নিরুৎসাহিত করা হয়। তবে, ডিভাইসের উপর নির্ভর করে, ব্যবহারকারী যাচাইকরণ যেকোনোভাবে করা যেতে পারে, এবং UV পতাকায় true বা false থাকতে পারে।

পাসকি তৈরির জন্য নমুনা কোড:

const publicKeyCredentialCreationOptions = {
  // ...
  authenticatorSelection: {
    authenticatorAttachment: 'platform',
    residentKey: 'required',
    requireResidentKey: true,
    userVerification: 'preferred'
  }
};

const credential = await navigator.credentials.create({
  publicKey: publicKeyCredentialCreationOptions
});

পাসকি প্রমাণীকরণের জন্য নমুনা কোড:

const publicKeyCredentialRequestOptions = {
  challenge: /* Omitted challenge data... */,
  rpId: 'example.com',
  userVerification: 'preferred'
};

const credential = await navigator.credentials.get({
  publicKey: publicKeyCredentialRequestOptions
});

userVerification জন্য আপনার কোন বিকল্পটি বেছে নেওয়া উচিত?

আপনার userVerification মানটি আপনার আবেদনের প্রয়োজনীয়তার পাশাপাশি আপনার ব্যবহারকারীর অভিজ্ঞতার প্রয়োজনীয়তার উপর নির্ভর করে।

কখন userVerification='preferred' ব্যবহার করবেন

যদি আপনি সুরক্ষার চেয়ে ব্যবহারকারীর অভিজ্ঞতাকে অগ্রাধিকার দেন, তাহলে userVerification='preferred' ব্যবহার করুন।

এমন কিছু পরিবেশ আছে যেখানে ব্যবহারকারীর যাচাইকরণ সুরক্ষার চেয়ে বেশি ঘর্ষণ করে। উদাহরণস্বরূপ, macOS-এ যেখানে Touch ID উপলব্ধ নেই (কারণ ডিভাইসটি এটি সমর্থন করে না, এটি অক্ষম করা আছে, অথবা ডিভাইসটি clamshell মোডে আছে), ব্যবহারকারীকে তার সিস্টেম পাসওয়ার্ড লিখতে বলা হয়। এর ফলে ঘর্ষণ হয় এবং ব্যবহারকারী সম্পূর্ণরূপে প্রমাণীকরণ পরিত্যাগ করতে পারেন। যদি ঘর্ষণ দূর করা আপনার কাছে বেশি গুরুত্বপূর্ণ হয়, userVerification='preferred' ব্যবহার করুন।

ম্যাকোসে পাসকি ডায়ালগ যা টাচ আইডি অনুপলব্ধ থাকলে প্রদর্শিত হয়।
যখন টাচ আইডি উপলব্ধ না থাকে তখন macOS-এ একটি পাসকি ডায়ালগ প্রদর্শিত হয়। ডায়ালগে প্রমাণীকরণের অনুরোধকারী উৎসের পাশাপাশি ব্যবহারকারীর নাম সম্পর্কিত তথ্য থাকে। ডায়ালগের উপরের ডানদিকে 'বাতিল করুন' লেবেলযুক্ত একটি বোতাম রয়েছে।

userVerification='preferred' এর ক্ষেত্রে, ব্যবহারকারীর যাচাইকরণ সফলভাবে সম্পন্ন হলে UV ফ্ল্যাগ true এবং ব্যবহারকারীর যাচাইকরণ এড়িয়ে গেলে false করা হয়। উদাহরণস্বরূপ, macOS-এ যেখানে Touch ID উপলব্ধ নেই, সেখানে ব্যবহারকারীকে ব্যবহারকারীর যাচাইকরণ এড়িয়ে যাওয়ার জন্য একটি বোতামে ক্লিক করতে বলা হয় এবং পাবলিক কী শংসাপত্রে একটি false UV ফ্ল্যাগ থাকে।

UV পতাকাটি তখন আপনার ঝুঁকি বিশ্লেষণে একটি সংকেত হতে পারে। যদি অন্যান্য কারণে সাইন-ইন প্রচেষ্টা ঝুঁকিপূর্ণ বলে মনে হয়, তাহলে ব্যবহারকারীর যাচাইকরণ সম্পন্ন না হলে আপনি ব্যবহারকারীর কাছে অতিরিক্ত সাইন-ইন চ্যালেঞ্জ উপস্থাপন করতে চাইতে পারেন।

কখন userVerification='required' ব্যবহার করবেন

যদি আপনার মনে হয় UP এবং UV উভয়ই একান্তভাবে প্রয়োজনীয়, userVerification='required' ব্যবহার করুন।

এই বিকল্পের একটি অসুবিধা হল, ব্যবহারকারী সাইন ইন করার সময় আরও বেশি ঘর্ষণ অনুভব করতে পারেন। উদাহরণস্বরূপ, macOS-এ যেখানে টাচ আইডি উপলব্ধ নেই, ব্যবহারকারীকে তাদের সিস্টেম পাসওয়ার্ড লিখতে বলা হয়।

userVerification='required' ব্যবহার করে, আপনি নিশ্চিত করতে পারবেন যে ডিভাইসে ব্যবহারকারীর যাচাইকরণ সম্পন্ন হয়েছে। নিশ্চিত করুন যে সার্ভারটি যাচাই করছে যে UV পতাকাটি true

উপসংহার

ব্যবহারকারী যাচাইকরণের মাধ্যমে, পাসকি-নির্ভর পক্ষগুলি ডিভাইস মালিকের সাইন ইন করার সম্ভাবনা পরিমাপ করতে পারে। ব্যবহারকারী যাচাইকরণের প্রয়োজন হবে কিনা, নাকি এটি ঐচ্ছিক করা হবে তা তাদের পছন্দ, ফলব্যাক সাইন-ইন প্রক্রিয়া ব্যবহারকারীর প্রবাহকে কতটা গুরুত্বপূর্ণভাবে প্রভাবিত করে তার উপর নির্ভর করে। নিশ্চিত করুন যে সার্ভার পাসকি ব্যবহারকারী প্রমাণীকরণের জন্য UP পতাকা এবং UV পতাকা পরীক্ষা করে।