OpenSSL আগেই ইনস্টল করা আছে, হোস্টে এনট্রপি আছে, আর এটি দিয়ে কী তৈরি করা সহজ পথ বলে মনে হয়। আউটপুট এলোমেলো ও গোপন এবং সম্পূর্ণ অকেজো হবে, আর ব্যর্থতাটি কী ফরম্যাট উল্লেখ করা কিছুর বদলে কন্ট্রোল-চ্যানেল ত্রুটি হিসেবে আসবে। এই বিভ্রান্তিই ব্যয়বহুল অংশ, কারণ এটি মানুষকে তাদের সাইফার পরীক্ষা করতে পাঠায়। VPN যা পড়ে তা একটি নির্দিষ্ট ফাইল কাঠামো, কোনো ইচ্ছামতো বাইটের ব্লক নয়, আর বৈশিষ্ট্যটির একটি রূপ সার্ভারের বাইরে আদৌ তৈরি করা যায় না।

ডিস্কে থাকা ফাইলটি আসলে কী হতে হবে

OpenVPN-এর স্ট্যাটিক কী ফাইল টেক্সট। এটি একটি মন্তব্য লাইন দিয়ে শুরু হয় যা বলে এটি কী, নির্দিষ্ট প্রস্থের সারিতে হেক্স ডেটা বহন করে, এবং মোট 256 বাইট কী উপাদান ধারণ করে। OpenVPN এটি কন্ট্রোল চ্যানেলের শেয়ার্ড সিক্রেট হিসেবে পড়ে, সার্টিফিকেট হিসেবে নয়, পাসফ্রেজ হিসেবে নয় এবং TLS লাইব্রেরি চিনবে এমন কিছু হিসেবে নয়।

একই ধরনের অবজেক্ট কন্ট্রোল চ্যানেলের উভয় বৈশিষ্ট্যে কাজ করে। tls-auth-এর সাথে প্রতিটি পিয়ারের একটি দিকও দরকার যাতে এক পক্ষের প্যাকেট তার দিকে ফেরত প্রতিফলিত না হয়। tls-crypt-এর সাথে একটি একক শেয়ার্ড সিক্রেট উভয় দিকে কন্ট্রোল চ্যানেল এনক্রিপ্ট ও প্রমাণীকরণ করে, যা হ্যান্ডশেক লুকায় এবং একই সাথে সুরক্ষা দেয়।

এর কিছুই গোপন জ্ঞান নয়, আর ফরম্যাট মূল বিষয় নয়। মূল বিষয় হলো ফাইলটিকে পাঠক যা আশা করে তার সাথে হুবহু মিলতে হবে: হেডার, সারির প্রস্থ, শেষের নতুন লাইন এবং মোট দৈর্ঘ্য। এক সারি এদিক-ওদিক থাকা ফাইল আবর্জনা হিসেবে লোড হয় বা একেবারে ব্যর্থ হয়। তাই দুটি পিয়ারকে বাইটে-বাইটে তুলনা করা একটি বৈধ প্রথম পরীক্ষা, এবং এটি দুটি কনফিগারেশন ফাইলের যেকোনোটি পড়ার চেয়ে দ্রুত।

একটি তৈরির সমর্থিত উপায়

সাধারণ স্ট্যাটিক কীটি যে টুল এটি ব্যবহার করবে তা দিয়ে তৈরি করুন, তারপর দুই প্রান্ত থেকে এটির রেফারেন্স দিন:

openvpn --genkey secret /etc/openvpn/tc-shared.key
tls-crypt /etc/openvpn/tc-shared.key

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

দ্বিতীয় প্রজন্ম এমন কাঠামো যোগ করে যা কোনো বাহ্যিক জেনারেটর উদ্ভাবন করতে পারে না। একটি সার্ভার কী একবার তৈরি হয়, এবং প্রতিটি ক্লায়েন্ট এটি থেকে উদ্ভূত একটি মোড়ককৃত কী পায়:

