הצפנות וצופני שחלוף (Substution) קלים

ניב אסרף

משתמש צעיר
D I G I T A L
בס"ד

ראשית כל, אני מקווה שהנושא יעניין אתכם, הפוסט בא במטרה לשבור קצת שגרה מכל תכני הווב שיש לנו כאן :)

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

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

(התמונה נלקחה מוויקיפדיה)

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

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

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

כאשר האות כ' והאות ת' מחליפות זו את זו וכן הלאה.


צופן קיסר - צופן הזזה (Shift)
כאן הנושא מתחיל לקבל קצת אקשן :)
צופן קיסר נקרא על שמו של יוליוס קיסר, היות והוא הראשון שהשתמש בסוג צופן זה להעברת מסרים סודיים לשלטונות רומא כבר לפני 2500 שנה וגם הוא הינו סוג של שחלוף.
מפתח הצופן, הינו מספר (בשונה מאתב"ש ואלב"מ) שידוע רק לשולח המסר ולנמען ואיתו ניתן לפצח את ההצפנה, משמע- אם מפתח ההזזה שלנו הוא +1, אז לצורך ההצפנה מחליפים כל אות בא"ב באות שאחריה. וכפי שהבנתם, מספר המפתח מציין את שיעור ההזזה של הא"ב, שמוגבל דרך אגב ל-21 ואילו בא"ב הלטיני ל-25.

וכעת, נשלב קצת PHP על מנת ליצור צופן קיסר:
PHP:
function caesar($text,$key)
{
    $abc        =   array("א","ב","ג","ד","ה","ו","ז","ח","ט","י","כ","ל","מ","נ","ס","ע","פ","צ","ק","ר","ש","ת");
    $strlen     =   strlen($text);
    for($i = 0; $i < $strlen; $i++)
    {
        if(eregi("ם",$text[$i]))
        {
            $text[$i]       =   str_replace("ם","מ",$text[$i]);
        }
        if(eregi("ן",$text[$i]))
        {
            $text[$i]       =   str_replace("ן","נ",$text[$i]);
        }
        if(eregi("ץ",$text[$i]))
        {
            $text[$i]       =   str_replace("ץ","צ",$text[$i]);
        }
        if(eregi("ך",$text[$i]))
        {
            $text[$i]       =   str_replace("ך","כ",$text[$i]);
        }
        if(eregi("ף",$text[$i]))
        {
            $text[$i]       =   str_replace("ף","פ",$text[$i]);
        }
        if(in_array($text[$i],$abc))
        {
            $place   =   array_search($text[$i],$abc);
            $new     =   $place+$key;
            if($new > 22)
            {
                $new    =   $new-22;
            }
            echo str_replace($abc[$place],$abc[$new],$abc[$place])," ";
        }
        else {
            echo "חלק ממחרוזת הטקסט שלך אינה נמצאת במערך, ייתכן כי מדובר בטקסט שאינו בעברית";
        }
    }
    
}
כשהקריאה לפונקציה בצורה הבאה:
PHP:
caesar("פרוג",10);
סיכום פוסט:
לצפנים, בדרך כלל יש שני מרכיבים, אלגוריתם ומפתח. במקרה שלנו, בצופן קיסר, האלגוריתם הוא "הזזה" והמפתח מפרט בכמה יש להזיז. באתב"ש ובאלב"מ האלגוריתם זהה, "שחלוף" אך המפתח שונה (שחלף א' עם ל' לעומת א' עם ת')
במידה וזה מעניין אתכם, אפרט עוד על צופן יוליוס קיסר, כשר ניתן להמיר אותיות במספרים ולבטא את אלגוריתם ההזזה בנוסחה מתמטית, צפני ערבול ושיפורם לצופן קיסר.

מוזמנים להגיב, לתקן ולשאול שאלות :)
 

mat

------- Magicode -------
קטע קטן במקום לכתוב ככה.

PHP:
$new     =   $place+$key;
if($new > 22)
 {
     $new    =   $new-22;
 }

אני הייתי כותב ככה.

PHP:
 $new     =   ($place+$key) % 22 ;


וגם אני חושב שהקטע הזה לוקח הרבה משאבים.
PHP:
array_search($text[$i],$abc);


אני במקום זה הייתי מכין עם לולאה אובייקט kay -> value במשתנה static
שמכיל ככה.
PHP:
abcmap['א'] = 0 ;

וכו'
 

dem

