মূল লেখায়

জিপিজি ওয়েব কী ডিরেক্টরি

এক নজরে

ইমেইল বা ফাইল আদানপ্রদানের ক্ষেত্রে নিরাপত্তার একটা নির্ভরযোগ্য উপায় হচ্ছে ওপেনপিজিপি প্রাইভেট/পাবলিক কী ব্যবস্থা। আমি আমার পিজিপি কী দিয়ে সাইন বা এনক্রিপ্ট করে ফাইল, মেইল বা যেকোন তথ্য পাঠালে আপনি পুরোপুরি নিশ্চিত থাকতে পারেন যে যাত্রাপথে অন্য কেউ সেটা “হ্যাক” করে পাল্টে দিতে পারেনি।

লিনাক্সের ক্ষেত্রে পিজিপির ব্যবহার হয় আরও অনেক জায়গায়, যেমন প্যাকেজ ইনস্টলেশনের ক্ষেত্রে প্যাকেজ আর্কাইভের বিশুদ্ধতা নিশ্চিত কারা জন্য। আর পিজিপি কী ম্যানেজমেন্টের জন্য আজকাল জিপিজি (গ্নু প্রাইভেসি গার্ড) সফটওয়্যারটাই প্রচলিত, সব ডিস্ট্রোতে প্রিইনস্টল করা থাকে সাধারণত।

তো কারো সঙ্গে এই পিজিপি কী দিয়ে মেসেজ আদানপ্রদানের আগে তাকে আমার পাবলিক কী টা জানাতে হবে। এই জন্য একটা উপায় হচ্ছে বিভিন্ন কী সার্ভারে আমার পাবলিক কী টা আপলোড করে রাখা, যাতে যে কেউ সেটা ইমপোর্ট করে নিতে পারে। কিন্তু কী সার্ভারগুলোর বেশিরভাগেরই1 একটা বড় সমস্যা2 হচ্ছে, যেকেউ যেকোন ইমেইল দিয়ে কী তৈরি করে আপলোড করতে পারে; তাই আমার ইমেইল মিললেই কী টা যে আমার, তার নিশ্চয়তা নেই।

নিশ্চয়তার জন্য নিজের ওয়েবসাইটে নিজের পাবলিক কী আপলোড করে রাখতে পারি। তবে এক্ষেত্রে সমস্যা হচ্ছে সাইটের কোথায় কী টা রাখা আছে খুঁজে বের করে ডাউনলোড করে তারপর ইমপোর্ট করতে হবে। একজনের সাথে যোগাযোগে হয়ত মানা যায়, কিন্তু ১০০ জনের সাথে পিজিপিভিত্তিক মেইল আদানপ্রদান করলে একশোটা কী এভাবে খুঁজে বের করা আনন্দের কাজ না।

জিপিজিতে এজন্য ওয়েব কী ডিরেক্টরি (WKD) নামের একটা ব্যবস্থা আছে, যার মাধ্যমে ইমেইলের ডোমেইন থেকে স্বয়ংক্রিয়ভাবে পাবলিক কী যোগাড় করা যায়। তবে এজন্য পূর্বশর্ত হচ্ছে নিজস্ব ডোমেইন এবং এই ডোমেইনের অধীন ইমেইল এড্রেস। যেমন আমার bdeshi.space ডোমেইনের সাথে মিলিয়ে ‍‍email@bdeshi.space ইমেইল এড্রেস আছে, তাই আমি আমার সাইটটায় ওয়েব কী ডিরেক্টরি সেট আপ করে নিয়েছি। তাছাড়া এই পদ্ধতিতে যারা যারা আগে থেকেই ইমেইল জানেন তারা সহজে ইমপোর্ট করতে পারলেও ইমেইলটা পাবলিক না রাখলেও চলে, বরং পাবলিক কী টা একটা হ্যাশ আকারে অনলাইনে থাকে, তাই ইমেইলে স্প্যামিংও একটু কম কম।

আপনার নিজস্ব ওয়েব ডোমেইন থাকলে আপনিও নীচের পদ্ধতি দেখে WKD সেট আপ করে নিয়ে জিপিজি ব্যবহার করা সহজ করে ফেলতে পারেন।

পিজিপি কী জেনারেশন

আগে থেকে জিপিজি কী তৈরি করা না থাকলে, টার্মিনাল খুলে নিচের কমান্ডটা দিয়ে তৈরি করে নেয়া যায়:

$ gpg --full-gen-key

