Όλα όσα πρέπει να γνωρίζετε για την κρυπτογράφηση στην Java

Αυτό το άρθρο θα σας παράσχει μια λεπτομερή και περιεκτική γνώση της Κρυπτογράφησης στην Java και πώς να τη χρησιμοποιήσετε με Παραδείγματα.

Η κρυπτογράφηση είναι η μέθοδος χρήσης μαθηματικών αλγορίθμων για την κάλυψη της σημασίας μιας πληροφορίας έτσι ώστε μόνο τα εξουσιοδοτημένα μέρη να μπορούν να την αποκρυπτογραφήσουν. Σε αυτό το άρθρο, θα συζητήσουμε την κρυπτογράφηση και την αποκρυπτογράφηση με την ακόλουθη σειρά:



Εισαγωγή στην κρυπτογράφηση στην Java

Η κρυπτογράφηση εφαρμόζεται για την προστασία των δεδομένων μας (όπως κείμενα, συνομιλίες και φωνή), είτε κάθεται σε υπολογιστή είτε αποστέλλεται στο Διαδίκτυο. Οι πρόσφατες τεχνολογίες κρυπτογράφησης είναι ουσιαστικά στοιχεία οποιουδήποτε ασφαλούς υπολογιστικού περιβάλλοντος.



Ο πρωταρχικός ρόλος της ασφάλειας της κρυπτογράφησης έγκειται στην ικανότητα ενός αλγορίθμου να δημιουργεί κρυπτογραφημένο κείμενο (κρυπτογραφημένο κείμενο) το οποίο είναι δύσκολο να επανέλθει στο αρχικό του απλό κείμενο. Η χρήση κλειδιών δημιουργεί επίσης ένα άλλο επίπεδο ασφάλειας στις μεθόδους προστασίας των πληροφοριών μας. Ένα κλειδί είναι ορισμένες πληροφορίες, οι οποίες επιτρέπουν μόνο σε αυτούς που τη διατηρούν να κωδικοποιούν και να αποκωδικοποιούν ένα μήνυμα.

πώς να δημιουργήσετε τυχαία συμβολοσειρά στο java

Κρυπτογράφηση και αποκρυπτογράφηση σε Java



Συμμετρικοί αλγόριθμοι κρυπτογράφησης

Οι συμμετρικοί αλγόριθμοι χρησιμοποιούν το ίδιο κλειδί για κρυπτογράφηση και αποκρυπτογράφηση. Τέτοιοι αλγόριθμοι μπορούν να λειτουργούν μόνο σε λειτουργία μπλοκ (που λειτουργεί σε μπλοκ δεδομένων σταθερού μεγέθους) ή σε λειτουργία ροής (που λειτουργεί σε bits ή byte δεδομένων). Τέτοιοι αλγόριθμοιχρησιμοποιούνται επίσης συνήθως για εφαρμογές όπως κρυπτογράφηση δεδομένων, κρυπτογράφηση αρχείων και κρυπτογράφηση μεταδιδόμενων δεδομένων σε δίκτυα επικοινωνίας (όπως TLS, email, άμεσα μηνύματα κ.λπ.)

Ασύμμετροι (ή δημόσιο κλειδί) Αλγόριθμοι κρυπτογράφησης

Σε αντίθεση με τους συμμετρικούς αλγόριθμους, οι οποίοι χρησιμοποιούν το ίδιο κλειδί τόσο για κρυπτογράφηση όσο και για λειτουργίες αποκρυπτογράφησης, οι ασύμμετροι αλγόριθμοι χρησιμοποιούν δύο πανομοιότυπα κλειδιά για αυτά τα δύο βήματα. Αυτοί οι αλγόριθμοι χρησιμοποιούνται για τον υπολογισμό ψηφιακών υπογραφών και βασικών πρωτοκόλλων δημιουργίας. Ωστόσο, αυτό έρχεται επίσης με μια πρόκληση ότι πρέπει να χρησιμοποιηθούν δύο κλειδιά που καθιστούν τα πράγματα πιο περίπλοκα.



