জিপিজি ওয়েব কী ডিরেক্টরি
Date: []
Tags: [linux], [self-hosting], [privacy], [security]
মেইল বা ফাইল আদানপ্রদানের ক্ষেত্রে নিরাপত্তার একটা নির্ভরযোগ্য উপায় হচ্ছে ওপেনপিজিপি ভিত্তিক প্রাইভেট/পাবলিক কী ব্যবস্থা। আমি আমার পিজিপি কী দিয়ে সাইন বা এনক্রিপ্ট করে যেকোন তথ্য পাঠালে আপনি পুরোপুরি নিশ্চিত থাকতে পারেন যে যাত্রাপথে অন্য কেউ সেটা “হ্যাক” করে পাল্টে দিতে পারেনি। লিনাক্সের ক্ষেত্রে পিজিপির ব্যবহার হয় আরও অনেক জায়গায়, যেমন প্যাকেজ ইনস্টলেশনের ক্ষেত্রে প্যাকেজ আর্কাইভের বিশুদ্ধতা নিশ্চিত করার জন্য। আর পিজিপি কী ম্যানেজমেন্টের জন্য আজকাল জিপিজি (গ্নু প্রাইভেসি গার্ড) সফটওয়্যারটা সব ডিস্ট্রোতে প্রিইনস্টল করা থাকে সাধারণত।
তো কারো সঙ্গে এই পিজিপি কী দিয়ে মেসেজ আদানপ্রদানের আগে তাকে আমার পাবলিক কী টা জানাতে হবে। এই জন্য একটা উপায় হচ্ছে কোনো কী সার্ভারে আমার পাবলিক কী আপলোড করে রাখা। কিন্তু কী সার্ভারগুলোর বেশিরভাগেরই একটা বড় সমস্যা1 হচ্ছে, যেকেউ যেকোন ইমেইল দিয়ে কী তৈরি করে আপলোড করতে পারে; তাই আমার ইমেইল মিললেই কী টা যে আমার, তার নিশ্চয়তা নেই2।
আরও বিশুদ্ধতার নিশ্চয়তার জন্য আমি নিজের ওয়েবসাইটে পাবলিক কী আপলোড করে রাখতে পারি। তবে এক্ষেত্রে সমস্যা হচ্ছে কেউ যদি আমার কী টা চায়, তাহলে সেটা সাইটের কোথায় আছে প্রথমে তা খুঁজে বের করতে হবে, তারপর ডাউনলোড করতে হবে, তারপর ইমপোর্ট করতে হবে। এভাবে কয়জনের কী খুঁজে বের করতে মজা লাগবে? একজনের সাথে যোগাযোগে হয়ত ঝামেলাটা মানা যায়, কিন্তু অনেকের সাথে পিজিপিভিত্তিক মেইল বা তথ্য আদানপ্রদানের ক্ষেত্রে কয়জনের কী এভাবে খুঁজে বের করতে আনন্দ লাগবে?
জিপিজিতে এজন্য ওয়েব কী ডিরেক্টরি বা WKD নামের একটা ব্যবস্থা আছে, যার মাধ্যমে প্রাপকের ইমেইলের ডোমেইন নাম থেকে স্বয়ংক্রিয়ভাবে পাবলিক কী যোগাড় করা সম্ভব। তবে এজন্য পূর্বশর্ত হচ্ছে নিজস্ব ডোমেইন থাকতে হবে এবং ইমেইল এড্রেসটাও এই ডোমেইনের অধীন হতে হবে। যেমন আমার bdeshi.space ডোমেইনের অধীনেই ইমেইল এড্রেস ব্যবহার করছি, তাই আমি আমার ওয়েবসার্ভারে @bdeshi.space এরকম ইমেইলের জন্য ওয়েব কী ডিরেক্টরি সেট আপ করে নিতে পারবো। তাছাড়া এই পদ্ধতিতে যারা আগে থেকেই ইমেইল অ্যাড্রেসটা জানেন তারা সহজে ইমপোর্ট করতে পারেন, এবং ইমেইলটা পাবলিক না রাখলেও চলে, তাই ইমেইলে স্প্যামিংও একটু কম কম হতে পারে।
জুন ২০২১: বর্তমানে এই লেখায় বর্ণিত পদ্ধতির চেয়ে আরও সহজে জিপিজি ওয়েব কী ডিরেক্টরি তৈরি করা যায়: https://wiki.gnupg.org/WKDHosting
আপনার ইমেইল এড্রেসের ডোমেইনটা আপনার নিয়ন্ত্রণে থাকলে আপনিও নীচের পদ্ধতি দেখে WKD প্রস্তুত করে নিয়ে জিপিজি ব্যবহার করা সহজ করে ফেলতে পারেন।
জিপিজি কী তৈরি
আগে থেকে জিপিজি কী তৈরি করা না থাকলে, টার্মিনাল খুলে নিচের কমান্ডটা দিয়ে তৈরি করে নেয়া যায়:
gpg --full-gen-key
কমান্ডটা চালানোর পর কিছু প্রম্পট আসবে।
- প্রথমে এলগোরিদম বাছাই: এন্টার দিয়ে ডিফল্টটাই বাছাই করলাম।
- কী সাইজ: ২০৪৮বিট হচ্ছে ডিফল্ট, মন্দ না3
- কী এর মেয়াদ: আবার এন্টার দিয়ে ডিফল্ট ভ্যালুটাই নিলাম। এরপর কনফার্মেশন চাইবে,
y
প্রেস করতে হবে। - এবার Real name: NID বা পাসপোর্টের নাম এর সাথে মিলতেই হবে, এমন কোন কথা নাই।
- এরপর 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]
এখানে DE3B21654C408BE85CDF54B5410D03DA9A3468E0
অংশটা হচ্ছে কী এর ফিঙ্গারপ্রিন্ট। একে হাতের কাছে রাখি।
WKD হ্যাশ সংগ্রহ
ফিঙ্গারপ্রিন্টটা ব্যবহার করে ওয়েব কী ডিরেক্টরির জন্য কী এর হ্যাশ বের করতে হবে।
gpg --fingerprint --with-wkd-hash 0xDE3B21654C408BE85CDF54B5410D03DA9A3468E0
আমি পুরো ফিঙ্গারপ্রিন্টটাই বসিয়ে দিয়েছি, তবে শেষের ৮টা বা ১৬টা অক্ষর দিলেও চলে। যাহোক, এই কমান্ড একটা সংক্ষিপ্ত রিপোর্ট দেখায়, নীচের আউটপুটের মত:
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]
এখানে চতুর্থ লাইনের ইমেইল ডোমেইনের আগের হিজিবিজি অংশটাই হচ্ছে ইমেইল অ্যাড্রেসটার ডব্লিউকেডি হ্যাশ, এইটাও হাতের কাছে রাখা দরকার: hjz5fuenrtb6i8qaj1fz3fhzr6bum5t7
পাবলিক কী ফাইলটা এই হ্যাশের নামেই থাকবে, ফলে যারা ইমেইল এড্রেসটা জানে তারাই কেবল এটা ইমপোর্ট করতে পারবে, অন্যরা WKD থেকে ইমেইল এড্রেস চুরি করে নিতে পারবে না। (যদিও আমি আমার ইমেইলটা সবার সামনে বলে দিয়েছি 😞 , আমার আর স্প্যাম ঠেকানো হল না।)
এখন জিপিজি পাবলিক কী টা ডব্লিউকেডি এর উপযোগী করে এক্সপোর্ট করতে হবে। প্রথমে জিনিসটা কিরকম, দেখা যাক:
gpg --export --armor 0xDE3B21654C408BE85CDF54B5410D03DA9A3468E0
একগাদা অর্থহীন লেখায় টার্মিনাল ভর্তি হয়ে গেছে, না? এটাই পাবলিক কী! অন্তত --armor
যোগ করেছি বলে পড়া যাচ্ছে, নাহলে বাইনারি ডেটা প্রিন্ট করে টার্মিনালটাকেই কুৎসিত বানিয়ে ফেলতো!
যাহোক, একে এবার ডব্লিউকেডি এর জন্য ফাইলপত্র তৈরি করি। কী টা হ্যাশের নামে এক্সপোর্ট করতে হবে:
gpg --output hjz5fuenrtb6i8qaj1fz3fhzr6bum5t7 --export --armor 0xDE3B21654C408BE85CDF54B5410D03DA9A3468E0
এবং policy
নামের একটা (ফাঁকা) ফাইলও লাগবে
touch policy
এর ফলে হোম ডিরেক্টরিতে4 ওই হ্যাশের নামে একটা ফাইল, আর policy নামে শূন্য সাইজের আরেকটা ফাইল তৈরি হল। ls
কমান্ড দিয়ে টার্মিনালেই যাচাই করে নেয়া যায়।
সার্ভার প্রস্তুতি
এবার সার্ভারে ওয়েব কী ডিরেক্টরির জন্য প্রয়োজনীয় ফোল্ডার স্ট্রাকচার তৈরি করে ফেলি।
ওয়েবসার্ভারে লগইন করে ওয়েবরুট ফোল্ডারটা খুলতে হবে, অর্থাৎ যেখান থেকে ওয়েবসাইটের ফাইলপত্র সার্ভ করা হয় (সাধারণত public_html
নামে থাকতে পারে)। এখানে নিচের মত করে ফোল্ডার তৈরি করতে হবে:
<webroot>/
|_ .well-known/
|_ openpgpkey/
|_ hu/
এখানে openpgpkey
ফোল্ডারটাতে policy
নামের ফাঁকা ফাইলটা আপলোড করতে হবে, আর হ্যাশের নামে সেভ হওয়া পাবলিক কী ফাইলটা hu
ফোল্ডারে আপলোড করে দিতে হবে।
ফলে ফাইল ফোল্ডার লেআউটটা হবে এরকম:
<webroot>/
|_ .well-known/
|_ openpgpkey/
|_ hu/
| |_ hjz5fuenrtb6i8qaj1fz3fhzr6bum5t7
|_ policy
এই দুইটা ইউআরএলে ফাইলগুলি পাওয়া যাবে:
- <bdeshi.space/.well-known/openpgpkey/hu/hjz5fuenrtb6i8qaj1fz3fhzr6bum5t7>
- <bdeshi.space/.well-known/openpgpkey/policy>
ব্যাস হয়ে গেল! (অবশ্যই এখানে সঠিক ডোমেইন আর কী এর হ্যাশ বসিয়ে নিতে হবে।)
ওয়েব কী ডিরেক্টরি কি কাজ করছে?
সার্ভারে ওয়েব কী ডিরেক্টরি প্রটোকল চালু করে ফেললাম, কিন্তু এটা কাজ করছে তো? যেকোন কম্পিউটার থেকে মোটামুটি আধুনিক ভার্সনের gpg5 দিয়ে নীচের কমান্ডটা চালালে সরাসরি ওয়েবসার্ভার থেকে সঠিক জিপিজি কী সংগ্রহ করে নেবে:
gpg --locate-key your-email@yourdomain.tld
অথবা
gpg --auto-key-locate clear,wkd --locate-key your-email@yourdomain.tld
যেমন, আমার পাবলিক কী পাওয়া যাবে এইভাবে:
gpg --locate-key bdeshi@bdeshi.space
ওয়েব হোস্টিংয়ের একটা বিকল্প ব্যবস্থাও আছে: 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 সংস্করণ থেকে এই ওয়েব কি ডিরেক্টরি প্রটোকল ডিফল্টভাবে চালু করা থাকে। অন্যান্য ডিস্ট্রোতে কি অবস্থা জানি না, তবে আমি যে ডিস্ট্রো চালাই, তাতে সবকিছু সবসময় আপ-টু-ডেট 😎 ↩