ABA


"האם ניתן להצפין מידע באופן חד כיווני?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10451 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10451
MrSus
חבר מתאריך 8.5.09
1801 הודעות, דרג אמינות חבר זה
   16:05   15.08.11   
אל הפורום  
  האם ניתן להצפין מידע באופן חד כיווני?  
 
   אני מניח שהתשובה לשאלה שבכותרת היא חיובית.

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

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

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

אשמח לקבל מידע בנושא.

תודה.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אחד הבסיסיים זה RSA ldan192  15.08.11 16:15 1
  תעשה לו HASH, הנה דוגמת קוד ב C# עידן_הכלי 15.08.11 17:18 2
     הסבר עידן_הכלי 15.08.11 17:22 3
  תודה חברים, החומר שצרפתם יכול מאד לעזור! MrSus 15.08.11 19:50 4
  אל תעשה את זה בחיים. Deuce  16.08.11 20:39 5
     תאכלס, לא קראתי תוכן השאלה. אל תתעסק עם כרטיסי אשראי ldan192  16.08.11 23:09 6
     ואו לא ציפיתי לכזו תגובה MrSus 17.08.11 20:18 8
         אם לתיאוריה, אז לתיאוריה. Deuce  18.08.11 19:59 10
             ומה אם.. MrSus 19.08.11 00:04 12
                 לא ירדת לסוף דעתי. Deuce  19.08.11 15:11 13
  איזה סיבה יש להצפין כרטיסי אשראי באופן חד כיווני? VeNom  17.08.11 11:25 7
     המטרה בגדול זה סטטיסטיקה MrSus 17.08.11 20:20 9
         אני מניח שיש דרכים VeNom  18.08.11 23:13 11

       
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   16:15   15.08.11   
אל הפורום  
  1. אחד הבסיסיים זה RSA  
בתגובה להודעה מספר 0
 
http://he.wikipedia.org/wiki/RSA

הרעיון הוא שיש לך 2 מספרים שרק אתה יודע אותם - a ו-b
ואתה מצפין את המידע m ע"י שליחת a^m)%b)


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
עידן_הכלי

דרג אמינות חבר זה
   17:18   15.08.11   
אל הפורום  
  2. תעשה לו HASH, הנה דוגמת קוד ב C#  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 15.08.11 בשעה 17:21 בברכה, עידן_הכלי
 