Για να διαμορφώσετε οποιοδήποτε βασικό σχήμα κρυπτογράφησης με ασφάλεια, είναι πολύ σημαντικό όλες αυτές οι παράμετροι (τουλάχιστον) να έχουν σχεδιαστεί σωστά:

  • Η επιλογή του σωστού αλγορίθμου είναι σημαντική.
  • Επιλογή του σωστού τρόπου λειτουργίας για την κατάλληλη εργασία
  • Επιλογή του σωστού συστήματος γεμίσματος σύμφωνα με τις απαιτήσεις
  • Επιλέγοντας τα σωστά κλειδιά και τα μεγέθη τους ανάλογα
  • Σωστή προετοιμασία με κρυπτογραφικά ασφαλή CSPRING.

Είναι πολύ σημαντικό να γνωρίζετε την ασφαλή διαμόρφωση όλων αυτών των παραμέτρων. Ακόμη και μια μικρή εσφαλμένη διαμόρφωση μπορεί να θέσει σε κίνδυνο ένα ολόκληρο σύστημα κρυπτογράφησης και να το ανοίξει σε επιθέσεις από χάκερ και άλλα κακόβουλα προγράμματα. Ως εκ τούτου, για να διατηρήσουμε αυτήν τη συζήτηση απλή, ας συζητήσουμε μόνο τις αρχικοποιήσεις ανεξάρτητες από τον αλγόριθμο ενός Cipher. Αντί να κάνετε τέτοιες κρυπτογραφίες μόνοι σας, είναι πάντα καλύτερο να αφήσετε τους ειδικούς να κάνουν τη δουλειά τους, διαμορφώνοντας περισσότερες διαμορφώσεις που εξαρτώνται από αλγόριθμους, όπως τιμές p και q του αλγορίθμου RSA κ.λπ. δωδεκάδες, μαθήματα χρησιμοποιούνται.

Η εισαγωγή των ιεραρχικών τάξεων, πολλοί υπερφορτωμένοι κατασκευαστές / μέθοδοι και ούτω καθεξής, προσθέτοντας πολλές πολυπλοκότητες, που το καθιστούν περιττό. Μακάρι η Java να μην περιπλέκει τις βασικές διαμορφώσεις και να χρησιμοποιεί απλώς μια πιο απλοποιημένη αρχιτεκτονική όπως αυτή της Microsoft, όπου όλες αυτές οι παράμετροι βρίσκονται εντός της περιμέτρου ενός μονομερούς Συμμετρικού Αλγόριθμου και Ασύμμετρου Αλγόριθμου. Για τις τρεις πρώτες παραμέτρους που θα καθοριστούν (αλγόριθμος, τρόπος λειτουργίας και σχήμα padding), ένα αντικείμενο Cipher χρησιμοποιεί μια συμβολοσειρά μετασχηματισμού.

  • Επιλέγοντας τον σωστό αλγόριθμο

Μια συμβολοσειρά μετατροπής περιλαμβάνει αναμφίβολα το όνομα ενός κρυπτογραφικού αλγορίθμου. Μεταξύ συμμετρικής και ασύμμετρης κρυπτογράφησης, υπάρχουν 11 αλγόριθμοι (δεν αφορούν διάφορους συνδυασμούς PBEWithAnd), οι οποίοι μπορούν να καθοριστούν σύμφωνα με την τεκμηρίωση ονόματος τυπικού αλγορίθμου. Από αυτούς μόνο δύο (ένα για το καθένα, συμμετρικές και ασύμμετρες κρυπτογραφήσεις) είναι πραγματικά πλήρως ασφαλείς.

περιοδικός πίνακας εργαλείων devops

