ebooksgratis.com

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Digital Signature Algorithm – ויקיפדיה

Digital Signature Algorithm

מתוך ויקיפדיה, האנציקלופדיה החופשית

Digital Signature Algorithmראשי תיבות: DSA; בתרגום חופשי: אלגוריתם חתימה דיגיטאלית) הוא מנגנון חתימה דיגיטלית שהתקבל על ידי ממשלת ארצות הברית כתקן פדרלי (FIPS) בראשית שנת 1993. אלגוריתם DSA הוצע לראשונה על ידי המכון הלאומי לסטנדרט וטכנולוגיה של ארצות הברית (NIST) באוגוסט 1991, כחלק מסטנדרט חתימה דיגיטלית DSS הקרוי תקן FIPS 186. ב-1996 פורסם עדכון של האלגוריתם תחת התקן FIPS 186-1 והורחב אף יותר בשנת 2000 בתקן FIPS 186-2. מפעם לפעם מתפרסמים עדכונים (כמו טיוטה [1] FIPS 186-3), בהתאם להתפתחויות בתחום הקריפטוגרפיה. DSA רשום כפטנט בארצות הברית מאז 1991 על שמו של דויד קרביץ, עובד לשעבר של ה-NSA. הזכויות על הפטנט הוענקו לממשלת ארצות הברית. לאחר מכן פורסם האלגוריתם והופץ על ידי NIST באופן רשמי לשימוש חופשי. חתימת DSA היא ערך נפרד מן המסר. החותם מייצר בעזרת המפתח הפרטי מעין תווית המוצמדת למסר ומאפשרת את בדיקת אמינותו ושלמותו ומקורו באמצעות המפתח הפומבי השייך לו. בעוד שהמסר עצמו יכול להיות במצב קריא. על כן במובן זה אלגוריתם DSA אינו נחשב להצפנה.

תוכן עניינים

[עריכה] בעיית לוגריתם דיסקרטי

כמעט כל אלגוריתם מפתח-פומבי יכול לשמש כבסיס למנגנון חתימה דיגיטאלית. הרעיון של מנגנון החתימה של DSA מבוסס על בעיית לוגריתם דיסקרטי (בדידי). DSA הוא וריאציה של אל-גמאל ומשתמש בקושי שבפתרון בעיית חישוב לוגריתמים בחבורות, שהיא כידוע בעיה קשה מבחינה חישובית. למעשה האלגוריתם מסתמך על שתי בעיות קשורות של לוגריתם דיסקרטי. האחת לוגריתם דיסקרטי בחבורה כיפלית \ Z^{*}_ {p} מודולו \ p (ראשוני) גדול. והשנייה מציאת לוגריתמים בתת-חבורה ציקלית מסדר ראשוני \ q כלשהו (\ q < p). כמו כן מנגנון החתימה כולל, שימוש באלגוריתם ערבול (Hash) בטוח (ראה להלן).

[עריכה] חתימה ואימות

אלגוריתם חתימה דיגיטאלית DSA כולל מספר פרמטרים בסיסיים: מפתח פרטי x, מספר סודי חד-פעמי k (מתאים למסר יחיד) ופונקציית ערבול H בטוחה. אימות החתימה נעשה בעזרת אותם פרמטרים יחד עם מפתח ציבורי y המשויך באופן מתמטי למפתח הפרטי שאיתו בוצעה החתימה ואלגוריתם הערבול האמור. הפרמטרים מתוארים להלן:

\ p - מודולוס ראשוני גדול, המקיים \ 2^ {L-1} < p < 2^ {L}
(\ L מייצג את גודל \ p בסיביות, ראה להלן).
\ q - מחלק ראשוני של (\ p - 1), המקיים \ 2^ {N-1} < q < 2^ {N}
(\ N מייצג את גודל \ q בסיביות, ראה להלן).
\ g - יוצר של תת-חבורה מסדר \ q מודולו \ p, כאשר \ g < q.
להכנת \ g בוחרים שלם \ h הנמוך מ-\ q ומחשבים את \ g = h^ {(p-1)/q} \mbox{ mod } p, אם \ g = 1 חוזרים על התהליך עם \ h אחר.
\ x - מפתח פרטי וסודי. \ x צריך להיבחר באופן אקראי בטווח \left[1 ,q-1 \right].
\ y - מפתח ציבורי, אותו מחשבים כך: \ y = g^ {x} \mbox{ mod } p.
\ k - מספר ייחודי חד-פעמי עבור כל מסר. ייבחר באופן אקראי בטווח \left[1 ,q-1 \right].

