Κρυπτογράφηση αρχείων Openssl. Κρυπτογράφηση αρχείων με κωδικό πρόσβασης χρησιμοποιώντας OpenSSL. Αρχειοθέτηση καταλόγου και κρυπτογράφηση

Κρυπτογράφηση ενός μόνο αρχείου

# openssl aes-128-cbc -salt -in file -out file.aes # αρχείο κρυπτογράφησης# openssl aes-128-cbc -d -salt -in file.aes ​​-out file # αποκρυπτογράφηση αρχείουΦυσικά, το αρχείο μπορεί να είναι και αρχείο.

Αρχειοθέτηση καταλόγου και κρυπτογράφηση

# tar -cf - κατάλογος | openssl aes-128-cbc -salt -out directory.tar.aes # openssl aes-128-cbc -d -salt -in directory.tar.aes | tar -x -f -

Το ίδιο, μόνο το αρχείο τύπου tar.gz

# tar -zcf - κατάλογος | openssl aes-128-cbc -salt -out directory.tar.gz.aes # zip και κρυπτογράφηση καταλόγων# openssl aes-128-cbc -d -salt -in directory.tar.gz.aes | tar -xz -f - # αποκρυπτογραφήστε καταλόγους και αποσυσκευάστε το αρχείο
  • Χρήση -k mysecretpasswordμετά aes-128-cbc, για να μην σας ζητηθεί κωδικός πρόσβασης, αλλά έχετε υπόψη σας ότι αυτό είναι πολύ ανασφαλές.
  • Χρήση aes-256-cbcαντί aes-128-cbcγια να αποκτήσετε έναν πιο σταθερό κρυπτογράφηση, η κατανάλωση του επεξεργαστή αυξάνεται.

Κρυπτογράφηση GPG

Εναλλακτική λύση PGPαδειούχος GPL(Γενική δημόσια άδεια GNU). Το GnuPG είναι ένας πολύ διάσημος τρόπος κρυπτογράφησης και υπογραφής email ή άλλων δεδομένων, και το gpg παρέχει επίσης ένα προηγμένο σύστημα διαχείρισης κλειδιών. Αυτά τα παραδείγματα καλύπτουν μόνο την κρυπτογράφηση αρχείων. Ο απλούστερος είναι ο συμμετρικός κρυπτογράφηση. Σε αυτήν την περίπτωση, το αρχείο κρυπτογραφείται χρησιμοποιώντας έναν κωδικό πρόσβασης, οπότε κάποιος που γνωρίζει τον κωδικό πρόσβασης μπορεί να τον αποκρυπτογραφήσει, χωρίς να απαιτούνται κλειδιά. GPGπροσθέτει την επέκταση "* .gpg" στο όνομα του κρυπτογραφημένου αρχείου. # αρχείο gpg -c # Κρυπτογράφηση αρχείου με κωδικό πρόσβασης# gpg file.gpg # Αποκρυπτογράφηση αρχείου ( -οάλλο αρχείο)

Κρυπτογράφηση με χρήση ζεύγους κλειδιών

Για περισσότερες πληροφορίες, ανατρέξτε στην τεκμηρίωση GPG Quick Start, GPG / PGP Basics και gnupg. Ιδιωτικό κλειδί και δημόσιο κλειδί, η βάση της ασύμμετρης κρυπτογραφίας. Πράγματα που πρέπει να θυμάστε:
  • Το δημόσιο κλειδί σας χρησιμοποιείται από άλλους για την κρυπτογράφηση αρχείων που, ως παραλήπτες, μόνο εσείς μπορείτε να αποκρυπτογραφήσετε (ούτε καν αυτός που το κρυπτογραφούσε).
  • Το ιδιωτικό σας κλειδί είναι κρυπτογραφημένο με κωδικό πρόσβασης και χρησιμοποιείται για την αποκρυπτογράφηση αρχείων που είναι κρυπτογραφημένα με το δημόσιο κλειδί σας. Το ιδιωτικό κλειδί πρέπει να φυλάσσεται σε ασφαλές μέρος. Θυμηθείτε, εάν χαθεί το ιδιωτικό κλειδί ή ο κωδικός πρόσβασης, τα κρυπτογραφημένα αρχεία θα εξαφανιστούν μαζί τους.
  • Ένα αρχείο κλειδιού μπορεί να περιέχει πολλά κλειδιά.
Πρώτα πρέπει να δημιουργήσετε ένα ζεύγος κλειδιών. Οι προεπιλογές είναι καλές, αλλά θα χρειαστεί να εισαγάγετε όνομα, διεύθυνση email και σχόλιο (προαιρετικό). Το σχόλιο είναι χρήσιμο όταν δημιουργείτε περισσότερα από ένα κλειδιά για ένα δεδομένο όνομα / e-mail. Επίσης, θα χρειαστεί να καθορίσετε μια φράση-κλειδί (ακριβώς μια φράση και όχι μια λέξη). # gpg --gen-key # Αυτό μπορεί να πάρει κάποιο χρόνοΤα κλειδιά αποθηκεύονται σε ~ / .gnupg /μέσα και μέσα Γ: / Έγγραφα και ρυθμίσεις /% USERNAME% / Δεδομένα εφαρμογής / gnupg /... στα Windows. ~ / .gnupg / pubring.gpg # Περιέχει το δημόσιο κλειδί και τα εισαγόμενα κλειδιά~ / .gnupg / secring.gpg # Μπορεί να περιέχει περισσότερα από ένα κλειδιάΜερικές επιλογές που χρησιμοποιούνται συνήθως:
  • -μιΚρυπτογράφηση δεδομένων
  • -ρεΑποκρυπτογράφηση δεδομένων
  • -rΚρυπτογράφηση NAME για τον παραλήπτη NAME (ή "πλήρες όνομα" ή " [email προστατευμένο]")
  • -έναΔημιουργήστε έξοδο κλειδιού "ascii armored".
  • -οΈξοδος σε αρχείο

