پبلک کی کرپٹوگرافی

مروجہ کرپٹوگرافی (cryptography) میں پیغام کو افشا (decrypt) کرنے کے لیے اسی کنجی (key) کی ضرورت ہوتی ہے جو اس پیغام کو اخفا (encrypt) کرنے کے لیے استعمال کیا گیا تھا۔ یعنی دو افراد کو ایک ایسی کنجی چاہیے ہوتی ہے جو صرف ان دو کو معلوم ہو اور باقی ساری دنیا سے راز ہو۔ اس لیے مروجہ کرپٹوگرافی کو "خفیہ کنجی کرپٹوگرافی" کہا جاتا ہے۔ اس کے برعکس "عوامی کنجی کرپٹوگرافی" میں پیغام کو اخفا کرنے والی کنجی، پیغام کو افشا کرنے والی کنجی سے مختلف ہوتی ہے۔

## تاریخ
عوامی کنجی کرپٹوگرافی (public key cryptography) ؁ 1975 میں دریافت ہوئی، جس کا سہرا ڈفی اور ہیلمین کے سر ہے۔ ڈفی اپنے مقالے "عوامی کنجی کرپٹوگرافی کے پہلے دس سال" میں رقم طراز ہے کہ عام کنجی کرپٹوگرافی دو مسائل اور ایک غلط فہمی کی پیداوار تھی۔ پہلا مسئلہ یہ تھا کہ دو آدمی جو پہلے ایک دوسرے سے نہیں ملے، کس طرح ایک خفیہ کنجی اپنائیں جو صرف ان دونوں کو معلوم ہو اور باقی دنیا کے لیے راز ہو۔ دوسرا مسلئہ کہ ایک برقی (ڈیجٹل/الیکڑانک) پیغام پر کسی کے دستخط کس طرح کیے جائیں (کاغذ پر عام دستخط کے معٰنی میں)؟ ڈفی کی غلط فہمی یہ تھی کہ اس کے خیال میں دو افراد کو آپس میں خفیہ بات کرنے کے لیے کسی تیسرے قابلِ اعتبار شخص (یا ادارہ) کی ضرورت نہیں ہونی چاہیے۔

دو طرح کے "عوامی کرپٹوگرافی" نظام بنائے گئے ہیں جو ریاضی میں کمپوٹنگ کے لحاظ سے مشکل مسائل کا فائدہ اُٹھاتے ہیں۔ پہلا مسلئہ ایک محدود میدان پر ڈسکریٹ لاگرتھم نکالنے کی دشواری کا ہے۔ دوسرا مسلئہ کسی بڑے نمبر کے جزو ضربی نکالنے کی دشواری کا ہے۔ پہلے مسلئہ پر مبنی طاہر الجمال کا الخوارزم مشہور ہے۔ دوسرے مسلئہ پر مبنی RSA کا الخوارزم ہے۔
چونکہ الجمال کا الخوارزم پیٹنٹ سے آزاد ہے اس لیے زیادہ تر آزاد مصدر سافٹوئیر یہ الخوارزم استعمال کرتے ہیں۔ امریکی معیاری ادارہ (NIST) کا ڈیجٹل دستخط الخوارزم بھی الجمال کے طریقہ کو ترمیم کر کے تیار کیا گیا ہے۔

