আপনি কি আপনার ব্যয়বহুল ইন্টারনেট বিল ফেলে দিতে এবং আপনার প্রতিবেশীর অনিরাপদ ওয়াইফাই ব্যবহার করতে চান? হানিব্যাজারের একক-ফ্যাক্টর প্রমাণীকরণের প্রবাহ কি একমাত্র জিনিসই আপনাকে আটকে রেখেছিল? আচ্ছা, আমি কি তোমার জন্য খবর পেয়েছি।
ঘোষণা:টু ফ্যাক্টর প্রমাণীকরণ (2FA)
সব মজা করা একপাশে, আমরা নিরাপত্তা খুব গুরুত্ব সহকারে বিবেচনা. আমাদের ব্যবহারকারীদের এবং তাদের ডেটা আরও সুরক্ষিত রাখতে সাহায্য করার জন্য একটি গুরুত্বপূর্ণ টুল প্রদান করতে পেরে আমরা রোমাঞ্চিত৷
আমি মনে করি আমি কীভাবে 2FA সক্ষম করতে পারি তা ব্যাখ্যা করতে পারি, তবে এতে মজা কী? কীভাবে আমরা ক্রিপ্টোগ্রাফির বন্য জগতের একটি হালকা আভাস দেখি এবং 2FA কীভাবে কাজ করে তা খুঁজে বের করতে পারি৷
যদি মজা আপনার জিনিস না হয়, আপনি সম্পূর্ণরূপে কিভাবে সক্রিয় করতে সরাসরি যেতে পারেন, আমার অনুভূতি আঘাত করা হবে না.
⚠️ সতর্কতা:নিচে কিছু তত্ত্ব
অনেক 2FA বাস্তবায়ন টাইম-ভিত্তিক ওয়ান-টাইম পাসওয়ার্ড নামে একটি অ্যালগরিদমের উপর নির্মিত। (TOTP ) জিহ্বার ডানদিকে গড়িয়ে যায়।
একবার?
হ্যাঁ, এই পদ্ধতির সৌন্দর্য হল যে আপনি প্রতিবার লগ ইন করার সময় একই "পাসওয়ার্ড" প্রেরণ করছেন না৷ একটি প্রমাণীকরণকারী অ্যাপ্লিকেশন ব্যবহার করে, একটি এককালীন "পাসওয়ার্ড" তৈরি হয় এবং স্বল্প সময়ের জন্য বৈধ থাকে (সাধারণত 30 সেকেন্ড) , যা ম্যালকম-ইন-দ্য-মিডল আক্রমণের কার্যকারিতাকে ব্যাপকভাবে কমিয়ে দেয়।
যদিও কিছু জটিল বিট আছে, সামগ্রিক বাস্তবায়ন তুলনামূলকভাবে সহজ।
দ্য সিক্রেট
একটি কী TOTP সম্পর্কে বোঝার জন্য পয়েন্ট করুন সেটি হল সার্ভার (যাচাইকারী) এবং প্রমাণীকরণকারী (প্রবক্তা) একটি শেয়ার করা গোপন থাকতে হবে। এটাই হল বাস্তব "পাসওয়ার্ড", তবে এটি শুধুমাত্র একবার প্রেরণ করা হয় (তাই আমি অনুমান করি এটিও একবারের জন্য)!
গোপন ব্যবহার করার প্রস্তাবিত উপায় হল QR কোডের মাধ্যমে। আপনি যখন আপনার স্মার্টফোনে QR কোড স্ক্যান করেন, তখন গোপনটি একটি স্ট্যান্ডার্ড URI-এর মধ্যে এনকোড করা হয় যা এইরকম কিছু দেখায়:
otpauth://totp/Honeybadger.io:[email protected]?secret=base32-secret-key
একটি QR কোড প্রদান করার কিছু সুবিধা রয়েছে (প্লেইনটেক্সট সিক্রেট ফাঁস করার বিপরীতে):
- 32 অক্ষরের কোড টাইপ করার সময় কার আছে?
- আপনার প্রমাণীকরণকারী অ্যাপটি আপনার এককালীন পাসওয়ার্ডের জন্য সহায়ক লেবেল প্রদান করতে পারে (ইমেল এবং ইউআরআইতে ইস্যুকারী উল্লেখ করে)। আপনি যখন একাধিক পরিষেবায় 2FA ব্যবহার করেন তখন এটি বিশেষভাবে উপযোগী৷
- অবশেষে একটি ভাল একটি QR কোড ব্যবহার করার কারণ!
otpauth
-এর জন্য কিছু অতিরিক্ত (বেশিরভাগ উপেক্ষা করা) প্যারামিটার আছে স্কিম, যা আপনি এখানে দেখতে পারেন।
MAC এবং আমি
একবার গোপনীয়তাগুলি 🤝 সম্মত হয়ে গেলে, আপনাকে (কোনও সময়ে) একটি ওয়ান-টাইম পাসওয়ার্ড প্রদান করতে বলা হবে। এখানেই জিনিসগুলি বাস্তব হয় .
TOTP HMAC-ভিত্তিক ওয়ান-টাইম পাসওয়ার্ড নামে আরেকটি অ্যালগরিদমের উপরে তৈরি করা হয়েছে (HOTP) , যা নিজেই হ্যাশ-ভিত্তিক বার্তা প্রমাণীকরণ কোডের উপর ভিত্তি করে (HMAC) . এটি একটি বড় ক্রিপ্টো পেঁয়াজ।
TOTP &HOTP মূলত কি বার্তা হ্যাশ হয় তার ভিন্নতা। HMAC সত্যিই যেখানে যাদু ঘটে. HMAC একটি ডাইজেস্ট তৈরি করে, যা হ্যাশিং অ্যালগরিদমের মাধ্যমে কিছু মান চালানোর আউটপুট। আসুন কিছু রুবি কোডের সাথে এটি কাজ করে দেখি:
OpenSSL::HMAC.digest("SHA1", "my-secret-key", "the-earth-is-flat")
=> "R\xABp\xCB\xEC\xFEJ\r#\x02\xC8\xAB\x96\xB68\v\xDA0\xD7z"
বাহ, যে বাইনারি স্ট্রিং তাকান! এটাই আমাদের বার্তা প্রমাণীকরণ কোড (MAC) .
আমরা SHA1
বেছে নিয়েছি আমাদের হ্যাশিং ফাংশন হিসাবে (যেমন আমাদের TOTP বাস্তবায়ন করে ) বেছে নেওয়ার জন্য আরও অনেকগুলি ফাংশন রয়েছে, যার প্রতিটির নিজস্ব নিরাপত্তা এবং কার্যকারিতার প্রভাব রয়েছে। হ্যাশিং অ্যালগরিদমের মূল বিষয় হল যেকোন ইনপুট এর জন্য , আমরা একই আউটপুট পাব , প্রত্যেকবার! এটি একটি বিশালভাবে ভিন্ন এবং অনন্য তৈরি করবে যেকোন সূক্ষ্ম ইনপুট পরিবর্তন থেকে আউটপুট (আহেম, হ্যাশিং ফাংশনের উপর নির্ভর করে, তবে চিন্তা করবেন না আমরা এখানে সংঘর্ষের সাথে খুব বেশি উদ্বিগ্ন নই)।
ঠিক আছে, তাই একে বার্তা প্রমাণীকরণ কোড বলা হয় কারণ এটি প্রমাণ করতে ব্যবহার করা যেতে পারে যে একটি প্রাপ্ত বার্তা খাঁটি। যদি আপনি এবং আমি গোপনটি জানি (my-secret-key
), আমি আপনাকে the-earth-is-flat
বার্তা পাঠাতে পারি MAC এর সাথে . আপনাকে যা করতে হবে তা হল ঠিক একই ডাইজেস্ট ফাংশনটি চালানো, একই ইনপুট সহ, এবং যদি MAC গুলি মিলে যায়, আপনি বার্তাটি প্রমাণীকরণ করেছেন! আপনি জানেন যে এটির সাথে টেম্পার করা হয়নি এবং শুধুমাত্র আমার কাছ থেকে আসতে পারে!
😎
টাইমকোড
তো চলুন এটিকে TOTP-এ ফিরিয়ে আনা যাক . এটা সময় নিয়ে কথা বলার সময় . আপনি দেখুন, TOTP সহ , the-earth-is-flat
-এর মত একটি অযৌক্তিক বার্তা হজম করার পরিবর্তে , আমরা পরিবর্তে ইনপুট হিসাবে একটি সময় ধাপ গণনা (একটি স্ট্রিং রূপান্তরিত) ব্যবহার করি। আপনি যদি আপনার প্রমাণীকরণকারী অ্যাপটি খোলেন এবং কোডগুলি কখন স্যুইচ করা হয় তা দেখুন, আপনি একটি প্যাটার্ন লক্ষ্য করতে পারেন। এটা ঠিক, আমার সাথে বলুন:"তারা মিনিট এবং অর্ধ মিনিটে সুইচ করে", খুব ভাল৷
এটি বার্তাটি গণনা করা একটু সহজ করে তোলে। এই ক্ষেত্রে আমরা 30 সেকেন্ডের রাউন্ড ডাউন কাউন্ট ব্যবহার করি (সময় ধাপ ) সময়ের শুরু থেকে (ভাল, ইউনিক্স সময়)। তাই, আবার রুবিতে:
Time.now.to_i / 30
=> 51772900
আহ হাহ! এটা আমাদের বার্তা .
তাই আমাদের প্রমাণীকরণকারী অ্যাপে, আমরা একটি নতুন HMAC পেতে আমাদের বিশ্বস্ত ডাইজেস্ট ফাংশন ব্যবহার করি :
hmac = OpenSSL::HMAC.digest("SHA1", "avwe8aw71j2boib23jkbjk32", "51772900")
=> "H\x7F\xC1\xACL\xDA\xDB\xE7DQ\x91kE\x1C\xE3,c\nH\xA0"
get_otp_code(hmac)
=> "332204"
শেষ ধাপ হল এই বাইনারি স্ট্রিং থেকে নম্বর কোড পাওয়া। যেহেতু কিছু বিট ম্যানিপুলেশন প্রয়োজন, আমি আমাদের বেনামী get_otp_code
এর পিছনে লুকাতে যাচ্ছি আপাতত ফাংশন। আপনি যদি চান, আপনি HOTP স্পেক এ কীভাবে এটি কাজ করে সে সম্পর্কে পড়তে পারেন৷
আপনি যখন সার্ভারে কোড জমা দেন, তখন এটি ঠিক একই ডাইজেস্ট অপারেশন করে এবং কোডগুলির তুলনা করে। তারা মেলে, আপনি আছেন! কারণ আমরা সময়ের সাথে কাজ করছি, বিলম্ব একটি ফ্যাক্টর। সম্ভাব্য বিলম্বের জন্য অ্যাকাউন্ট করার কৌশল রয়েছে। আপনি যদি চান তা বোঝা আপনার বাড়ির কাজ হবে।
এটি হল কিভাবে সময়-ভিত্তিক ওয়ান-টাইম পাসওয়ার্ড কাজ!! 🎉 আপনার পরবর্তী ডিনার পার্টিতে এই তথ্যটি ব্যবহার করার পরে নির্দ্বিধায় আমাকে একটি ধন্যবাদ ইমেল পাঠান!
বাস্তবায়ন
যদিও আমি মনে করি যে এই জিনিসগুলি কীভাবে কাজ করে তা বোঝা গুরুত্বপূর্ণ, এটি আপনার নিজের কোন কিছু রোল-করতে নিরুৎসাহিত করা হয় ক্রিপ্টো সম্পর্কিত। রুবি / রেল ইকোসিস্টেম সম্পর্কে একটি দুর্দান্ত জিনিস হল যে আপনি প্রায়শই আপনার সমস্যা সমাধানের জন্য একটি রত্ন (কখনও কখনও অনেকগুলি) খুঁজে পেতে পারেন৷
আমরা এখানে Honeybadger-এ devise ব্যবহার করি এবং সেখানে টু_ফ্যাক্টর_অথেন্টিকেশন নামে একটি দুর্দান্ত প্লাগইন রয়েছে। বেছে নেওয়ার জন্য কয়েকটি 2FA বাস্তবায়ন রয়েছে, তাই আমরা এটি বেছে নেওয়ার কিছু কারণ এখানে রয়েছে:
- সাধারণ সেটআপ (একটি মাইগ্রেশন, কিছু কনফিগারেশন এবং ইনিশিয়ালাইজার ছিটিয়ে দেওয়া হয়েছে)
- এটি তার নিজস্ব পৃষ্ঠায় (বৈধ ব্যবহারকারী/পাসওয়ার্ডের পরে) এক-কালীন কোড প্রবেশ করার অনুমতি দেয়
- গ্রহণযোগ্য ডিফল্ট, তবুও ওভাররাইড করা সহজ
- এতে একটি সর্বোচ্চ লগইন প্রচেষ্টা চেকও রয়েছে, যা বিশেষ দ্বারা সুপারিশ করা হয়
কিভাবে সক্ষম করবেন
সেটআপ সহজ:ব্যবহারকারীর সেটিংস> প্রমাণীকরণ পৃষ্ঠায় নেভিগেট করুন, "টু ফ্যাক্টর প্রমাণীকরণ সেট আপ করুন" নির্বাচন করুন এবং Authy বা Google প্রমাণীকরণকারী (বা সত্যিই অন্য কোনো TOTP ব্যবহার করে গোপনীয়তা সিঙ্ক করার জন্য নির্দেশাবলী অনুসরণ করুন। অ্যাপ)।
এটাই! পরের বার আপনি লগইন করলে, আমরা আপনাকে আপনার প্রমাণীকরণকারী কোডের জন্য অনুরোধ করব৷ এটি পূরণ করুন এবং সম্পূর্ণ এবং সম্পূর্ণ মানসিক শান্তির সাথে যান৷ 🧘
নিরাপত্তা এবং সরলতা? এটা কি আরও ভালো হতে পারে?
একটি শেষ জিনিস:Pwned পাসওয়ার্ড চেক
দুর্বল পাসওয়ার্ডের সমর্থকদের জন্য আমি একটি দ্রুত একটি পেয়েছি। আমরা devise-pwned_password রত্ন-এর সাথেও একত্রিত হয়েছি। এখন থেকে, আপনি যখন পাসওয়ার্ডের প্রয়োজন হয় এমন কোনো অপারেশন করেন, আমরা নিশ্চিত করতে পরীক্ষা করি যে প্রস্তাবিত পাসওয়ার্ডটি কোনো পরিচিত ডেটা লঙ্ঘনের মধ্যে প্রচলিত নয়। আপনি যদি একটি নতুন পাসওয়ার্ড যোগ করেন, এবং এটি পরীক্ষায় ব্যর্থ হয়, আমরা এটির অনুমতি দেব না৷
৷যদি আপনি ইতিমধ্যেই না থাকেন, আমরা অত্যন্ত একটি পাসওয়ার্ড ম্যানেজার (1Password ahem) ব্যবহার করার পরামর্শ দিন।
Pwned পাসওয়ার্ডের আরও আকর্ষণীয় বিটগুলির মধ্যে একটি হল তৃতীয় পক্ষের পরিষেবা থেকে ডেটাবেসের বিরুদ্ধে চেক করার সময়ও কীভাবে আপনার পাসওয়ার্ড সুরক্ষিত থাকে। একে বলা হয় k-Anonymity
এবং আপনি এখানে এটি সম্পর্কে একটি ওভারভিউ পেতে পারেন।
ওয়েল, যে সব আমরা এখন জন্য আছে. পরের বার পর্যন্ত! 👋