base91 দিয়ে একটি সুরক্ষিত পাসওয়ার্ড চাই।

6 min

language: ja bn en es hi pt ru zh-cn zh-tw

নমস্কার, আমি অযোগ্য।
সম্প্রতি, ক্রোমিয়াম/ক্রোমের স্বয়ংক্রিয় পাসওয়ার্ড তৈরি করা নিয়ে আমি খুব চিন্তিত, তাই আমি এমন কিছু তৈরি করতে চাই যা কিছুটা সহজ এবং কিছুটা বিপরীতমুখী করা যায়।
প্রসঙ্গত, Artix Linux-এর ক্ষেত্রে, base91 কমান্ডটি ডিফল্টরূপে অন্তর্ভুক্ত ছিল না, তাই, yay -S base91 এটি ইনস্টল করা হয়েছে বলে ধরে নেওয়া হচ্ছে।

উপসংহার থেকে

শেষ পর্যন্ত, আমি এটি দিয়ে তৈরি করার সিদ্ধান্ত নিয়েছি।

echo -n "string" | sha384sum | awk '{print $1}' | xxd -r -p | base91 | tr -d "\n" && echo

※পরে ভেবেছিলাম, সম্ভবত awk '{printf $1}' আরও ভালো হবে।

আমার এলোমেলো চিন্তা

সত্যি বলতে কি, আমি sha*sum দিয়ে তৈরি স্ট্রিংগুলি বেশ ব্যবহার করছিলাম, এবং অক্ষরের সংখ্যা নিয়ে আমি সন্তুষ্ট। যেহেতু হ্যাশ মান নিজেই অপরিবর্তনীয়, তাই এটি ফাঁস হলেও সমস্যা নেই। তবে, হ্যাশিং নিজেই কেবল একটি হেক্সাডেসিমেল স্ট্রিং, তাই যদি একটি গুরুতর ব্রুট-ফোর্স আক্রমণ আসে, তবে ব্যবহৃত স্ট্রিং প্যাটার্ন রেগুলার এক্সপ্রেশনে [a-z0-9] হবে।

তাছাড়া, আজকাল বড় হাতের অক্ষর এবং প্রতীক ব্যবহার করতে বলা হয়, যা আমার নিজের কাছেই খারাপ লাগে। তাই এবার, আমি এই স্ট্রিংয়ের প্যাটার্নের সংখ্যা কোনোভাবে বাড়াতে চাই।

এটি দিয়ে কী হবে?

প্রথমে, এটি ভেঙে দেখা যাক।

echo -n "string"

নতুন লাইন ছাড়া স্ট্রিংটিকে স্ট্যান্ডার্ড আউটপুটে পাঠান, তারপর পাইপের মাধ্যমে পরবর্তী কমান্ডে পাস করুন।

sha384sum

প্রাপ্ত স্ট্রিংটিকে SHA384 দিয়ে হ্যাশ করুন।

awk '{print $1}'

প্রাপ্ত স্ট্রিংয়ের শেষে থাকা অতিরিক্ত স্ট্রিং - প্রয়োজন নেই, তাই awk দিয়ে ফরম্যাট করুন।

xxd -r -p

আমিও এটি প্রথমবার জেনেছি যখন আমি এটি নিয়ে গবেষণা করেছি: এটি একটি হেক্সাডেসিমেল স্ট্রিংকে বাইনারি ফরম্যাটে আউটপুট করে। সুতরাং,
প্রাপ্ত স্ট্রিংটিকে বাইনারি ফরম্যাটে আউটপুট করে।

base91

প্রাপ্ত বাইনারিটিকে base91 দিয়ে এনকোড করে আউটপুট করুন।

 tr -d "\n" && echo

যদি এটি যেমন আছে তেমন রাখা হয়, তবে base91 স্বয়ংক্রিয়ভাবে নতুন লাইন দিয়ে ফরম্যাট করে, তাই নতুন লাইন অক্ষরটি সরিয়ে দিন। সফল হলে, নতুন লাইন ছাড়া কপি-পেস্ট করা কঠিন, তাই শেষে একটি খালি লাইন আউটপুট করুন। এটি দেখতে এমন হবে।