הערה: במקום לחשב תחילה את \ p ולאחר מכן למצוא מחלק ראשוני \ q של \ (p - 1), אפשר קודם למצוא את \ q לאחר מכן לבדוק אם \ q \cdot i+1 = p הוא ראשוני, עבור \ i שלם כלשהו הגדול מ-1. למעשה התיעוד הרשמי של NIST מפרט אלגוריתם מומלץ למציאת \ p,q.

לצורך קביעת גודל הפרמטרים, התקן מפרט מבחר זוגות של N ו-L המבטאים גודל בסיביות של p ו-q בהתאמה. לדוגמה (L = 1024, N = 160) היא בחירה נמוכה ביותר, להשגת בטיחות מינימאלית. התקן המכסמלי הוא (L = 3072, N = 256).

[עריכה] חתימת DSA

החתימה על המסר \ m מורכבת מזוג המספרים \ s ו-\ r המחושבים כדלהלן:

  1. \ r = (g^ {k} \mbox{ mod } p) \mbox{ mod } q
  2. \ s = (k^ {-1} (\mbox{H}(m) + x \cdot r)) \mbox{ mod } q

\ \mbox{H}(m) הנו ערך האש שנוצר באמצעות פונקציית ערבול האמורה. \ k^{-1} הוא ההופכי של \ k מודולו \ q. יש לוודא כי \ s או \ r לא שווים 0, למרות שמקרה כזה נדיר אם תהליך החתימה בוצע נכון. כמו כן כחלק משלב הכנה מוקדם אפשר לחשב את \ r ללא תלות ב-\ m.

[עריכה] אימות ואישור החתימה

אישור החתימה נעשה על ידי כל גורם, בעזרת המפתח הפומבי של החותם. תחילה, על המידע הפומבי הנחוץ להיות נגיש לבודק החתימה באופן מזוהה ומוכח. למשל באמצעות סרטיפיקט חתום על ידי רשות אישרור (CA) מקובלת או במפגש אישי בין הצדדים. כמובן על הבודק לוודא כי הערכים \ r ו-\ s אינם שווים 0 או גדולים מ-\ q. תחילה מחשבים את הערכים הבאים:

  1. \ w = s^ {-1} \mbox{ mod } q (ההופכי של \ s מודולו \ q)
  2. \ u_1 = (\mbox{H}(m) \cdot w) \mbox{ mod } q
  3. \ u_2 = r \cdot w \mbox{ mod } q
  4. \ v = (g^ {u_1} \cdot y^ {u_2} \mbox{ mod } p) \mbox{ mod } q

אם ורק אם \ v = r, החתימה מתקבלת כאותנטית, אחרת מניחים כי המסר או החתימה שונו בידי גורם שלישי לא ידוע, אולי בניסיון לזייף את החתימה. או שחלה טעות במהלך החתימה או האימות.

[עריכה] הוכחה לנכונות האלגוריתם

אם \ r ו-\ s הופקו על ידי בעל החתימה הלגיטימי מהמסר \ m, אזי חייב להתקיים:

\ \mbox{H}(m) \equiv -ar+ks \ (\mbox{mod }q).

אם מכפילים את שני אגפי השקילות הזו ב-\ w, אחרי העברת אגפים מתקבל:

\ w \cdot \mbox{H}(m)+arw=k \ (\mbox{mod }q).

תוצאה זו למעשה שקולה ל:

\ u_1+au_2 \equiv k \ (\mbox{mod }q).

אם מעלים את \ g בחזקת שני אגפי השקילות האחרונה מתקבל:

\ (g^{u_1} \cdot y^{u_2} \mbox{ mod }p)\mbox{ mod }q = (g^k \mbox{ mod }p) \mbox{ mod }q.

על כן \ v=r.

[עריכה] דוגמה

הכנת מפתח חתימה: בוחרים את הראשוני \ q=787 וכן \ p=6 \cdot q+1=4723, היוצר \ g=3045. ובוחרים מפתח פרטי למשל \ x=211 ומחשבים את \ y=3045^{211} \mbox{ mod }4723=4583. המפתחות הפומביים יהיו: \ \{4723,787,3045,4583\} ואילו המפתח הפרטי יהיה: \ 211.

תהליך החתימה: בוחרים אלמנט אקראי, נניח \ k=293, מחשבים את \ r=(3045^{293} \mbox{ mod }4723) \mbox{ mod }787=519 וכן מחשבים את ההופכי \ k^{-1}=231 \ (\mbox{mod }787). אם המסר המיועד לחתימה הוא \ m=344865, אזי: \ s=231 \cdot (344865+211 \cdot 519)\mbox{ mod }787 = 565. החתימה על המסר היא אם כן \ s=565, \ r=519.

תהליך אימות החתימה: כדי לוודא כי החתימה על המסר \ m=344865 נכונה, המקבל משתמש במפתחות הפומביים תחילה כדי לחשב את: \ w=565^{-1} = 748 \ (\mbox{mod }787) ואז מחשב את: \ u_1=748 \cdot 344865 \mbox{ mod }787=95 וכן \ u_2=519 \cdot 748 \mbox{ mod }787=221 ולבסוף: \ v=(3045^{95} \cdot 4583^{221})\mbox{ mod }4723) \mbox{ mod }787 = 519 וכיוון ש- \ r=v החתימה מתקבלת.

זוהי כמובן רק דוגמה להמחשה במספרים קטנים מאוד. בישומים מעשיים כמובן רצוי שהגורמים הראשוניים יהיו גדולים דים כדי לסכל ניסיון לתקוף את אלגוריתם החתימה באמצעות אלגוריתם לחישוב לוגריתמים כמו תחשיב אינדקסים ואחרים.

[עריכה] אלגוריתם גיבוב

כחלק ממנגנון חתימה דיגיטאלית יש צורך באלגוריתם גיבוב בטוח על המסר לפני תהליך החתימה ואת החתימה לבצע על תוצאת האלגוריתם ולא על המסר ישירות. האלגוריתם מקבל את המסר m המיועד לחתימה ומפיק עבורו ערך ייחודי (H(m בגודל קבוע כאשר H(m) < m. הסיבות לכך הן, האחת עניין של יעילות, חתימה על מסר גדול באורך לא מוגדר, מסורבלת וקשה יותר מחתימה על ערך בגודל קבוע (קטן). שנית, עניין של בטיחות, חתימה על המסר עצמו ישירות, יוצרת פרצה בטיחותית מסוימת. בחתימה דיגיטאלית, לא די בכך שהערך יהיה ייחודי אלא שאלגוריתם הגיבוב יהיה בטוח, כדי להקטין כמעט לאפס את הסיכויים לכך שיימצא מסר אחר שעבורו האלגוריתם מפיק ערך זהה. לפי תקן DSA המקורי FIPS 186-1, אלגוריתם גיבוב בטוח SHA-1 מספק. לאחרונה התגלו טכניקות חדשות המטילות בספק את בטיחותו של SHA-1. למעשה תקן FIPS 186 העדכני מגדיר דרישה לפונקציית גיבוב בטוחה לפי תקן SHS, לפונקציית ערבול המכונה FIPS 180-2.

[עריכה] ראו גם

חתימה דיגיטלית

אל-גמאל (חתימה דיגיטלית)

[עריכה] מקורות


[עריכה] הערות שוליים

  1. ^ http://csrc.nist.gov/publications/drafts/fips_186-3/Draft-FIPS-186-3%20_March2006.pdf


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -