WireGuard זוכה לתשומת לב רבה לאחרונה, למעשה הוא הכוכב החדש בקרב VPNs. אבל האם הוא טוב כמו שהוא נראה? ברצוני לדון בכמה תצפיות ולסקור את היישום של WireGuard כדי להסביר מדוע זה לא פתרון להחליף IPsec או OpenVPN.
במאמר זה, ברצוני להפריך כמה מהמיתוסים [סביב WireGuard]. כן, זה ייקח הרבה זמן לקרוא, אז אם לא הכנת לעצמך כוס תה או קפה, אז זה הזמן לעשות את זה. אני גם רוצה להגיד תודה לפיטר על תיקון המחשבות הכאוטיות שלי.
אני לא שם לעצמי למטרה להכפיש את מפתחי WireGuard, להוריד מערכם של המאמצים או הרעיונות שלהם. המוצר שלהם עובד, אבל באופן אישי אני חושב שהוא מוצג בצורה שונה לחלוטין ממה שהוא באמת - הוא מוצג כתחליף ל-IPsec ו-OpenVPN, שלמעשה פשוט לא קיים עכשיו.
כהערה, אני רוצה להוסיף שהאחריות למיצוב כזה של WireGuard היא של התקשורת שדיברה על זה, ולא על הפרויקט עצמו או על יוצריו.
לא היו הרבה חדשות טובות על ליבת לינוקס לאחרונה. אז, סיפרו לנו על הפגיעויות המפלצתיות של המעבד, שסולקו על ידי תוכנה, ולינוס טורוואלדס דיבר על זה בגסות ומשעממת מדי, בשפה התועלתנית של המפתח. מתזמן או ערימת רשת ברמה אפסית הם גם נושאים לא מאוד ברורים למגזינים מבריקים. והנה מגיע WireGuard.
על הנייר, הכל נשמע נהדר: טכנולוגיה חדשה ומלהיבה.
אבל בואו נסתכל על זה קצת יותר מקרוב.
נייר WireGuard לבן
מאמר זה מבוסס על נכתב על ידי ג'ייסון דוננפלד. שם הוא מסביר את הרעיון, המטרה והיישום הטכני של [WireGuard] בליבת לינוקס.
המשפט הראשון אומר:
WireGuard […] שואפת להחליף הן את IPsec ברוב מקרי השימוש והן למרחב משתמש פופולרי אחר ו/או פתרונות מבוססי TLS כגון OpenVPN תוך כדי שמירה על בטוחה, ביצועים וקל יותר לשימוש [כלי].
כמובן, היתרון העיקרי של כל הטכנולוגיות החדשות הוא שלהם פַּשְׁטוּת [בהשוואה לקודמים]. אבל גם VPN צריך להיות יעיל ובטוח.
אז מה הלאה?
אם אתה אומר שזה לא מה שאתה צריך [מ-VPN], אז אתה יכול לסיים את הקריאה כאן. עם זאת, אציין כי משימות כאלה נקבעות עבור כל טכנולוגיית מנהור אחרת.
המעניין ביותר מבין הציטוט לעיל טמון במילים "ברוב המקרים", שכמובן זכו להתעלמות מהעיתונות. וכך, הגענו למקום בו הגענו בשל הכאוס שנוצר בעקבות ההתרשלות הזו - במאמר זה.

האם WireGuard יחליף את ה-VPN שלי [IPsec] מאתר לאתר?
לא. פשוט אין סיכוי שספקים גדולים כמו סיסקו, ג'וניפר ואחרים ירכשו את WireGuard עבור המוצרים שלהם. הם לא "קופצים על רכבות חולפות" בתנועה אלא אם כן יש צורך גדול לעשות זאת. מאוחר יותר, אעבור על כמה מהסיבות שבגללן הם כנראה לא יוכלו לקבל את מוצרי ה-WireGuard שלהם על הסיפון גם אם ירצו בכך.
האם WireGuard ייקח את RoadWarrior שלי מהמחשב הנייד שלי למרכז הנתונים?
לא. נכון לעכשיו, ל-WireGuard אין מספר עצום של תכונות חשובות מיושמות כדי שהוא יוכל לעשות דבר כזה. לדוגמה, הוא לא יכול להשתמש בכתובות IP דינמיות בצד שרת המנהרה, וזה לבדו שובר את כל התרחיש של שימוש כזה במוצר.
IPFire משמש לעתים קרובות עבור קישורי אינטרנט זולים, כגון חיבורי DSL או כבלים. זה הגיוני עבור עסקים קטנים או בינוניים שאינם זקוקים לסיבים מהירים. [הערה מהמתרגם: אל תשכח שמבחינת תקשורת, רוסיה וכמה מדינות חבר העמים נמצאות הרבה לפני אירופה וארה"ב, מכיוון שהתחלנו לבנות את הרשתות שלנו הרבה יותר מאוחר ועם הופעתן של רשתות Ethernet וסיבים אופטיים בתור סטנדרטי, היה לנו קל יותר לבנות מחדש. באותן מדינות של האיחוד האירופי או ארה"ב, גישה לפס רחב xDSL במהירות של 3-5 Mbps היא עדיין הנורמה הכללית, וחיבור סיבים אופטיים עולה כסף לא ריאלי בסטנדרטים שלנו. לכן, כותב המאמר מדבר על חיבור DSL או כבלים כנורמה, ולא בימי קדם.] עם זאת, ל-DSL, כבלים, LTE (ושיטות גישה אלחוטיות אחרות) יש כתובות IP דינמיות. כמובן, לפעמים הם לא משתנים לעתים קרובות, אבל הם משתנים.
יש תת-פרויקט שנקרא , שמוסיף דמון מרחב משתמש כדי להתגבר על החסרון הזה. בעיה ענקית בתרחיש המשתמש שתואר לעיל היא החמרה של כתובת IPv6 דינמית.
גם מנקודת המבט של המפיץ כל זה לא נראה טוב במיוחד. אחת ממטרות התכנון הייתה לשמור על הפרוטוקול פשוט ונקי.
למרבה הצער, כל זה למעשה הפך לפשוט ופרימיטיבי מדי, כך שעלינו להשתמש בתוכנה נוספת על מנת שכל העיצוב הזה יהיה בר-קיימא בשימוש אמיתי.
האם WireGuard כל כך קל לשימוש?
עדיין לא. אני לא אומר ש-WireGuard לעולם לא יהווה אלטרנטיבה טובה למנהור בין שתי נקודות, אבל בינתיים זו רק גרסת אלפא של המוצר שהוא אמור להיות.
אבל אז מה הוא בעצם עושה? האם IPsec באמת הרבה יותר קשה לתחזוקה?
ברור שלא. ספק ה-IPsec חשב על זה ושולח את המוצר שלו יחד עם ממשק, כמו עם IPFire.
כדי להגדיר מנהרת VPN דרך IPsec, תזדקק לחמש קבוצות של נתונים שתצטרך להזין בתצורה: כתובת IP ציבורית משלך, כתובת IP ציבורית של הצד המקבל, רשתות המשנה שברצונך לפרסם דרכן. חיבור VPN זה ומפתח משותף מראש. לפיכך, ה-VPN מוגדר תוך דקות ותואם לכל ספק.
למרבה הצער, ישנם כמה יוצאי דופן לסיפור הזה. כל מי שניסה לעבור דרך IPsec למכונת OpenBSD יודע על מה אני מדבר. יש עוד כמה דוגמאות כואבות, אבל למעשה, יש עוד הרבה הרבה שיטות טובות לשימוש ב-IPsec.
לגבי מורכבות הפרוטוקול
משתמש הקצה לא צריך לדאוג לגבי המורכבות של הפרוטוקול.
אם היינו חיים בעולם שבו זה היה דאגה אמיתית של המשתמש, אז כבר מזמן היינו נפטרים מ-SIP, H.323, FTP ועוד פרוטוקולים שנוצרו לפני יותר מעשר שנים ולא עובדים טוב עם NAT.
יש סיבות לכך ש-IPsec מורכב יותר מ-WireGuard: הוא עושה הרבה יותר דברים. לדוגמה, אימות משתמש באמצעות כניסה/סיסמה או כרטיס SIM עם EAP. יש לו יכולת מורחבת להוסיף חדש .
ול-WireGuard אין את זה.
וזה אומר ש-WireGuard יישבר בשלב מסוים, כי אחד הפרימיטיבים ההצפנה ייחלש או ייפגע לחלוטין. כותב התיעוד הטכני אומר כך:
ראוי לציין כי WireGuard הוא בעל דעה קריפטוגרפית. היא חסרה בכוונה את הגמישות של צפנים ופרוטוקולים. אם נמצאו חורים רציניים בפרימיטיבים הבסיסיים, יהיה צורך לעדכן את כל נקודות הקצה. כפי שניתן לראות מהזרם המתמשך של פגיעויות SLL/TLS, הגמישות של ההצפנה גדלה כעת מאוד.
המשפט האחרון נכון לחלוטין.
השגת הסכמה לגבי ההצפנה להשתמש הופכת פרוטוקולים כמו IKE ו-TLS יותר מורכב. מסובך מדי? כן, פגיעויות נפוצות למדי ב-TLS/SSL, ואין להן אלטרנטיבה.
על התעלמות מבעיות אמיתיות
תאר לעצמך שיש לך שרת VPN עם 200 לקוחות קרב איפשהו ברחבי העולם. זהו מקרה שימוש די סטנדרטי. אם עליך לשנות את ההצפנה, עליך להעביר את העדכון לכל העותקים של WireGuard במחשבים הניידים, הסמארטפונים וכדומה. בו זמנית לִמְסוֹר. זה ממש בלתי אפשרי. למנהלים המנסים לעשות זאת ייקח חודשים לפרוס את התצורות הנדרשות, וממש ייקח לחברה בינונית שנים לבצע אירוע כזה.
IPsec ו-OpenVPN מציעים תכונת משא ומתן צופן. לכן, במשך זמן מה שאחריו תפעילו את ההצפנה החדשה, גם הישנה תעבוד. זה יאפשר ללקוחות הנוכחיים לשדרג לגרסה החדשה. לאחר השקת העדכון, אתה פשוט מכבה את ההצפנה הפגיעה. וזה הכל! מוּכָן! את יפיפיה! לקוחות אפילו לא ישימו לב לזה.
זהו למעשה מקרה נפוץ מאוד עבור פריסות גדולות, ואפילו ל-OpenVPN יש קושי מסוים עם זה. תאימות לאחור חשובה, ולמרות שאתה משתמש בהצפנה חלשה יותר, עבור רבים זו לא סיבה לסגור עסק. כי זה ישתק את העבודה של מאות לקוחות בגלל חוסר היכולת לבצע את עבודתם.
צוות WireGuard הפך את הפרוטוקול שלהם לפשוט יותר, אך בלתי שמיש לחלוטין עבור אנשים שאין להם שליטה מתמדת על שני העמיתים במנהרה שלהם. מניסיוני, זה התרחיש הנפוץ ביותר.

