כל מה שאתה צריך לדעת על הצפנה ב- Java



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

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

מבוא להצפנה בג'אווה

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





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

הצפנה ופענוח בג



אלגוריתמים להצפנה סימטריים

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

אלגוריתמי הצפנה אסימטריים (או מפתח ציבורי)

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



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

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

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

המרה כפולה לג'אווה

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

  • בחירת האלגוריתם הנכון

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

האלגוריתמים הנותרים שבורים יתר על המידה (DES, RC2 וכו ') או שהסדקים החלו לצוץ (RC5), מה שהופך אותו לשבירה עם מספיק כוח מעבד - זה כבר יכול להישבר עד שתקרא את זה. מפתח אבטחה לא יכול לקרוא שורות של מפרטי NIST, ולא לעקוב אחר ההתרחשויות והמחקרים האחרונים בקהילת ההצפנה. הם עשויים להרים את האלגוריתמים השבורים או המסוכנים, את העיכול או את הגנרטור המדומה.

תמיד ל:

  1. אלגוריתם סימטרי: נעשה שימוש בצופן צומת בלוקים AES / AES.

  2. אלגוריתם אסימטרי: משתמשים ב- RSA.

  • אופן פעולה

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

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

כאמור, אלגוריתם AES ישתמש במצב פעולה של ECB, מה שמקל מאוד על התקפות השידור החוזר. לפיתוח חדש, אם קיימת האפשרות המעטה ביותר לחדש את העבודה הישנה, ​​עלינו להשתמש בהצפנה מאומתת עם מצב נתונים משויך (AEAD) (למשל GCM ו- CCM). יש לנו תג אימות באורך מלא של 128 ביט. אם אנו משתמשים במצב לא מאומת אנו משתמשים ב- CBC או CTR עם MAC כדי לאמת את הצופן.

  • בחירת תוכנית הריפוד המתאימה

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

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

  • אלגוריתמים אסימטריים

באלגוריתמים אסימטריים יש לנו אפשרות לבחור בין שתי תוכניות ריפוד. חשוב לוודא כי נעשה שימוש רק בתוכניות OAEPWithAndPadding. במקרה של עיכול, השתמש ב- SHA1 או ב- SHA256 / 384/512. עבור פונקציית יצירת המסכות (MGF), אנא השתמש בריפוד MGF1 כמפורט. PKCS1Padding עם RSA היה פגיע להתקפות Ciphertext [6] מאז 1998.

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

  • הצפנה סימטרית

  • הצפנה אסימטרית

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

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

מה ההבדל בין java ל- c ++

בדוק את מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה מיועד לסטודנטים ואנשי מקצוע שרוצים להיות מפתח Java. הקורס נועד לתת לך יתרון לתכנות ג'אווה ולהכשיר אותך למושגי ג'אווה מרכזיים ומתקדמים יחד עם מסגרות Java שונות כמו Hibernate & Spring.

יש לך שאלה עבורנו? אנא הזכיר זאת בקטע ההערות בבלוג 'הצפנה ב- Java' ונחזור אליך בהקדם האפשרי.