לדלג לתוכן

0.5 קריפטו בסיסי הרצאה

**# קריפטוגרפיה: מושגי יסוד לפני תחילת הקורס

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


קידוד: base64

מה זה קידוד?

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

מהו base64?

שיטת Base64 הוא שיטת קידוד שמאפשרת לייצג נתונים בינאריים (כמו קובצי תמונה, טקסטים מוצפנים וכו') בתור טקסט קריא שמורכב מ-64 תווים בלבד: אותיות לטיניות (גדולות וקטנות), ספרות, ועוד שני תווים (+ ו-/).

דוגמה

נניח שיש לנו את הטקסט:

Hello, World!

בקידוד Base64, הוא ייראה כך:

SGVsbG8sIFdvcmxkIQ==

מתי משתמשים ב-base64?

  • העברת נתונים בפורמטים שלא תומכים בבינארי, כמו JSON או URL.

  • אחסון נתונים בבסיסי נתונים טקסטואליים.

בלינוקס כדי לקודד משהו לbase64 הריצו:

echo "Hello World!" | base64

בלינוקס כדי לפענח קידוד של base64 הריצו

echo "SGVsbG8sIFdvcmxkIQ==" | base64 -d


עירבול - hash

מהו עירבול (Hashing)?

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

דוגמאות לאלגוריתמים נפוצים:

  • MD5 – מיושן וחשוף להתקפות.

  • SHA-1 – חלש כיום, אך עדיין קיים במערכות ישנות.

  • SHA-256 – חלק ממשפחת SHA-2 ונחשב בטוח לשימוש.

  • bcrypt, scrypt, Argon2 – פונקציות עירבול חזקות במיוחד לשמירת סיסמאות.

דוגמה לשימוש ב-SHA-256

import hashlib

text = "password123"
hashed = hashlib.sha256(text.encode()).hexdigest()
print(hashed)

מתי משתמשים בעירבול?

  • שמירת סיסמאות בבסיסי נתונים.

  • ביצוע Checksum לקבצים.

  • חתימות דיגיטליות.

אחרי שאנחנו עושים hash למידע מסויים, המידע יהיה מוערבל ולא ברור, ולא תוכלו להחזיר אותו למצבו הקודם.


הצפנה סימטרית

מהי הצפנה סימטרית?

הצפנה שבה משתמשים באותו מפתח הן להצפנה והן לפענוח. יש צורך לשמור את המפתח בסוד.

אלגוריתמים נפוצים:

  • AES (Advanced Encryption Standard) – תקן הצפנה מודרני וחזק.

  • DES (Data Encryption Standard) – מיושן ונחשב לא בטוח.

  • RC4 – זרם הצפנה ששימש בעבר בפרוטוקולי רשת כמו WEP, אך אינו מומלץ כיום.

דוגמה להצפנה עם AES

from Crypto.Cipher import AES
import os

key = os.urandom(16)  # מפתח באורך 128 ביט
cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(b"Secret Message")

יתרונות:

  • מהירה ויעילה.

  • טובה להצפנת מידע רב.

חסרונות:

  • דורשת שיתוף מפתח באופן מאובטח.

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


הצפנה א-סימטרית

מהי הצפנה א-סימטרית?

הצפנה שמשתמשת בשני מפתחות – מפתח ציבורי להצפנה ומפתח פרטי לפענוח.

אלגוריתמים נפוצים:

  • RSA – אחת מהשיטות הנפוצות ביותר.

  • ECC (Elliptic Curve Cryptography) – שיטה מודרנית ויעילה יותר.

  • Diffie-Hellman – משמש בעיקר להחלפת מפתחות.

דוגמה להצפנה עם RSA (Python)

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

key = RSA.generate(2048)
cipher = PKCS1_OAEP.new(key)ג
ciphertext = cipher.encrypt(b"Hello")

יתרונות:

  • אין צורך לשתף מפתח סודי מראש.

  • משמש לאימות משתמשים וחתימות דיגיטליות.

חסרונות:

  • איטי יותר מהצפנה סימטרית.

  • דורש יותר משאבי חישוב.

איך לשבור Hash עם John the Ripper

הכלי John the Ripper הוא כלי פופולרי לשבירת סיסמאות (password cracking) שמסוגל לשבור hashes באמצעות מספר שיטות:

שלבים בסיסיים:

  1. התקנה (אם עדיין לא מותקן):

    sudo apt install john -y
    

  2. שמירת ה-Hash בקובץ
    יצירת קובץ (למשל hash.txt) עם ה-hash שרוצים לשבור, בפורמט מתאים (למשל user:hash או רק ה-hash עצמו).

  3. הפעלת John the Ripper

    john --format=FORMAT hash.txt
    

  4. הדגל --format – מציין את סוג ה-hash (למשל md5, sha256, bcrypt וכו').
  5. אפשר להוסיף מילון (--wordlist=FILE) או מצב brute-force (--incremental).

שיטות תקיפה נפוצות:

  • מילון (Dictionary Attack)
    john --wordlist=/path/to/passwords.txt hash.txt
    
  • Brute-Force
    john --incremental hash.txt
    
  • שימוש ב-Rules (שינויים אוטומטיים כמו הוספת מספרים למילים)
    john --wordlist=dict.txt --rules hash.txt
    

    הwordlist המוכר ביותר הוא "rockyou.txt", השתמשו בו כשאתם מנסים לשבור סיסמה עם Dictionary Attack:
    הורידו אותו באמצעות
    wget https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt
    

דוגמה: שבירת MD5

אם יש לך hash כמו 5f4dcc3b5aa765d61d8327deb882cf99 (הסיסמה היא password):
1. שמור אותו ב-hash.txt.
2. הפעל:

john --wordlist=rockyou.txt --format=raw-md5 hash.txt 

3. אם הצליח, התוצאה תוצג עם:
john --show hash.txt

הערות חשובות:

  • הכלי John תומך בעשרות פורמטים (למשל NTLM, LM, bcrypt).
  • ביצועים תלויים בכוח המעבד/כרטיס המסך.

מתקפת Rainbow Tables (טבלאות קשת)

בגלל שבdictionary attack אנחנו צריכים לחשב את הhash של כל הסיסמאות בwordlist שלנו (למשל בjohn the ripper)- לשבור hash בצורה הזו יקח הרבה זמן.
הRainbow Tables הן מבני נתונים המכילים חישובים מוכנים מראש של פונקציות hash עבור סיסמאות נפוצות. הטבלאות מאפשרות הפיכת hash לסיסמה המקורית בצורה מהירה.

איך זה עובד?
1. התוקף מייצר (או מוריד) טבלה המכילה זוגות של סיסמאות וה-hashes שלהן. (rainbow table)
2. כאשר הוא רוצה לשבור hash, הוא משווה את ה-hash לטבלה כדי למצוא את הסיסמה המקורית.
3. זה חוסך זמן חישוב רב, במיוחד עבור סיסמאות פשוטות.

דוגמה:
אם ה-hash של הסיסמה 123456 הוא e10adc3949ba59abbe56e057f20f883e, התוקף יכול לחפש בטבלה ולמצוא את ההתאמה במהירות.


מלח- Salt, הגנה מפני Rainbow Tables

מלח, או Salt הוא ערך אקראי המוסף לסיסמה לפני ה-hashing, כדי להפוך אותה לייחודית גם אם הסיסמה עצמה נפוצה.

איך Salt מונע התקפת Rainbow Tables?
1. מבטל שימוש בטבלאות מוכנות מראש – כי כל hash תלוי ב-Salt ייחודי, ולא רק בסיסמה.
2. מאלץ חישוב מחדש לכל סיסמה – גם אם שתי משתמשים בוחרים את אותה סיסמה, ה-hash יהיה שונה כי ה-Salt שונה.
3. מאט התקפות brute-force – התוקף לא יכול להשתמש ב-hashes ידועים מראש, אלא צריך לתקוף כל hash בנפרד.

דוגמה:
- ללא Salt:
hash("123456") = e10adc3949ba59abbe56e057f20f883e (נמצא בטבלת קשת).
- עם Salt:
hash("123456" + "a1B3fK") = 7f3d7a... (לא קיים בטבלה, כי ה-Salt אקראי).

יישום נכון של Salt:
- יש לייצר Salt אקראי וייחודי לכל משתמש.
- לאחסן את ה-Salt לצד ה-hash (לא סודי, אך חיוני לאימות).
- להשתמש בפונקציות hash איטיות (כמו bcrypt או Argon2) כדי להקשות עוד יותר על התקפות.

טיפ:
- קראו על john בצורה יותר מעמיקה וגם על הכלי hashcat המתחרה שלו.

עברו על הכלי cyberchef, הוא מאוד שימושי בעבודה עם תוכן מוצפן או מקודד.