180 likes | 472 Views
رمزنگاری نامتقارن کلید عمومی. تنها چند الگوریتم کلید عمومی هم امن و هم کاربردی هستند. الگوریتم زیر برای رمزنگاری و امضای دیجیتال مناسب هستند: RSA (1978) ElGamal (1985) Schnorr (1990) ECC (1985) DSA (1991) تنها برای امضای دیجیتال مفید است. تبادل کلید Diffie–Hellman. q : عددی اول
E N D
تنها چند الگوریتم کلید عمومی هم امن و هم کاربردی هستند. الگوریتم زیر برای رمزنگاری و امضای دیجیتال مناسب هستند: • RSA (1978) • ElGamal (1985) • Schnorr (1990) • ECC (1985) • DSA (1991) تنها برای امضای دیجیتال مفید است.
تبادل کلید Diffie–Hellman • q: عددی اول • α: عنصر اولیه ای از q • برای هر عدد صحیح Y، عدد منحصر بفرد x را پیدا می کنیم که : Y ≡ αX (mod q), 1 <= X <=q − 1 • بنابراین: X = log αYover GF(q), 1 <= Y <=q − 1 • محاسبه Y از Xنسبتاً ساده بوده اما محاسبه X ازYبسیار مشکل است
گام های Diffie–Hellman • مقادیر عمومی:q, α, Yi,Yj • مقادیر خصوصی: Xi,Xj • کلید محرمانه:Kij • کاربر i عدد صحیح تصادفی Xi را انتخاب می کند. • کاربر j عدد صحیح تصادفی Xj را انتخاب می کند. • کاربر i مقدار Xi را محرمانه نگه داشته، اما مقدار Yi≡ αXi (mod q) را برای کاربر j ارسال می کند. • کاربر j مقدار Xj را محرمانه نگه داشته، اما مقدار Yj≡ αXi (mod q) را برای کاربر i ارسال می کند. • هر دو کاربر i و j مقدار را به عنوان کلید مشترک محاسبه می کنند.. • کاربر i: Kij ≡ YjXi (mod q) ≡ (αXj )Xi (mod q) ≡ αXiXj (mod q) • کاربر j: Kij ≡ YiXj (mod q)≡ (αXi )Xj≡ αXiXj (mod q)
مثال • α = 2 و q = 11 • 2λ (1<=λ<=10): 21 22 23 24 25 26 27 28 29 210 • 2λ (mod 11) : 2 4 8 5 10 9 7 3 6 1 • کاربر i،Xi= 5 را انتخاب می کند. • کاربر iمقدار Yi≡ αXi (mod q)≡ 25 (mod 11) ≡ 10 را برای کاربر j ارسال می کند. • کاربر j،Xj= 7 را انتخاب می کند. • کاربر jمقدار Yj≡ αXj (mod q)≡ 27 (mod 11) ≡ 7 را برای کاربر i ارسال می کند. • در نهایت کاربر i و j کلید مشترک را حساب می کنند. • کاربر i: Kij≡ YjXi (mod q) ≡ 75 (mod 11) ≡ 10 • کاربر j: Kji≡ Yixj (mod q) ≡ 107(mod 11) ≡ 10
الگوریتم رمزنگاری RSA • p و q دو عدد اول بزرگ • n = pq • φ(n) = (p − 1)(q − 1) • e به نحوی که eوφ(n)نسبت به هم اول باشند • کلید رمزگشایی d به صورت زیر محاسبه می شود • d ≡ e−1 (mod φ(n)) • or ed ≡ 1 (mod φ(n))
کلید عمومی : • n(حاصل ضرب دو عدد اول p و q) • e(کلید رمز، نسبتاً اول با φ(n) = (p − 1)(q − 1) ) کلید خصوصی: • d(کلید رمزگشایی، d ≡ e−1 (mod φ(n)) ) رمزنگاری: • c ≡ me (mod n) رمزگشایی: • m ≡ cd (mod n) • cd≡ (me)d≡ med≡ m (mod n) در پیاده سازی سخت افزاری RSA 1000 مرتبه از DES کندتر است. امنیت RSA به سختی عمل فاکتور گیری اعداد بزرک بستگی دارد. در حال حاضر n باید عددی بزرگ تر از 129رقمی باشد.
مثال • p = 17 وq = 31 • n = pq = 17 × 31 = 527 • φ(n) = (p − 1)(q − 1) = 16 × 30 = 480 • اگر e=7 انتخاب شود: • d ≡ e−1(mod φ(n)) ≡ 7−1(mod 480) ≡ 343ed≡7 × 343 (mod 480) ≡2401 (mod 480) ≡ 1 بنابراین d=7 • کلید عمومی (e, n)برای رمزنگاری پیام m لازم است، اگر m=2 باشد: • c ≡ me (mod n) ≡ 27 (mod 527) ≡ 128 • کلید خصوصی d برای رمزگشایی لازم است: • m ≡ cd (mod n)≡ 128343(mod 527) ≡ 2
Example • پیام: ‘INFORMATION SECURITY’ • پیام بر اساس جدول انکد میشود • m = (0914061518130120091514001905032118092025) • p = 47 و q = 71انتخاب شده و بنابراین pq = 47 × 71 = 3337 • φ(n) = (p − 1)(q − 1) = 46 × 70 = 3220 • پیام اصلی به بلوک های چهار رقمی شکسته می شود • 0914 0615 1813 0120 0915 • 1400 1905 0321 1809 2025
بر اساس d ≡ e−1 (mod φ(n)) ≡ 79−1(mod 3220) ≡ 1019 مقدار e = 79 انتخاب میشود. • رمزنگاری بلوک اول: • c1 ≡ m1e(mod n)≡ 91479(mod 3337)≡ 3223
امضای RSA • اگر کاربر A بخواهد پیام را کلید خصوصی خود امضا کند: • ϕ(nA) ≡ lcm (pA− 1, qA− 1) • lcm به معنای کوچکترین مضرب مشترک است. • (eA, dA) به نحوی که eA•dA≡ 1 (mod ϕ(nA)) • dA:کلید خصوصی A • پیام امضا شده: • c ≡ mdA(mod nA) • nAو eAبه عنوان کلید عمومی منتشر میشود
مثال • p = 11 و q = 17 بنابراین: n=pq =187 • ϕ(n) = lcm (p − 1, q − 1)=lcm (10, 16) = 80 • eA= 27 انتخاب می شود به نحوی که : • eAdA≡1(mod (nA)) 27dA≡1(mod80) dA=3 • فرض کنید پیام اصلی m=55 • امضای پیام: • c ≡ mdA (mod 187)≡ 553(mod 187) ≡ 132 • ایجاد مجدد پیام: • m ≡ ceA (mod n) ≡ 13227 (mod 187) ≡ 55
مثال • اگر طول پیام خیلی بزرگ باشد، برای افزایش کارایی ابتدا خلاصه پیام را با کمک RSA محاسبه کرده و سپس پیام خلاصه شده را امضا میکنیم. • برای محاسبه خلاصه پیام = 75139m h ≡ H(m) (mod n) ≡ H(75139) (mod 187) ≡ 86a0aab5631e729b0730757b0770947307d9f597 ≡ 768587753333627872847426508024461003561962698135(mod 187) (decimal) ≡ 11 • کاربر A مقدار h را با کلید خصوصی dA امضا می کند: c ≡ hdA (mod n)≡113(mod 187) ≡ 22 • برای بررسی اعتبار امضا داریم: h ≡ ceA (mod n) ≡ 2227 (mod 187) ≡ 11