alleycat:[haturatu]:~/git/ckr/ckr$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
"OS[fY@wwBqip+$db@5+g!yvk$jE3,M3F({qu]1(_dS2Or()Q:ZqyhOb&9Y

আমি এইমাত্র এটি নিয়ে এসেছি, তাই কতগুলি ফর্ম এটি আসলে গ্রহণ করবে তা স্পষ্ট নয়। স্ট্রিংয়ের দৈর্ঘ্য হল:

$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" | wc -c
59

এমনকি একটি ছোট স্ট্রিং দিয়েও, 59টি অক্ষর তৈরি হয়।

সুবিধা

প্রথমত, যখন xxd -r -p দিয়ে তৈরি করা হয়, তখন এটি বাইনারি ডেটা হিসাবে সংরক্ষণ করা যেতে পারে। সুতরাং, এমনকি যদি আপনি আসল string ভুলে যান, তবে আপনার কাছে বাইনারি ডেটা থাকলে আপনি এটি পুনরুদ্ধার করতে পারবেন।

ধাপে ধাপে:
sha384sum = অপরিবর্তনীয়
xxd -r -p = বিপরীতমুখী
base91 = বিপরীতমুখী
এইরকম ধাপগুলি রয়েছে। অথবা বরং, এটি আসল পাসফ্রেজের চেয়ে দীর্ঘ, এবং আমি ভেবেছিলাম, 'আসল পাসফ্রেজটি কি প্রথম দিকে অপরিবর্তনীয় করে রাখা ভালো হবে না?' এভাবেই এটি তৈরি হয়েছে।

তাছাড়া, এটি দিয়ে তৈরি করা হলে, মনে হচ্ছে বাইনারি ডেটা saslauthdb বা বাইনারি ডিবাগিংয়ের জন্য ব্যবহৃত strings কমান্ড দ্বারা পড়া যাবে না। এটি প্লেইনটেক্সট ডেটা রাখার চেয়ে কিছুটা নিরাপদ।

shasum দিয়ে হ্যাশ করার সময় সংঘর্ষের সম্ভাবনা বেশ গুরুতর। যেহেতু এটি আরও বাইনারি ডেটাতে রূপান্তরিত হয় এবং তারপর Base91 ফরম্যাটে এনকোড করা হয়, তাই আমার সীমিত মস্তিষ্ক দিয়ে তৈরি পাসওয়ার্ডের চেয়ে এটি ভালো বলে মনে হয়।

.bashrc-এ একটি ফাংশন যোগ করুন

সত্যি বলতে, প্রতিবার এটি টাইপ করা নরকের চেয়ে কম কিছু নয়, তাই

ফাংশনের নাম() {
  echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
}

আমি এটি এমনভাবে তৈরি করেছি যাতে আপনি ফাংশনের নাম string দিয়ে পাসওয়ার্ড তৈরি করতে পারেন। যদি এটিও ভেঙে ফেলা যায়, তবে মনে হয় ইউরা ইউরা টেইকোকুর মানুষ হওয়া ছেড়ে দেওয়া উচিত, অথবা বরং, এনক্রিপশন ছেড়ে দেওয়া উচিত...

এবং যদি আপনি সার্ভার-সাইডে ব্যবহৃত পাসওয়ার্ডের স্ট্রিং দৈর্ঘ্য বাড়াতে চান, তবে আপনি sha512 ব্যবহার করতে পারেন। যদি আপনি ব্যাশে স্বীকৃত স্ট্রিং দৈর্ঘ্য কমাতে চান, তবে আপনি base64 ব্যবহার করতে পারেন। আপনি সহজেই এটি পরিবর্তন করতে পারেন, সেই অনুযায়ী ফাংশনটি পরিবর্তন করতে পারেন এবং এটি .bashrc-এ যোগ করতে পারেন, তাই না?

Related Posts