openvpn --genkey tls-crypt-v2-server /etc/openvpn/tc-v2-server.key
openvpn --genkey tls-crypt-v2-client /etc/openvpn/laptop1.key --tls-crypt-v2 /etc/openvpn/tc-v2-server.key

ক্লায়েন্ট যা পায় তা সার্ভারের নিজস্ব কী নকল নয়। এটি মোড়ককৃত একটি অবজেক্ট যা এমন মেটাডেটা বহন করে যা কেবল সার্ভারই খুলতে পারে, আর এই মোড়ককরণের কারণেই একটি ডিভাইসভিত্তিক ফাইল অন্য কোনো ডিভাইস স্পর্শ না করেই প্রত্যাহার করা যায়। সার্ভার কী সার্ভারেই রাখুন এবং এটিকে সেই ডিভাইসভিত্তিক আস্থার মূল হিসেবে বিবেচনা করুন।

হাতে তৈরি বাইট কোথায় ভেঙে পড়ে

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

v2 রূপের সাথে সমতুল্য কিছুই সম্ভব নয়। মোড়ককৃত ক্লায়েন্ট কী কেবল সার্ভার কী প্রক্রিয়ার আউটপুট হিসেবে বিদ্যমান, আর সার্ভার এটি খুলতে প্রয়োজনীয় উপাদান ধরে রাখে। এলোমেলো ব্লক প্রত্যাখ্যাত হবে বা সহজভাবে ডিক্রিপ্ট করতে ব্যর্থ হবে, এবং দুটি বার্তার কোনোটিই এলোমেলোতার কথা বলবে না।

সংস্করণ সামঞ্জস্য এই সবকিছুর উপরে বসে। প্রথম প্রজন্মের দুই প্রান্তে এটি সমর্থন করে এমন রিলিজ দরকার, আর দ্বিতীয়টির আবার আরও নতুন রিলিজ দরকার। বৈশিষ্ট্যটি থাকার আগে নির্মিত ক্লায়েন্ট কেবল মোড়ককৃত উপাদান গ্রহণ করে এমন সার্ভারের সাথে হ্যান্ডশেক সম্পূর্ণ করতে পারে না, আর যে ব্যর্থতা রিপোর্ট করে তা সংস্করণের বদলে কন্ট্রোল চ্যানেলের দিকে ইঙ্গিত করে।

সবাইকে বাইরে আটকে না দিয়ে ঘোরানো

একক শেয়ার্ড সিক্রেট ঘোরানো একটি সমন্বয় অনুশীলন, প্রযুক্তিগত নয়। সার্ভার আগেরটি প্রত্যাহার করার আগে প্রতিটি ক্লায়েন্টের হাতে প্রতিস্থাপন ফাইল থাকতে হবে, আর পুরোনো মান ধরে রাখা যেকোনো মেশিন সেই মুহূর্তেই ব্যর্থ হয়। কাজের দিনের মাঝখানে এই ঘোরানো শুরু করবেন না।

v2 বিন্যাসে ঘোরানো ডিভাইসভিত্তিক: একটি মেশিনের জন্য নতুন মোড়ককৃত কী জারি করুন এবং শুধু সেই মেশিনের জন্য পুরোনোটিকে অবসরে পাঠান। প্রতিটি ক্লায়েন্ট এটি সমর্থন করে এমন রিলিজে গেলে স্থানান্তরের প্রধান যুক্তি এটিই।

ফাইল অনুমতিগুলো একই আলোচনার অংশ। কীটি কেবল সেই অ্যাকাউন্টের জন্য পঠনযোগ্য হওয়া উচিত যা সেবাটি চালায়, এবং এটি যে প্রোফাইলগুলো সুরক্ষিত করে তাদের সাথে একই রিপোজিটরিতে থাকা উচিত নয়। OpenVPN 2.6 রেফারেন্স তৈরি করার রূপগুলো এবং কী-উপাদান অংশগুলো নথিভুক্ত করে, যা ফোরাম পোস্ট থেকে কপি করা কমান্ডের চেয়ে ভালো উৎস।

সম্পর্কিত নিবন্ধ