Κρυπτογράφηση μόνο για προσωπική χρήση

Δεν απαιτεί εξαγωγή/εισαγωγή κανενός κλειδιού, το έχετε ήδη. # gpg -e -r Αρχείο "Το όνομά σας". # Κρυπτογράφηση με δημόσιο κλειδί# gpg -o αρχείο -d file.gpg # Αποκρυπτογράφηση. Επιλογή που χρησιμοποιείται -ο, διαφορετικά πηγαίνετε στο stdout

Κρυπτογράφηση - αποκρυπτογράφηση με χρήση κλειδιών

Αρχικά, πρέπει να εξαγάγετε το δημόσιο κλειδί σας, ώστε να μπορεί να χρησιμοποιηθεί για την αποκρυπτογράφηση δεδομένων. Πρέπει επίσης να εισαγάγετε το δημόσιο κλειδί από την Alice για να κρυπτογραφήσετε τα αρχεία για αυτήν. Τα κλειδιά μπορούν να περάσουν σε ένα κανονικό αρχείο ascii. Για παράδειγμα, η Alice εξάγει ένα κλειδί, το εισάγετε για τον εαυτό σας, τώρα μπορείτε να κρυπτογραφήσετε αρχεία για αυτήν και μόνο αυτή μπορεί να τα αποκρυπτογραφήσει. # gpg -a -o alicekey.asc --εξαγωγή "Alice" # Η Alice θα εξαγάγει το κλειδί σε ένα αρχείο ascii.# gpg --send-keys --keyserver subkeys.pgp.net KEYID # Η Αλίκη βάζει το κλειδί στον διακομιστή.# gpg --import alicekey.asc # Εισάγετε μόνοι σας το κλειδί.# gpg --search-keys --keyserver subkeys.pgp.net "Alice" # Ή πάρτε το από τον διακομιστή.# gpg -e -r Αρχείο "Alice". # Κρυπτογράφηση αρχείου για την Alice.# gpg -d file.gpg -o αρχείο # Αποκρυπτογραφήστε το αρχείο που κρυπτογραφήθηκε από την Alice για εσάς.

Διαχείριση κλειδιών

# gpg --list-keys # Λίστα δημόσιων κλειδιών με KEYIDS Το KEYID ακολουθεί το "/" π.χ. για: pub 1024D / D12B77CE - Το KEYID είναι D12B77CE# gpg --gen-revoke "Το όνομά σου" # Δημιουργία CRL (λίστα ανάκλησης πιστοποιητικών)# gpg --list-secret-keys # Λίστα ιδιωτικών κλειδιών# gpg --delete-keys NAME # Αφαιρέστε το δημόσιο κλειδί από το τοπικό "keychain"# gpg --delete-secret-key NAME # Αφαιρέστε το ιδιωτικό κλειδί από την τοπική "μπρελόκ"# gpg --δακτυλικό αποτύπωμα KEYID # Εμφάνιση δακτυλικού αποτυπώματος κλειδιού# gpg --edit-key KEYID # Κλειδί επεξεργασίας (για παράδειγμα, υπογραφή ή προσθήκη/αφαίρεση email)

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

Για τέτοιες εργασίες, το OpenSSL είναι αρκετά κατάλληλο - μια αξιόπιστη λύση πολλαπλών πλατφορμών. Το OpenSSL υποστηρίζει διάφορους αλγόριθμους κρυπτογράφησης, συν το ότι εγκαθίσταται από προεπιλογή σε πολλά λειτουργικά συστήματα και η εγκατάσταση σε άλλα είναι εύκολη.

Κάτω από το habrakat - τα βασικά της χρήσης συμμετρικής και ασύμμετρης κρυπτογράφησης στο OpenSSL, καθώς και μερικά σενάρια που απλοποιούν την ασύμμετρη κρυπτογράφηση με ένα κλειδί μίας χρήσης.

Ο απλούστερος τρόπος για να προστατεύσετε τα δεδομένα σας με το OpenSSL είναι με συμμετρική κρυπτογράφηση. Οι ακόλουθες εντολές κρυπτογραφούν και αποκρυπτογραφούν το αρχείο document.zip χρησιμοποιώντας AES με κλειδί 256 bit:

Openssl enc -aes-256-cbc -salt -in documents.zip -out documents.enc
openssl enc -d -aes-256-cbc -in documents.enc -out documents.zip

Το πρόβλημα με αυτές τις εντολές μπορεί να είναι ότι απαιτούν κωδικό πρόσβασης. Υπάρχουν περιπτώσεις που αυτό είναι ανεπιθύμητο. Για παράδειγμα, αυτόματη δημιουργία αντιγράφων ασφαλείας / κρυπτογράφηση δεδομένων σε ένα χρονοδιάγραμμα ή εάν τα δεδομένα είναι κρυπτογραφημένα από ένα άτομο και αποκρυπτογραφημένα από άλλο.

Η κρυπτογράφηση δημόσιου κλειδιού επινοήθηκε ακριβώς για τέτοιες περιπτώσεις. Γενικά, θα χρειαστεί να δημιουργήσετε δημόσια και ιδιωτικά κλειδιά. Η πρώτη εντολή θα δημιουργήσει το ιδιωτικό κλειδί private.pem, η δεύτερη θα δημιουργήσει το δημόσιο κλειδί public.pem:

Openssl genrsa -out private.pem -aes256 2048
openssl rsa -in private.pem -pubout -out public.pem

Ως αποτέλεσμα, λαμβάνετε ένα ζεύγος κλειδιών RSA 2048-bit. Δυστυχώς, στο σύστημα RSA, το μέγεθος των κρυπτογραφημένων δεδομένων περιορίζεται από το μέγεθος του κλειδιού, επομένως δεν μπορείτε να κρυπτογραφήσετε περισσότερα από 2 KB δεδομένων. Υπάρχει τρόπος να αποφύγετε αυτό - οι πληροφορίες κρυπτογραφούνται πρώτα με έναν συμμετρικό αλγόριθμο (όπως αυτός που χρησιμοποιήθηκε παραπάνω) χρησιμοποιώντας ένα κλειδί μίας χρήσης. Αυτό το κλειδί μίας χρήσης κρυπτογραφείται στη συνέχεια με το δημόσιο κλειδί. Κατά την αποκρυπτογράφηση, το κλειδί μιας χρήσης αποκρυπτογραφείται ιδιωτικό. Περισσότερα για αυτό έχουν ήδη γραφτεί πολύ καλά.

Η ακόλουθη δέσμη ενεργειών θα βοηθήσει στην αυτοματοποίηση της κρυπτογράφησης, στην έξοδο της οποίας θα λάβετε ένα κλειδί μίας χρήσης και δεδομένα (encrypt.sh) σε κρυπτογραφημένη μορφή:

FILENAME = "$ 1"
PUBLICKEY = "2$"
SESSIONKEY = "3 $"
ΑΠΟΤΕΛΕΣΜΑ = "4$"

# Δημιουργήστε το τυχαίο συμμετρικό κλειδί
PASSIZE = 30
εάν [-c / dev / urandom]; τότε
KEY = `head -c 30 / dev / urandom | openssl enc -base64`
αλλού
KEY = `openssl rand -base64 30`
fi
ΚΛΕΙΔΙ εξαγωγής

# Κρυπτογραφήστε το συμμετρικό κλειδί χρησιμοποιώντας το δημόσιο κλειδί
openssl rsautl -κρυπτογράφηση -inkey "$ PUBLICKEY" -out "$ SESSIONKEY" -pubin<ΚΛΕΙΔΙ $
ΕΟΦ

# Κρυπτογραφήστε το αρχείο
openssl enc -aes-256-cbc -pass env: KEY -in "$ FILENAME" -out "$ RESULT"

Η ακόλουθη εντολή χρησιμοποιεί το δημόσιο κλειδί public.pem για την κρυπτογράφηση του αρχείου document.zip. Θα δημιουργήσει ένα κρυπτογραφημένο κλειδί μίας χρήσης session.key και κρυπτογραφημένα δεδομένα documents.enc:

./encrypt.sh έγγραφα.zip public.pem session.key document.enc

Σενάριο αποκρυπτογράφησης (decrypt.sh):

PRIVATEKEY = "1$"
SESSIONKEY = "2$"
Κρυπτογραφημένο = "3 $"
DECRYPTED = "$ 4"

# Αποκρυπτογραφήστε το συμμετρικό κλειδί χρησιμοποιώντας το ιδιωτικό κλειδί
KEY = `openssl rsautl -decrypt -inkey" $ PRIVATEKEY "-in" $ SESSIONKEY "`
ΚΛΕΙΔΙ εξαγωγής

# Αποκρυπτογραφήστε το αρχείο
openssl enc -aes-256-cbc -d -pass env: KEY -in "$ ENCRYPTED" -out "$ DECRYPTED"

Η εντολή αποκρυπτογράφησης χρησιμοποιεί το ιδιωτικό κλειδί private.pem και το κλειδί μίας χρήσης session.key για την αποκρυπτογράφηση του αρχείου document.enc. Θα δημιουργήσει ένα αρχείο document.zip:

./decrypt.sh private.pem session.key documents.enc documents.zip

Όπως μπορείτε να δείτε, η κρυπτογράφηση δημόσιου κλειδιού μπορεί να είναι σχεδόν τόσο απλή όσο και η συμμετρική κρυπτογράφηση. Υπάρχει όμως ένας ακόμα πιο εύκολος τρόπος. Το ιστολόγιο SbF₅ με ώθησε να γράψω αυτήν την ανάρτηση. Ο συγγραφέας του (αναμφίβολα πιο εξελιγμένος στο bash από εμένα) έγραψε ένα σενάριο που αρχειοθετεί έναν φάκελο, τον κρυπτογραφεί με ένα δημόσιο κλειδί και δημιουργεί ένα άλλο σενάριο που περιέχει όλα όσα χρειάζεστε: ένα κλειδί μίας χρήσης, δεδομένα και τις πραγματικές εντολές αποκρυπτογράφησης. Επιπλέον, το σενάριο μπορεί να δημιουργήσει ένα ζεύγος κλειδιών RSA για εσάς:

./encrypt-file.sh -keys public.pem private.pem
./encrypt-file.sh φάκελος public.pem> decrypt-folder.sh
chmod + x decrypt-folder.sh
./decrypt-folder.sh private.pem> folder.tar

Σε αυτό το παράδειγμα, δημιουργήσαμε πρώτα ένα ζεύγος κλειδιών. Μετά από αυτό, ο φάκελος φακέλου κρυπτογραφήθηκε στο σενάριο decrypt-folder.sh και στη συνέχεια αποκρυπτογραφήθηκε στο αρχείο folder.tar. Ένα πιθανό μειονέκτημα αυτής της μεθόδου είναι ότι τα δεδομένα στο decrypt-folder.sh αποθηκεύονται σε μορφή BASE64 και επομένως το μέγεθός τους αυξάνεται.

