ערכתי לאחרונה בתאריך 02.10.03 בשעה 20:01 בברכה, dryice
ראשית לא נצפין אות אות אלא נצפין קבוצת אותיות, נשתמש
בצופן בלוקים. צופן בלוקים (שAES שייך למשפחה זאת) לוקח
בלוק של מידע, למשל 128 ביט ומצפין אותו בעזרת מפתח סימטרי
סודי, מרגע שאנו מבצעים את פעולת ההצפנה הבסיסית על בלוק גדול,
הרבה יותר קשה לבדוק שכיחויות, שכן רובם ככולם של הבלוקים יופיעו
כל אחד רק פעם אחת. עם יש בלוק של 128 ביט, אז יש 128^2 תכנים
שונים שיכולים להיות בבלוק הזה, משום שאנו שולחים הודעות הרבה
יותר קצרות לא סביר שיהיו הרבה חזרות.אבל בכל זאת ההודעות שלנו מגיעות ממקור שיש בו הרבה חזרות
(למשל שפה טבעית) אז יתכנו כמות מוגבלת של בלוקים שיחזרו על
עצמם שוב ושוב, על כן אנו משכללים את צופן הבלוקים בעזרת מודי
פעולה, בעיקר בעזרת מוד פעולה ספציפי הנקרא CBC בו אנו נותנים
להצפנה של הבלוק הקודם להשפיע על ההצפנה של הבלוק הבא.
לפני שאנו מצפינים בלוק מסוים אנו עושים לו XOR אם תוצאת ההצפנה
של הבלוק הקודם ואת זה אנו מכניסים לצופן הבלוקים, כך ההצפנה
של כל בלוק תלויה למעשה בכל הבלוקים הקודמים. וזה דופק כל סיכוי
למצוא איזה שהוא בלוק מוצפן נפוץ יותר, כל בלוק מוצפן יופיע
בדיוק פעם אחת.
צופן AES הוא התקן הנוכחי לצופן בלוקים, יש עוד כמה צפני בלוקים
טובים(יש שיאמרו טובים יותר) אבל לעניינו AES צופן בטוח, ולמרות
שהצליחו להצביע על כמה חולשות אצלו, אף אחד(למעט אוליי הNSA)
לא יודע היום לפצח AES.
AES- Advance Encryption Standard או בשמו המקורי(לפני שהתקבל
כתקן) Rijndael.
לריינדל יכולים להיות מפתחות של 128 196 או 256 ביטים,
מדובר באלגוריתם איטרטיבי בו כל שלב מתבצע על תוצאת השלב הקודם,
לשלב הראשון נכנס הכתב הגלוי, ומהשלב האחרון יוצא כתב הסתר,
ישנו אלגוריתם של Key Scheduling שדואג להביא מפתח של 128 ביט
לכל שלב מתוך המפתח המקורי. אבל הוא לא ממש חשוב(יחסית) ונדלג
עליו.
בכל שלב מבוצעים הפעולות הבאות:
א. Byte Substitution, צופן החלפה פשוט(ידוע) על הבתים,כל בית
בנפרד.
ב. shift row
ג. Mix Column (פרט לשלב האחרון)
ד. Key Mixing
אפשר לסדר בלוק של 128 ביט בתוך מטריצה 4*4 של בתים בודדים(8 ביט)
פעולת shift rows עובדת על השורות במטריצה ומזיזה את השורה הi
i מקומות שמאלה בצורה ציקלית. כאשר i מ0 עד 3.
כלומר בשורה השנייה מזיזים צעד אחד שמאלה. כל הבתים בשורה זזים
שמאלה למעט השמאלי ביותר שקופץ להתחלה.
פעולת Mix Columns עובדת על כל עמודה בנפרד, וזאת גם פעולה
לינארית בה כל בית בעמודה מקבל ערך חדש שהוא פונציה לינארית
של כל העמודה.
Key Mixing זה XOR אם התת מפתח של אותו השלב, וזה הקטע היחיד
שבו המפתח נכנס לפעולה.
אני וודאי חיפפתי פה כמה נקודות קלות, אבל בגדול זה הרעיון,
ואם תריץ חיפוש בגוגל אני בטוח שתמצא הרבה חומר.