OpenSSL میں AES-NI یا کرنل آف لوڈ: آپ کو کون سا چاہیے؟
CPU ہدایات کی معاونت کو اس جگہ سے الگ کریں جہاں پیکٹ پروسیس ہوتے ہیں: ترتیب دینے سے پہلے کرپٹو بیک اینڈ، طے شدہ سائفر اور فعال راستہ جانچیں۔
دو لیبل ایسے استعمال ہوتے ہیں جیسے ایک ہی چیز ہوں: ہارڈویئر سے تیز اور کرنل میں منتقل۔ ایک بتاتا ہے کہ کسی لائبریری کا AES معمول کون سی ہدایات چلاتا ہے، دوسرا بتاتا ہے کہ پیکٹ کی پروسیسنگ کہاں ہوتی ہے۔ VPN میں پہلا دوسرے کے بغیر، دوسرا پہلے کے بغیر، یا دونوں اکٹھے ہو سکتے ہیں۔ کارکردگی کا کوئی بھی فیصلہ اس بات سے شروع ہونا چاہیے کہ آپ ان دونوں میں سے کون سا واقعی بدل رہے ہیں۔
دو محور، ایک اسکور نہیں
پہلا محور نفاذ ہے: کیا AES-256-GCM کرنے والا کوڈ پروسیسر کی مخصوص ہدایات استعمال کرنے والے ورژن کی طرف جاتا ہے یا ایسے منتقل ہو سکنے والے طریقے کی طرف جو انہیں عام حساب کی طرح چلاتا ہے۔ یہ انتخاب کرپٹوگرافک لائبریری کے اندر رہتا ہے اور اس کے آغاز پر کیا جاتا ہے۔
دوسرا محور جگہ ہے: پیکٹ کرنل کے تبدیلی کے راستے سے گزرتا ہے یا صارف کی جگہ کا ڈیمن ٹنل ڈیوائس سے پڑھتا ہے، خفیہ کرتا ہے اور واپس لکھتا ہے۔
کوئی محور دوسرے کو محدود نہیں کرتا۔ AES ہدایات والے CPU پر صارف کی جگہ کا VPN انہیں ہر وقت استعمال کر سکتا ہے، اور ان کے بغیر CPU پر کرنل کا راستہ سافٹ ویئر نفاذ کی طرف لوٹ جاتا ہے۔ بیچنے والوں کے مواد میں لیبل یہ فرق کم ہی دکھاتے ہیں، اسی لیے دونوں حالتوں کے درمیان نقل کی گئی ترتیب کی مشورے اکثر کچھ نہیں کرتے۔
محور ایک: کون سا کوڈ خفیہ کاری کرتا ہے
OpenSSL آغاز کے دوران پروسیسر کی خصوصیات کا پتہ لگاتا ہے اور نتیجے کو بہتر بنائے گئے کوڈ راستے چننے کے لیے استعمال کرتا ہے، جیسا کہ x86 صلاحیتوں کی دستاویز بیان کرتی ہے۔ AES-NI اس بھیجے جانے کے پیچھے درج خصوصیات میں سے ایک ہے۔ ان میں سے کچھ بھی یہ تقاضا نہیں کرتا کہ لائبریری کرنل کا حصہ بن جائے۔
تیز راستہ استعمال ہونے کا گمان کرنے سے پہلے تصدیق کریں کہ خصوصیت عمل کے لیے نظر آتی ہے۔ Linux پر ماخذ /proc/cpuinfo میں flags میدان ہے، اور مہمان کے اندر یہ وہی ظاہر کرتا ہے جو ہائپر وائزر سامنے لاتا ہے، نہ کہ طبعی میزبان کے ماڈل کا نام۔
grep -m1 '^flags' /proc/cpuinfo | grep -o '\baes\b'
openssl list -providers -verboseدوسرا حکم اس بلڈ میں لوڈ کیے گئے فراہم کنندگان کے نام بتاتا ہے۔ یہ نہیں بتاتا کہ VPN سروس نے کون سی لائبریری سے رابطہ کیا، اور ایک میزبان دو OpenSSL تنصیبات رکھ سکتا ہے جبکہ چلنے والا عمل ان میں سے صرف ایک استعمال کرتا ہے۔
محور دو: پیکٹ کا راستہ کہاں چلتا ہے
کرنل میں رکھنے کا مطلب یہ ہے کہ تبدیلی کرنل کی اپنی IPsec مشینری میں یا کرنل کے اندر ٹنل ڈرائیور میں ہوتی ہے، اس لیے پیکٹوں کو ہر بیچ کے لیے صارف کی جگہ کے عمل سے آنا جانا نہیں پڑتا۔ یہ نقول اور سیاق کی تبدیلیاں کم کر سکتا ہے اور کام کو کورز پر اس طرح پھیلا سکتا ہے جو ایک تھریڈ والا ڈیمن نہیں کر سکتا۔ یہ ان کاؤنٹرز اور نشانات کو بھی منتقل کرتا ہے جو آپ تھروپٹ گرنے پر پڑھیں گے، کیونکہ کام اب اس حد کے دوسری طرف ہو رہا ہے جس پر آپ کا اختیار نہیں۔ اسے صرف کارکردگی کا فیصلہ نہیں بلکہ ڈی بگنگ کا خرچ سمجھیں۔
یہ ہدایات کی معاونت پیدا نہیں کرتا، سائفر ترتیب نہیں دیتا اور موجودہ راستے کو کام کرنے والا نہیں بناتا۔
مجازی سازی اس محور پر بھی ایک تہہ جوڑتی ہے۔ مہمان کو ایسا نقاب پوش CPU ماڈل دیا جا سکتا ہے جو میزبان کی خصوصیات چھپائے، اور اندر کا مہمان اس سے بھی کم دیکھ سکتا ہے۔ صلاحیتوں کا منظر VPN کے واقعی چلنے والے ماحول کے اندر سے پڑھیں، ہائپر وائزر کنسول سے نہیں۔
ہر انتخاب کیا خریدتا ہے، اور کیا نہیں کر سکتا
عملی سوال یہ ہے کہ وقت کہاں جاتا ہے۔ اگر ایک مصروف تھریڈ، بار بار بفر کی نقول یا ہر پیکٹ پر نظام کی کال تھروپٹ محدود کرتی ہے، تو تبدیلی کو ان اخراجات ہٹانے والے راستے پر منتقل کرنا مدد کر سکتا ہے، بشرطیکہ کرنل آپ کی مطلوبہ تبدیلی نافذ کرتا ہو۔
اگر حد بھری ہوئی اوپری لنک، نقصان والا راستہ، طویل آنے جانے کا وقت، بھرا ہوا منزل کا سروس یا ایک کور پر جڑا ہوا ایک تھریڈ ہے، تو جگہ کوئی اہم چیز نہیں بدلتی۔ ہدایات کے انتخاب پر بھی یہی لاگو ہے: مخصوص ہارڈویئر پر AES غائب راستے کی مرمت نہیں کر سکتا اور مدد نہیں کرے گا اگر نام کا حل ناکام ہونے سے ٹنل بیکار کھڑا ہو۔
جہاں دونوں لاگو ہوتے ہیں، وہ مل کر کام کرتے ہیں۔ کرنل کا راستہ کرنل کی کرپٹو API کے اندر وہی ہدایات کی سطح کا بھیجنا استعمال کر سکتا ہے، اور اچھی طرح چنی گئی لائبریری والا صارف کی جگہ کا راستہ اسے پہلے ہی استعمال کر رہا ہے۔ فیصلہ یہ نہیں کہ تجریدی طور پر کون تیز ہے؛ یہ ہے کہ کس خرچ کے لیے آپ کے پاس ثبوت ہے۔
کچھ بدلنے سے پہلے چار حقائق لکھیں
سروس کی بائنری اور وہ کرپٹو لائبریری لکھیں جس سے یہ منسلک ہے، کیونکہ یہی پہلا محور طے کرتی ہیں۔ پھر طے شدہ ڈیٹا تحفظ درج کریں، کیونکہ مخصوص ہدایات کے راستے کے بغیر سائفر اس کے ساتھ والے سے مختلف برتاؤ کرتا ہے، اور مجموعہ دونوں فریق چنتے ہیں۔
اس کے بعد، چلتے ہوئے ماحول کے اندر سے صلاحیتوں کا منظر، اور آخر میں فعال پیکٹ کا راستہ اس ثبوت کے ساتھ کہ آپ جس موڈ کو فعال سمجھتے ہیں وہ واقعی ویسا ہی ہے۔ لوڈ شدہ ماڈیول اس بات کا ثبوت نہیں کہ کوئی پروفائل اسے استعمال کرتا ہے، اور ترتیب کی سطر اس بات کا ثبوت نہیں کہ کرنل نے اسے قبول کیا۔
ایک چیز بدلیں، پھر انہی سرے نقطوں اور اسی منتقلی کی سمت والے یکساں بوجھ سے موازنہ کریں۔ وہ رفتار کا دعویٰ جو آپ نے ناپا نہیں، اس نوٹ سے کم قیمتی ہے جو کہے کہ بیک اینڈ کبھی شک میں نہیں رہا۔