ניפוץ והצפנה? מהו ערך גיבוב, מהי הצפנת hash, ומה היא פענוח hash?

Hash וההצפנה

יש אי הבנה נפוצה, שהאמין כי Hash וההצפנה הם דבר אחד. הם לא. האש הוא בלתי הפיך. קח את הדוגמה הבאה כדוגמה:

$ Echo-n Password123 | md5sum
42f749ade7f9e195bf475f37a44cafcb-

{
}

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

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

{SHA} uNF8eZRJ8jmr8WTjyocRJPVpe7w=
{SHA} lqdu/Zr6o2dgIER8Up1/7lcUtgw=
{SHA} qYUOwLMlDEuukA5HCT4LR1kQzco=
{SHA} mxzbcpywj7tts1w2w2kggjslwtg=
{
} { 1000L} {2saplauh9mz019}
ד"ר

הצפנה היא הפיכה, והאש אינו


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

 foobar           { }  }   u2fsdgtvkx19g+ J6TNHDNHDNHDgtnHDNHDNHDNHDNHDNHDNU 
foobarfoobar         |   U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog= 
foobarfoobarfoobar  |  U2FsdGVkX1 / EOnUt57TCW4Rh0EdNnWX + lDatuQv2xEXXeAeowW0XG / EXJUe9aSUz 

$ cat encrypted_passwords 
U2FsdGVkX19G+KtytNHdj6yH2AVvX26pEmtunS/PRnU= 
U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog= 
U2FsdGVkX1/EONUT57TCW4RH0EDNWX+lDatuQv2xEXXeAeowW0XG/EXJUe9aSUz 

$  עבור i in  `cat  encrypted_passwords`;   do   echo  $ i  |   openssl  enc  -base64  -d  -aes-256-cbc   - pass   pass: asdf;  echo;   צורך 
פובאר 
foobarfoobar 
foobarfoobarfoobar 

עכשיו אתה יכול לחשוב: אולי אתה צודק. עם זאת, חומרים קריטיים חייבים להיות זמינים למערכת, מה שאומר שהיא בעצם סיסמה מאסטר טקסט פשוט ממוקמת במקום כלשהו - בין אם כמפתח RSA או סיסמה או בקובץ, מוטבע במסד נתונים, קודד קשה ביישום או סיסמה במקום כלשהו בזיכרון. pfft, לא one ' s משתמש asdf כהמפתח למשתמשים their ' passwords

השתמש באותה מחרוזת של MD5:

 foobar     { }    { }   |   3858f62230ac3c915f300c664312c63f 
foobarfoobar         |   59faa421729e846dd800dce59943bfc0 
foobarfoobarfoobar | 1352aadab322d1a033c27964be0965db

סיסמת האש רחוק מלהיות מושלמת למעשה היא קצת גרועה, אבל היא גרועה יותר מאשר ההצפנה בגלל מה היא מנסה להשיג. משתמשים בוחרים בדרישות המינימליות המוחלטות בתדירות גבוהה יותר מאשר not ויכולים להשתמש בו גם במספר אתרים. "hacks" רבים הם למעשה רק התקפות שימוש חוזר באישורים. אם הפשרה הראשונית היא להשתמש בהצפנה, אז המאמץ היחיד שהתוקף צריך לעשות הוא למצוא את המפתח המפענח את כל הסיסמאות. עבור האש, הם צריכים לפחות לעבוד קשה כדי לפצח אותם. כאשר משמש עם אלגוריתמים מודרניים כמו sha512crypt, bcrypt, scrypt או argon2, חש עשוי לדרש מאמץ רב כדי לפצח אותו.



Marined

הוספת מלח היא הוספת מחרוזת לסיסמה לפני hash. המלח של כל חש צריך להיות ייחודי, בדרך כלל נבחר באופן אקראי, מכיוון שהנקודה היא להפוך את אותו טקסט פשוטי "מעבר" ערך שונה בכל פעם. זה מקשה על חייהם של crack cryptographic כי על מנת לבדוק את המילה "סיסמה" עבור כל אחד מ1,000 משתמשים, לכל משתמש יש SALT ייחודי, והם חייבים לעשות את זה 1,000 פעמים - למשתמש/מלח פעם אחת. משמעות הדבר גם היא שהם לא יכולים להשתמש ביעילות במילונים שנערך מראש או בטבלאות rainbow (בדרך כלל...) מכיוון שהם דורשים כל מלח מותאם אישית.

אתר האינטרנט לפעמים בלבש את זה ומשתמש במלח אוניברסלי עבור כל המשתמשים; זה מנוגד למטרה.

