דלג לתוכן הראשי

קריפטוגרפיית מפתח סימטרי

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

בסיום השיעור נסקור:

  • מהי קריפטוגרפיית מפתח סימטרי
  • דוגמאות קוד Python המדגימות שימוש בקריפטוגרפיית מפתח סימטרי
  • סקירת יישומים של קריפטוגרפיית מפתח סימטרי
  • יישומי קריפטוגרפיית מפתח סימטרי
  • האבטחה של קריפטוגרפיית מפתח סימטרי
  • איומים על אלגוריתמים אלה ממחשבים קלאסיים ומחשבים קוונטיים

מבוא לקריפטוגרפיית מפתח סימטרי

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

SKC כוללת:

  • פונקציית הצפנה הממירה מופע טקסט ברור נתון ל-ciphertext תוך שימוש במפתח סודי
  • פונקציית פענוח ההופכת את הפעולה על ידי המרת ה-ciphertext חזרה לטקסט ברור באמצעות אותו מפתח סודי

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

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

איור 1: הצפנת מפתח סימטרי של טקסט ברור נתון ל-ciphertext ופענוח חזרה לטקסט ברור באמצעות אותו מפתח.

איור 1. הצפנת מפתח סימטרי של טקסט ברור נתון ל-ciphertext ופענוח חזרה לטקסט ברור באמצעות אותו מפתח.

תכונות של מערכות קריפטוגרפיות מפתח סימטרי

מערכת קריפטוגרפית מפתח סימטרי צריכה להבטיח את התכונות הבאות לאבטחת הודעות — הן נתונים המאוחסנים בשקיפה והן תקשורת על פני ערוץ שידור כלשהו:

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

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

יישום מערכת קריפטוגרפית מפתח סימטרי מאובטחת כולל לכן שתי משימות עיקריות:

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

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

הדגמת הצפנת מפתח סימטרי ב-Python

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

# Added by doQumentation — required packages for this notebook
!pip install -q cryptography numpy secretpy
# Install the library if needed
# %pip install secretpy

# import the required crypto functions which will be demonstrated later
from secretpy import Caesar
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from functools import reduce
import numpy as np

# Set the plaintext we want to encrypt
plaintext = "this is a strict top secret message for intended recipients only"
print(f"\nGiven plaintext: {plaintext}")

נראה כיצד להצפין ולפענח אותו בשתי שיטות הצפנת מפתח סימטרי שונות:

  1. צופן ההזזה הקלאסי של קיסר
  2. פרוטוקול AES-256 התקן להצפנה מתקדמת המודרני

צופן ההזזה של קיסר:

הצפנת ההזזה של קיסר כוללת הגדרת

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

הוא ידוע כצופן החלפה חד-אלפביתי מכיוון שכל אות מהטקסט הברור מוחלפת באחרת ב-ciphertext.

בדוגמה זו נשתמש באותיות קטנות של האלפבית.

נתחיל בהגדרת הדברים.

# initialize the required python object for doing Caesar shift encryption
caesar_cipher = Caesar()

# Define the shift, ie the key
caesar_key = 5
print(f"Caesar shift secret key: {caesar_key}")

# Define the alphabet
alphabet = (
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
" ",
)
print(f"alphabet: {alphabet}")

נצפין את הטקסט הברור כדי לקבל ciphertext עבור צופן קיסר.

caeser_ciphertext = caesar_cipher.encrypt(plaintext, caesar_key, alphabet)
print(f"Encrypted caeser shift ciphertext: {caeser_ciphertext}")

נפענח את ה-ciphertext חזרה לטקסט הברור המקורי באמצעות אותו מפתח שהשתמשנו בו להצפנה.

caeser_plaintext = caesar_cipher.decrypt(caeser_ciphertext, caesar_key, alphabet)
print(f"Decrypted caeser shift plaintext: {caeser_plaintext}\n")

צופן תקן ההצפנה המתקדם (AES)

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

נתחיל ביצירת המפתח, במקרה זה, מחרוזת של 16 תווים אקראיים.

# lambda defines an inline function in this case that takes two values a,b with the resulting expression of a+b
# reduce uses a two-argument function(above), and applies this to all the entries in the list (random alphabet characters) cumulatively
aes_key = reduce(lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)])

print(f"AES secret key: {aes_key}")

AES תומך במספר מצבי פעולה ומחייב אותנו לציין איזה להשתמש.

אנו בוחרים במצב Cipher Block Chaining (CBC) המסופק על ידי מחלקה modes.CBC של ספריית cryptography. מצב CBC של AES משתמש באקראיות לאבטחה נוספת. זה מחייב ציון וקטור אתחול אקראי (IV), הנקרא גם nonce. נשתמש גם כאן במחרוזת אקראית, בדיוק כפי שעשינו עבור המפתח.

aes_initialization_vector = reduce(
lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)]
)
print(f"AES initialization vector: {aes_initialization_vector}")

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

לאחר מכן נצפין את הטקסט הברור לשליחה.

# The encryptor is setup using the key and CBC. In both cases we need to convert the string (utf-8) into bytes
sender_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_encryptor = sender_aes_cipher.encryptor()

# update can add text to encypt in chunks, and then finalize is needed to complete the encryption process
aes_ciphertext = (
aes_encryptor.update(bytes(plaintext, "utf-8")) + aes_encryptor.finalize()
)

# Note the output is a string of bytes
print(f"Encrypted AES ciphertext: {aes_ciphertext}")

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

# Similar setup of AES to what we did for encryption, but this time, for decryption
receiver_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_decryptor = receiver_aes_cipher.decryptor()

# Do the decryption
aes_plaintext_bytes = aes_decryptor.update(aes_ciphertext) + aes_decryptor.finalize()

# convert back to a character string (we assume utf-8)
aes_plaintext = aes_plaintext_bytes.decode("utf-8")

print(f"Decrypted AES plaintext: {aes_plaintext}")

יישומים של קריפטוגרפיית מפתח סימטרי

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

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

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

  3. אימות אותנטיות: בסביבות מסוימות, SKC מיושמת באמצעות טכניקות כגון קודי אימות הודעות (MACs) וקודי MAC עם גיבוב ממוין (HMAC) כדי לאמת את האותנטיות והשלמות של הודעות, ומבטיחה תקשורת עמידה בפני חבלה.

  4. הצפנת קבצים ודיסקים: תוכנות הצפנת דיסק מלא וכלי הצפנת קבצים משתמשים ב-SKC להגנה על נתונים רגישים המאוחסנים על דיסקים קשיחים או התקני אחסון ניידים.

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

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

עקרונות הצפנת מפתח סימטרי

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

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

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

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

כפי שנשקול בהמשך, IND-CPA מחייב בדרך כלל שימוש באקראיות כדי להבטיח שבכל פעם שטקסט ברור נתון מוצפן עם מפתח סודי נתון, ה-ciphertext המתקבל יהיה שונה בצורה בלתי צפויה עבור כל הצפנה.

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

צופני החלפה רב-אלפביתיים מאוחרים יותר כגון צופן Vigenère וצופן מכונת האניגמה הציגו גדלי מרחב מפתחות גדולים למעשה, מה שהפך אותם לעמידים בפני התקפות כוח גס, אך היו פגיעים לניתוח תדרים ולהתקפות KPT, בהתאמה. בדומה לצופני ההחלפה, צופני ערבוב קלאסיים, המסדרים מחדש אותיות בהודעה במקום להחליף אותן, נפגעים גם הם על ידי מגוון התקפות כגון אנאגרמינג, ניתוח סטטיסטי, כוח גס והתקפות KPT, בין היתר.

תיאורטית, צופן החלפה רב-אלפביתי המכונה one-time pad (OTP) ידוע כמאובטח קריפטוגרפית. OTP מציג מפתח סודי שצריך להיות (1) מורכב מאותיות או ביטים שנבחרו באקראי, (2) ארוך לפחות כמו הטקסט הברור המקורי, ו-(3) בשימוש פעם אחת בלבד. OTP אינו מעשי ליישומים בפועל מכיוון שאם ניתן היה לשתף בצורה מאובטחת את המפתח הסודי — הנדרש להיות ארוך כמו הטקסט הברור וניתן לשימוש פעם אחת בלבד — אז ניתן היה לשתף גם את הטקסט הברור המקורי. OTP במקום זאת ממחיש את השימוש באקראיות ביצירת ciphertexts מאובטחים.

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

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

טבלה 1: גדלי מרחב מפתחות של כמה צופנים סימטריים

צופןאורך מפתחגודל מרחב מפתחות
זזי קיסר1גודל-האלפבית
Vigenerenגודל-האלפביתn^\mathrm{n}
One-time-padאורך-הטקסט-הברורגודל-האלפביתאורךהטקסטהברור^\mathrm{אורך-הטקסט-הברור}
DES56256^\mathrm{56}
AES-1281282128^\mathrm{128}
AES-1921922192^\mathrm{192}
AES-2562562256^\mathrm{256}
ChaCha202562256^\mathrm{256}
שיטות הצפנת מפתח סימטרי מודרניות מתגברות במידה רבה על מגבלות הצופנים הקלאסיים. הן מייצרות ciphertext עמיד בפני קריפטאנליזה ומציגות גדלי מרחב מפתחות גדולים תוך שהן יעילות הרבה יותר מבחינה מעשית מOTP.

צופני בלוק: מחלקה אחת של צופנים מודרניים — כגון DES ו-AES — משיגה אבטחה על ידי שילוב עקרונות הבלבול והפיזור שהוצגו במקור על ידי קלוד שאנון. נדון במושגים אלה בהגדרה שבה שיטות הצפנה עובדות עם ייצוגים בינאריים של הודעות:

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

  • פיזור: פיזור הוא המאפיין לפיו היפוך ביט אחד בטקסט הברור צריך לשנות בערך חצי מהביטים ב-ciphertext ולהיפך. הפיזור מסתיר קשרים סטטיסטיים בין הטקסט הברור ל-ciphertext. לצופנים עם פיזור מספיק מתממש מה שנקרא קריטריון המפולת של הקריפטוגרפיה.

צופני בלוק מיישמים בלבול ופיזור באמצעות מבנים קריפטוגרפיים הידועים כרשתות החלפה-תמורה (SPNs) הפועלות על בלוקים דיסקרטיים של נתונים. SPN מקבל בלוק טקסט ברור ואת המפתח הסודי כקלט ומבצע מספר מוגדר של סיבובים של טרנספורמציות כדי לייצר בלוק ciphertext. כל סיבוב מורכב ממבנים מתמטיים מתחלפים הידועים כתיבות החלפה (S-boxes) ותיבות תמורה (P-boxes) או פעולות שוות ערך.

אלה מיישמות בהתאמה טרנספורמציות לא-לינאריות מורכבות ולינאריות על בלוקי הקלט, מה שמוביל לאפקטי מפולת ב-ciphertext.

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

לדוגמה, כרגע ההתקפות הטובות ביותר הידועות המהירות מחיפוש כוח גס נגד AES-256 יכולות לפרוץ עד 9 סיבובים מתוך 14 הסיבובים הכוללים בצופן המלא כאשר נמצאים במצב הפעולה הסטנדרטי המכונה Electronic Codebook (ECB). לכן, שולי האבטחה הנוכחיים של AES-256 הם 5 סיבובים.

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

בהתאם לכך, צופני זרם משלבים מפתח סודי ווקטור אתחול (IV) כדי לאתחל מחולל מספרים פסאודו-אקראיים (PRNG) לייצור מחרוזת מפתח של ביטים אקראיים המשולבים לאחר מכן עם הטקסט הברור הנתון לייצור ה-ciphertext. במובן זה, צופני זרם דומים לone-time pad (OTP) אך מציגים אורכי מפתח סודי קצרים יותר ומפתחות לשימוש חוזר, מה שהופך אותם למעשיים יותר. עם זאת, מאותה סיבה, הם אינם מבטיחים סודיות מושלמת, בשונה מ-OTP.

אבטחה סמנטית: נסכם תת-חלק זה בחזרה למושג האבטחה הסמנטית או אבטחת IND-CPA שהוצגו לעיל. הפעולות הבסיסיות שמיישמים צופני בלוק כגון S-box ו-P-box הן דטרמיניסטיות. משמעות הדבר היא שבמצבי הפעולה הסטנדרטיים כגון ECB, זוג טקסט ברור-מפתח נתון תמיד מניב אותו ciphertext, מצב שפגיע להתקפות plaintext מוכר.

כדי להשיג אבטחת IND-CPA, צופני בלוק צריכים לפעול במצב המשתמש באקראיות המוכנסת דרך וקטור אתחול (IV) פסאודו-אקראי עם הדרישה הנוספת שאף שתי פעולות הצפנה לא ישתמשו באותו זוג מפתח-IV. AES תומך במספר מצבי פעולה, כגון cipher block chaining (CBC), שהם IND-CPA מאובטחים. דרישה דומה חלה גם על צופני זרם שבהם אותו זוג מפתח-IV לא צריך לשמש לאתחול ה-PRNG יותר מפעם אחת אם IND-CPA הוא רצוי.

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

  1. תקן ההצפנה המתקדם: AES, שכבר הוצג לעיל, הוא כיום התקן de facto ל-SKC בשל מאפייני האבטחה, היעילות והביצועים שלו. AES מציג גדלי מפתח קבועים של 128, 192 ו-256 ביטים ומשתמש ברשת החלפה-תמורה (SPN) רב-סיבובית. AES ידוע כעמיד בפני מגוון רחב של התקפות קריפטאנליטיות. AES הוכרז כתקן עיבוד מידע פדרלי (FIPS) להצפנת מפתח סימטרי בארצות הברית בשנת 2001.

  2. תקן ההצפנה של הנתונים (DES) ו-Triple DES (3DES): DES היה צופן בלוק שהומצא במקור על ידי הורסט פייסטל ועמיתיו ב-IBM® בשנות ה-70 והשתמש ב-SPN עם מפתח קצר יחסית של 56 ביטים. DES אומץ כFIPS להצפנת מפתח סימטרי בארצות הברית עד סוף שנות ה-90 כאשר הוכח שניתן לפרוץ אותו באמצעות התקפות כוח גס עם חומרה ייעודית בשל גודל מרחב המפתחות הקטן שלו. לאחר מכן, 3DES הוצג כתחליף ומיישם את אלגוריתם DES שלוש פעמים עם מפתחות שונים, ומגדיל את אורך המפתח ל-168 ביטים. עם זאת, 3DES הוחלף בעיקר על ידי AES.

  3. Blowfish ו-Twofish: Blowfish ויורשו Twofish הם צופני בלוק שהוצעו על ידי הקריפטוגרף ברוס שניר בשנות ה-90. Blowfish ו-Twofish מאפשרים אורכי מפתח משתנים של עד 448 ביטים ו-256 ביטים בהתאמה, ומציעים גמישות מסוימת בפשרה בין אבטחה לביצועים. בשונה מ-AES, הם גם מציגים S-boxes תלויות מפתח. Twofish היה אחד המועמדים הסופיים בתחרות NIST לבחירת תקן ההצפנה המתקדם אך בסופו של דבר לא נבחר. שני האלגוריתמים נחשבים כיום מאובטחים.

  4. צופנים של Rivest (RC2, RC4, RC5 ו-RC6): משפחת האלגוריתמים של Rivest Cipher (RC) תוכננה על ידי רון ריבסט החל משנות ה-80. RC2 היה צופן בלוק מוקדם של 64 ביטים ואילו RC4 היה צופן זרם שהיה בשימוש נרחב בפרוטוקולי אבטחה הקשורים לתעבורת רשת בשל פשטותו ומהירותו. אף אחד מהם אינו נחשב כיום מאובטח. RC5 ו-RC6 הם צופני בלוק מבוססי SPN שתוכננו עם גודל בלוק, גודל מפתח ומספר סיבובים הניתנים להתאמה. כמו Twofish לעיל, RC6 היה מועמד סופי בתחרות NIST AES ונחשב מאובטח.

  5. Salsa20 ו-ChaCha20: Salsa20 ו-ChaCha20 מתייחסים למשפחה קשורה של צופני זרם שתוכנן על ידי הקריפטוגרף דניאל ברנשטיין בשנות ה-2000. Salsa20 הוא חלק מתיק פרופיל-1 של פרויקט אימות הקריפטוגרפי האירופי eSTREAM. ChaCha20, שינוי של Salsa20, תוכנן להגביר פיזור ביצועים. כרגע ChaCha20 נחשב מאובטח ומציע ביצועים טובים יותר בהיעדר האצת חומרת AES ייעודית. לכן, ChaCha20 מוצא שימוש בהגדרות מסוימות כגון פרוטוקולי רשת כמו QUIC ומכשירים ניידים עם מעבדי ARM.

יתרונות קריפטוגרפיית מפתח סימטרי

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

  1. מהירות ויעילות: אלגוריתמי מפתח סימטרי מתאימים יותר להצפנת נפחי נתונים גדולים או לשימוש בתרחישי תקשורת בזמן אמת מכיוון שהם בדרך כלל מהירים יותר ופחות צורכי משאבים מאשר עמיתיהם הא-סימטריים. אלגוריתמי SKC כגון AES גדלים בצורה לינארית עם גודל הטקסט הברור ואינם כוללים פעולות מתמטיות אינטנסיביות מבחינה אלגברית. עיין ב-Tomoiaga et al. לסקירה מפורטת של מאפייני הביצועים של AES.

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

  3. פשטות: פרוטוקולי הצפנה סימטריים לרוב קלים יותר ליישום ולהבנה בהשוואה לגישות מפתח א-סימטרי, מה שהופך אותם לאטרקטיביים עבור מפתחים ומשתמשים.

אתגרים ומגבלות של קריפטוגרפיית מפתח סימטרי

למרות היתרונות, לקריפטוגרפיית מפתח סימטרי יש גם כמה אתגרים ומגבלות:

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

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

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

מחשוב קוונטי והצפנת מפתח סימטרי: סיכונים ומיתיגציה

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

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

התקפות קריפטוגרפיות קוונטיות

ישנן שתי מחלקות נפרדות של איומים קוונטיים על אלגוריתמי קריפטוגרפיה מסורתיים:

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

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

אסטרטגיות מיתיגציית סיכון להתקפות קוונטיות

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

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

בדרך כלל, רמת האבטחה מבוטאת בביטים; כלומר, בכלל, צופן מציע אבטחה של N ביטים אם הוא דורש O(2N)\mathcal{O}(2^{N}) פעולות לפריצתו. במחשבים קלאסיים, בהנחה שצופן סימטרי מאובטח קריפטוגרפית אחרת, רמת האבטחה נרדפת בערך לאורך המפתח.

לדוגמה, רמת האבטחה של AES-128, המציג מפתח של 128 ביטים, נחשבת בדרך כלל כ-128 ביטים מכיוון שתדרוש בסדר גודל של 2128^{128} פעולות עבור תוקף המשתמש במחשב קלאסי לניסוי כל מפתחות ה-128 ביטים האפשריים במרחב המפתחות.

התקפות כוח גס ומיתיגציה

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

לדוגמה, אותה התקפת כוח גס על AES-128 עם אלגוריתם גרובר יכולה להיות מושגת עם 264^{64} פעולות בלבד. לכן רמת האבטחה של AES-128 מצטמצמת מ-128 ביטים ל-64 ביטים כאשר מתמודדים עם יריב קוונטי הרץ חיפוש גרובר. מכיוון שכוח החישוב גדל באופן מסורתי אקספוננציאלית עם הזמן, כרגע רמת אבטחה של 64 ביטים נחשבת לא מאובטחת, מה שאומר שברגע שיממשו מחשבים קוונטיים בעלי יכולת מספקת, AES-128 יצטרך להינטש.

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

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

לכן, כדי להבטיח אבטחה של 128 ביטים ביחס להתקפות כוח גס קוונטיות, ניתן פשוט להשתמש בצופנים כגון AES-256 או ChaCha20 המשתמשים במפתחות של 256 ביטים. הדבר נחשב מאובטח מכיוון שגם עם מחשבים קוונטיים, ביצוע 2128^{128} פעולות לפריצת צופנים אינו ישים בעתיד הנראה לעין.

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

התקפות קריפטאנליטיות ומיתיגציה

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

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

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

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

סיכום

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

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

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

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