UPDΜεταφέρθηκε στο ιστολόγιο Ασφάλεια πληροφοριών.

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

Για τέτοιες εργασίες, το OpenSSL είναι αρκετά κατάλληλο - μια αξιόπιστη λύση πολλαπλών πλατφορμών. Το OpenSSL υποστηρίζει διάφορους αλγόριθμους κρυπτογράφησης, συν το ότι εγκαθίσταται από προεπιλογή σε πολλά λειτουργικά συστήματα και η εγκατάσταση σε άλλα είναι εύκολη.

Κάτω από το habrakat - τα βασικά της χρήσης συμμετρικής και ασύμμετρης κρυπτογράφησης στο OpenSSL, καθώς και μερικά σενάρια που απλοποιούν την ασύμμετρη κρυπτογράφηση με ένα κλειδί μίας χρήσης.

Ο απλούστερος τρόπος για να προστατεύσετε τα δεδομένα σας με το OpenSSL είναι με συμμετρική κρυπτογράφηση. Οι ακόλουθες εντολές κρυπτογραφούν και αποκρυπτογραφούν το αρχείο document.zip χρησιμοποιώντας AES με κλειδί 256 bit:

Openssl enc -aes-256-cbc -salt -in documents.zip -out documents.enc
openssl enc -d -aes-256-cbc -in documents.enc -out documents.zip

Το πρόβλημα με αυτές τις εντολές μπορεί να είναι ότι απαιτούν κωδικό πρόσβασης. Υπάρχουν περιπτώσεις που αυτό είναι ανεπιθύμητο. Για παράδειγμα, αυτόματη δημιουργία αντιγράφων ασφαλείας / κρυπτογράφηση δεδομένων σε ένα χρονοδιάγραμμα ή εάν τα δεδομένα είναι κρυπτογραφημένα από ένα άτομο και αποκρυπτογραφημένα από άλλο.

Η κρυπτογράφηση δημόσιου κλειδιού επινοήθηκε ακριβώς για τέτοιες περιπτώσεις. Γενικά, θα χρειαστεί να δημιουργήσετε δημόσια και ιδιωτικά κλειδιά. Η πρώτη εντολή θα δημιουργήσει το ιδιωτικό κλειδί private.pem, η δεύτερη θα δημιουργήσει το δημόσιο κλειδί public.pem:

Openssl genrsa -out private.pem -aes256 2048
openssl rsa -in private.pem -pubout -out public.pem

Ως αποτέλεσμα, λαμβάνετε ένα ζεύγος κλειδιών RSA 2048-bit. Δυστυχώς, στο σύστημα RSA, το μέγεθος των κρυπτογραφημένων δεδομένων περιορίζεται από το μέγεθος του κλειδιού, επομένως δεν μπορείτε να κρυπτογραφήσετε περισσότερα από 2 KB δεδομένων. Υπάρχει τρόπος να αποφύγετε αυτό - οι πληροφορίες κρυπτογραφούνται πρώτα με έναν συμμετρικό αλγόριθμο (όπως αυτός που χρησιμοποιήθηκε παραπάνω) χρησιμοποιώντας ένα κλειδί μίας χρήσης. Αυτό το κλειδί μίας χρήσης κρυπτογραφείται στη συνέχεια με το δημόσιο κλειδί. Κατά την αποκρυπτογράφηση, το κλειδί μιας χρήσης αποκρυπτογραφείται ιδιωτικό. Περισσότερες λεπτομέρειες σχετικά με αυτό έχουν ήδη γραφτεί πολύ καλά στο άρθρο για το Habré.

Η ακόλουθη δέσμη ενεργειών θα βοηθήσει στην αυτοματοποίηση της κρυπτογράφησης, στην έξοδο της οποίας θα λάβετε ένα κλειδί μίας χρήσης και δεδομένα (encrypt.sh) σε κρυπτογραφημένη μορφή:

FILENAME = "$ 1"
PUBLICKEY = "2$"
SESSIONKEY = "3 $"
ΑΠΟΤΕΛΕΣΜΑ = "4$"

# Δημιουργήστε το τυχαίο συμμετρικό κλειδί
PASSIZE = 30
εάν [-c / dev / urandom]; τότε
KEY = `head -c 30 / dev / urandom | openssl enc -base64`
αλλού
KEY = `openssl rand -base64 30`
fi
ΚΛΕΙΔΙ εξαγωγής

# Κρυπτογραφήστε το συμμετρικό κλειδί χρησιμοποιώντας το δημόσιο κλειδί
openssl rsautl -κρυπτογράφηση -inkey "$ PUBLICKEY" -out "$ SESSIONKEY" -pubin<ΚΛΕΙΔΙ $
ΕΟΦ

# Κρυπτογραφήστε το αρχείο
openssl enc -aes-256-cbc -pass env: KEY -in "$ FILENAME" -out "$ RESULT"

Η ακόλουθη εντολή χρησιμοποιεί το δημόσιο κλειδί public.pem για την κρυπτογράφηση του αρχείου document.zip. Θα δημιουργήσει ένα κρυπτογραφημένο κλειδί μίας χρήσης session.key και κρυπτογραφημένα δεδομένα documents.enc:

./encrypt.sh έγγραφα.zip public.pem session.key document.enc

Σενάριο αποκρυπτογράφησης (decrypt.sh):

PRIVATEKEY = "1$"
SESSIONKEY = "2$"
Κρυπτογραφημένο = "3 $"
DECRYPTED = "$ 4"

