מפתח (קריפטוגרפיה)

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

היסטוריה

ב-1917 הגה המהנדס גילברט סטנפורד ורנם (1890 - 1960) שיטה ממוכנת לביצוע הצפנה בטלגרף, בה המידע מוצפן תו אחר תו בעת שידורו, בניגוד לביצוע ההצפנה מראש ולאחר מכן שידור הטקסט המוצפן. בשיטה זו המפתח מוכן מראש על גבי סרט מנוקב ומחובר על ידי ממסר חשמלי אל מכונת הטלגרף. שיטת הצפנה זו ידועה בשם צופן ורנם, על שם ממציאה, והיוותה את הבסיס להצפנת פנקס חד-פעמי הבלתי-שבירה. אמנם מהיבט של תורת האינפורמציה פנקס חד-פעמי מהווה הצפנה מושלמת אך החסרון הגדול שלו שמפתח ההצפנה צריך להיות לפחות כאורך המידע המוצפן. עובדה זו היא הסיבה העיקרית מדוע פנקס חד-פעמי אינו בשימוש המוני כיום. כמות המידע המוצפן העובר ברשת האינטרנט כל כך גדולה שזה לא מעשי להגריל מפתחות חד-פעמיים עבור כל הודעה, תמונה או וידאו. מצד שני ידוע שהצפנה קלאסית אינה בטוחה לשימוש, בגלל שהיא פועלת על אותיות והמפתח מורכב מרצף קצר של אותיות, לכן בגלל שמספר האפשרויות מוגבל קל מאוד לנחשו במחשב בעזרת טכניקות סטטיסטיות כמו ניתוח תדירויות. 
קריפטוגרפיה מודרנית מתמקדת בפיתוח אלגוריתמים שפועלים על בלוקים גדולים של מידע (באורך 16 בתים ויותר) ומקבלים מפתח קצר (32 או 64 בתים), איתם אפשר להצפין עם מפתח אחד, במצב הפעלה מתאים, עשרות טרה-בית של מידע. בגלל שהמפתח ובלוק המידע גדולים לא ניתן יותר לפצח את הצופן באמצעות ניתוח ססטיסטי כי מספר האפשרויות אסטרונומי. מצד שני, ברגע שמשתמשים במפתח שהוא קצר משמעותית מהמידע המוצפן, ההצפנה אינה יכולה להיות מושלמת לעולם. תנאי מהותי בההוכחה המתמטית שפנקס חד-פעמי בלתי ניתן לשבירה הוא שהמפתח ששימש להצפנה כאורך המידע עצמו. לכן אלגוריתמים מודרניים אינם בטוחים מהיבט של תורת האינפורמציה אלא הביטחון שלהם חישובי, כלומר הוא נמדד במונחים של הזמן הדרוש למתחרה או מנתח הצופן לנחש את המפתח בשיטה הטובה ביותר הידועה. למרות זאת הם הרבה יותר פרקטיים מפנקס חד-פעמי והם מאוד יעילים. קיימים אלגוריתמים שלא ידוע על דרך קלה לשבירתם והערכה היא שהם אכן מהווים תמורה פסידו-אקראית חזקה.

שמירת מפתח הצפנה

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

הכנת מפתח הצפנה

הכנת מפתחות הצפנה היא משימה שמתבררת כלא קלה כלל. ראשית, מפתח הצפנה אמור להיות לא רק אקראי אלא בעיקר קשה לניחוש. כדי להבין את ההבדל, נניח שהמצפין רכש רשימה של אלף מספרים אקראיים ובכל פעם שהוא מעוניין להצפין מסר אחד הוא מטיל מטבעות ובוחר לעצמו אחד מהם באופן אקראי כמפתח הצפנה. אפילו אם המפתחות נוצרו באופן אקראי אמיתי, אם המתקיף יודע שהמפתח נבחר מתוך רשימה זו ויש לו גישה אליה, קל מאוד לנסות את כל המפתחות ברשימה כדי לדעת עם איזה מפתח השתמש המצפין ואין צורך לנחש את הטלת המטבעות כלל. לכן בחירת מפתח הצפנה צריכה להיות בהתפלגות אחידה מעל טווח כל המפתחות האפשריים. באופן אידיאלי רצוי שהמפתח יהיה אקראי אמיתי אך היות שבדרך כלל מפתחות הצפנה מוכנים על ידי מחשב, הם לא יכולים להיות אקראיים אמיתיים אלא רק "פסידו-אקראיים", כלומר אקראיים באופן כזה שליריב בעל עוצמת מחשוב מוגבלת לא תהיה היכולת לנחש אותם בזמן פולינומי. ראה טיוטה RFC 4086 של IETF. הכנת מפתחות הצפנה באופן בטוח מערבת שימוש במחוללים פסידו אקראיים קריפטוגרפיים אשר בין היתר מקבלים גרעין התחלתי אקראי (אמיתי) ממקורות שונים כמו ניצול אנטרופיה של מערכת ההפעלה וכדומה.