שְׁאֵלָה:
האם יש אלגוריתם hash שיכול לזהות קבצים או מחרוזות דומות?
John
2013-10-31 21:33:23 UTC
view on stackexchange narkive permalink

האם יש אלגוריתם hash שיעזור לך לזהות קבצים או מחרוזות דומות? לדוגמה, החשיש עבור ABC ו- XBC יהיה דומה ולא שונה בתכלית כפי שקורה בדרך כלל. ידוע לי על מידה אחת של דמיון, עריכת מרחק ( http://en.wikipedia.org/wiki/Edit_distance). אך זה לא נותן לך חשיש לכל קלט להשוואה, אלא רק ציון בין שתי קלט.

עדכון

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

עדכון

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

כמה דוגמאות:

שתי הפעלות קשורות סרקתי ציונים 2684964 ו 2738772 בהפרש של 53808. הם בהחלט קשורים (גרסאות שונות של תוכניות שכתבתי) אך הערך של 53k קרוב למחצית מהפרש גודל הקובץ בסיביות: ~ 128k. אז זה לא מדד שימושי לקביעת הדמיון.

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

מסקנה:

כפי שטום ליק אמר, זו בעיה גלויה מסיבה.

הדבר הכי קרוב שיש לי בראש זה [hashing רגיש ליישוב] (https://en.wikipedia.org/wiki/Locality-sensitive_hashing). אבל מה אתה מנסה להשיג? אם התגים נותנים אינדיקציה כלשהי, אני לא חושב שחשיפה היא מה שאתה מחפש.
כן זה מה שחיפשתי. זה סקרנות. תהיתי אם קיים מה שהצבעת עלי. ותהיתי: האם סורקי וירוסים משתמשים בזה? אם לא, מדוע לא?
ראה גם: http://stackoverflow.com/questions/12952729/how-to-understand-locality-sensitive-hashing
אני חושב ש [Hashing Sensitive Hashing] (http://en.wikipedia.org/wiki/Locality_sensitive_hashing) ישרת את המטרה שלך כאן.
@John [* "Hashing Fuzzy, יכול להתאים לקלטים שיש להם הומולוגיות ..............." *] (http://www.forensicswiki.org/wiki/Context_Triggered_Piecewise_Hashing)
שְׁלוֹשָׁה תשובות:
Jor-el
2013-11-01 02:29:02 UTC
view on stackexchange narkive permalink

"אלגוריתמי התאמה משוערים" (עדיין טיוטת NIST) או "דמיון השומר על פונקציות hash" עשויים לעניין אותך. אלגוריתמים אלה תוכננו במיוחד לקביעת הדמיון בין שני אובייקטים דיגיטליים. חלק מהאלגוריתמים המוצעים עד כה (ושימושיים) הם (כרונולוגית): ssdeep, sdhash, mrsh-v2.

כדי לקבוע את הדמיון בין אובייקטים אלגוריתמים אלה דורשים נתח מינימלי. Mrsh-v2 מתפקד בצורה הטובה ביותר מבחינת גודל מינימלי הנדרש.

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

Tom Leek
2013-10-31 22:24:54 UTC
view on stackexchange narkive permalink

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

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

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

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

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

תודה טום. אנא עיין בעדכון שלי לשאלתי ואתה מוזמן להוסיף את הערותיך.
זה אף פעם לא פשוט כי למשתמשים טיפוסיים אין את המדגם העצום של תעשיית האנטי-וירוס כדי ללמוד על המורכבות של משחק העכבר והחתול.חבילת הקבצים תהיה המכשול הראשון.מחולל ערפול הוא אתגר נוסף.רוב החשיש ייכשל במארז.
ddyer
2013-10-31 22:11:19 UTC
view on stackexchange narkive permalink

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

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

  1. חישב כל רצף בן 4 מילים וספור את מספר המופעים של כל hash.
  2. מחק את כל הגיבובים המופיעים במילון גדול של נפוץ מסמכים.
  3. בין ה n החשיפות הנפוצות ביותר שנותרו.

כדי להשוות בין שני מסמכים לצורך דמיון, ספור כמה חשיפות פנימיות יש להם במשותף.



שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...