(השאלות והתשובות מעורבבות בכדי לאפשר קריאה קלה יותר)
שאלה:
כדי להתייחס לאסמבלי ב.net או כדי לעשות אותה משותפת (כלומר לשמור אותה ב GAC) צריך להיות לה מה שנקרא fully qualified name או strong name.
אותו שם כולל את ההירארכיה של ה namespace , שם האסמבלי, גרסא, תרבות, ומפתח ציבורי.
השיטה חדשה ב .net ובאה להבדיל בין האסמבליז.
עכשיו לפי מה שהבנתי את המפתח הציבורי אני יוצר דרך sn.exe בלי קשר לvisual studio ואז מוסיף את המפתח הציבורי שנוצר לי לקובץ assemblyinfo ועושה build, ואז אני יכול להתייחס לאסמבלי כ strong named assembly עם מבנה השם שציינתי קודם.
1. מה המשמעות של המפתח, ומה המשמעות של המחרוזת שהוא מייצר?
תשובה:
המפתח הוא אחד מהאלמנטים לזיהוי חד-משמעי של אסמבלי. הרעיון ב-Strong-named אסמבלי שזה ליצור וודאי ביחס לאסמבלי, ולא ליצור קשר רופף על בסיס שם הקובץ או מיקומו. המפתח המוזר בן 300 התווים בקובץ SNK יוצר מצב שאם פלוני בעתיד ירצה "להתחזות" לאסמבלי שלך הנושא יהיה בלתי-אפשרי.
למשל, אם אני פלוני-האקר שרוצה להחליף את האסמבלי שלך שמטפלת בסליקה און-ליין. האסמבלי שלי שמתחזה לאסמבלי שאתה פונה אליה תעשה את כל מה שאתה רגיל אליו ובנוסף תשלח לי מסר עם מספר כרטיס האשראי. המפתח SNK מגביל את האפשרויות שלי היות ולא מספיק שאני אחליף קבצים בספרייה\GAC או כל מקום אחר, אלא אצטרך גם לזייף קובץ מפתח יחסית מסובך.
כמובן שה-SNK הוא הגנה קלה בלבד כנגד האקר מיומן שיש לו מה להרוויח מלהתחזות לאסמבלי שאתה משתמש בה. זאת עקב נפיצות האלג' המקודד (קובץ ה-sn.exe הדיפולטי) והעובדה שבסופו של דבר האסמבלי שלך תכיל Hash של קובץ החתימה.
יש פתרונות מורכבים יותר לאבטחה, אך עקב מרבית נסיונות ההתחזות הנושא מספק הגנה מאוד טובה.
שאלה:
2. לפי הדוגמאות שראיתי באינטרנט הם רושמים ב assemblyinfo את הנתיב לקובץ snk שנוצר
א. האם מומלץ להכניס את קובץ ה snk לתוך ה solution?
תשובה: כן, מומלץ בחום להוסיף את ה-SNK לתוך ה-Solution ולתוך ה-Source Control הנבחר שלך.
שאלה: ב. ראיתי שבמאפיינים של הפרוייקט יש חוצץ signing או משהו בסגנון ושם גם אפשר לציין את קובץ ה snk ע"י GUI ולא ע"י קוד, מה ההבדל?
תשובה: Signing ב-VS2005 עושה פחות או יותר מה שעושה פירוט ידני בקובץ ה-AssemblyInfo.cs. הוא גם ייצר עבורך את המפתח מתוך Visual Studio.
לעומת זאת, בלי פירוט של Signing בצורה ש-Visual Studio 2005 מכיר ואוהב יהיו לך קשיים ליצור Manifest Signing שהיא הכרחית להתקנות דרך ClickOnce.
שאלה: ג. האם יש דרך אחרת מלבד זו שציינתי להזין את ה public key? לדוגמא לרשום ישירות את ה key במקום להפנות לקובץ?
תשובה:
לא ניתן לפרט את ה-SNK ישירות בתוך קובץ ה-AssemblyInfo.cs וטוב שכך. מדובר באיסור חמור של אבטחה להחזיק גם את האוצר שאתה מנסה להגן אליו וגם את המפתח לתיבת האוצר באותו מקום.
למען האמת, אצלנו במהלך פיתוח נהוג להפריד בין קבצי ה-SNK לבין ה-Solutionים עצמם. במהלך הפיתוח אנחנו משתמשים ב-AssemblyDelaySignAttribute על האסמבלי כדי לציין ש"אנחנו נהפוך אותך ל-Strong בסופו של דבר, כרגע תפסיק להציק לנו". את החיבור הסופי אפשר לעשות עם ה-AssemblyLinker שמגיע עם הפריימוורק כקובץ AL.exe ויש גם משימה של MSBuild בשם ALTask שמבצעות את זה עבורנו כאשר הקמפול הוא בתצורת Release.
שאלה: 3. האם יש דרך עוד דרכים להפוך אסמבלי ל strong named?
תשובה: Strong Name מתייחס לזיהוי וודאי ויחידני של אמסבלי שכולל את כל ארבעת הרכיבים של זיהוי שכזה. בלי אחד מהמרכיבים לא ניתן ליצור Strong Name. (גם אם פרטים לא מהותיים כגון שם האמסבלי ריקים, עדיין יש צורך לציין שהם ריקים)
קישור למקור: http://www.tapuz.co.il/tapuzforum/main/Viewmsg.asp...