בתשובה לגדי אלכסנדרוביץ', 30/12/04 7:29
הצפנה 272103
מה קרה בפעם הקודמת ששאלת?

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

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

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

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

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

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

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

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

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

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

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

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

השאלה היא האם ניתן ''לסבך הרבה'' באמצעות ''מעט מפתחות''. גם את שני המושגים הללו אני לא יודע להגדיר לך כמו שצריך. תזכור בכל מקרה שאני מדבר כאן על מה שקורה באופן פרקטי, לא תיאורטי. מבחינה תיאורטית זה לא ממש משנה אם אתה מוחק את סימני הזיהוי הבסיסיים מהקובץ שאתה מצפין (מכניס ''רעש'' בהתחלה, למשל, ככה שלא יוכלו לבדוק אם ההקדמה היא מה שמצפים לו), אבל מבחינה מעשית זה יכול לסבך די הרבה את הליך הבדיקה העיוורת.
הצפנה 272220
המשפט הראשון הוא מקרה פרטי של מה שהתכוונתי. מכיוון שכל מפתח (ולצורך העניין גם מספר + אלגוריתם נחשב מפתח) הוא מחרוזת סופית, הרי שכל קבוצה אינסופית של מפתחות אפשריים תהיה בת-מניה, וזה כלל לא משנה איך תסבך את המפתח. אם אני מבין נכון, הטענה שלך למעשה היא ש"סיבוך" המפתח ע"י הפיכת הסיפא שלו לבחירת אלגוריתם, יהיה יעיל יותר מאשר "סיבוך" ע"י בחירת מפתח דומה אך גדול יותר. אני כלל לא בטוח שאתה צודק. בכל מקרה, הטענה "לכאורה, המלאכה של מפצח ההצפנה היא עכשיו כפולה. לא מספיק לו להשתמש באלגוריתם הפיענוח עבור כל המפתחות האפשריים, הוא צריך גם לעשות את זה עבור כל אלגוריתם הצפנה אפשרי." אינה נכונה, מהטעמים שהראיתי.
הצפנה 272225
אני לא בטוח שהבנתי (או שאני מסוגל להבין) את הטעמים שהראית, אבל בכל מקרה שים לב: בדיקת מפתחות לא נעשית על קבוצה אינסופית, אלא רק על קבוצות סופיות (שהרי המפתחות מוגבלים בגודלם).

נראה לי שהשאלה מצטמצמת לשאלה הטכנית "האם בדיקה של עשרה מפתחות על ידי אותו אלגוריתם זהה בזמן שהיא לוקחת לבדיקה של מפתח אחד על ידי עשרה אלגוריתמים" ואין לי מושג מה התשובה לשאלה הזו (אני מנחש שאין תשובה חד משמעית, אבל זה משחק דווקא לטובתי)
הצפנה 272249
אתה מסוגל להבין (ולפי הפיסקה השניה כנראה שגם הבנת), הידע שלי בנושא לא גדול משלך. סופיות קבוצת המפתחות לא משנה לעניינו; אתה מציע לקחת מפתח ולהוסיף לו סיפא של בחירת אלגוריתם. אני טוען שהרווח מכך כנראה שלא יהיה גדול מהרווח שבהגדלה "רגילה" של המפתח.
הצפנה 272250
נתראה אחרי שאני אקח קריפטוגרפיה, או לפחות אלמד עצמאית את הנושא יותר ברצינות.
הצפנה 312134
משהו יכול להסביר לי דבר אחד קטן משץמשים ב SHA לMessage Digest אבל אם הMESSAGE מגיעה ל ?TRUDDY והוא רוצה לשנות מה
בעיה שישנה ואז יעשה את כל התהליך וישלח את MESSAGE עם שה
חדש
הצפנה 312148
טרם לקחתי את הקורס בקריפטוגרפיה, אז אני לא מסוגל לפענח את ההודעה שלך.

חזרה לעמוד הראשי המאמר המלא

מערכת האייל הקורא אינה אחראית לתוכן תגובות שנכתבו בידי קוראים