## عوامی اور خفیہ کنجیاں
ہر آدمی دو کنجیاں بناتا ہے، ایک عوامی اور دوسری خفیہ۔ عوامی کنجی آدمی کے نام اور شناخت سمیت (ی‌میل پتہ وغیرہ) شائع کر دی جاتی ہے، جبکہ خفیہ کنجی ہر شخص خفیہ رکھتا ہے۔ مثال کے طور پر تصور کرو کہ اقبال اور برجیس آپس میں عوامی کنجی کرپٹوگرافی کے ذریعہ پیغام کا تبادلہ کرنا چاہتے ہیں۔ اقبال کی عوامی کنجی کو ہم \ A کہیں گے اور خفیہ کنجی کو \ a۔ اسی طرح برجیس کی عوامی کنجی کو \ B اور خفیہ کنجی کو \ b۔ اقبال جب برجیس کو پیغام بھیجتا ہے، تو پہلے برجیس کی عوامی کنجی \ B استعمال کرتے ہوئے پیغام کو اخفا کر دیتا ہے۔ یہ اخفا پیغام اب برجیس کی خفیہ کنجی \ b سے ہی کھولا جا سکتا ہے۔ جب اخفا پیغام برجیس کو موصول ہوتا ہے، تو وہ اپنی خفیہ کنجی \ bکے زریع اسے افشا کر لیتی ہے۔

اسی طرح اگر اقبال نے کسی پیغام پر اپنے دستخط کرنے ہوں تو وہ اپنی خفیہ کنجی \ a استعمال کرتے ہوئے پیغام کے متن پر منحصر دستخط پیدا کرے گا۔ اب کوئی بھی شخص جس کے پاس اقبال کی عوامی کنجی \ A ہو، وہ پیغام اور دستخط کو پرکھ کر بتا سکتا ہے کہ پیغام اور دستخط صحیح ہیں۔ نہ صرف یہ اطمینان کر سکتا ہے کہ دستخط اقبال کے ہیں، بلکہ اقبال اس بات سے مُکر بھی نہیں سکتا کہ پیغام پر دستخط اقبال کے ہی ہیں۔

## منتظم عوامی کنجی
عوامی کنجیاں شائع کرنے کے لیے ایک ادارہ کی ضرورت پڑتی ہے جو اس بات کی سند دے کہ فلاں شخص کی عوامی کنجی یہ ہے۔ سند (certificate) ایک پیغام کی شکل میں ہوتی ہے جس پر ادارہ کے (ڈیجٹل) دستخط ہوتے ہیں۔ اس طرح ہر شخص کو صرف اس سند عطا کرنے والے ادارہ کی عوامی کنجی کا علم ہونا لازم ہوتا ہے۔ باقی کوئی شخص آپ کو اس ادارہ کی سند پیش کرے گا کہ میرا نام یہ ہے اور میری عوامی کنجی یہ ہے۔ اب آپ یہ تسلی کر سکتے ہو کہ سند پر دستخط ادارہ کے ہی ہیں۔ اگر دستخط صحیح ہیں تو آپ اب اس شخص کی عوامی کنجی اس شخص سے اخفا بات چیت کے لیے استعمال کر سکتے ہو۔ آپ کا براؤزر کسی ویب گاہ سے محفوظ (https) کنکشن اسی طریقہ سے بناتا ہے۔

## حیش ڈائجسٹ
کسی پیغام کا حیش ڈائجسٹ نکالنے کے لیے پیغام کو یکطرفی (one-way) فنکشن سے گزارا جاتا ہے۔ اس یکطرفی فنکشن کی خصوصیت یہ ہوتی ہے کہ اس سیدھی سمت میں کمپوٹ کرنا تو آسان ہوتا ہے مگر اُلٹی سمت میں کمپوٹ کرنا مشکل (قریب ناممکن)۔ یعنی پیغام کا حیش ڈائجسٹ نکالنا تو آسان، مگر کسی حیش ڈائجسٹ سے اصل پیغام نکالنا قریباً ناممکن۔ جیسا کہ نام سے ظاہر ہے کسی بھی لمبائی کے پیغام کا حیش ڈائجسٹ ایک مقرر لمبائی کا عدد ہوتا ہے۔