# Αποκρυπτογραφήστε το συμμετρικό κλειδί χρησιμοποιώντας το ιδιωτικό κλειδί
KEY = `openssl rsautl -decrypt -inkey" $ PRIVATEKEY "-in" $ SESSIONKEY "`
ΚΛΕΙΔΙ εξαγωγής

# Αποκρυπτογραφήστε το αρχείο
openssl enc -aes-256-cbc -d -pass env: KEY -in "$ ENCRYPTED" -out "$ DECRYPTED"

Η εντολή αποκρυπτογράφησης χρησιμοποιεί το ιδιωτικό κλειδί private.pem και το κλειδί μίας χρήσης session.key για την αποκρυπτογράφηση του αρχείου document.enc. Θα δημιουργήσει ένα αρχείο document.zip:

./decrypt.sh private.pem session.key documents.enc documents.zip

Όπως μπορείτε να δείτε, η κρυπτογράφηση δημόσιου κλειδιού μπορεί να είναι σχεδόν τόσο απλή όσο και η συμμετρική κρυπτογράφηση. Υπάρχει όμως ένας ακόμα πιο εύκολος τρόπος. Το ιστολόγιο SbF₅ με ώθησε να γράψω αυτήν την ανάρτηση. Ο συγγραφέας του (αναμφίβολα πιο εξελιγμένος στο bash από εμένα) έγραψε ένα σενάριο που αρχειοθετεί έναν φάκελο, τον κρυπτογραφεί με ένα δημόσιο κλειδί και δημιουργεί ένα άλλο σενάριο που περιέχει όλα όσα χρειάζεστε: ένα κλειδί μίας χρήσης, δεδομένα και τις πραγματικές εντολές αποκρυπτογράφησης. Επιπλέον, το σενάριο μπορεί να δημιουργήσει ένα ζεύγος κλειδιών RSA για εσάς:

./encrypt-file.sh -keys public.pem private.pem
./encrypt-file.sh φάκελος public.pem> decrypt-folder.sh
chmod + x decrypt-folder.sh
./decrypt-folder.sh private.pem> folder.tar

Σε αυτό το παράδειγμα, δημιουργήσαμε πρώτα ένα ζεύγος κλειδιών. Μετά από αυτό, ο φάκελος φακέλου κρυπτογραφήθηκε στο σενάριο decrypt-folder.sh και στη συνέχεια αποκρυπτογραφήθηκε στο αρχείο folder.tar. Ένα πιθανό μειονέκτημα αυτής της μεθόδου είναι ότι τα δεδομένα στο decrypt-folder.sh αποθηκεύονται σε μορφή BASE64 και επομένως το μέγεθός τους αυξάνεται.

UPDΜεταφέρθηκε στο ιστολόγιο Ασφάλεια πληροφοριών.

OpenSSLΕίναι ένα ισχυρό σύνολο εργαλείων που μπορούν να χρησιμοποιηθούν κρυπτογράφηση αρχείων και μηνυμάτων.

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

Από αυτό το άρθρο θα μάθετε πώς κρυπτογράφηση και αποκρυπτογράφηση αρχείων και μηνυμάτωνμε κωδικό πρόσβασης από τη γραμμή εντολών στο Linux χρησιμοποιώντας OpenSSL.

Τρόπος: Κρυπτογράφηση του αρχείου

$ openssl enc -aes-256-cbc -salt -in file.txt-έξω file.txt.enc

Το 256bit AES είναι ένας κρυπτογραφικός αλγόριθμος που χρησιμοποιείται από την κυβέρνηση των Ηνωμένων Πολιτειών για την κρυπτογράφηση πληροφοριών στο πιο απόρρητο επίπεδό τους.

Επιλογή -άλας(αλάτι) πρέπει να χρησιμοποιείται ΠΑΝΤΑεάν το μυστικό κλειδί δημιουργείται από κωδικό πρόσβασης.

Χωρίς να χρησιμοποιήσετε την επιλογή -άλας, είναι δυνατό να διεξαχθεί μια πολύ αποτελεσματική επίθεση λεξικού, η οποία θα οδηγήσει στην αποκάλυψη κρυπτογραφημένων δεδομένων. Ο λόγος για αυτό είναι ότι χωρίς την προσθήκη του «αλατιού», ο ίδιος κωδικός θα παράγει πάντα το ίδιο μυστικό κλειδί.

Όταν χρησιμοποιείται αλάτι, τα πρώτα 8 byte δεσμεύονται για αλάτι. Δημιουργείται τυχαία όταν το αρχείο είναι κρυπτογραφημένο και διαβάζεται από το κρυπτογραφημένο αρχείο κατά την αποκρυπτογράφηση.

Τρόπος: Αποκρυπτογράφηση του αρχείου

$ openssl enc -aes-256-cbc -ρε-σε file.txt.enc-έξω file.txt

Κωδικοποίηση και αποκωδικοποίηση Base64

Η κωδικοποίηση Base64 είναι μια τυπική μέθοδος για τη μετατροπή δυαδικών πληροφοριών 8 bit σε ένα περιορισμένο υποσύνολο χαρακτήρων ASCII για ασφαλή μεταφορά σε συστήματα email και άλλα συστήματα που δεν υποστηρίζουν μορφή 8 bit.

Από προεπιλογή, δημιουργείται ένα κρυπτογραφημένο αρχείο σε δυαδική μορφή. Εάν πρόκειται να το στείλετε μέσω email, IRC κ.λπ., πρέπει να το αποθηκεύσετε κωδικοποιημένο στο Base64. Για να κρυπτογραφήσετε ένα αρχείο με κωδικοποίηση Base64, προσθέστε την επιλογή -ένα:

$ openssl enc -aes-256-cbc -αλάτι -ένα-σε file.txt-έξω file.txt.enc

Επιλογές Περιγραφή
-ένα Λέει στο OpenSSL ότι τα κρυπτογραφημένα δεδομένα είναι κωδικοποιημένα στο Base64.

Επίσης, επιλογή -ένα, πρέπει να καθοριστεί κατά την αποκρυπτογράφηση:

$ openssl enc -aes-256-cbc -ρε -ένα-σε file.txt.enc-έξω file.txt

Κρυπτογράφηση / Αποκρυπτογράφηση χωρίς προτροπή κωδικού πρόσβασης

Εφόσον ο κωδικός πρόσβασης είναι ορατός, αυτή η μέθοδος θα πρέπει να χρησιμοποιείται μόνο όπου η ασφάλεια δεν είναι σημαντική.

Από προεπιλογή, ο χρήστης ζητείται διαδραστικά για έναν κωδικό πρόσβασης.

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

Η κρυπτογράφηση δημόσιου κλειδιού επινοήθηκε ακριβώς για τέτοιες περιπτώσεις.

Κρυπτογραφήστε το αρχείο χρησιμοποιώντας τον παρεχόμενο κωδικό πρόσβασης:

$ openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc -κ ΠΕΡΑΣΜΑ

Αποκρυπτογραφήστε το αρχείο χρησιμοποιώντας τον παρεχόμενο κωδικό πρόσβασης:

$ openssl enc -aes-256-cbc -d -in file.txt.enc -out file.txt -κ ΠΕΡΑΣΜΑ

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

OpenSSH

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

ΠΛΗΡΟΦΟΡΙΕΣ

Μια πλήρης λίστα εντολών OpenSSL μπορεί να προβληθεί χρησιμοποιώντας τις ακόλουθες παραμέτρους: list-standart-commands, list-message-digest-commands, list-cipher-commands.

Έτσι το νούμερο ένα κόλπο είναι οι πολλαπλές συνδέσεις. Το OpenSSH είναι ικανό να χειρίζεται πολλές ταυτόχρονες συνδέσεις στο ίδιο μηχάνημα. Συνήθως, οι χρήστες απλώς εκτελούν μια εντολή και περιμένουν να ολοκληρωθεί για να εκτελέσουν την επόμενη. Ευτυχώς, αυτό το πρόβλημα μπορεί εύκολα να παρακαμφθεί με διαχωρισμό μιας σύνδεσης σε πολλές συνεδρίες. Απλώς προσθέστε τις ακόλουθες γραμμές στη διαμόρφωση ssh (~ / .ssh / config):

Αυτόματο ControlMaster ControlPath ~ / .ssh / mux_% h_% p_% r

Μπορείτε να δημιουργήσετε όσες συνδέσεις στον ίδιο διακομιστή κρίνετε κατάλληλο, χωρίς να χρειάζεται να ξοδέψετε χρόνο για εκ νέου έλεγχο ταυτότητας.


Το τέχνασμα νούμερο δύο είναι οι συνδέσεις μεσολάβησης. Ας υποθέσουμε ότι δεν μπορείτε να δημιουργήσετε απευθείας σύνδεση με τον διακομιστή SSH, αλλά μπορείτε να χρησιμοποιήσετε έναν άλλο κεντρικό υπολογιστή για αυτό, στον οποίο έχετε επίσης πρόσβαση SSH. Προσθέστε τις ακόλουθες γραμμές στο config σας:

ForwardAgent ναι Κεντρικός υπολογιστής HostName host.com ProxyCommand ssh proxy-host.com \ netcat -q 600% h% p

Η εντολή ssh host θα δημιουργήσει μια σύνδεση με τον διακομιστή host.com μέσω του διακομιστή proxy-host.com.

Το τρικ νούμερο τρία υπερβαίνει την απομόνωση HTTP. Πολλοί οργανισμοί όχι μόνο μειώνουν την επισκεψιμότητα που αντιπαθούν, αλλά αναγκάζουν τους χρήστες να συνδεθούν στο διαδίκτυο μόνο χρησιμοποιώντας το πρωτόκολλο HTTP. Αυτή η αδικία παρακάμπτεται εύκολα με το τιρμπουσόν (www.agroman.net/corkscrew/), το οποίο μπορεί να διώξει την κυκλοφορία SSH μέσω HTTP. Απλώς εγκαταστήστε το στον υπολογιστή σας και προσθέστε τις ακόλουθες γραμμές στη διαμόρφωση (όπου το proxy.com και το 80 είναι η εξωτερική διεύθυνση και θύρα διακομιστή μεσολάβησης HTTP):

Κεντρικός υπολογιστής * ProxyCommand τιρμπουσόν proxy.com 80% h% σελ

Όλες οι συνδέσεις θα περάσουν τώρα από τον καθορισμένο διακομιστή μεσολάβησης HTTP.

Τέχνασμα νούμερο τέσσερα - δοκιμή εύρους ζώνης δικτύου. Για να ελέγξετε την ταχύτητα σύνδεσης, δεν είναι απαραίτητο να εγκαταστήσετε εξειδικευμένο λογισμικό, αρκούν το βοηθητικό πρόγραμμα pv και το παλιό καλό SSH:

$ sudo apt-get εγκατάσταση pv $ ναι | pv | ssh host.com "cat> / dev / null"