Οι υπόλοιποι αλγόριθμοι είτε έχουν σπάσει υπερβολικά (DES, RC2, κ.λπ.) είτε έχουν αρχίσει να εμφανίζονται ρωγμές (RC5), καθιστώντας τον εύθραυστο με επαρκή ισχύ CPU - μπορεί να έχει ήδη σπάσει τη στιγμή που θα το διαβάσετε. Ένας προγραμματιστής με γνώμονα την ασφάλεια ενδέχεται να μην διαβάσει πολλά από τις προδιαγραφές NIST, ούτε να ακολουθήσει τα τελευταία γεγονότα και έρευνα στην κοινότητα κρυπτογραφίας. Θα μπορούσαν να πάρουν τους σπασμένους ή επικίνδυνους αλγόριθμους, την πέψη ή την ψευδο-τυχαία γεννήτρια.

Πάντα για:

  1. Συμμετρικός αλγόριθμος: Χρησιμοποιείται κρυπτογράφηση μπλοκ AES / AESWrap.

  2. Ασύμμετρος αλγόριθμος: Χρησιμοποιείται RSA.

  • Τρόπος λειτουργίας

Ο τρόπος λειτουργίας είναι μέρος του μετασχηματισμού και αφορά μόνο τα μπλοκ κρυπτογράφησης. Όταν χρησιμοποιούμε ασύμμετρα ciphers, χρησιμοποιήστε το ECB ως τον τρόπο λειτουργίας, ο οποίος ουσιαστικά είναι ένα hack παρασκήνιο, που σημαίνει ότι αγνοείτε αυτήν την τιμή. Οι πάροχοι Java όπως SunJCE, SunPKCS11 προεπιλογούν στη λειτουργία ECB για συμμετρικούς και ασύμμετρους αλγορίθμους. Μπορεί να είναι καλό για ασύμμετρους αλγόριθμους, αλλά κακή ιδέα για μπλοκ κρυπτογράφησης.

Θα μπορούσαν να δοθούν οδηγίες στους παρόχους να κάνουν ασφαλείς προεπιλογές με βάση τον αλγόριθμο που χρησιμοποιήθηκε. Χρησιμοποιήστε συμμετρική κρυπτογράφηση για να σας σώσει από επιθέσεις επανάληψης ή επιθέσεις γνωστού-απλού κειμένου. Επίσης, χρησιμοποιήστε έναν μετασχηματισμό, ο οποίος καθορίζει πλήρως έναν αλγόριθμο (δηλαδή με τον τρόπο λειτουργίας και το padding). Ποτέ, μην κάνετε κάτι σαν αυτό που αναφέρεται παρακάτω.

Όπως παραπάνω, ο αλγόριθμος AES θα χρησιμοποιηθεί με τον τρόπο λειτουργίας ECB, καθιστώντας τις επιθέσεις επανάληψης πολύ εύκολη. Για νέα ανάπτυξη, εάν υπάρχει η παραμικρή πιθανότητα ανανέωσης παλαιάς εργασίας, θα πρέπει να χρησιμοποιήσουμε την επικυρωμένη κρυπτογράφηση με τη λειτουργία συσχετισμένων δεδομένων (AEAD) (Για παράδειγμα, GCM και CCM). Έχουμε μια ετικέτα ελέγχου ταυτότητας με πλήρες μήκος 128 bit. Εάν χρησιμοποιούμε λειτουργία χωρίς έλεγχο ταυτότητας, χρησιμοποιούμε CBC ή CTR με MAC για έλεγχο ταυτότητας του κρυπτογραφημένου κειμένου.

  • Επιλογή του κατάλληλου σχήματος γεμίσματος

Οι κοινές λειτουργίες κρυπτογράφησης μπλοκ χρειάζονται το μήκος του απλού κειμένου να είναι πολλαπλάσιο του μεγέθους μπλοκ του υποκείμενου αλγορίθμου κρυπτογράφησης, κάτι που σπάνια συμβαίνει. Επομένως, χρειαζόμαστε κάποια επένδυση.Το πρόγραμμα Java μας παρέχει τρία διαφορετικά σχήματα για συμμετρική κρυπτογράφηση, το ένα είναι το No Padding, το οποίο είναι απαράδεκτο και το άλλο είναι το ISO10126Padding που αποσύρεται από το 2007).