## الجمال کا کرپٹوگرافی الخوارزم
طاہر الجمال کا الخوارزم
محدود میدان
پر لاگرتھم نکالنے کی دشواری پر منحصر ہے۔ اس الخوارزم میں تمام ریاضی بہت بڑے پرائم عدد \ p کے ساتھ محدود میدان \mathbb{F}_p پر کیا جاتا ہے، یعنی \ p کے چکر (modulo) پر کیا جاتا ہے۔ ڈسکریٹ لاگرتھم کی دشواری کے لیے ضروری ہے کہ \ p-1  کا ایک بڑا پرائم جزو ضربی ضرور ہو۔ اگر \ p-1  کے تمام اجزائے ضربی چھوٹے پرائم اعداد پر مشتمل ہوں تو ڈسکریٹ لاگرتھم نکالنا آسان ہو جاتا ہے اور اس لیے ایسے \ p  کا استعمال موزوں نہیں رہتا۔ محدود میدان میں ایک عدد \ g چنا جاتا ہے جسے ہم جنم عدد کہیں گے۔ اقبال اور برجیس ایک ایک عدد  a, b \in \mathbb{F}_p چنتے ہیں جو ان کی خفیہ کنجیاں بن جاتی ہیں۔ یہاں عدد \ a اقبال کی خفیہ کنجی ہے، جبکہ عدد \ b برجیس کی خفیہ کنجی۔ خفیہ کنجیوں سے عوامی کنجیاں \ g کی طاقت پر اور \ pکے چکر پر یوں نکالی جاتی ہیں (اقبال کی عوامی کنجی \ A اور برجیس کی عوامی کنجی \ B ) :

 
\ A = g^a \mod p \,\,,\, B = g^b \mod p


جیسا کہ اوپر بیان ہوا، اقبال اور برجیس اپنی اپنی خفیہ کنجیاں خفیہ رکھیں گے، جبکہ عوامی کنجیاں \ A, B ( مع \ g, p  کے ) شائع کر دی جائیں گی۔

### الجمال اخفا الخوارزم
اب برجیس پیغام کا ہر ٹکرا \ mبھیجنے سے پہلے ایک رینڈم عدد \ k جنم کرتی ہے، جو خفیہ رکھا جاتا ہے۔ یاد رہے کہ یہ پیغام کا ٹکرا \ m بھی محدود میدان کا ایک عدد ہو گا (پیغام کو برابر ٹکروں میں تقسیم کر لیا جاتا ہے، لمبائی \ \lfloor \log_2(p)\rfloor  bits)۔ اب برجیس اپنے کمپوٹر پر دو نمبر نکالے گی، اقبال کی عوامی کنجی استعمال کرتے ہوئے:


\ c_1 = g^k \mod p
 

\ c_2 = (A^k m) \mod p
 
اور اخفا پیغام کے دونوں حصوں \ c_1, c_2 کو اقبال کی طرف روانہ کر دیتی ہے۔ اقبال اپنی خفیہ کنجی \ a استعمال کرتے ہوئے اسے یوں افشا کرے گا:

\ m = c_1^{-a} c_2 \mod p


کیونکہ

\ c_1^{-a} c_2 = (g^k) ^{-a} A^k m = g^{-ak} (g^a)^k m = g^{-ak} g^{ak} m = m
 
یاد رہے کہ \ a کا علم صرف اقبال کو ہے، باقی لوگوں \ a کو نکالنے کے لیے \ A کا ڈسکریٹ لاگرتھم نکالنے کی دشواری ہے۔

اصل زندگی میں بڑے پیغامات کو اس مرحلے سے گزارنا کمپوٹنگ کے لحاظ سے مہنگا پڑتا ہے۔ اس لیے عام طور پر پیغام اخفا کرنے کے لیے "خفیہ کنجی کرپٹوگرافی" کے مروجہ الخوارزم (جیسا کہ AES) استعمال کیے جاتے ہیں۔ مگر ہر پیغام کو اخفا کرنے کے لیے مروجہ الخوارزم کو جو "خفیہ کنجی" درکار ہوتی ہے وہ "عوامی کنجی کرپٹوگرافی" کے اوپر دیے الجمال کے الخوارزم سے اخفا کی جاتی ہے اور اخفا پیغام کے ساتھ روانہ کر دی جاتی ہے۔ اس طرح مروجہ طریقے کی سب سے بڑی خامی دور ہو جاتی ہے، یعنی ایک خفیہ کنجی کا ہر دو آدمیوں کے لیے معلوم ہونے کی ضرورت۔ تفصیلاً، برجیس ایک رینڈم عدد \ m  نکالے گی، جو "خفیہ کنجی کرپٹوگرافی الخوارزم" میں "خفیہ کنجی" کے طور پر استعمال ہوگا۔ اب \ m  کو "الجمال الخوارزم" سے اخفا کر کے \ c_1, c_2  نکالے جائیں گے۔ اب یہ \ c_1, c_2  اقبال کو روانہ کیے جائیں گے، جنھیں اقبال افشا کر کے \ m  نکال سکے گا اور اس \ m  کو اُسی "خفیہ کنجی الخوارزم" میں استعمال کر سکے گا۔

### الجمال کا (ڈیجٹل) دستخط الخوارزم
برقی دستخط سے مراد وہی ہے جو معروف معٰنوں میں کاغذ پر دستخط کرنے سے ہے، یعنی کسی برقی پیغام پر دستخط کرنا۔

جس پیغام کے دستخط چاہیے ہوں اس پیغام کا حیش ڈائجسٹ بنایا جاتا ہے اور اس ڈائجسٹ (جو ایک عدد ہو گا) کے لحاظ سے دستخط کے اعداد کمپوٹ کیے جاتے ہیں۔ تمام اعداد محدود میدان \ \mathbb{F}_p کے جُز ہوتے ہیں۔

ایک حیش ڈائجسٹ \ m پر برجیس کے دستخط دو اعداد کا جوڑا \ (r, s) ہوتا ہے جو اس مساوات کی تسکین کرتا ہے:
  g^m = B^r r^s \mod p  مساوات 1 
برجیس دستخط کرنے کے لیے اپنی عوامی اور خفیہ کنجی کا استعمال کرے گی۔ کوئی بھی دوسرا شخص جس کو برجیس کی عوامی کنجی کا علم ہو، برجیس کے پیغام پر دستخط کی تصدیق کر سکتا ہے۔ برجیس کے دستخط بنانے کا یہ طریقہ ہے:
* ایک رینڈم عدد \ r چنو جس کا \ p-1 کے ساتھ عاد اعظم ایک ہو:
\ \gcd(r, p-1)=1
* کمپوٹ کرو:
\ r = g^k \mod p 
* اب دستخط مساوات 1 بن جاتی ہے:
 g^m = g^{b r} g^{k s} \mod p 
جسے دیکھتے ہوئے \ s  اس مساوات کے حل سے مل سکتا ہے:
\ m = b r + k s \mod p-1 

دستخط کی تصدیق کرنے کا طریقہ یہ ہے۔ پیغام کا حیش ڈائجسٹ \ m  نکالو۔ اب \ m  اور دستخط \ (r, s)  کو استعمال کرتے ہوئے "دستخط مساوات" کی دونوں اطراف برابر ہونے کی تسلی کر لو:
 g^m = B^r r^s \mod p 
دیکھو کہ اس میں برجیس کی عوامی کنجی \ B  استعمال ہوئی ہے۔

## حوالہ جات


* W. Diffie, "The first ten years of public key cryptography," Proceedings of the IEEE, May 1988.
* Taher ElGamal, "A public key cryptosystem and a signature scheme based on discrete logarithms," IEEE Transactions on Information theory, 1985.


زمرہ:طرزیات بینکاری
زمرہ:معمارئ نیٹ ورک
زمرہ:رمز نگاری
زمرہ:ویکی ڈیٹا سے مختلف مختصر وضاحت