קריפטוגרפיה!
אבל מהי ההצפנה החדשה והמעניינת הזו שבה משתמש WireGuard?
WireGuard משתמש ב-Curve25519 להחלפת מפתחות, ChaCha20 להצפנה וב-Poly1305 לאימות נתונים. זה עובד גם עם SipHash עבור מפתחות hash ו-BLAKE2 עבור hashing.
ChaCha20-Poly1305 הוא סטנדרטי עבור IPsec ו-OpenVPN (על TLS).
ברור שהפיתוח של דניאל ברנשטיין משמש לעתים קרובות מאוד. BLAKE2 הוא היורש של BLAKE, פיינליסט SHA-3 שלא זכה בשל הדמיון שלו ל-SHA-2. אם SHA-2 היה נשבר, היה סיכוי טוב שגם BLAKE ייפגע.
IPsec ו-OpenVPN לא צריכים SipHash בגלל העיצוב שלהם. אז הדבר היחיד שלא ניתן להשתמש בהם כרגע הוא BLAKE2, וזה רק עד שהוא תקנן. זה לא חיסרון גדול, מכיוון ש-VPN משתמשים ב-HMAC כדי ליצור שלמות, מה שנחשב לפתרון חזק גם בשילוב עם MD5.
אז הגעתי למסקנה שכמעט אותו סט של כלים הצפנה משמש בכל ה-VPN. לכן, WireGuard מאובטח לא יותר או פחות מכל מוצר עכשווי אחר בכל הנוגע להצפנה או לשלמות הנתונים המועברים.
אבל גם זה לא הדבר החשוב ביותר, שכדאי לשים אליו לב לפי התיעוד הרשמי של הפרויקט. אחרי הכל, העיקר הוא מהירות.
האם WireGuard מהיר יותר מפתרונות VPN אחרים?
בקיצור: לא, לא יותר מהר.
ChaCha20 הוא צופן זרמים שקל יותר ליישם בתוכנה. זה מצפין ביט אחד בכל פעם. פרוטוקולי חסימה כמו AES מצפינים בלוק 128 סיביות בכל פעם. נדרשים הרבה יותר טרנזיסטורים כדי ליישם תמיכת חומרה, ולכן מעבדים גדולים יותר מגיעים עם AES-NI, הרחבת ערכת הוראות שמבצעת חלק מהמשימות של תהליך ההצפנה כדי להאיץ אותו.
היה צפוי ש-AES-NI לעולם לא יכנס לסמארטפונים [אבל זה קרה - בערך. לְכָל.]. לשם כך, ה-ChaCha20 פותח כחלופה קלת משקל וחוסכת בסוללה. לכן, זה עשוי להיות חדשות עבורכם שלכל סמארטפון שאתם יכולים לקנות היום יש איזושהי האצת AES והוא פועל מהר יותר ועם צריכת חשמל נמוכה יותר עם ההצפנה הזו מאשר עם ChaCha20.
ברור, כמעט לכל מעבד שולחני/שרת שנקנה בשנתיים האחרונות יש AES-NI.
לכן, אני מצפה מ-AES לעלות על ChaCha20 בכל תרחיש בודד. התיעוד הרשמי של WireGuard מזכיר שעם AVX512 ChaCha20-Poly1305 יגרום לביצועים טובים יותר מ-AES-NI, אבל הרחבת ערכת הוראות זו תהיה זמינה רק במעבדים גדולים יותר, מה ששוב לא יעזור עם חומרה קטנה וניידת יותר, שתמיד תהיה מהירה יותר עם AES- לא
אני לא בטוח אם ניתן היה לצפות את זה במהלך הפיתוח של WireGuard, אבל היום העובדה שהוא ממוסמר להצפנה בלבד היא כבר חיסרון שאולי לא ישפיע בצורה טובה על פעולתו.
IPsec מאפשר לך לבחור באופן חופשי איזו הצפנה היא הטובה ביותר עבור המקרה שלך. וכמובן, זה הכרחי אם, למשל, אתה רוצה להעביר 10 גיגה-בייט או יותר של נתונים דרך חיבור VPN.
בעיות אינטגרציה בלינוקס
למרות ש-WireGuard בחרה בפרוטוקול הצפנה מודרני, זה כבר גורם להרבה בעיות. וכך, במקום להשתמש במה שנתמך על ידי הליבה מחוץ לקופסה, האינטגרציה של WireGuard התעכבה במשך שנים בגלל היעדר הפרימיטיבים הללו בלינוקס.
אני לא לגמרי בטוח מה המצב במערכות הפעלה אחרות, אבל זה כנראה לא שונה בהרבה מאשר בלינוקס.
איך נראית המציאות?
לרוע המזל, בכל פעם שלקוח מבקש ממני להגדיר עבורו חיבור VPN, אני נתקל בבעיה שהם משתמשים באישורים מיושנים ובהצפנה. 3DES בשילוב עם MD5 עדיין מקובל, וכך גם AES-256 ו-SHA1. ולמרות שהאחרון מעט טוב יותר, זה לא משהו שצריך להשתמש בו ב-2020.
להחלפת מפתחות תמיד נעשה שימוש ב-RSA - כלי איטי אך בטוח למדי.
לקוחותיי קשורים לרשויות המכס וארגונים ומוסדות ממשלתיים אחרים וכן לתאגידים גדולים ששמם ידוע בכל העולם. כולם משתמשים בטופס בקשה שנוצר לפני עשרות שנים, והיכולת להשתמש ב-SHA-512 פשוט מעולם לא נוספה. אני לא יכול להגיד שזה איכשהו משפיע בצורה ברורה על ההתקדמות הטכנולוגית, אבל ברור שזה מאט את התהליך הארגוני.
כואב לי לראות את זה מכיוון ש-IPsec תומכת בעקומות אליפטיות באופן ישיר מאז 2005. Curve25519 הוא גם חדש יותר וזמין לשימוש. יש גם אלטרנטיבות ל-AES כמו Camellia ו-ChaCha20, אבל ברור שלא כולן נתמכות על ידי ספקים גדולים כמו Cisco ואחרים.
ואנשים מנצלים את זה. יש הרבה ערכות של סיסקו, יש הרבה ערכות שנועדו לעבוד עם סיסקו. הם מובילי שוק בסגמנט זה ואינם מתעניינים בשום סוג של חדשנות.
כן, המצב [בגזרה הארגונית] נורא, אבל לא נראה שום שינויים בגלל WireGuard. ספקים כנראה לעולם לא יראו בעיות ביצועים עם הכלים וההצפנה שהם כבר משתמשים בהם, לא יראו שום בעיות עם IKEv2, ולכן הם לא מחפשים חלופות.
באופן כללי, האם אי פעם חשבת לנטוש את סיסקו?
אמות מידה
ועכשיו בואו נעבור למבחן המדדים מהתיעוד של WireGuard. למרות ש[תיעוד] זה אינו מאמר מדעי, עדיין ציפיתי מהמפתחים לנקוט בגישה מדעית יותר, או להשתמש בגישה מדעית כאסמכתא. כל אמות מידה הן חסרות תועלת אם לא ניתן לשחזר אותן, ועוד יותר חסרות תועלת כאשר הן מתקבלות במעבדה.
ב-Linux build של WireGuard, הוא מנצל את השימוש ב-GSO - Generic Segmentation Offloading. הודות לו, הלקוח יוצר חבילה ענקית של 64 קילובייט ומצפין / מפענח אותה במכה אחת. לפיכך, העלות של הפעלת ויישום פעולות קריפטוגרפיות מופחתת. אם אתה רוצה למקסם את התפוקה של חיבור ה-VPN שלך, זה רעיון טוב.
אבל, כרגיל, המציאות לא כל כך פשוטה. שליחת חבילה כה גדולה למתאם רשת מחייבת לחתוך אותה לחבילות קטנות רבות יותר. גודל השליחה הרגיל הוא 1500 בתים. כלומר, הענק שלנו של 64 קילובייט יחולק ל-45 מנות (1240 בתים של מידע ו-20 בייטים של כותרת ה-IP). לאחר מכן, לזמן מה, הם יחסמו לחלוטין את העבודה של מתאם הרשת, כי יש לשלוח אותם יחד ובבת אחת. כתוצאה מכך, זה יוביל לקפיצת עדיפות, ומנות כמו VoIP, למשל, יעמדו בתור.
לפיכך, התפוקה הגבוהה ש-WireGuard טוענת באומץ כה רבה מושגת במחיר של האטת הרשת של יישומים אחרים. וצוות WireGuard כבר זו המסקנה שלי.
אבל בואו נמשיך הלאה.
לפי המדדים בתיעוד הטכני, החיבור מציג תפוקה של 1011 Mbps.
מרשימים.
זה מרשים במיוחד בשל העובדה שהתפוקה התיאורטית המקסימלית של חיבור Gigabit Ethernet בודד היא 966 Mbps עם גודל מנות של 1500 בתים פחות 20 בתים לכותרת ה-IP, 8 בתים לכותרת UDP ו-16 בתים לכותרת של ה-WireGuard עצמו. יש עוד כותרת IP אחת בחבילה המובלעת ועוד אחת ב-TCP עבור 20 בתים. אז מאיפה הגיע רוחב הפס הנוסף הזה?
עם פריימים ענקיים והיתרונות של GSO שדיברנו עליהם למעלה, המקסימום התיאורטי לגודל מסגרת של 9000 בתים יהיה 1014 Mbps. בדרך כלל תפוקה כזו אינה ניתנת להשגה במציאות, כי היא קשורה לקשיים גדולים. לפיכך, אני יכול רק להניח שהבדיקה בוצעה באמצעות פריימים גדולים עוד יותר של 64 קילובייט עם מקסימום תיאורטי של 1023 Mbps, הנתמך רק על ידי חלק מתאמי רשת. אבל זה לחלוטין לא ישים בתנאים אמיתיים, או שניתן להשתמש בו רק בין שתי תחנות מחוברות ישירות, אך ורק בתוך ספסל הבדיקה.
אבל מכיוון שמנהרת ה-VPN מועברת בין שני מארחים באמצעות חיבור אינטרנט שאינו תומך במסגרות ג'מבו כלל, לא ניתן לקחת את התוצאה שהושגה על הספסל כמדד. זה פשוט הישג מעבדתי לא ריאלי שאי אפשר ולא ישים בתנאי לחימה אמיתיים.
אפילו יושב במרכז הנתונים, לא יכולתי להעביר פריימים גדולים מ-9000 בתים.
קריטריון התחולה בחיים האמיתיים מופר לחלוטין, וכפי שאני חושב, מחבר ה"מדידה" שבוצעה הכפיש את עצמו ברצינות מסיבות ברורות.

שביב אחרון של תקווה
באתר WireGuard מדברים הרבה על קונטיינרים ומתברר למה הוא מיועד באמת.
VPN פשוט ומהיר שלא דורש תצורה וניתן לפרוס ולהגדיר אותו עם כלי תזמור מסיביים כמו שיש לאמזון בענן שלהם. באופן ספציפי, אמזון משתמשת בתכונות החומרה העדכניות ביותר שהזכרתי קודם, כמו ה-AVX512. זה נעשה על מנת לזרז את העבודה ולא להיות קשור ל-x86 או כל ארכיטקטורה אחרת.
הם מייעלים את התפוקה והמנות הגדולות מ-9000 בתים - אלו יהיו מסגרות ענקיות מוקפסות עבור קונטיינרים לתקשורת זה עם זה, או לפעולות גיבוי, יצירת צילומי מצב או פריסת אותם קונטיינרים. אפילו כתובות IP דינמיות לא ישפיעו על פעולת WireGuard בשום צורה במקרה של התרחיש שתיארתי.
משוחק יפה. יישום מבריק ופרוטוקול דק מאוד, כמעט התייחסות.
אבל זה פשוט לא מתאים לעולם שמחוץ למרכז נתונים שאתה שולט בו לחלוטין. אם תיקח את הסיכון ותתחיל להשתמש ב-WireGuard, תצטרך לעשות פשרות תמידיות בתכנון והטמעה של פרוטוקול ההצפנה.
פלט
קל לי להסיק ש-WireGuard עדיין לא מוכן.
זה נתפס כפתרון קל ומהיר למספר בעיות עם פתרונות קיימים. לרוע המזל, למען הפתרונות הללו, הוא הקריב תכונות רבות שיהיו רלוונטיות עבור רוב המשתמשים. זו הסיבה שהוא לא יכול להחליף את IPsec או OpenVPN.
כדי ש-WireGuard יהפוך לתחרותי, הוא צריך להוסיף לפחות הגדרת כתובת IP ותצורת ניתוב ותצורת DNS. ברור, בשביל זה יש ערוצים מוצפנים.
האבטחה היא בראש סדר העדיפויות שלי, וכרגע אין לי סיבה להאמין ש-IKE או TLS נפגעים או מקולקלים איכשהו. הצפנה מודרנית נתמכת בשניהם, והם הוכחו בעשרות שנות פעילות. זה שמשהו חדש יותר לא אומר שהוא טוב יותר.
יכולת פעולה הדדית חשובה ביותר כאשר אתה מתקשר עם צדדים שלישיים שאינך שולט בתחנותיהם. IPsec הוא התקן דה פקטו ונתמך כמעט בכל מקום. והוא עובד. ולא משנה איך זה נראה, בתיאוריה, WireGuard בעתיד עשוי שלא להיות תואם אפילו עם גרסאות שונות של עצמו.
כל הגנה קריפטוגרפית נשברת במוקדם או במאוחר ובהתאם לכך יש להחליף או לעדכן.
להכחיש את כל העובדות הללו ולרצות באופן עיוור להשתמש ב-WireGuard כדי לחבר את האייפון שלך לתחנת העבודה הביתית שלך הוא רק כיתת אמן בהדבקת הראש שלך בחול.
מקור: www.habr.com