Επομένως, η μόνη κατάλληλη επιλογή είναι η χρήση PKCS5Padding. Το μείγμα ορισμένων τρόπων λειτουργίας (για παράδειγμα λειτουργία CBC) και το σχήμα padding PKCS5Padding μπορεί να οδηγήσει σε επιθέσεις padacle. Το να μην αναφέρω καθόλου ένα σχέδιο padding είναι πιο επικίνδυνο από το να παρέχει ένα πρόγραμμα που είναι ευαίσθητο μόνο σε συγκεκριμένους τύπους επιθέσεων. Συνιστάται ο τρόπος λειτουργίας AEAD για να είστε σίγουροι ότι είστε προστατευμένοι από αυτές τις επιθέσεις.

  • Ασύμμετροι αλγόριθμοι

Σε ασύμμετρους αλγόριθμους, έχουμε την επιλογή να επιλέξουμε από δύο σχήματα padding. Είναι σημαντικό να διασφαλιστεί ότι χρησιμοποιούνται μόνο σχήματα OAEPWithAndPadding. Σε περίπτωση πέψης, χρησιμοποιήστε SHA1 ή SHA256 / 384/512. Για τη λειτουργία δημιουργίας μάσκας (MGF), χρησιμοποιήστε την επένδυση MGF1 όπως καθορίζεται. Το PKCS1Padding με RSA είναι ευάλωτο σε επιθέσεις Ciphertext [6] από το 1998.

Εδώ μιλάμε για τον σωστό τρόπο χρήσης ενός μετασχηματισμού σε μια μέθοδο 'Cipher.getInstance'.

εκτέλεση ερωτήματος κυψέλης από τη γραμμή εντολών
  • Συμμετρική κρυπτογράφηση

  • Ασύμμετρη κρυπτογράφηση

Ένα επίπεδο ασφάλειας οποιουδήποτε σχήματος κρυπτογράφησης είναι άμεσα ανάλογο με το μέγεθος του κλειδιού του. Το μήκος του κλειδιού πρέπει να είναι αρκετά μεγάλο ώστε ό, τι και αν επιτίθεται βίαια δύναμη να γίνει ανέφικτο ταυτόχρονα, θα πρέπει επίσης να είναι αρκετά μικρό ώστε να λαμβάνεται υπόψη η υπολογιστική σκοπιμότητα. Επιπλέον, πρέπει να προσπαθήσουμε να εξετάσουμε τι εξακολουθεί να αντέχει σε υπολογιστικές προόδους για τα επόμενα 30 χρόνια.

Με αυτό, φτάνουμε στο τέλος του άρθρου Κρυπτογράφηση σε Java. Ελπίζω να έχετε μια ιδέα της κρυπτογράφησης και της αποκρυπτογράφησης και γιατί χρησιμοποιείται στην Java.

Δείτε το από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία εκμάθησης με δίκτυο περισσότερων από 250.000 ικανοποιημένων μαθητών σε όλο τον κόσμο. Το μάθημα εκπαίδευσης και πιστοποίησης Java J2EE και SOA της Edureka έχει σχεδιαστεί για φοιτητές και επαγγελματίες που θέλουν να γίνουν προγραμματιστές Java. Το μάθημα έχει σχεδιαστεί για να σας δώσει μια πρώτη αρχή στον προγραμματισμό Java και να σας εκπαιδεύσει τόσο για τις βασικές όσο και για τις προηγμένες ιδέες Java μαζί με διάφορα πλαίσια Java όπως το Hibernate & Spring.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων αυτού του ιστολογίου 'Encryption in Java' και θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό.