יצירת מספרים יענו-אקראים. - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

יצירת מספרים יענו-אקראים.


Nahum2

Recommended Posts

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

אז האם מה שאתה אומר זה שזה בלתי אפשרי שאצליח לפתח לבד אלגוריתם שיפיק מספרים אקראיים מספקים בשביל הצפנה בסיסית יחסית?

אני אפילו לא אמור לעשות DES או משהו כזה.כמה אלגוריתמים בסיסים עם כל מני התמרות הכפלות סיבובים וערבולים למיניהם יספיקו.

קישור לתוכן
שתף באתרים אחרים

שוב - תחליט אם זה צריך להיות רציני או לא.

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

ב) לא, אלגוריתם בסיסי שהמצאת בעצמך עם כל מני "הכפלות התמרות וסיבובים" לא יספיק אם אתה מתכוון לעשות הצפנה אפילו קצת רצינית, כל קריפטואנליסט מתחיל יפרוץ את זה, או סתם חובב מוכשר. ההצפנה (אם אפשר לקרוא לזה ככה) של DVD-ים נפרצה ע"י בחור בן 16. הצפנות או PRNG אחרים נפרצים מדי פעם. אני בטוח שניסית פעם הצפנה בעזרת XOR וחשבת שזה טוב. זו הצפנה קלה מאוד לפריצה. כנ"ל עם PRNG - תבחר פולינום או פרמטרים לא מתאימים, וקיבלת PRNG דפוק לגמרי. בחרת אלגוריתם פשוט כמו LFSR או LCG וקיבלת אחד שלא בטוח קריפטוגרפית.

ג) 3DES דווקא לא מסובך למימוש, ויכול להיות שתוכל להסביר תיאורטית איך הוא עובד (אבל אולי לא למה הוא טוב) - אבל זה אלגוריתם הצפנה ולא PRNG.

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

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

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

ועדיין תקרא קצת ברשת!! תבדוק ב-numerical recipes in C לגבי אלגוריתמי PRNG. אפשר למצוא את הספר on line באתר www.nr.com

קישור לתוכן
שתף באתרים אחרים

כמו שאני רואה, אלה האפשרויות שלך:

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

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

יש אמרה שחוקה שנראה לי שמתאימה למקרה שלך: fast, good or cheap. pick two

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

קישור לתוכן
שתף באתרים אחרים

נראה לי שאם יש לך אלגוריתם הצפנה טוב ו- hash סביר, אתה יכול לצמצם את הבעיה לבעיה של בחירת ה- seed.

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

קישור לתוכן
שתף באתרים אחרים

בדיוק, וכאן אנחנו נתקלים בשאלות:

1) איך בוחרים seed טוב, באורך מתאים כמפתח לאלגוריתם ההצפנה?

2) מה אתה מתכוון להצפין מראש?

3) איזה אלגוריתם הצפנה סביר?

4) איזה hash לקחת, ועם מה לעשות את ה-hash?

והבעיה הגדולה:

ההצעה שלך מתחילה במילים "נראה לי". אני חייב להודות שגם לי נראה שזה לא רע.

נניח שבחרת שיטה: תמיד אפשר לקחת את הזמן הנוכחי, להשתמש בו כמפתח ל-DES3, להצפין איזו מחרוזת קבועה (רעיון רע!!!), לעשות על זה MD5, ואז להוציא את הפלט כמספר אקראי "בטוח".

בעצם המצאת אלגוריתם PRNG.

איך אתה יודע שהוא בטוח מבחינה קריפטוגרפית? האם הוא בכלל טוב כ-PRNG? מה המחזור שלו? מה ההתפלגות של הערכים שהוא נותן? האם יכול להיות שבהנתן X ערכים קודמים של ה-PRNG, אפשר יהיה לנחש את הערך ה-X+1 בסבירות גבוהה מספיק?

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

קישור לתוכן
שתף באתרים אחרים

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

ברגע שמשתמשים באלגוריתמים ספציפיים צריך לבדוק את החולשות שלהם, ואם הצירוף שלהם לא יוצר חולשה יותר גדולה.

לא המצאתי כאן PRNG, אלא רק נתתי רדוקציה מ- PRNG ל- לצירוף של הצפנה ו- hash.

בחירת ה- seed הוא לא בדיוק חלק אינטגרלי של PRNG. הבנתי שבכל מיני ספריות הצפנה "מגרדים" מידע מרחבי המערכת (process IDs, מספר threads, הקשות משתמש, ואפילו input מהמיקרופון) כדי לקבל seed שהוא באמת רנדומלי.

קישור לתוכן
שתף באתרים אחרים

כל זה ממש מרתק אבל אני אפילו לא באוניברסיטה! אני רוצה משהו שלפרוץ אותו בצורה ברוטלית יקח ימים או אפילו שבועות זה הכל. וכמובן לא יהיה יותר מדי קל לפתור עי כל קריפטואנאליסט מתחיל. אפשר מעט להתמקד בבעיה שלי ? אם אני אצליח לעשות DES יהיה לי 100 על בטוח. אין צורך ביותר.

מישהו ראה איזה ישום של DES ב C? או אולי TUTORIAL איך להכין אחד?

קישור לתוכן
שתף באתרים אחרים

DES הוא יחסית פשוט למימוש, הוא מבוסס על פעולות על סיביות שקל מאוד לממש.

וכמובן תממש DES3 (שהוא משהו כמו לחזור על DES רגיל 3 פעמים) כי DES בסיסי פשוט חלש מדי.

עדיין עדיף למצוא מימוש נורמלי באינטרנט במקום לממש בעצמך.

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

קישור לתוכן
שתף באתרים אחרים

המימוש של DES דווקא די מעצבן, וכולל הרבה מידע סטטי (המימוש של ה- S-Boxes).

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

קישור לתוכן
שתף באתרים אחרים

גם AES משתמש בטבלאות (ליתר דיוק הוא משתמש בחישובים אלגבריים מורכבים למדי, שיותר פשוט לייצג אותם באמצעות טבלאות שחושבו מראש).

אם אני לא טועה, אלגוריתמי RC5 ו-RC6 הם מאוד פשוטים (משהו בסגנון אוסף של סכומים וקסורים).

קישור לתוכן
שתף באתרים אחרים

RC5 ו-RC6 דומים מימושית ל-DES (שילוב של טבלאות עם פעולות ביטים).

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

אם אתם חושבים ש-DES מסובך למימוש, אז קשה לי להאמין שתמצאו אלגוריתם הצפנה מודרני שהוא קל למימוש, ועדיף שתשתמשו ב-Caesar cipher או משהו.

הערה למי שלא מזהה סרקאזם - אל תשתמשו ב-caesar cipher, הוא לא חזק.

קישור לתוכן
שתף באתרים אחרים

  • 3 שבועות מאוחר יותר...

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...