কমান্ডটা চালানোর পর কিছু প্রম্পট আসবে।

  • প্রথমে এলগোরিদম বাছাই: এন্টার টিপে ডিফল্টটাই বাছাই করলাম।
  • কিসাইজ: ২০৪৮বিট হচ্ছে ডিফল্ট, মন্দ না3। সরাসরি এন্টার প্রেস করে দেয়া যায়।
  • কী এর মেয়াদ: আবার এন্টার দিয়ে ডিফল্ট ভ্যালুটাই নিলাম। এরপর কনফার্মেশন চাইবে, y প্রেস করতে হবে।
  • এবার Real name: কিছু একটা লিখে দিলেই চলে।
  • এরপর Email address: এখানে নিজস্ব ডোমেইনের ইমেইল বসাতে হবে। যেমন আমি email@bdeshi.space লিখেছি।
  • এখন Comment: এখানে কিছু না লিখে এন্টার প্রেস করে দেয়া ভালো।
  • তারপর সবকিছুর কনফার্মেশনের জন্য ‘o’ টাইপ করলাম।
  • এবং সবশেষে প্রাইভেট কী এর জন্য পাসওয়ার্ড দিলেই জেনারেট হয়ে গেল।

কি জেনারেটের শেষে এরকম আউটপুট আসবে:

public and secret key created and signed.

pub   rsa2048 2020-02-20 [SC]
      A52A51D08ECDD98D0D72559DD08C742600CAA880
uid                      bdeshi <email@bdeshi.space>
sub   rsa2048 2020-02-20 [E]

এখানে A52A51D08ECDD98D0D72559DD08C742600CAA880 হচ্ছে কী এর ফিঙ্গারপ্রিন্ট। একে হাতের কাছে রাখলাম।

কী জেনারেট হয়ে গেল, এবার আসল WKD কনফিগারেশনে মন দেয়া যায়।

ডব্লিউকেডি হ্যাশ সংগ্রহ

এবার জিপিজি কী এর ফিঙ্গারপ্রিন্ট ব্যবহার করে ওয়েব কী ডিরেক্টরির জন্য হ্যাশ বের করতে হবে।

$ gpg --fingerprint --with-wkd-hash 0xA52A51D08ECDD98D0D72559DD08C742600CAA880

আমি পুরো ফিঙ্গারপ্রিন্টটাই বসিয়ে দিয়েছি, তবে শেষের ৮টা বা ১৬টা অক্ষর দিলেও চলে। যাহোক, এই কমান্ড একটা সংক্ষিপ্ত রিপোর্ট দেখায়, নীচের আউটপুটের মত:

pub   rsa2048 2020-02-20 [SC]
      A52A 51D0 8ECD D98D 0D72  559D D08C 7426 00CA A880
uid           [ultimate] bdeshi <email@bdeshi.space>
              infz5ue4ua9bq7amzkupqwk5ggtpx4n7@bdeshi.space
sub   rsa2048 2020-02-20 [E]

হাইলাইট করা লাইনটাতে @bdeshi.space এর আগের হিজিবিজি লেখাটা হচ্ছে ইমেইল এড্রেসের ডব্লিউকেডি হ্যাশ, এইটাও হাতের কাছে রাখা দরকার। পাবলিক কী ফাইলটা এই হ্যাশের নামেই থাকবে, তাই যারা ইমেইল এড্রেস জানে তারাই কেবল এটা ইমপোর্ট করতে পারবে। (যদিও আমি আমার ইমেইলটা জনসম্মুখে বলে দিয়েছি 😞 , আমার আর স্প্যাম ঠেকানো হল না।)

এখন জিপিজি পাবলিক কী টা ডব্লিউকেডি এর উপযোগী করে এক্সপোর্ট করতে হবে। প্রথমে জিনিসটা কিরকম, দেখা যাক:

$ gpg --export --armor 0xD08C742600CAA880

একগাদা অর্থহীন লেখায় টার্মিনাল ভর্তি হয়ে গেছে, না? এটাই পাবলিক কী! অন্তত --armor যোগ করেছি বলে পড়া যাচ্ছে, নাহলে বাইনারি ডেটা প্রিন্ট করে টার্মিনালটাকেই কুৎসিত বানিয়ে ফেলতো!

যাহোক, একে এবার ডব্লিউকেডি এর জন্য এক্সপোর্ট করি:

$ gpg --output infz5ue4ua9bq7amzkupqwk5ggtpx4n7 --export --armor 0xD08C742600CAA880

‍--output এর পর আগে থেকে জানা WKD হ্যাশ লিখেছি।

এর সাথে policy নামে একটা ফাঁকা ফাইলও প্রয়োজন:

$ echo "" > policy

এর ফলে হোম ডিরেক্টরিতে4 ওই হ্যাশের নামে একটা ফাইল তৈরি হয়েছে, আর policy নামে শূন্য বাইট সাইজের আরেকটা ফাইল। ls কমান্ড দিয়ে টার্মিনালেই যাচাই করে নেয়া যায়।

সার্ভার কনফিগারেশন

এবার সার্ভারে ওয়েব কী ডিরেক্টরির জন্য দরকারী ফোল্ডার স্ট্রাকচার তৈরি করে ফেলি।

ওয়েবসার্ভারে লগইন করে ওয়েবরুট ফোল্ডারটা খুলতে হবে, অর্থাৎ যেখান থেকে ওয়েবসাইটের ফাইলপত্র সার্ভ করা হয়। (সাধারণত public_html নামে থাকে)। এখানে নিচের মত করে ফোল্ডার তৈরি করতে হবে:

public_html
|_ .well-known
  |_ openpgpkey
   |_ hu

এখানে openpgpkey ফোল্ডারটাতে policy নামের ফাঁকা ফাইলটা আপলোড করতে হবে, আর হ্যাশের নামে সেভ হওয়া পাবলিক কী ফাইলটা hu ফোল্ডারে আপলোড করে দিতে হবে।

ফলে ফাইল ফোল্ডার লেআউটটা হবে এরকম:

public_html
|_ .well-known
  |_ openpgpkey
    |_ hu
    | |_ infz5ue4ua9bq7amzkupqwk5ggtpx4n7
    |_ policy

ফলে এই দুইটা ইউআরএলে ফাইলগুলি পাওয়া যাবে:

ব্যাস হয়ে গেল!

টেস্ট

এইভাবে আপনার সার্ভারে ওয়েব কী ডিরেক্টরি প্রটোকল চালু করে ফেলতে পারেন! পরে যেকোন কম্পিউটার থেকে আধুনিক ভার্সনের gpg দিয়ে নীচের কমান্ডটা চালালে সরাসরি আপনার ওয়েবসার্ভার থেকে আপনার জিপিজি কী সংগ্রহ করে নেবে:

$ gpg --locate-key email@yourdomain.tld

অথবা

$ gpg --auto-key-locate clear,wkd --locate-key email@yourdomain.tld

যেমন, আমার পাবলিক কী পাওয়া যাবে এইভাবে: gpg --locate-key email@bdeshi.space


একটা বিকল্প ব্যবস্থাও আছে: openpgpkey সাবডোমেইন তৈরি ফাইলগুলি সেখানেও সার্ভ যায়, তবে এক্ষেত্রে ওই ফোল্ডার স্ট্রাকচারে hu এর আগে ডোমেইনের নামে একটা এক্সট্রা ফোল্ডার দরকার। আমি আসলে এভাবেই আমার ডোমেইনে WKD সেটআপ করেছি:

তবে দুইটা পদ্ধতিই সমতুল্য, এবং ওপরে বর্ণনা করা পদ্ধতিটাই তুলনামূলকভাবে সোজা, কারণ আলাদা সাবডোমেইন খোলা লাগছে না।

আর এই পদ্ধতিটা কাজে লাগানোর জন্য একটু নতুন gpg ভার্সন দরকার। জিপিজি এর 2.1.23 সংস্করণ থেকে এই ওয়েব কি ডিরেক্টরি প্রটোকল ডিফল্টভাবে চালু করা থাকে, তবে অনেক ডিস্ট্রোতে এখনও এইভাবে কী ইমপোর্ট করতে সমস্যা হয়। কিন্তু আমি যে ডিস্ট্রো চালাই, তাতে সবকিছু ঠিকঠাক। 😎


ফুটনোটস

  1. কিছু কী সার্ভার পাবলিক কী আপলোড করার আগে ইমেইল ভেরিফাই করে নেয়, যেমন https://keys.openpgp.org ↩︎

  2. আরেকটা বিশাল সমস্যা রয়েছে, যা কী সার্ভারগুলিকেই অকেজো করে দিয়েছিলো প্রায়। যে কেউ আপনার পাবলিক কী ডাউনলোড করে অগণিত সিগনেচার যোগ করে রিআপলোড করতে পারে, ফলে কী এর ফিঙ্গারপ্রিন্ট ঠিক থাকলেও সাইজ হয় বিশাল, আর এই কী কেউ ইমপোর্ট করতে গেলে জিপিজি ক্র্যাশ করে সবই অকেজো হয়ে যেতে পারে। এজন্য https://keys.openpgp.org কী সার্ভারটা এরকম কী সাইনিংই বন্ধ করে রেখেছে। ↩︎

  3. অনেকেই ২০৪৮ এর পরিবর্তে ৪০৯৬বিটের আরএসএ কী ব্যবহার করতে পরামর্শ দেন। কিন্তু ২০৪৮বিটের এর চেয়ে ৪০৯৬বিটের নিরাপত্তা যেটুকু নিরাপত্তা বেশি হয়, তা তুলনামূলক ভাবে নগন্য, কিন্তু এই কী অনেক ডিভাইসে ইমপোর্ট করা যায় না। তাই ৪০৯৬বিট নিয়ে টানাটানি না করে বরং জিপিজিতে যখন ইসিসি এলগরিদমগুলো চূড়ান্ত রিলিজ করা হবে, তখন সেসব ব্যবহার করাই উত্তম (যেমন ED25519); কী সাইজ অনেক ছোট, নিরাপত্তাও বেশি। (আরও পড়ুন) ↩︎

  4. আমি ধরে নিয়েছি টার্মিনাল হোম ডিরেক্টরিতে খোলা হয়েছে। তা না হলে টার্মিনালটা যে ডিরেক্টরি থেকে খোলা হল, সেইখানে ফাইল তৈরি হবে। ↩︎