שְׁאֵלָה:
כותב אלגוריתם הצפנה משלי
Confuto
2015-11-22 21:16:00 UTC
view on stackexchange narkive permalink

כרגע אני לומד IT במכללה (המכללה הבריטית, גם לא אוניברסיטה) והעבודות משעממות אותי עד מוות. אני מקודד כבר לא מעט זמן בעיקר בשפות OO כמו C # ו- Java אבל לעתים קרובות משתעמם ומוותר במהירות כי רוב זה דברים משעממים של ממשק משתמש שאני שונא לעשות, לפרויקטים שאני מעלה לעיתים רחוקות יש הרבה מה לעשות עם עיצוב קוד ובעצם יצירת אלגוריתמים. אני רוצה להתחיל לכתוב אלגוריתמים משלי ולהתחיל להתרחק מהצד של ידידותיות המשתמש ולהתחיל ללמוד דברים שמעניינים אותי, כלומר קריפטוגרפיה ודחיסה. אני רוצה לכתוב אלגוריתם הצפנה משלי, להצפין את הבתים של קובץ או מחרוזת. יש לי כמה שאלות:

  • איפה הייתי מתחיל עם זה, אילו ספרים / חומרים מומלצים להתחיל בקריפטוגרפיה?
  • האם אני צריך ידע נרחב בקריפטוגרפיה כדי להתחיל בעבודה בסיס-גאוריתם?
  • האם C # יהיה בסדר להוצאת אלגוריתם הצפנה אל הפועל?

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

"האם אני צריך ידע נרחב בקריפטוגרפיה כדי להתחיל באלגוריתם בסיסי"? כן. הן תכנון והן יישום אלגוריתמים הצפנתיים הם קשים ביותר, ונעשים רק על ידי אנשי מקצוע בצוותים. שחקו סביב כל מה שתרצו, למדו, תיהנו .... אבל אפילו לא _תחשבו _ על השימוש באלגוריתם הקריפטו שלכם להצפנה בעולם האמיתי.
שאלה זו רחבה מדי מכדי לענות עליה. תכנון אלגוריתם הצפנה יכול להיות כל דבר, החל ממה שתלמיד בית ספר יסודי יכול לעשות (קיסר-שיף למשל) וכלה בבעיות מתמטיות מורכבות המניעות את המתמטיקאים הגדולים לייאוש.
@S.L. בארת 'תודה על התגובה. אני מבין, אולי הכי טוב שאמצא משהו אחר לעבוד עליו אז. בכלל לא הייתי מעז להשתמש בשום דבר שאני מעצבת בעולם האמיתי חח!
"האם C # יהיה בסדר בהוצאת אלגוריתם הצפנה לפועל?" אלגוריתם ההצפנה של SOme צריך לעבוד ללא תלות בכל שפה. אם אתה משתמש במשהו שאי אפשר לעשות אותו למשל. C, ניתן לזרוק את האלגוריתם שלך.
`בכל מה שקשור לפנייה לאוניברסיטה, יש לי מה להראות` אל תעשה את זה. יש (יותר מדי) דרכים להחזיר אש בעזרת אלגוריתם הצפנה
C # יהיה בסדר מכיוון שאתה עושה את זה רק לתרגול בכל מקרה וביצועים הם אם כן לא בראש סדר העדיפויות (שוב, לעולם אל תשתמש בהצפנת homebrew בייצור וביצועי הזבל הם למעשה יתרון מכיוון שזה יהיה מרתיע לעשות זאת ).
אם אתה מחפש קבוצה של אתגרי תכנות הקשורים לקריפטו, אני ממליץ להסתכל בכתובת http://cryptopals.com/
@deviantfan אני לא רואה את הבעיה עם זה - קריפטו של homebrew הוא בהחלט לא-לא-ייצור, אבל להציג אותו כפרויקט תחביב צריך להיות בסדר ולכל הפחות להפגין ידע בתכנות גם אם הקריפטו עצמו רע.
מדוע אתה רוצה לכתוב אלגוריתם חדש? האם הקיימים אינם מספיקים? איזו בעיה מסוימת באלגוריתמים קיימים אתה מצפה לפתור? או שאתה רק רוצה לעשות את זה כתרגיל למידה?
@RоryMcCune אני לא יכול להודות לך מספיק על אותה התייחסות. אני מתמטיקאי ורוב הניסיון שלי בתכנות נובע מפתרון חידות. קבוצות הבעיות האלה נראות דרך מהנה לחקור את צד ההטמעה של אלגוריתמי הצפנה!
@JamesRyan זה נכון, אבל אני מלמד את עצמי כתחביב ואילוץ עצמי להתחיל פרויקט יכול להיות קשה לפעמים, שלא לדבר על לעשות משהו שאני שונא. אני מודע יום אחד אם אצליח להפוך את זה לקריירה אצטרך לעשות דברים משעממים, אך עדיין לא: ד
@Superbest כן זה רק תרגיל למידה, אני לא מצפה ליצור משהו שישמש אחרים. אני לא מצפה לפתור שום בעיה למען האמת, רק לצבור קצת ידע על האופן שבו הדברים עובדים ולתת לעצמי אתגר.
@Confuto לתרגילי למידה, מדוע לא לנסות בעיה מקוונת של DB כמו ProjectEuler (לא ספציפית לקריפטו) או את התרגילים בכל פרק בסוף ספר לימוד פופולרי?
@S.L.Barth נדרש ידע רב כדי לבנות אלגוריתם הצפנה * חזק *, אך לא עבור * בסיסי *, וזה מה שה- OP רוצה. אני חושש שתגובתך הטעה אותו לוותר על המאמץ על סמך תגובתו אליו! אני חושב שה- OP יכול לכתוב בקלות אלגוריתם הצפנה בסיסי וללמוד כמה מושגים שימושיים מהתרגיל.
["בניתי קריפטו משלי"] (https://twitter.com/old_sound/status/602996592531091456)
כשקראתי את הכותרת לא יכולתי שלא לומר "אה-אוי" ...
חבר'ה איך זה נחקר היטב? אם אתה מחפש בגוגל כל מה שקשור לקריפטוגרפיה זה מאמר שפורסם על ידי מתמטיקאים דמויי אל או "אל תעשה זאת בעצמך" אני מופתע שגוגל לא פשוט אומרת "לא" אם אתה מחפש זאת.
פשוט הגעתי לכאן להערות.
אתה יכול גם ליהנות בכיף אם תוכל להשיג חבורה של מתכנתים מתחילים, ולאתגר אותם ליצור אלגוריתם הצפנה שאף אחד מהאחרים לא יכול להישבר (וזה כמובן לא אומר שהוא בלתי שביר) ואז לשבור אחד את השני אלגוריתמים.
תֵשַׁע תשובות:
fr00tyl00p
2015-11-22 22:59:12 UTC
view on stackexchange narkive permalink

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

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

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

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

הייתי ממליץ להתחיל ליישם משהו כמו AES ולהמשיך במצבי פעולה שונים כמו CBC או CCM ולגלות מדוע אקראיות חשובה. המשך עם SHA-2 ו- HMAC והמשך לקריפטוגרפיה א-סימטרית. בדוק תמיד מה אחרים עשו ומדוע עשו זאת והסתכל במיוחד על התקפות ערוץ צדדיות וכיצד הן מבוצעות. אם אתה נמצא בנקודה זו תמצא את הדרך להמשיך.

ההפניה להתחיל איתה תהיה "HAC", אשר זמין באופן חופשי באינטרנט: http://cacr.uwaterloo.ca/hac/

[עריכה] הצעה מאת JRsz שלא תוטמן בתגובות. ספר טוב למתחילים: http://crypto-textbook.com/

ה- HAC הוא טקסט ייחוס נהדר למי שמיישם ברצינות מתמטיקה קריפטו חדשה, אך סביר להניח שהוא צפוף מדי עבור מתחילים.
+1 עבור `כמובן שאתה יכול להתחיל בקטן ולהטמיע אלגוריתמים משלך. אך אל תניח שהם מספקים אבטחה מעבר לערפול. `הרבה אנשים ממשיכים לומר" אל תעשו את זה! ", אבל זה מספק הזדמנות טובה ללמוד עוד. הוויתור הקטן הזה מצוין.
אני מודע יותר מכל מה שאני עושה לא יהיה שמיש בעולם האמיתי, זה פשוט כדי לתת לי משהו ללמוד ולעבוד לקראתו.
לא שאני לא מסכים איתך עם המסר הכללי, אבל ... * "הדבר הקשה בכל הנוגע לקריפטוגרפיה הוא למצוא סיבות לכך שמשהו באמת מאובטח. לא תוכל להחליט על כך תוך חודשים ואם אתה מרגיש שאתה באותה נקודה אתה כנראה טועה. "* אז האם אנשים יודעים * מדוע * אלגוריתם כמו RSA מאובטח? עד כמה שידוע לי, זה בגלל שאיש לא הצליח למצוא דרך לשבור את זה. אז למה סטודנט צריך להאמין שהאלגוריתם שלו גרוע יותר?
@Mehrdad אני חושב שזה פשוט בגלל שהאלגוריתם שלו / ה לא היה קיים כבר 35 שנה ועדיין לא נשבר.
@mbrt: לפי ההיגיון שלך אי אפשר להמציא אלגוריתם הצפנה מאובטח.
@Mehrdad הסיבה מדוע RSA מאובטח היא שבעיית RSA קשה. אתה צודק. זה קשה כי אף אחד לא מצא דרך לשבור את זה. תלמיד צריך להאמין שהאלגו שלהם חלש מכיוון שזו גישה הגנתית. IMHO יותר הגיוני מאשר להניח שהאלגוריתם שלהם מאובטח אלא אם כן מישהו שובר אותו, מכיוון שאלה שמנסים עשויים להיות הרבה פחות מאלה שניסו כבר לשבור RSA.
@fr00tyl00p: שוב, אני לא מסכים עם המסר הכללי או המסקנה שלך. מה שאני לא מסכים איתו הוא הנחת היסוד שלך שקריפטוגרפים "מוצאים סיבות מדוע [האלגוריתם שלהם" באמת מאובטח ". למיטב הבנתי, הם באמת לא עושים זאת: הסיבה באה לאחר שהאלגוריתם כבר הומצא, מכיוון שהוא לא נשבר. עד אז, כל זה מבוסס על העובדה שיש להם פשוט תחושת בטן שהאלגוריתמים שלהם צריכים להיות מאובטחים, ואין להם שום ראיות להיפך. התשובה שלך גורמת לזה להיראות כאילו קריפטוגרפים מוכיחים חוסר פריצה או משהו כזה.
@Confuto זה יכול באותה מידה להיות שמיש בעולם האמיתי במובן הבא: שום רובוט לא יוכל למקד אליך ללא פיקוח אם אתה מבצע הצפנה סטנדרטית + הצפנה לא תקנית (כלומר, הסייפר שלך יישבר רק אם יש אנשים חיים אמיתיים אחריך; זה לא תמיד נכון כשמשתמשים רק בחפצי ספרייה שנוטים להיות מעופשים כמו DES). זה עשוי להיות חשוב או לא.
@fr00tyl00p: כדי לשים את זה בפרספקטיבה, אני מתקשה להאמין ש- ECC הוא למעשה מאובטח. זה לא נראה כמו שצריך להיות, וזה נראה כמו משהו שיכולתי להמציא בסוף שבוע כי אני לא צריך שום הוכחת קשיות או שום דבר אחר, רק תחושת בטן. הדבר היחיד שהיה חסר לי הוא מוניטין טוב לגרום לאנשים להתייחס ברצינות לאלגוריתם דומה, אבל מה עוד היה חסר לי? יכולתי פשוט לטעון שזה קשה ולחכות שמישהו יוכיח אותי לא בסדר. אז מדוע אנשים רואים ב- ECC יותר בטוח מאלגוריתם אקראי שאולי אמצא?
ה- hac מסובך מאוד למתחילים. אני ממליץ על ספר זה להתחלה טובה: http://crypto-textbook.com/
אני אוהב שזה מעודד את המשתמש לנסות את זה עם * ציפיות מנוהלות *. זה יהיה תרגיל טוב (ואני טוען כנדרש) אם בני גילם ינסו לשבור את ההצפנה.
נבחרה כתשובה, תודה. המום מהתגובות המדהימות מכאן, תודה רבה לכולם!
@Mehrdad - לקריפטוגרפים יש סיבה להאמין ש- RSA מאובטח מלבד רק "הוא עדיין לא שבור". על ידי לימוד המתמטיקה הבסיסית הם יכולים להוכיח כי פריצת RSA קשה מאוד. ישנן הנחות יסוד מעורבות (כגון שהפקטוריזציה העיקרית איטית), אך הנחות אלו ניתנות לאיות ולכימות והן חזקות בהרבה מ"סתם איש לא מצא פריצה ". ספר קריפטו מתמטי מבוא טוב צריך להסביר זאת בפירוט, או לנסות לחפש למשל. "מדוע RSA מאובטח".
@Rich אין הוכחות מתמטיות ולא חישוביות לאבטחת RSA. ההנחה היא שהגורם לגורם לוקח זמן אקספוננציאלי. אבל זו רק הנחה, לא הוכחה. שוב, המשמעות היא בפועל ש- RSA "עדיין לא שבור" ותו לא.
@mbrt: לא, הנקודה שלי הייתה שכוחו של RSA מסתמך על פקטוריזציה שעדיין לא נשברה, וזאת טענה חזקה בהרבה מ- "X עדיין לא נשבר" עבור כל צופן X חדש, מכיוון שהפקטוריזציה מובנת הרבה יותר מ- X. כפי שאמרתי ב הערתי, ישנן הנחות יסוד, אך הנחות אלה ניתנות לאיות ולכימות והן חזקות בהרבה מ"סתם איש אינו שובר את צופן מספר 7 ".
@Rich: * "הם יכולים להוכיח כי לשבור RSA זה קשה מאוד." * ... אתה יכול לקשר אותי להוכחה האמורה? כל מה שהיא נשענת עליו הוא פקטוריזציה להיות קשה; אין שום הוכחה מאחורי זה. לא בטוח אם אתה עוקב אחר החדשות, אך חלה התפתחות עדכנית מאוד באלגוריתם של זמן כמעט פולינומי לאיזומורפיזם גרפי, ולאחר ששמעו על כך יש אנשים שמתחילים לתהות אם ניתן לפתור פקטוריזציה בכמו-פולינומי גם זמן. כמו כן, האם תוכל לומר את אותו הדבר לגבי ECC? אנשים חושבים ש- ECC קשה כי אף אחד לא הצליח לשבור את זה. האם יש הוכחה? לא.
@Mehrdad: כן, בויקיפדיה יש ציטוטים: "מילר הראה כי - בהנחה שהשערת רימאן המורחבת - מציאת d מ- n ו- e קשה כמו פקטורינג" דרך https://en.wikipedia.org/wiki/RSA_(cryptosystem)# שלם_פקטוריזציה_בעיה_RSA_. כפי שציינתי קודם, הצפנים הצהירו את הנחות היסוד שלהם: כלומר השערת רימאן מורחבת ופקטוריזציה ראשונית קשה, ואז הוכחו כי RSA מאובטח תחת הנחות אלה. הנקודה שלי היא שההנחות האלה מובנות הרבה יותר טוב וסביר יותר שהן אמיתיות יותר מכל טענה ישנה של "אבל X עדיין לא נשברת".
@Rich: ומה עם ECC? כמו כן, אם תציין את ההנחות שלך שאינן הופכות את האלגוריתם שלך לבטוח יותר. אני יכול להמציא אלגוריתם ולקבוע גם את ההנחות שלי. האם זה אומר שהוא מאובטח עכשיו? אני מרגיש שאתה מפסיד את הנקודה שלי ...
@Mehrdad: אני חושב שאתה לא מבין אותי. לא אמרתי שיש הוכחה לכך ש- RSA "מאובטח". אמרתי שיש הוכחה לכך ש- RSA מאובטח בהתחשב בהנחות מסוימות שהובנו היטב. אני מנסה לענות על שאלתך הראשונית "מדוע על סטודנט להאמין שהאלגוריתם שלו גרוע יותר [מ- RSA]" - הסיבה לכך היא שההנחות המשמשות בהוכחות אלה חזקות וחזקות בהרבה מסתם טענה מעורפלת של " איש עדיין לא שבר את הקריפטו של התלמיד X ".
"אם אתה מצהיר את ההנחות שלך שלא הופכות את האלגוריתם שלך לבטוח יותר" - זה כן, אם ההנחות שלך חזקות ואתה * מוכיח * קישור בין ההנחות שלך לביטחון של algo שלך
@Rich: (1) ההנחה כי פקטורינג קשה היא רק "חזקה" מכיוון שאיש לא הצליח לשבור אותה. מדוע זה מרמז על הנחה חדשה שאיש לא עבד עליה חלשה? (2) מה ההנחה שמאשימה את חוזק ה- ECC? אתה כל הזמן נמנע מלענות על זה.
הבה [נמשיך בדיון זה בצ'ט] (http://chat.stackexchange.com/rooms/32069/discussion-between-rich-and-mehrdad).
בניית אלגוריתם הצפנה משלך ללא מספיק מתמטיקה / cs / crypto אינה נקראת * הצפנה * אלא * en-crap-tion *. עדיף לנסות ללמוד על ידי יישום אלגוריתם, כדאי ללמוד יותר מתמטיקה (נושאים במתמטיקה עמוקה וקשה) ו- CS, ולהטמיע מחדש אלגוריתמים קיימים וללמוד את נקודות התורפה שלהם.
StackzOfZtuff
2015-11-22 22:56:30 UTC
view on stackexchange narkive permalink

קורסרה

הנה שני הסנטים שלי:

הצטרף לשיעור המקוון של הקורפטוגרפיה בקורסרה:

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

בסוף ששת השבועות יש מבחן.

אם אתה רוצה לאתגר, זו הדרך הנכונה ללכת. זו הרבה עבודה. אני מציע לך לתכנן 10+ שעות בכל שבוע. עוד אם תרצה לבצע גם את מטלת התכנות.

( ערוך: הנה תוכן עניינים לריצה קודמת של מחלקה זו. )

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

שכחתי את קורסרה, תודה! אני מנוי על Lynda.com אבל אין להם הרבה בקריפטו.
+1 בכיתה. זה די מאתגר. שים לב שמטלות התכנות הן ב C.
למעשה כל שפה תעשה. מוגשות רק תוצאות. לא היישום. בפורומים יש יישומים בשפות שונות. דוגמאות הן ב- Python2.
Adam Shostack
2015-11-22 23:17:53 UTC
view on stackexchange narkive permalink

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

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

* התבונן מסביב * אתה יכול בבקשה להסביר כיצד למצוא את הפוסטים האלה? האם עלינו לסנן שאלות לפי תגיות, אתרי אינטרנט וכו '?
@A.L, אני חושב שחיפוש לפי מספר תגים יהיה היעיל ביותר. משהו כמו [קריפטוגרפיה + אלגוריתם] (http://security.stackexchange.com/questions/tagged/cryptography+algorithm) או [אלגוריתם הצפנה +] (http://security.stackexchange.com/questions/tagged/encryption+algorithm ). תצטרך לחפור קצת, אבל במבט אחד אני כן רואה כמה שאלות. למרות שהם קבורים בעיקר מתחת לדברים קטנים יותר כמו ערבוב אלגוריתמים או ערפול קטן שנוספו לאלגוריתם הקיים. הרבה דברים שלא משפרים את הביטחון וגם לא מחלישים אותו. אני לא מסכים עם אדם שוסטאק שזה יעיל.
חיפשתי את "האם זה מאובטח" וחושב ש -5 השאלות הראשונות הן מקומות טובים להתחיל בהם; ערכתי את תגובתי להיות חדה יותר.
dr_
2015-11-23 15:56:01 UTC
view on stackexchange narkive permalink

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

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

בנוגע לתכנות, הימנע משפות קנייניות כמו המגפה. הייתי מציע C, או אפילו C ++.

מדוע אתה אומר * "לגבי תכנות, הימנע משפות קנייניות כמו המגפה" *? הניסיון שלי הוא שניתן להמיר את הקוד ל- C / C ++ די בקלות (לרוב כמעט זהה, שורה לשורה) אם אתה כותב קוד אופטימיזציה ב- C # (אם כי לא הרבה אנשים עושים זאת). כמו כן, מהדר ה- C # הוא כעת קוד פתוח (שוחרר תחת אפאצ'י 2.0).
C # תמיד תועד באופן פומבי כסטנדרט, דרך ECMA אם אני זוכר נכון (וזה התקן שהמהדר של מיקרוסופט צפוי לעמוד בו).
+1 לספרו של ברוס שנייר.
@Toothbrush אז למה לא להשתמש ישירות ב- C שהיא פתוחה, בוגרת ונרחבת.
@dr01 בטוח שאם אתה כותב אלגוריתם הצפנה רציני, אתה בהחלט צריך לכתוב אותו ב- C כדי שניתן יהיה לבדוק אותו רשמית. עם זאת, אם אתה פשוט דופק קצת קוד כדי להבין מה ההצפנה עושה אז מדוע שלא תשתמש באיזו שפה שהכי נוח לך? אם האנשים היחידים שיראו את זה הם הוא והחתול שלו, איזה הבדל זה משנה אם זה כתוב ב- AutoLisp! אולי אפלסקריפט יחזור ויהפוך לתקן ההצפנה החדש ...;)
@dr01 כשאתה לומד משהו כללי יותר משפה ספציפית, זה שימושי אם השפה בשימוש אינה נותנת לך אקדח טעון, משחיל אותו ומדביק אותו על המותניים שלך ומצביע על כף הרגל שלך. שפה שיש לה "התנהגות לא מוגדרת" כמושג ליבה אינה מתאימה ללמוד על אלגוריתמים. בעוד של- C יש הרבה דברים שקיימים את זה, ומקומה, זה דורש מומחיות ספציפית שאינה קשורה לחלוטין לאלגוריתמים של למידה.
וזכור תמיד את הכלל של שניאור ... כל אחד יכול ליצור אלגוריתם הצפנה מדהים שהוא לא יכול לשבור. כלומר ... ביקורת עמיתים נחוצה כדי להוכיח שהיא אכן עובדת.
Scott C Wilson
2015-11-22 21:36:27 UTC
view on stackexchange narkive permalink

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

אבל שים לב שאונטימפד הוא אחד "מוזר" (אלגוריתם כמו גם שימוש אפשרי), זה לא יעזור הרבה בהבנת AES וכו ', שמשתמשים בו הרבה יותר בפועל ויש לו מושגים רבים שאפשר למצוא גם באגואים אחרים. (וכו 'וכו')
הנקודה שתהיה רלוונטית עבור OP לגבי אלגוריתמי הצפנה היא בדרך כלל לא ההיגיון המיושם, אלא המתמטיקה שמאחוריו. AES היא דוגמה טובה למדי לכך. בקוד כל מה שאפשר לראות הם כמה משמרות סיביות פשוטות והוראות מתמטיות ברמה נמוכה. האלגוריתם עצמו מתוכנן באופן לגרום לנתונים המוצפנים להיראות אקראיים לחלוטין, מה שדורש לא מעט מיומנויות כדי להשיג מהמעצב, בלשון המעטה.
לוח זמנים אחד הוא מקרה מעניין, אם כי - זה אלגוריתם פשוט למדי, ובתנאים אופטימליים - בלתי שביר. נקודות התורפה שלה נובעות ממדרגיות והחלפת מפתח, שאינן טריוויאליות ליישומים 'בעולם האמיתי'. אבל אני לא יודע שזה באמת עוזר להבין את אפשרויות הקריפטו האחרות, שהן הרבה יותר מסובכות כתוצאה מהצורך להתמודד עם אמון, החלפת מפתחות וכו '.
Michael B
2015-11-24 03:47:41 UTC
view on stackexchange narkive permalink

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

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

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

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

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

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

זֶה. OP מחפשת אתגר מעניין - הזדמנות ללמוד, לא להפוך לממציא הדבר הגדול הבא.
JRsz
2015-11-23 02:42:30 UTC
view on stackexchange narkive permalink

אתה יכול ליישם אלגוריתמי הצפנה קיימים כבר, אך תכנון אלגוריתם הצפנה משלך הוא אחד העניינים המורכבים ביותר שתוכל להתמודד איתם. לשם מבוא כללי אני ממליץ בחום על הערוץ הזה: https://www.youtube. com / channel / UC1usFRN4LCMcfIV7UjHNuQg / videos או את הספר "Understanding Cryptography" מאת כריסטוף פאר ויאן פלזל ( http://crypto-textbook.com/). אני מניח שאתה מכוון לעבר אלגוריתמים סימטריים והייתי ממליץ לך להתחיל לקרוא הרבה תיאוריה עליהם, מה שבטוח, היה לא בטוח (היסטוריה) ובאופן מפורש כיצד אלגוריתמי המצב הנוכחי של האמנות עשו את דרכם למה שהם (איך פותחה AES, נבחר וכו ').

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

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

Count Iblis
2015-11-23 12:25:57 UTC
view on stackexchange narkive permalink
אתה יכול לעקוב אחר ההצעה של סקוט ווילסון לגבי הרפידה החד פעמית, אך עם נתונים אקראיים אמיתיים. אתה יכול למשל שקול את הרעש ממצלמת האינטרנט של המחשב. תנו למצלמת הרשת לצלם כמה תמונות של סצנה סטטית, להמיר את התמונות לתמונות של 32 סיביות של צף, לנרמל את התמונות לאותה בהירות, לקחת את הממוצע ואז לחסר אחת מהתמונות מהממוצע. אם אתה ממפה את ערכי הפיקסלים השליליים ל- 0 וערכי הפיקסלים החיוביים ל- 1, כמעט יש לך ביטים אקראיים לחלוטין, שאינם מתואמים כאשר הפיקסלים אינם קרובים מדי. החלת האלגוריתם של פון נוימן על זוגות סיביות שנלקחו מפיקסלים רחוקים:

(0,1) ---> 0

(1,0) ---> 1

(0,0) ו- (1,1) מושלכות

יניבו סיביות אקראיות מושלמות עם 0 ו- 1 עם סיכוי של 50% בדיוק.

אני לא בטוח שזה עונה על השאלה
מקור קל לאקראיות ממחשב. תודה!
Hanky Panky
2015-11-23 13:15:40 UTC
view on stackexchange narkive permalink

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

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

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

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

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



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