public static string HashPassword(string creditCard)
{
byte[] bytes = Encoding.Unicode.GetBytes(creditCard);
byte[] inArray = null;

HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
inArray = algorithm.ComputeHash(bytes);
return Convert.ToBase64String(inArray);
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
עידן_הכלי

דרג אמינות חבר זה
   17:22   15.08.11   
אל הפורום  
  3. הסבר  
בתגובה להודעה מספר 2
 
   משום מה כשכתבתי את ההסבר בהודעה הקודמת זה בילגן את הקטע קוד.

לMicrosoft יש ספריה שמממשת כבר את האלגוריתמים הנפוצים של הצפנה, למשל בדוגמא למעלה השתמשתי ב SHA1.

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

עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות, דרג אמינות חבר זה
   19:50   15.08.11   
אל הפורום  
  4. תודה חברים, החומר שצרפתם יכול מאד לעזור!  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות, דרג אמינות חבר זה
   20:39   16.08.11   
אל הפורום  
  5. אל תעשה את זה בחיים.  
בתגובה להודעה מספר 0
 
ראשית יש תקנים לדברים האלה, אתה לא יכול סתם להצפין כרטיס אשראי לתוך DB על השרת שלך.

בלי להעליב אבל עצם העובדה שאתה שואל דבר כזה בפורום, מראה על פער מאד רציני בידע.

לא סתם לא עושים את זה.

באופן כללי יש הצפנה חד כיוונית (One Way Function) לרבות md4,md5,sha1, שילובים (DES + SHA1) וכו', ואף אחת מהן לא מספיק בטוחה כדי להצפין כרטיסי אשראי. כמו כן כולן לא חח"ע, אבל שוב - התפישה שלך של המונח חח"ע לא תואמת את המחשבה הקריפטוגרפית, שחסרה לך.

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






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   23:09   16.08.11   
אל הפורום  
  6. תאכלס, לא קראתי תוכן השאלה. אל תתעסק עם כרטיסי אשראי  
בתגובה להודעה מספר 5
 
תשתמש בממשקים מוכנים.
זה לא מספיק רק שהתעבורה תהיה מוצפנת, צריך גם שלא יהיה ניתן לפענח איך היא הוצפנה (למשל, בין היתר)...


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות, דרג אמינות חבר זה
   20:18   17.08.11   
אל הפורום  
  8. ואו לא ציפיתי לכזו תגובה  
בתגובה להודעה מספר 5
 
   נראה לי ניתן להבין מהשאלה שלי שמדובר על תאוריה בלבד ואני לא מתכוון ליישם שום דבר מזה בשנים הקרובות... עוד לא התחלתי אפילו את התואר, אבל זה סתם חלק מרעיון שיושב לי בראש כבר כמה חודשים..

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות, דרג אמינות חבר זה
   19:59   18.08.11   
אל הפורום  
  10. אם לתיאוריה, אז לתיאוריה.  
בתגובה להודעה מספר 8
 
שווה גם לציין את זה להבא, אחרת זה באמת עלול להתפרש כמעט תוקפני - וזה אכן כזה, כי יגיע בן אדם שלא לוקח את זה לצורך תיאוריה, ישאל בפורום, יקבל תשובה לא כ"כ נכונה ואחרי כמה שבועות נגנבים כרטיסי אשראי; לא נעים לאף אחד מהצדדים.

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

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

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






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות, דרג אמינות חבר זה
   00:04   19.08.11   
אל הפורום  
  12. ומה אם..  
בתגובה להודעה מספר 10
 
   יש 2 לקוחות שהספרות שבכרטיסי אשראי שלהם זהות, רק בסדר שונה.. ואז כמובן שסכימת הספרות לא תעזור..

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

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

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

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



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות, דרג אמינות חבר זה
   15:11   19.08.11   
אל הפורום  
  13. לא ירדת לסוף דעתי.  
בתגובה להודעה מספר 12
 
הזיהוי הראשוני שלך זה לפי המשתמש באתר. כאשר אני קונה בחנות וירטואלית, יש לי שם משתמש עם סיסמא, לעיתים ת.ז ואפילו כתובת מגורים דרכו אני מבצע את הקניות. עבור אותו שם משתמש (שנקבע באופן חח"ע לפי תעודת הזהות לצורך העניין) קל לי לעקוב אחר כמות הקניות, ואני לא צריך לשמור את כרטיס האשראי.

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

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

במקרה כנ"ל אפשר ליצור, כמו שאמרתי, סכמה קשוחה יותר:
לאחר הזיהוי מול תעודת הזהות של האדם, נבצע זיהוי על הכמות הבדידה והסופית של כרטיסי האשראי שלו. לשם כך ניתן לקחת סכום, לעשותו מודולו r באשר r סדר גודל של 10,000 או כל פעולה פשוטה יחסית שיכולה להבדיל בין כמות קטנה של כרטיסי אשראי בהסתברות קטנה. אם אתה רוצה להתעמק, אז עבור סכום ייתכן שנקבל התנגשויות בהסתברות גבוהה עבור מספר לא גדול של כרטיסי אשראי, אבל עבור מודולו r ובהנחת התפלגות אחידה על כרטיסי אשראי (מה שבקירוב, ככה"נ, נכון), נקבל שההסתברות של שני כרטיסי אשראי להתנגש היא r^-1 ובאופן כללי תצטרך sqrt(r) של כרטיסי אשראי כדי שבהסתברות של 50% תהיה התנגשות. בהנחה שלבן אדם אין יותר מ-20 כרטיסי אשראי, אפשר לקחת r ~ 10,000 ולקבל פתרון לא רע בכלל.

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






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק, 2 נקודות
   11:25   17.08.11   
אל הפורום  
  7. איזה סיבה יש להצפין כרטיסי אשראי באופן חד כיווני?  
בתגובה להודעה מספר 0
 
   אם המטרה היא להשתמש בהם פעם אחת אתה לא צריך להצפין ולשמור אותם.
אם תרצה להשתמש בהם יותר מפעם אחת הרי לאחר ההצפנה אתה לא תוכל לשחזר אותם..
הצפנה חד כיוונית טובה לסיסמאות של משתמשים בעיקר..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MrSus
חבר מתאריך 8.5.09
1801 הודעות, דרג אמינות חבר זה
   20:20   17.08.11   
אל הפורום  
  9. המטרה בגדול זה סטטיסטיקה  
בתגובה להודעה מספר 7
 
   סכימת מספר הפעמים שהכרטיס עבר אצלי (בחנות לצורך העניין)...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק, 2 נקודות
   23:13   18.08.11   
אל הפורום  
  11. אני מניח שיש דרכים  
בתגובה להודעה מספר 9
 
   יותר מקוריות ופחות מסוכנות לבצע את זה..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net