משתמש מקצוען
D I G I T A L
מעניין! ובלי שום קשר לווב! חבל שאין פורום מפותח לתכנות :(
תמשיך בבקשה...
 

ניב אסרף

משתמש צעיר
D I G I T A L
חשבון מודולרי

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

כפי שציינו בפוסט הקודם, בעברית ישנם 21 מפתחות הזזה שונים (היות ויש לנו 22 אותיות א"ב, והאות הראשונה, במקרה שלנו, א', שווה לאפס) כלומר:
א-0
ב-1
ג-2
ד-3
ה-4
ו-5
ז-6
ח-7
ט-8
י-9
כ-10
ל-11
מ-12
נ-13
ס-14
ע-15
פ-16
צ-17
ק-18
ר-19
ש-20
ת-21

כפי ששמתם לב, לכל אות מספר יחודי המשמש כערך המספרי שלה, כאשר האות הראשונה, א' הינה 0 ואילו האות האחרונה ת' הינה 21.
ובכן, במידה ומפתח ההזזה שלנו הוא +5, עלינו להוסיף 5 לערך המספרי של האות מהמסר המקורי אותו אנו רוצים להצפין, לדוגמא:
האות ב' = 1 וכאשר מפתח ההזזה שלנו +5, האות ב' הופכת ל-6, כלומר לאות ז'.

נשאלת השאלה, מה קורה עם האות ת' (ת' = 21) במפתח הזזה (+5)? פשוט מאוד, האות ת' הופכת לאות ה, כאשר הביטוי המתמטי הוא:
21+5=4​
הביטוי המתמטי הזה נקרא חשבון מודולרי, כלומר, חשבון שבו התוצאה של החישוב לא תעלה על המקסימום.
אנחנו משתמשים בחשבון מודולרי מבלי לשים לב, ביום-יום כאשר אנו מחשבים את ימי השבוע ואת השעון, אתן לכם דוגמה:
השעה כרגע 7 בבוקר, בעוד 10 שעות השעה תהיה 5 בצהריים.
הביטוי המתמטי מהמשפט הינו:
7+10=5​
נראה לנו מוזר, לכן נרשום את הביטוי בצורה הבאה:

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

טוב! הרגת אותנו, דבר קצת על הצפנות
אוקיי, אז נחזור לנושא ההצפנה, בחישובי ההצפנה המודול שלנו (בהנחה שאנו מתעסקים בעברית) הינו 22 ונציג אותו כך:
כאשר:
P - הערך המספרי של האות (Plain text)
S - גודל ההזזה (Shift)
C - הערך המספרי לאחר ההצפנה (Cipher text)

עכשיו, הצפנתי עבורכם טקסט כאשר מפתח ההזזה הוא:
וזהו פלט ההצפנה מימין לשמאל:
21, 2, 10, 7

שימו לב, מפתח ההזזה שלנו 5, כפי שמוצג במודול.
בהצלחה :)

הפתרון:
א-5
ב-6
ג-7
ד-8
ה-9
ו-10
ז-11
ח-12
ט-13
י-14
כ-15
ל-16
מ-17
נ-18
ס-19
ע-20
פ-21
צ-0
ק-1
ר-2
ש-3
ת-4


עריכה: לצערי המודול לא מוצג בצורה נכונה בעורך טקסט, התבנית הנכונה היא: (סוגריים) ואז MOD22 ולאחר מכן = C
 

wmw

משתמש פעיל
D I G I T A L
רוצה ללמד הצפנה?
פעם בניתי מכונת אניגמה וירטואלית
 

אולי מעניין אותך גם...

הפרק היומי

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


תהילים פרק קמז

א הַלְלוּיָהּ כִּי טוֹב זַמְּרָה אֱלֹהֵינוּ כִּי נָעִים נָאוָה תְהִלָּה:ב בּוֹנֵה יְרוּשָׁלִַם יְהוָה נִדְחֵי יִשְׂרָאֵל יְכַנֵּס:ג הָרֹפֵא לִשְׁבוּרֵי לֵב וּמְחַבֵּשׁ לְעַצְּבוֹתָם:ד מוֹנֶה מִסְפָּר לַכּוֹכָבִים לְכֻלָּם שֵׁמוֹת יִקְרָא:ה גָּדוֹל אֲדוֹנֵינוּ וְרַב כֹּחַ לִתְבוּנָתוֹ אֵין מִסְפָּר:ו מְעוֹדֵד עֲנָוִים יְהוָה מַשְׁפִּיל רְשָׁעִים עֲדֵי אָרֶץ:ז עֱנוּ לַיהוָה בְּתוֹדָה זַמְּרוּ לֵאלֹהֵינוּ בְכִנּוֹר:ח הַמְכַסֶּה שָׁמַיִם בְּעָבִים הַמֵּכִין לָאָרֶץ מָטָר הַמַּצְמִיחַ הָרִים חָצִיר:ט נוֹתֵן לִבְהֵמָה לַחְמָהּ לִבְנֵי עֹרֵב אֲשֶׁר יִקְרָאוּ:י לֹא בִגְבוּרַת הַסּוּס יֶחְפָּץ לֹא בְשׁוֹקֵי הָאִישׁ יִרְצֶה:יא רוֹצֶה יְהוָה אֶת יְרֵאָיו אֶת הַמְיַחֲלִים לְחַסְדּוֹ:יב שַׁבְּחִי יְרוּשָׁלִַם אֶת יְהוָה הַלְלִי אֱלֹהַיִךְ צִיּוֹן:יג כִּי חִזַּק בְּרִיחֵי שְׁעָרָיִךְ בֵּרַךְ בָּנַיִךְ בְּקִרְבֵּךְ:יד הַשָּׂם גְּבוּלֵךְ שָׁלוֹם חֵלֶב חִטִּים יַשְׂבִּיעֵךְ:טו הַשֹּׁלֵחַ אִמְרָתוֹ אָרֶץ עַד מְהֵרָה יָרוּץ דְּבָרוֹ:טז הַנֹּתֵן שֶׁלֶג כַּצָּמֶר כְּפוֹר כָּאֵפֶר יְפַזֵּר:יז מַשְׁלִיךְ קַרְחוֹ כְפִתִּים לִפְנֵי קָרָתוֹ מִי יַעֲמֹד:יח יִשְׁלַח דְּבָרוֹ וְיַמְסֵם יַשֵּׁב רוּחוֹ יִזְּלוּ מָיִם:יט מַגִּיד (דברו) דְּבָרָיו לְיַעֲקֹב חֻקָּיו וּמִשְׁפָּטָיו לְיִשְׂרָאֵל:כ לֹא עָשָׂה כֵן לְכָל גּוֹי וּמִשְׁפָּטִים בַּל יְדָעוּם הַלְלוּיָהּ:
נקרא  16  פעמים

ספירת העומר

לוח מודעות

למעלה