জিপিজি ওয়েব কী ডিরেক্টরি
সূচনা
(জুন ২০২১: বর্তমানে এই লেখায় বর্ণিত পদ্ধতির চেয়ে আরও সহজে জিপিজি ওয়েব কী ডিরেক্টরি তৈরি করা যায়: https://wiki.gnupg.org/WKDHosting)
মেইল বা ফাইল আদানপ্রদানের ক্ষেত্রে নিরাপত্তার একটা নির্ভরযোগ্য উপায় হচ্ছে ওপেনপিজিপি ভিত্তিক প্রাইভেট/পাবলিক কী ব্যবস্থা। আমি আমার পিজিপি কী দিয়ে সাইন বা এনক্রিপ্ট করে ফাইল, মেইল বা যেকোন তথ্য পাঠালে আপনি পুরোপুরি নিশ্চিত থাকতে পারেন যে যাত্রাপথে অন্য কেউ সেটা “হ্যাক” করে পাল্টে দিতে পারেনি। লিনাক্সের ক্ষেত্রে পিজিপির ব্যবহার হয় আরও অনেক জায়গায়, যেমন প্যাকেজ ইনস্টলেশনের ক্ষেত্রে প্যাকেজ আর্কাইভের বিশুদ্ধতা নিশ্চিত করার জন্য। আর পিজিপি কী ম্যানেজমেন্টের জন্য আজকাল জিপিজি (গ্নু প্রাইভেসি গার্ড) সফটওয়্যারটা সব ডিস্ট্রোতে প্রিইনস্টল করা থাকে সাধারণত।
তো কারো সঙ্গে এই পিজিপি কী দিয়ে মেসেজ আদানপ্রদানের আগে তাকে আমার পাবলিক কী টা জানাতে হবে। এই জন্য একটা উপায় হচ্ছে বিভিন্ন কী সার্ভারে আমার পাবলিক কী টা আপলোড করে রাখা, যাতে যে কেউ সেটা ইমপোর্ট করে নিতে পারে। কিন্তু কী সার্ভারগুলোর বেশিরভাগেরই একটা বড় সমস্যা1 হচ্ছে, যেকেউ যেকোন ইমেইল দিয়ে কী তৈরি করে আপলোড করতে পারে; তাই আমার ইমেইল মিললেই কী টা যে আমার, তার নিশ্চয়তা নেই2।
তাই বিশুদ্ধতার নিশ্চয়তার জন্য আমি নিজের ওয়েবসাইটে নিজের পাবলিক কী আপলোড করে রাখতে পারি। তবে এক্ষেত্রে সমস্যা হচ্ছে অন্য কেউ যদি আমার কী চায়, তাহলে সাইটের কোথায় সেটা রাখা আছে প্রথমে তা খুঁজে বের করতে হবে, ডাউনলোড করতে হবে, তারপর ইমপোর্ট করতে হবে। একজনের সাথে যোগাযোগে হয়ত ঝামেলাটা মানা যায়, কিন্তু অনেকের সাথে পিজিপিভিত্তিক মেইল বা তথ্য আদানপ্রদানের ক্ষেত্রে কয়জনের কী এভাবে খুঁজে বের করতে আনন্দ লাগবে?
জিপিজিতে এজন্য ওয়েব কী ডিরেক্টরি বা WKD নামের একটা ব্যবস্থা আছে, যার মাধ্যমে প্রাপকের ইমেইলের ডোমেইন থেকে স্বয়ংক্রিয়ভাবে পাবলিক কী যোগাড় করা সম্ভব। তবে এজন্য পূর্বশর্ত হচ্ছে নিজস্ব ডোমেইন থাকতে হবে এবং ইমেইল এড্রেসটাও সেই ডোমেইনের অধীন হতে হবে। যেমন আমার bdeshi.space
ডোমেইনের অধীনেই ইমেইল এড্রেস ব্যবহার করছি, তাই আমি আমার ওয়েবসার্ভারে @bdeshi.space
এরকম ইমেইলের জন্য ওয়েব কী ডিরেক্টরি সেট আপ করে নিতে পারবো। তাছাড়া এই পদ্ধতিতে যারা যারা আগে থেকেই ইমেইল জানেন তারা সহজে ইমপোর্ট করতে পারেন, এবং ইমেইলটা পাবলিক না রাখলেও চলে, তাই ইমেইলে স্প্যামিংও একটু কম কম হতে পারে।
আপনার ইমেইল এড্রেসের ডোমেইনটা আপনার নিয়ন্ত্রণে থাকলে আপনিও নীচের পদ্ধতি দেখে WKD প্রস্তুত করে নিয়ে জিপিজি ব্যবহার করা সহজ করে ফেলতে পারেন।
জিপিজি কী তৈরি
আগে থেকে জিপিজি কী তৈরি করা না থাকলে, টার্মিনাল খুলে নিচের কমান্ডটা দিয়ে তৈরি করে নেয়া যায়:
$ gpg --full-gen-key
Code language: Shell Session (shell)
কমান্ডটা চালানোর পর কিছু প্রম্পট আসবে।
- প্রথমে এলগোরিদম বাছাই: এন্টার দিয়ে ডিফল্টটাই বাছাই করলাম।
- কী সাইজ: ২০৪৮বিট হচ্ছে ডিফল্ট, মন্দ না3। সরাসরি এন্টার প্রেস করে দেয়া যায়।
- কী এর মেয়াদ: আবার এন্টার দিয়ে ডিফল্ট ভ্যালুটাই নিলাম। এরপর কনফার্মেশন চাইবে,
y
প্রেস করতে হবে। - এবার
Real name
: কিছু একটা লিখে দিলেই চলে। - এরপর
Email address
: এখানে নিজস্ব ডোমেইনের ইমেইল বসাতে হবে। যেমন আমিbdeshi@bdeshi.space
লিখেছি। - এখন
Comment
: এখানে কিছু না লিখে এন্টার প্রেস করে দেয়া ভালো। - তারপর সবকিছুর কনফার্মেশনের জন্য ‘
o
’ টাইপ করলাম। - এবং সবশেষে প্রাইভেট কী এর জন্য পাসওয়ার্ড দিলেই জেনারেট হয়ে গেল।
কি জেনারেটের শেষে এরকম একটা আউটপুট আসবে (অবশ্যই আপনি যেসব অপশন বাছাই করছেন সে অনুযায়ী):
public and secret key created and signed.
pub rsa2048 2020-02-20 [SC]
DE3B21654C408BE85CDF54B5410D03DA9A3468E0
uid bdeshi <bdeshi@bdeshi.space>
sub rsa2048 2020-02-20 [E]
Code language: plaintext (plaintext)
এখানে DE3B21654C408BE85CDF54B5410D03DA9A3468E0
হচ্ছে কী এর ফিঙ্গারপ্রিন্ট। একে হাতের কাছে রাখলাম।
কী জেনারেট হয়ে গেল, এবার আসল WKD কনফিগারেশনে মন দেয়া যায়।
WKD হ্যাশ সংগ্রহ
এবার ফিঙ্গারপ্রিন্টটা ব্যবহার করে ওয়েব কী ডিরেক্টরির জন্য কী এর হ্যাশ বের করতে হবে।
$ gpg --fingerprint --with-wkd-hash 0xDE3B21654C408BE85CDF54B5410D03DA9A3468E0
Code language: Shell Session (shell)
আমি পুরো ফিঙ্গারপ্রিন্টটাই বসিয়ে দিয়েছি, তবে শেষের ৮টা বা ১৬টা অক্ষর দিলেও চলে। যাহোক, এই কমান্ড একটা সংক্ষিপ্ত রিপোর্ট দেখায়, নীচের আউটপুটের মত:
pub rsa2048 2020-02-20 [SC]
DE3B 2165 4C40 8BE8 5CDF 54B5 410D 03DA 9A34 68E0
uid [ultimate] bdeshi <bdeshi@bdeshi.space>
hjz5fuenrtb6i8qaj1fz3fhzr6bum5t7@bdeshi.space
sub rsa2048 2020-02-20 [E]
Code language: plaintext (plaintext)
হাইলাইট করা লাইনটাতে ইমেইলের ডোমেইন @bdeshi.space
এর আগের হিজিবিজি লেখাটা হচ্ছে ইমেইল এড্রেসের ডব্লিউকেডি হ্যাশ, এইটাও হাতের কাছে রাখা দরকার। পাবলিক কী ফাইলটা এই হ্যাশের নামেই থাকবে, ফলে যারা ইমেইল এড্রেসটা জানে তারাই কেবল এটা ইমপোর্ট করতে পারবে, অন্যরা WKD থেকে ইমেইল এড্রেস চুরি করে নিতে পারবে না। (যদিও আমি আমার ইমেইলটা সবার সামনে বলে দিয়েছি 😞 , আমার আর স্প্যাম ঠেকানো হল না।)
এখন জিপিজি পাবলিক কী টা ডব্লিউকেডি এর উপযোগী করে এক্সপোর্ট করতে হবে। প্রথমে জিনিসটা কিরকম, দেখা যাক:
$ gpg --export --armor 0xDE3B21654C408BE85CDF54B5410D03DA9A3468E0
Code language: Shell Session (shell)
একগাদা অর্থহীন লেখায় টার্মিনাল ভর্তি হয়ে গেছে, না? এটাই পাবলিক কী! অন্তত --armor
যোগ করেছি বলে পড়া যাচ্ছে, নাহলে বাইনারি ডেটা প্রিন্ট করে টার্মিনালটাকেই কুৎসিত বানিয়ে ফেলতো!
যাহোক, একে এবার ডব্লিউকেডি এর জন্য ফাইলপত্র তৈরি করি। কী টা হ্যাশের নামে এক্সপোর্ট করতে হবে এবং policy
নামের একটা (ফাঁকা) ফাইলও লাগবে:
$ gpg --output hjz5fuenrtb6i8qaj1fz3fhzr6bum5t7 --export --armor 0xDE3B21654C408BE85CDF54B5410D03DA9A3468E0
$ touch policy
Code language: Shell Session (shell)
এখানে জিপিজি কমান্ডে --output
এর পর একটু আগেও পাওয়া ডব্লিউকেডি হ্যাশটা লিখেছি। যাহোক, এর ফলে হোম ডিরেক্টরিতে4 ওই হ্যাশের নামে একটা ফাইল, আর policy
নামে শূন্য সাইজের আরেকটা ফাইল তৈরি হল। ls
কমান্ড দিয়ে টার্মিনালেই যাচাই করে নেয়া যায়।
সার্ভার প্রস্তুতি
এবার সার্ভারে ওয়েব কী ডিরেক্টরির জন্য প্রয়োজনীয় ফোল্ডার স্ট্রাকচার তৈরি করে ফেলি।
ওয়েবসার্ভারে লগইন করে ওয়েবরুট ফোল্ডারটা খুলতে হবে, অর্থাৎ যেখান থেকে ওয়েবসাইটের ফাইলপত্র সার্ভ করা হয়। (সাধারণত public_html
নামে থাকতে পারে)। এখানে নিচের মত করে ফোল্ডার তৈরি করতে হবে:
public_html/
|_.well-known/
|_openpgpkey/
|_hu/
Code language: plaintext (plaintext)
এখানে openpgpkey
ফোল্ডারটাতে policy
নামের ফাঁকা ফাইলটা আপলোড করতে হবে, আর হ্যাশের নামে সেভ হওয়া পাবলিক কী ফাইলটা hu
ফোল্ডারে আপলোড করে দিতে হবে।
ফলে ফাইল ফোল্ডার লেআউটটা হবে এরকম:
public_html/
|_.well-known/
|_openpgpkey/
|_hu/
| |_hjz5fuenrtb6i8qaj1fz3fhzr6bum5t7
|_policy
Code language: plaintext (plaintext)
ফলে এই দুইটা ইউআরএলে ফাইলগুলি পাওয়া যাবে:
bdeshi.space/.well-known/openpgpkey/hu/hjz5fuenrtb6i8qaj1fz3fhzr6bum5t7
bdeshi.space/.well-known/openpgpkey/policy
ব্যাস হয়ে গেল! (অবশ্যই এখানে আপনার ডোমেইন আর আপনার কী এর হ্যাশ বসিয়ে নেবেন।)
ওয়েব কী ডিরেক্টরি কি কাজ করছে?
এতক্ষণ তো সার্ভারে ওয়েব কী ডিরেক্টরি প্রটোকল চালু করে ফেললেন! এবার যেকোন কম্পিউটার থেকে মোটামুটি আধুনিক ভার্সনের gpg
5 দিয়ে নীচের কমান্ডটা চালালে সরাসরি আপনার ওয়েবসার্ভার থেকে আপনার জিপিজি কী সংগ্রহ করে নেবে:
$ gpg --locate-key your-email@yourdomain.tld
Code language: Shell Session (shell)
অথবা
$ gpg --auto-key-locate clear,wkd --locate-key your-email@yourdomain.tld
Code language: Shell Session (shell)
যেমন, আমার পাবলিক কী পাওয়া যাবে এইভাবে:
$ gpg --locate-key bdeshi@bdeshi.space
Code language: Shell Session (shell)
ওয়েব হোস্টিংয়ের একটা বিকল্প ব্যবস্থাও আছে: openpgpkey
সাবডোমেইন তৈরি ফাইলগুলি সেখানেও সার্ভ যায়, তবে এক্ষেত্রে ওই ফোল্ডার স্ট্রাকচারে ডোমেইনের নামে একটা অতিরিক্ত ফোল্ডার তৈরি করা দরকার শুধু. যেমন আমার ডোমেইনের জন্য:
openpgpkey.bdeshi.space/.well-known/openpgpkey/bdeshi.space/hu/hjz5fuenrtb6i8qaj1fz3fhzr6bum5t7
openpgpkey.bdeshi.space/.well-known/openpgpkey/bdeshi.space/policy
তবে দুইটা পদ্ধতিই সমতুল্য, এবং ওপরে বর্ণনা করা পদ্ধতিটাই তুলনামূলকভাবে সোজা, কারণ আলাদা সাবডোমেইন খোলা লাগছে না।
- আরেকটা বিশাল সমস্যা রয়েছে, যা একসময় কী সার্ভারগুলিকেই অকেজো করে দিয়েছিলো প্রায়। যে কেউ আপনার পাবলিক কী ডাউনলোড করে অগণিত সিগনেচার যোগ করে রিআপলোড করতে পারে, ফলে কী এর ফিঙ্গারপ্রিন্ট ঠিক থাকলেও সাইজ হয় বিশাল, আর এই কী কেউ ইমপোর্ট করতে গেলে জিপিজি প্রোগ্রামটা ক্র্যাশ করে সবই অকেজো হয়ে যেতে পারে। এজন্য https://keys.openpgp.org কী সার্ভারটা এরকম কী সাইনিংই বন্ধ করে রেখেছে।↩
- কিছু কী সার্ভার পাবলিক কী আপলোড করার আগে ইমেইল ভেরিফাই করে নেয়, যেমন https://keys.openpgp.org ↩
- অনেকেই ২০৪৮ এর পরিবর্তে ৪০৯৬বিটের আরএসএ কী ব্যবহার করতে পরামর্শ দেন। কিন্তু ২০৪৮বিটের এর চেয়ে ৪০৯৬বিটের নিরাপত্তা যেটুকু বেশি হয়, তা তুলনামূলক ভাবে নগন্য, কিন্তু এই কী অনেক ডিভাইসে ইমপোর্ট করা যায় না। তাই ৪০৯৬বিট নিয়ে টানাটানি না করে বরং জিপিজিতে যখন ইসিসি এলগরিদমগুলো চূড়ান্ত রিলিজ করা হবে, তখন সেসব ব্যবহার করাই উত্তম (যেমন ED25519); কী সাইজ অনেক ছোট, নিরাপত্তাও বেশি। (আরও জানতে চাইলে) ↩
- আমি ধরে নিয়েছি টার্মিনাল হোম ডিরেক্টরিতে খোলা হয়েছে। তা না হলে টার্মিনালটা যে ডিরেক্টরি থেকে খোলা হল, সেইখানে ফাইলগুলো তৈরি হবে।↩
- জিপিজি এর
2.1.23
সংস্করণ থেকে এই ওয়েব কি ডিরেক্টরি প্রটোকল ডিফল্টভাবে চালু করা থাকে। অন্যান্য ডিস্ট্রোতে কি অবস্থা জানি না, তবে আমি যে ডিস্ট্রো চালাই, তাতে সবকিছু সবসময় আপ‑টু-ডেট 😎↩
মন্তব্য করুন