Κόλπος αριθμός πέντε - ανάλυση απομακρυσμένης κίνησης δικτύου. Σχεδόν κάθε σύστημα UNIX διαθέτει sniffer δικτύου tcpdump, αλλά η ανάγνωση των αρχείων καταγραφής του είναι αρκετά κουραστική. Οι λειτουργίες OpenSSH βοηθούν στην απλοποίηση της ανάλυσης επισκεψιμότητας:

$ ssh [email προστατευμένο] tcpdump -w - "port! 22" \ | wireshark -k -i -

Τώρα όλη η κίνηση που διέρχεται από το host.com θα είναι ορατή στο παράθυρο γραφικών του wireshark του υπολογιστή σας.

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

$ sudo apt-get εγκατάσταση cstream $ tar -cj / backup | cstream -t 512k | \ ssh host "tar -xj -C / backup"

Κόλπο νούμερο επτά - πάντα ανοιχτή συνεδρία SSH. Οι χρήστες φορητών υπολογιστών, των οποίων η σύνδεση με το δίκτυο μπορεί να μην είναι μόνιμη, πρέπει να επανεκκινούν το πρόγραμμα-πελάτη SSH κάθε φορά που εμφανίζεται το δίκτυο και να το σκοτώνουν όταν η σύνδεση χαθεί. Αυτό μπορεί να αποφευχθεί χρησιμοποιώντας το εργαλείο autossh, το οποίο θα διατηρήσει την ψευδαίσθηση της μόνιμης σύνδεσης με τον διακομιστή, αποκαθιστώντας τη σύνδεση όταν το δίκτυο είναι διαθέσιμο:

$ sudo apt-get εγκατάσταση autossh $ autossh -M50000 -t server.example.com \ "screen -raAd mysession"

Κόλπος αριθμός οκτώ - εκτέλεση εντολής σε πολλούς διακομιστές ταυτόχρονα. Τα σχόλια είναι περιττά:

$ echo "uptime" | pee "ssh host1" "ssh host2" \ "ssh host3"

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

$ ssh [email προστατευμένο] cat / path / to / remote / file | \ διαφορά / διαδρομή / σε / τοπικό / αρχείο -

Το ίδιο μπορεί να γίνει για δύο αρχεία που βρίσκονται σε διαφορετικούς διακομιστές:

$ διαφορά<(ssh host1 cat /etc/apt/sources.list) \ <(ssh host2 cat /etc/apt/sources.list)

CPU0: RNG AES

Συγκριτική αξιολόγηση των αποτελεσμάτων κρυπτογραφικών εργαλείων που είναι ενσωματωμένα στην CPU της πλατφόρμας VIA Eden (οδηγίες επεξεργαστή για εργασία με τον αλγόριθμο συμμετρικής κρυπτογράφησης μπλοκ AES):

% openssl ταχύτητα -παρήλθε -evp aes-256-cbc τύπος 16 byte 64 byte 256 byte 1024 byte 8192 byte aes-256-cbc 21780.33k79591.78k 198578.01078.018k 198578.0103k.

Κόλπος αριθμός 10 - προβολή αρχείων καταγραφής από πολλαπλές μηχανές ταυτόχρονα. Χρησιμοποιώντας το multitail και το SSH, μπορείτε εύκολα να προβάλετε αρχεία καταγραφής από δύο διακομιστές ταυτόχρονα:

$ sudo apt-get install multitail $ multitail -l "ssh host1" tail -f \ /var/log/apache2/error.log "" -l "ssh host2 \" tail -f / var / log / apache2 / σφάλμα. ημερολόγιο ""

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

$ ssh [email προστατευμένο]"cd / κατάλογος && tar -cf -." | \ ssh [email προστατευμένο]"cd / κατάλογος && tar -xf -"

Κόλπος αριθμός 12 - αντιγραφή της εξόδου μιας απομακρυσμένης εντολής στο πρόχειρο. Είναι συχνά απαραίτητο να αντιγράψετε την έξοδο μιας απομακρυσμένης εντολής στο πρόχειρο για να την επικολλήσετε σε ένα email, μια ανάρτηση φόρουμ κ.λπ. Ο ευκολότερος τρόπος για να το κάνετε αυτό είναι να χρησιμοποιήσετε το βοηθητικό πρόγραμμα xclip:

$ ssh [email προστατευμένο] cat /file.txt | xclip

Κόλπος αριθμός 13 - συγχρονισμός χρόνου με SSH. Εάν το μηχάνημα δεν έχει πρόσβαση στον διακομιστή NTP ή ο πελάτης NTP δεν είναι εγκατεστημένος σε αυτόν, μπορείτε να συγχρονίσετε τον χρόνο μεταξύ των μηχανημάτων ως εξής:

# date --set = "$ (ssh [email προστατευμένο]ημερομηνία)"

Κόλπος αριθμός 14 - εγκατάσταση πακέτων από απομακρυσμένο μηχάνημα σε τοπικό μηχάνημα. Συχνά είναι απαραίτητο να συγχρονίσετε δύο μηχανές έτσι ώστε να έχουν εγκατεστημένο το ίδιο σύνολο πακέτων. Είναι δύσκολο να γίνει αυτό χρησιμοποιώντας τυπικές μεθόδους, αλλά χρησιμοποιώντας SSH είναι τόσο εύκολο όσο το ξεφλούδισμα των αχλαδιών:

# ssh remotehost "dpkg --get-selections" | \ dpkg --set-selections && αποεπιλέξτε εγκατάσταση

Κόλπο # 15 - Απομακρυσμένο στιγμιότυπο οθόνης. Είναι πολύ εύκολο να λάβετε μια εικόνα του διακομιστή X από ένα απομακρυσμένο μηχάνημα χρησιμοποιώντας το τυπικό πακέτο γραφικών ImageMagick:

# ssh [email προστατευμένο]"DISPLAY =: 0.0 εισαγωγή -window \ root -format png -" | εμφάνιση -μορφή png -

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

Host host.com Κρυπτογράφηση arcfour256 MAC [email προστατευμένο]

Κόλπος αριθμός 17 - Έξοδος ήχου από απομακρυσμένο μηχάνημα σε τοπικό μηχάνημα. Μερικές φορές θέλετε να λαμβάνετε ήχο μαζί με την εικόνα της επιφάνειας εργασίας του απομακρυσμένου μηχανήματος. Αυτό γίνεται με το τετριμμένο dd:

$ dd εάν = / dev / dsp | ssh -c arcfour -C \ [email προστατευμένο] dd του = / dev / dsp

Κόλπος αριθμός 18 - εκτέλεση τοπικής δέσμης ενεργειών σε απομακρυσμένο μηχάνημα. Συχνά χρειάζεται να εκτελέσετε ένα σενάριο σε ένα απομακρυσμένο μηχάνημα, αλλά η αντιγραφή του εκεί δεν είναι καθόλου απαραίτητη, απλώς εκτελέστε την ακόλουθη απλή εντολή:

$ ssh -T [email προστατευμένο] < script.sh

OpenSSL

Το OpenSSL είναι ένα σύστημα προστασίας δεδομένων και πιστοποίησης που αναπτύχθηκε ως απάντηση στη δημιουργία του Secure Socket Layer (SSL) από τη Netscape. Σε αντίθεση με τη δημοφιλή πεποίθηση, το OpenSSL δεν είναι καθόλου εργαλείο για την εφαρμογή του πρωτοκόλλου SSL και μπορεί να εκτελέσει μια μεγάλη ποικιλία λειτουργιών, όπως διαχείριση κλειδιών και πιστοποιητικών, υπολογισμό κατακερματισμών κ.λπ. Ακολουθεί μια ελλιπής λίστα με τις δυνατότητες αυτού του κρυπτογραφικού μηχανισμού συγκομιδής :

  • δημιουργία και διαχείριση κλειδιών RSA και DSA (εντολές rsa, dsa, dsaparam).
  • δημιουργία πιστοποιητικών σε μορφή x509, δημιουργία αιτημάτων για πιστοποίηση, αποκατάσταση (εντολές x509, req, verify, ca, crl, pks12, pks7).
  • συμμετρική και ασύμμετρη κρυπτογράφηση δεδομένων (εντολές enc, rsautl).
  • υπολογισμός κατακερματισμού (εντολή dgst).
  • εργαστείτε με S / MIME (εντολή s / mime).

Επίσης το OpenSSL μπορεί να χρησιμοποιηθεί για τον έλεγχο διακομιστών SSL και πελατών χρησιμοποιώντας ειδικές εντολές s πελάτεςδιακομιστή και να δοκιμάσει την ταχύτητα διαφόρων αλγορίθμων (ταχύτητα εντολών).

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


Ο χρόνος είναι χρήμα

Ένα από τα ενδιαφέροντα χαρακτηριστικά του OpenSSL είναι ότι μπορεί να αξιολογήσει τους αλγόριθμους που χρησιμοποιούνται και την ταχύτητα δημιουργίας μιας σύνδεσης SSL. Η τυπική εντολή s_time προορίζεται για αυτό. Για να υπολογίσετε την ταχύτητα δημιουργίας μιας σύνδεσης SSL, πρέπει να την εφαρμόσετε στην εντολή openssl:

$ openssl s_time -connect gmail.com:443 \ -www /test.html -νέες 103 συνδέσεις σε 0,75s; 137,33 συνδέσεις / δευτ. χρήστη, byte ανάγνωση 42436 103 συνδέσεις σε 31 πραγματικά δευτερόλεπτα, 412 byte ανάγνωση ανά σύνδεση

Το ίδιο μπορεί να γίνει με τους πιο ισχυρούς αλγόριθμους:

$ openssl s_time -ssl3 -cipher HIGH \ -connect gmail.com:443 -www / -νέες 99 συνδέσεις σε 0,73s; 135,62 συνδέσεις / δευτερόλεπτο χρήστη, byte ανάγνωση 40 788 99 συνδέσεις σε 31 πραγματικά δευτερόλεπτα, 412 byte ανάγνωση ανά σύνδεση

Αυτές οι δύο εντολές σας επιτρέπουν να προσδιορίσετε τη μέγιστη απόδοση του διακομιστή SSL. Αλλά ένας ακόμη πιο ενδιαφέρον τρόπος είναι να δοκιμάσετε όλους τους υποστηριζόμενους αλγόριθμους. Για να γίνει αυτό, θα πρέπει να καταφύγουμε στο σενάριο:

IFS = ":" για c σε $ (openssl ciphers -ssl3 RSA); do echo $ c openssl s_time -connect host: 443 -www / -new \ -time 10 -cipher $ c 2> & 1 | grep bytes ηχώ ολοκληρώθηκε

Αυτή η εντολή σάς επιτρέπει να μετρήσετε την ταχύτητα δημιουργίας μιας σύνδεσης SSL χρησιμοποιώντας διάφορους αλγόριθμους κρυπτογράφησης, οι οποίοι μπορούν να χρησιμοποιηθούν, για παράδειγμα, για τον συντονισμό ενός διακομιστή SSL. Εάν δεν διαθέτετε ήδη διακομιστή SSL, είναι εύκολο να τον προσομοιώσετε χρησιμοποιώντας το ίδιο το OpenSSL. Εκκινήστε τον διακομιστή OpenSSL στη μηχανή διακομιστή: