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

ארבעה תפקידים בחיבור אחד

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

יש עיצובים שמאחדים שני תפקידים לאחד. AES-GCM ו-ChaCha20-Poly1305 הם מבני הצפנה מאומתת, ולכן סודיות ושלמות מגיעות יחד; AES-CBC אינו כזה, וזקוק לקוד אימות הודעה נפרד עם מפתח משלו. לכן קריאה של הצעה כשק של מספרים בלתי תלויים קוראת לא נכון את אלה שתוכננו כזוגות.

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

למה שם של צופן כמעט לא אומר דבר

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

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

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

השכבה קובעת את אוצר המילים

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

LayerWhat is negotiated thereWhat it does not cover
IKE proposalAlgorithms and groups for the control channel that builds the tunnelThe algorithms protecting the data itself
ESP transformEncryption and integrity for tunneled packetsPeer identity, which authentication already settled
TLS handshakeAEAD and hash, plus separately negotiated groups and signaturesRouting, authorization or retention policy
WireGuardNothing; the algorithm set is fixed by the protocolEverything above the cryptographic arrangement

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

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

קראו את התוצאה שנקבעה ואז עצרו

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

openssl s_client -connect vpn.example.net:443 -brief
ipsec statusall
wg show

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

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

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

מאמרים קשורים