رمزنگاري كليد عمومي بهروز تركلاداني ladani@eng.ui.ac.ir 1
اهداف آشنايي با مفاهيم و کاربردهاي رمزنگاري کليد عمومي مقايسه روشهاي رمزنگاري کليد عمومي با رمز نگاري متقارن بررسی يک نمونه از کاربرد کليد عمومی در روش توزيع کليدDH
فهرست مطالب مباني رمزنگاري کليد عمومي مقايسه رمزنگاري متقارن و رمزنگاري کليد عمومي كاربردهاي رمزنگاري کليد عمومي توابع يك طرفه معرفي چند الگوريتم کليد عمومي پيوست ها
مباني رمزنگاري کليد عمومي رمزنگاري کليد عمومي اساساً با انگيزه رسيدن به دو هدف طراحي شد: حل مساله توزيع کليد امضاي ديجيتال ديفي و هلمن اولين راه حل را در 1976 ارايه دادند.
رمزنگاري کليد عمومي کليد هاي رمزگذاری و رمزگشايي متفاوت اما مرتبط هستند. رسيدن به کليد رمزگشايي از کليد رمزگذاری از لحاظ محاسباتي ناممکن مي باشد. رمزگذاری امري همگاني ميباشد و اساساً نيازي به اشتراک گذاشتن اطلاعات محرمانه ندارد. رمز گشايي از طرف ديگر امري اختصاصي بوده و محرمانگي پيامها محفوظ ميماند.
رمزگذاری کليد عمومي براي رمز نگاري کليد عمومي گامهاي زير را برميداريم: هر کاربر يک زوج کليد رمزگذاری و رمز گشايي توليد ميکند. کاربران کليد رمزگذاری خود را به صورت عمومي اعلان ميکنند درحالي که کليد رمز گشايي مخفي ميباشد. همگان قادر به ارسال پيام رمز شده براي هر کاربر دلخواه با استفاده از کليد رمزگذاری (عمومي) او ميباشند. هر کاربر ميتواند با کمک کليد رمزگشايي (خصوصي) پيامهايي که با کليد رمزگذاری (عمومي) او رمز شده رمزگشايي کند.
رمزگذاری کليد عمومي
مقايسه رمزنگاري مرسوم و رمزنگاري کليد عمومي مقايسه رمزنگاري مرسوم و رمزنگاري کليد عمومي رمزنگاري مرسوم (کليد خصوصي) استفاده از يك كليد يکسان و مخفي براي رمزگذاري و رمزگشايي مشكل مديريت كليدها نياز به توافق بر روي كليد پيش از برقراري ارتباط براي ارتباط n نفر باهم به n(n-1)/2 كليد احتياج داريم عدم پشتيباني از امضاء الكترونيكي سريعتر از الگوريتمهاي رمزگذاری با كليد عمومي
مقايسه رمزنگاري مرسوم و رمزنگاري کليد عمومي مقايسه رمزنگاري مرسوم و رمزنگاري کليد عمومي رمزگذاری مرسوم (کليد متقارن) براي امن بودن بايد: كليد مخفي نگه داشته شود. رسيدن به پيام واضح از روي متن رمز شده از نظر محاسباتي نا ممکن باشد. اطلاع از الگوريتم و داشتن نمونههايي از پيغام رمز شده براي تعيين كليد كافي نباشد.
مقايسه رمزنگاري مرسوم و رمزنگاري کليد عمومي مقايسه رمزنگاري مرسوم و رمزنگاري کليد عمومي ملزومات امنيتي(رمزگذاری با كليد عمومي) تنها يكي از دو كليد بايد مخفي بماند رسيدن به پيام واضح از روي متن رمز شده حتي با داشتن کليد عمومي از نظر محاسباتي نا ممکن باشد. اطلاع از الگوريتم، داشتن يكي از كليدها و نيز دراختيار داشتن نمونه پيغامهای رمزشده براي تعيين كليد دوم كافي نباشد.
جايگزيني يا تكميل؟ از نظر كاربردي، رمزگذاری با كليد عمومي بيش از آنكه جايگزيني براي رمزگذاری مرسوم باشد, نقش مكمل آنرا براي حل مشکلات توزيع كليد بازي مي كند.
Misconceptions! دو تصور اشتباه درباره کليد عمومی رمزنگاری با کليد عمومی امن تر است! در هر دو روش رمزنگاری امنيت به طول کليد وابسته است. مسئله توزيع کليد در رمزنگاری با کليد عمومی برطرف شده است چگونه مطمئن شويم کليد عمومی لزوما متعلق به شخص ادعاکننده است؟! توزيع کليد عمومی آسانتر است، ولی بديهی نيست.
نمادها و قراردادها کليد عمومي: کليد رمزگذاری اين کليد را براي شخص a با KUa نشان ميدهيم. کليد خصوصي: کليد رمز گشايي اين کليد را براي شخص a باKRa نشان ميدهيم.
محرمانگي و احراز هويت به صورت همزمان رمزگذاری کليد عمومي: محرمانگي و احراز هويت به صورت همزمان
كاربردهاي رمزگذاری کليد عمومي دسته بندي كلي كاربردها رمزگذاری/ رمز گشايي : براي حفظ محرمانگي امضاء رقمي : براي حفظ اصالت پيام و معين نمودن فرستنده پيام (پيوند دادن پيام با امضاء کننده) توزيع كليد : براي توافق طرفين روي كليد نشست مخفي
کاربردهاي برخي الگوريتمهاي کليد عمومي توزيع كليد امضاء رقمي رمزگذاری/ رمز گشايي الگوريتم √ RSA × Diffie Hellman DSS
جايگاه عملي رمزگذاری کليد عمومي کليدهاي اين نوع از الگوريتمها بسيار طولاني تر از الگوريتمهاي مرسوم (کليد متقارن) ميباشند. الگوريتم RSA با پيمانه 1024 بيتي امنيتی در حد الگوريتمهای متقارن با کليدهای 80 بيتي دارد. سرعت الگوريتمهاي کليد عمومي از الگوريتمهاي رمزگذاری مرسوم پايين تر است. RSA تقريباً 1000 بار کند تر از رمزهاي کليد متقارن (با امنيت يکسان) ميباشد.
جايگاه عملي رمزگذاری کليد عمومي امروزه کاربرد اين الگوريتمها به حل مساله توزيع کليد و امضاي ديجيتال محدود ميشود. (مطابق اهداف و انگيزه هاي اوليه طراحي)
توابع يك طرفه تابع يک طرفه: تابع f(.) را يک طرفه گوييم اگر يافتن مقدار ورودي تابع از روي مقدار خروجي از لحاظ محاسباتي ناممکن باشد. يک تابع يک طرفه همانند ماشين چرخ گوشت عمل ميکند! از روي خروجي (گوشت چرخ شده ) نمي توان ورودي را بازسازي کرد.
دريچه اما در برخي کاربردها نياز داريم تا ورودي تابع يک طرفه را معين کنيم... وجود يک دريچه در تابع: اطلاعات اضافي که با دانستن آنها ميتوانيم تابع را به روشي کارا معکوس کنيم.
توابع يك طرفه دريچه دار مجموعه اي از توابع معكوس پذير fk(.) به طوريكه : محاسبه y= fk(x) با دانستن k و x آسان باشد محاسبه fk-1(y) x=با دانستن k و y آسان باشد محاسبه fk-1(y) x= با دانستن y و مخفي بودن k امكانپذير نباشد
توابع يك طرفه دريچه دار به عنوان يک ابزار توابع يك طرفه دريچه دار ابزارهاي مناسبي براي طراحي الگوريتمهاي رمزگذاری و امضاي ديجيتال ميباشند. در حقيقت ثابت ميشود وجود توابع يك طرفه دريچه دار شرط لازم و کافي براي وجود الگوريتمهاي رمزگذاری و امضاي ديجيتال امن ميباشد.
كليات الگوريتم رمز نگاري RSA توسط Adleman- Shamir- Rivestدر سال 1977 در MIT ارائه شد مشهورترين و پركاربردترين الگوريتم رمزگذاری كليد عمومي مبتني بر توان رساني پيمانه ايي استفاده از اعداد طبيعي خيلي بزرگ امنيت آن ناشي از دشوار بودن تجزيه اعداد بزرگ، که حاصلضرب دو عامل اول بزرگ هستند، می باشد. مستندات مربوط به آن تحت عنوان PKCS استاندارد شده است.
نمادگذاري RSA N : پيمانه محاسبات e: نماي رمزگذاری d: نماي رمزگشايي M: پيام ، عدد صحيح متعلق به تابع RSA: دريچه تابع همان d ميباشد. تابع معکوس:
مباني رياضي RSA مي خواهيم: Med mod N = M يك نتيجة فرعي از قضية اولر: اگر دو عدد اول p و q و دو عدد صحيح m و n داشته باشيم به نحوي كه n=p.q و 0< m < n ، داريم: mk.(n)+1 mod n = mk.(p-1)(q-1)+1 mod n = m mod n كه در آن k يك عدد صحيح دلخواه و (n) تعداد اعداد کوچکتر از n است که نسبت به n اول هستند ((n)=(p-1)(q-1)) . بنابر اين بايد داشته باشيم: e.d = k. (n) +1 يا به عبارت ديگر e.d = 1 (mod (n) ) بنابر اين بايد gcd((n), e) =1
RSA Key generation
RSA Encryption and Decryption
قراردادها و پرتکل RSA هم فرستنده و هم گيرنده مقدار N را ميدانند فرستنده مقدار e را ميداند کليد عمومی : (N , e) تنها گيرنده مقدار d را ميداند کليد خصوصی : (N, d) نيازمنديها: محاسبه Me و Cd آسان باشد محاسبه d با دانستن کليد عمومی غيرممكن باشد
RSA -مثال p = 17, q = 11, n = p*q= 187 (n) = 16*10 =160, pick e=7, d.e=1 mod (n) d = 23
روشهاي کارا براي محاسبه نما براي محاسبه ab (mod N) الگوريتمهاي متفاوتي ابداع شده است. فرض کنيد bkbk-1…b0 نمايش مبناي 2 عدد b باشد. بنابراين خواهيم داشت:
الگوريتم توان و ضرب بر اين مبنا ميتوان الگوريتم زير را طراحي نمود:
مثال عددي الگوريتم توان و ضرب نتيجه الگوريتم توان رساندن سريع پيمانه ايي براي ab mod n که مقادير a،b و n عبارتند از: a=7,b=560=(1000110000)2,n=561
حملات وارد بر RSA حمله آزمون جامع(Brute Force) حملات رياضي حمله زماني طول كليد با پيدايش هر نسل جديد از پردازنده ها افزايش مي يابد، ضمن اينكه قدرت پردازشي هكرها زياد مي شود! طول کليد معادل تعداد بيتهای پيمانه محاسبات(N) می باشد. حملات رياضي تجزيه پيمانه N محاسبه (N) براي N هاي بزرگ محاسبه d حمله زماني زمان اجراي عمليات رمزگذاری يا واگشايي رمز ميتواند اطلاعاتي را در مورد کليد افشاء کند.
حملات رياضي RSA مقاله Dan Boneh در دانشگاه Stanford (پيوست) : Twenty Years of Attacks on the RSA Cryptosystem 1999
راه حل براي حملات رياضي قبل از اعمال تابع RSA پيام را پيش پردازش مينماييم. الگوريتم OAEP: Optimal Asymmetric Encryption Padding (استاندارد PKCS#1 V.2) با کمک اعمال توابع درهم ساز ومقادير تصادفي پيام را پردازش ميکند. (پيوست 3)
راههاي مقابله با حمله زماني به RSA استفاده از توان رساندن با زمان ثابت محاسباتي. اضافه كردن تاخيرهاي تصادفي قرار دادن اعمال اضافی و گمراه کننده در بين محاسبات
الگوريتم Diffie Hellman براي تبادل کليد. امنيت برمفروضات DH بر روي مقادير p و توافق ميکنند. q يک عدد اول و يک مولد براي اين عدد ميباشد.
الگوريتم Diffie - Hellman α , q : عمومی Alice Bob مقدار تصادفي XA را انتخاب ميکند مقدار تصادفيXB را انتخاب ميکند کليد مشترک عبارت است از
حمله مرد ميانی مهاجم به عنوان کانال ارتباطي ميان طرفين عمل ميکند. حمله فعال محسوب ميشود الگوريتم Diffie-Hellman را تهديد می کند.
حمله مردي در ميانه Alice Kevin Bob YA YK’ YK YB Bob گمان ميکند کليد K2 را با Alice به اشتراک گذاشته است Alice گمان ميکند کليد K1 را با Bob به اشتراک گذاشته است
پيوست ها
پيوست 1 توابع يک طرفه
توابع يک طرفه تعريف: تابع f(.) را يک طرفه گوييم اگر: طول ورودي و خروجي يکسان باشد. f(.)در زمان چند جمله ايي قابل محاسبه باشد. f-1(.) در زمان چند جمله اي تصادفي قابل محاسبه نباشد. توجه: تابع f(.) لزوماً يک به يک نيست. مقدار y و w لزوماً يکسان نيست.
سختي معکوس پذيري… براي n هاي به اندازه کافي بزرگ ماشينM تابع f(.)را حد اکثر بر روي n-k از ورودي ها معکوس ميکند. براي هر ماشين تورينگ M براي هر ثابت طبيعي k احتمال بر روي فضاي زير محاسبه ميشود: انتخابهاي ماشين M انتخاب تصادفي w
پيوست 1 حملات رياضي RSA
Factoring Large integer Open Problem: Is breaking RSA as hard as factoring: Fact: Let N,e be an RSA public key. Given the private key d, one can efficiently factor the modulus N=pq, Conversely, given the factorization of N, one can efficiently recover d.
Low Private Exponent Fast decryption requires small d. Theorem(M. Wiener) Let N=pq with qp2q. Let dN0.25/3. Given N,e with ed=1 mod (N), Marvin can efficiently recover d. Solutions. Large e: using N,e , where e= e+t(N) for some large t . Usually, eN1.5 is sufficient. Using CRT to accelerate decryption. However, given N,e, there exists an attack to factor N in O(min(dp1/2, dq1/2)). Hence dp,dq cannot be too small.
Optimal Asymmetric Encryption Padding پيوست 3 Optimal Asymmetric Encryption Padding
OAEP s t r G 0k1 M H r :مقدار تصادفي M: پيام :0k1 يک رشته شامل k1 عدد صفر G و H : توابع در هم ساز در انتها دو رشته s و t به هم الحاق شده و به تابع RSA خورانده ميشوند. با دانستن s و t به راحتی عمليات معکوس ميشوند. r = H(s) + t M|| 0k1 = G(r) + s