תרגיל מתמטי של הסתרת מזהה רץ
-
@קומפיונט יפה... אז קבל את האתגר הבא:
6893263, 9174376, 1455489, 3736602, 6017715, 8298828, 579941, 2861054, 5142167, 7423280, 9704393, 1985506, 4266619, 6547732, 8828845עריכה: זה בדיוק אותה דרגת קושי של קודם, רק השמטתי את המספרים לבחירה (לא חשבתי שתשתמש בהם לפתרון בהודעה הקודמת, זה היה רק לצרכי שחזור).
-
@dovid תצטרך למצוא פתרון חדש עבור האתר, כי אני הולך להרוס לך את הרעיון עקב הבקשה של @yossiz...
בהתאם לקריטריונים שנתנו לשאלה הכללית פה אני חושב שאין תשובה אפשרית.
אני אסביר בדיוק למה.להלן הקריטריונים שניתנו לשאלה:
א. תרגיל מתמטי פשוט
ב. פשוט וזול למעבד (בפשטות מצריך למנוע שימוש עם BigInt)
ג. עמיד בפני פורץ מיומן
ד. הפורץ יודע את התרגיל
ה. הפורץ יכול להזין 30 כניסות ברצףזהו, עד כאן זה כבר לא אפשרי. כל פורץ טירון יכול עם הנתונים הללו 'לכפות' את המפתח על ידי הרצה של כל המספרים האפשריים עד למציאת 'מספר הזהב' שפיענוח באמצעותו נותן רצף של מספרים עוקבים.
וזה התרגיל הפשוט שעשיתי, לאחר השערה של הטווח של ה-MAX ושל המספר המפענח. נתתי למחשב לעבוד, הוא מצא את הפתרון אחרי שניה.
-
@קומפיונט צודק.
כעת כתבתי קוד סריקה של כח גס מלא, שלא יודע שום נתון מלבד שזה רצף, והסריקה היא די מהירה. נתתי טווח למקסימום בין 0-1000000000, זה מוצא תוך שניות את המספר.
זה אומר שחייבים לטשטש את זה עוד במידה ולפורץ יהיה בטחון משמעותי בשיטה וברצף.עריכה: מספר מקסימלי אחר, גדול יותר, גורם למחשב שלי להשתגע בלי קצה חוט.
אבדוק את זה ואסכם האם הרעיון של כל פורץ טירון מתאים לפה. -
@צדיק-תמים אמר בתרגיל מתמטי של הסתרת מזהה רץ:
@dovid במה זה שונה מהסדרה הקודמת?
מספר מקסימלי שגורם למחשב של @קומפיונט לעבוד עד עכשיו...
פשוט רציתי לגלות אם יש לו שיטה או שהוא רק משתמש בכח גס. בינתיים הוא ענה על השאלה אבל עדיין לא ענה על האתגר הנוסף מסיבות מובנות. -
זה לא רק עניין של max גבוה.
כעת ניסיתי מספר אחר נמוך בהרבה (פי עשר פחות) רק פחות עגול. וגם אולי במפתח הרנדומלי היה פשוט גבוה בהרבה.
עבור הפלט הזה
699115, 1015520, 310513, 626918, 943323, 238316, 554721, 871126, 166119, 482524, 798929, 93922, 410327, 726732, 21725
הרצתי קוד C# מקבילי (AsParallel().ForAll) על 6 ליבות של I5 11500, ניצולת של 100% מעבדים טוטלית, זה לוקח מלא מלא זמן והוא לא בכיוון. -
@dovid אמר בתרגיל מתמטי של הסתרת מזהה רץ:
זה לא רק עניין של max גבוה.
כעת ניסיתי מספר אחר נמוך בהרבה (פי עשר פחות) רק פחות עגול. וגם אולי במפתח הרנדומלי היה פשוט גבוה בהרבה.
עבור הפלט הזה
699115, 1015520, 310513, 626918, 943323, 238316, 554721, 871126, 166119, 482524, 798929, 93922, 410327, 726732, 21725
הרצתי קוד C# מקבילי (AsParallel().ForAll) על 6 ליבות של I5 11500, ניצולת של 100% מעבדים טוטלית, זה לוקח מלא מלא זמן והוא לא בכיוון.אני הרצתי את הרצף ספרות האלו בתרד אחד והתשובה הגיעה אחרי חצי דקה.
זה הרצף:
551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565וזה המודולו:
1021412@dovid המחשב שלי ישן טוב בלילה, (גם אני, לכן לא ראיתי שדיברו על המחשב שלי ) אבל זה לא העניין. כי גם אם זה ייקח הרבה זמן יש לפורצים קצת יותר רעיונות משלך, יש להם מחשבים עם חומרה יקרה, ואם לא תשתמש במספרים גדולים מאוד אז במקרה הטוב ייקח להם ימים ובמקרה הגרוע חודשים (ואם זה ממש חשוב להם הם אפילו יכולים להפיץ וירוס שיריץ בדיקות עם רצפים שונים על אלפי מחשבים), אבל זה השקעה חד פעמית ובסוף הם יעלו על המפתח.
המסקנה שלי שאין עצה ואין תבונה נגד הפצחנים. הרעיון שלך הוא מצוין ל 95% מהמשתמשים, אבל בשביל ה 5% הנותרים שביניהם פצחנים מקצוענים לא יעזור שום דבר. רק שימוש עם הצפנות קונבנציונליות או התרגיל שנכתב עם מספרים גבוהים (לדעתי זה גם לא יעיל, כי לפי רצף הספרות המעורפלים אפשר להסיק כמה וכמה דברים שמאוד יעזרו לפיענוח).
-
@קומפיונט אמר בתרגיל מתמטי של הסתרת מזהה רץ:
@dovid המחשב שלי ישן טוב בלילה, (גם אני, לכן לא ראיתי שדיברו על המחשב שלי ) אבל זה לא העניין. כי גם אם זה ייקח הרבה זמן יש לפורצים קצת יותר רעיונות משלך, יש להם מחשבים עם חומרה יקרה, ואם לא תשתמש במספרים גדולים מאוד אז במקרה הטוב ייקח להם ימים ובמקרה הגרוע חודשים (ואם זה ממש חשוב להם הם אפילו יכולים להפיץ וירוס שיריץ בדיקות עם רצפים שונים על אלפי מחשבים), אבל זה השקעה חד פעמית ובסוף הם יעלו על המפתח.
תודה על השיעור המאלף.
-
-
@קומפיונט אמר בתרגיל מתמטי של הסתרת מזהה רץ:
אני הרצתי את הרצף ספרות האלו בתרד אחד והתשובה הגיעה אחרי חצי דקה.
@קומפיונט אמר בתרגיל: עיגול מספר לפי מערך מפתחות:
העניין הוא מאיזה מספר להתחיל את הסריקה. לא התחלתי מאפס, כמובן.
מאוד הוגן...
אולי תגיד בדיוק מה עשית במקום שאני אעשה לך שש מבחנים?
אתה נותן לי הרצאות יפות על אם זה טוב או לא, כשאתה לא חושף מאומה מהדרך הכ"כ קלה שתהיה לפורץ. אני כתבתי קוד שלא מצא במשך שעה מאומה, והוא היה יעיל וטוב, עד כמה שלא יודעים כלום על ההערפול מלבד השיטה והעובדה שיש רצף של 30. -
@dovid אמר בתרגיל מתמטי של הסתרת מזהה רץ:
אולי תגיד בדיוק מה עשית במקום שאני אעשה לך שש מבחנים?
כשאני מסתכל על רצף הספרות שעברו ערפול, לדוגמא:
699115, 1015520, 310513, 626918, 943323, 238316, 554721, 871126, 166119, 482524, 798929, 93922, 410327, 726732, 21725
אז אני יודע בוודאות שהמודולו הוא חייב להיות מספר יותר גבוה מהמספרים האלו, אז זה חייב להיות מעל 1015520 שזה המספר הכי גבוה ברשימה.
יש עוד כמה הנחות שאפשר להבין. לדוג' אם אני מהמר שהמספרים העוקבים (המקוריים) הם נמוכים יחסית, שזה מאוד הגיוני שזה ככה, אז מספר המפתח צריך להיות גדול מספיק כדי שהתוצאה של ההכפלה תעבור את מספר המודולו, כי אם זה לא יעבור אותו אז המספרים יראו עוקבים ולא מבולגנים.