להלן הוא SHA1 המלוח:


 B353977827F67A4AE0318F3A947FAE1C13D990:b8d18ca 
|___________________________________________| 
                   hash               { }   {100025} { }   {100027} { } {100027} {100028} {100028} {100027} {100028} {100027} {100027} {100028} {100028} {100027} {100027} {100028} {100028} {100027} {100028} {100027} {100028} {100028} {100027} { 
                                        | 
            { }   { }     { }   { }   { }       { } Ming  {1001107}   { } {100112} {1001107} {1001107} {1001107} {1001107} 107 {1001107} {100111} 107} 108 {1001107} {100111 {1001108 {1001107} {1001107} 107} 107 {1001108 {1001108 {1001107 {1001107 {100111 107 {100111} 107} {1001107} {100111 {1001108 {1001108 { ערך המלח שלו הוא "b8d18ca" ומשתמש ב-API של SHA1 ($salt.$pass). משמעות הדבר היא שהאלגוריתם מקבל את הטקסט הפשוי של password, מייצר salt ומוסיף אותו לפני הטקסט הפשוי. כאשר אתר או אפליקציה מנסה לאמת את הסיסמה שלך בעתיד, הוא ישתמש בסיסמה הטקסט הפלוי שלך כקלט, יקרא את ערך salt ב-Hash המאוחסן, להוסיף אותה לפני הסיסמה שבוחרת, וישווה את הערך הח'ש שנוצר עם הערך הח'ש המאוחסן. Crack אם לא יודע שחלק מזה הוא מלח, ההאש ייצר את הטקסט הפשוט הבא: 

b8d18capassword

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

אם מיושם כראוי, המלח יהפוך את הסדק לצרוך זמן יותר. באמצעות מלח אקראי, אתה מאלץ את קרקר לבזבז זמן בניסיון לפצח את האש שאינו תואם את סלט. זה משמש בערך את המאמצים הנדרשים עבור device_speed/number_of_salts מכיוון שאנחנו צריכים ליצור מועמד לכל מלח. אם המלח הוא סטטי, אז הפעולה המתמטית זהה... speed_of_device/1. דרך נוספת לצפות זו:

 Our  GTX  980  cracks SHA1 ($salt.$pass)  3576.8  MH / s or   per    billion   
Our   hashlist   contains   1000   unique   salts 

3,500,000,000 / 1000 = 3,500,000  candidates per second

זה איטי בשלושה סדר גודל, הפסד של 99.9%. כאשר משתמשים במלח סטטי, זה נראה כזה:

 שלנו  GTX  980  cracks   SHA1 ($ salt.$ pass)   at   3576.8  MH / s   or  billion  candidates   per  second 
Our   hashlist   contains   1  unique   salt 
               
3,500,000,000 / 1 = 3,500,000,000  candidates per   second

אם זה אין משמעות, נא להמשיך לקרוא, יהיה לנו תרשים יפה מאוחר יותר...

plax
{}

ניתן להשתמש בקוד אחד. גיטים אחרים. לאחר מכן הופך אותו להגדרת בחלק מהחש עצמו. לדוגמה, md5crypt () משתמש ב-MD5, כולל salt, ומחזור בדיוק 1,000 פעמים. sha512crypt () משתמש ב-sha512, כולל מלח ומחזור מספר פעמים ניתנים להגדרת (ברירת מחדל הוא 5,000).

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


השפעת סוג האש על מהירות הפיצוח

בואו נסתכל על כמה דוגמאות להדגים את ההשפעה של בחירת אלגוריתם האש, בין אם מדובר במכירה, שימוש במספר איטרציות וכו'. נניח שהתוקף אסף חש של 1,000 משתמשים מאתר נגוע, הם רק רוצים לבצע התקפה פשוטה לבדוק את חש של כל סיסמה - 143 מיליון סיסמאות מועמדים.

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

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

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



זיהוי סוג hash

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

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

Kali Linux מסופקת חבילת תוכנה "hash-identifier" (זמינה כאן) כדי לסייע לזיהוי סוגי hash לא ידועים.



התנגשות

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

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

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


קודם:חומרת סיסמת hashcat-חומרה
הבא:מה זה האשקט? הצעד הראשון בפיצוח סיסמא [מדריך למתחילים]
  • Word/Excel/Pdf/PPT/RAR/zip/7z在线密码破解
  • offfice、PDF、压缩文件、WPS、在线密码恢复
  • hashcatonline.com在线密码破解版权所有2010-2025