Nochmals zu OpenSSL

In meiner noch kleinen Praxis auf dem Gebiet der Informationssicherheit musste ich mich einigen Kryptographieproblemen oder vielmehr der Verschlüsselung stellen, auf die ich kaum klare Antworten finden konnte. Aus diesem Grund habe ich beschlossen, einen kurzen Artikel über die Grundlagen der Arbeit mit OpenSSL zu schreiben.

In diesem Artikel werden die bekannten Probleme bei der Schlüsselgenerierung sowie das weniger bekannte Problem der Verschlüsselung großer Dateien erläutert. Eine Zertifizierung kommt hier nicht in Frage.

Fangen wir an. Tatsächlich ist bisher alles einfach.

Erstellen Sie mit dem Befehl einen privaten Schlüssel.

openssl genrsa -out key.pem -aes-256-cfb -rand /var/log/messages 4096 



Hier:

genrsa - ein Parameter, der die Erstellung eines Schlüssels durch den RSA-Verschlüsselungsalgorithmus angibt.
out - wo man den Schlüssel erstellt.
4096 ist die Schlüssellänge.
Im Allgemeinen reicht dies aus, um einen Schlüssel zu erstellen. Der private Schlüssel ist jedoch besser zu verschlüsseln.
aes-256-cfb - Algorithmus und Verschlüsselungsmodus.
rand / var / log / messages - zufällige Werte aus einem beliebigen Ordner, es ist besser, Protokolle zu erstellen, weil mit / dev / random oder / dev / urandom kann alles eng hängen, ich hatte es.
Beim Erstellen eines Schlüssels wird ein Passwort angefordert. Das Passwort ist die Grundlage für jeden Schutz. Versuchen Sie also, es zu beschnüffeln. Und denk dran.

Wir haben einen Schlüssel. Privat Zeigen und verstecken Sie sich niemals nach dem Prinzip von Koshchei dem Unsterblichen.

Auf dieser Grundlage werden wir eine öffentliche Version erstellen, die zumindest auf der Stirn öffentlich ausgestellt werden kann.

 openssl rsa -in privatkey.pem -pubout -out publickey.pem 



Jetzt haben wir ein Schlüsselpaar. Sie können den öffentlichen auf den Server hochladen, um über ssh mit Ihrem privaten Schlüssel eine Verbindung zu ihm herzustellen. Oder um eine kleine Datenmenge zu verschlüsseln, z. B. ein Token oder eine Passphrase usw.

Die Aufgabe, eine große Datei zu verschlüsseln, hat eine andere Lösung.

Um eine große Datenmenge zu verschlüsseln, verwenden wir beispielsweise diese PDF-Datei mit einer Größe von 1,8 MB.



Eine große Datenmenge wird mit einem symmetrischen Verschlüsselungsalgorithmus wie AES verschlüsselt. Hier verwenden wir asymmetrische Verschlüsselung, um einen symmetrischen Schlüssel zu übertragen, mit dem wir den Text verschlüsseln.

Fangen wir an.

Erstellen Sie einen symmetrischen Sitzungsschlüssel (einmalig) mit einer zufälligen Zeichenfolge und schreiben Sie ihn in eine Datei in der base64-Darstellung.

 openssl rand -base64 32 > key.bin 

Als nächstes verschlüsseln wir die Datei mit diesem Schlüssel:

 openssl enc -aes-256-cfb -salt -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc -pass file:./key.bin 



aes-256-cfb - Algorithmus und Verschlüsselungsmodus. Ich werde hier nicht über die Modi sprechen. Das ist das Beste.
Salz - Salz für größere kryptografische Stärke.
Pass-Datei: ./ key.bin - Verschlüsselungsschlüssel.

Als nächstes verschlüsseln wir den symmetrischen Schlüssel mit unserem öffentlichen "asymmetrischen" Schlüssel.

 openssl rsautl -encrypt -inkey publickey.pem -pubin -in key.bin -out key.bin.enc 



Ich habe eine verschlüsselte Datei und einen symmetrischen Schlüssel. Sie können es Ihrem Freund zur Entschlüsselung senden. Aber wir werden es uns selbst schicken, denn dies sind Hausaufgaben bei uns.

Löschen Sie nun den ursprünglichen symmetrischen Schlüssel! Damit niemand ihn jemals finden wird.

 shred -u key.bin 

Im Bild unten ist es nicht mehr da.



Jetzt entschlüsseln wir den symmetrischen Schlüssel mit unserem privaten asymmetrischen Schlüssel.

 openssl rsautl -decrypt -inkey privatkey.pem -in key.bin.enc -out key.bin 

Und wir, die Glücklichen, haben wieder einen symmetrischen Schlüssel zum Entschlüsseln unseres Textes, der immer noch verschlüsselt ist.

Das Bild ist wieder unten, es gibt wieder einen Schlüssel.



Jetzt entschlüsseln wir die Datei, die mit der symmetrischen Verschlüsselung verschlüsselt wurde, durch unseren neu verschlüsselten, dann aber mit dem symmetrischen Schlüssel mit asymmetrischer Verschlüsselung verschlüsselten Schlüssel.

 openssl enc -d -aes-256-cfb -in OWASP_Top_10-2017_\(en\).pdf.enc -out OWASP_Top_10-2017_\(en\)decrypt.pdf -pass file:./key.bin 

Beweis unten.



Jetzt: Warum ist es so kompliziert? Warum können Sie nicht alles mit asymmetrischer Verschlüsselung aufnehmen und tun?

Wir versuchen, direkt zum Rechen zu gehen;)
Wir haben!

Datei und Schlüssel.



Wir verschlüsseln.

 openssl rsautl -encrypt -inkey publickey.pem -pubin -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc 

POW - POW - POOOOOOOOOOOOH. Der Fehler. Zu viele Daten für die Schlüsselgröße. Bei asymmetrischer Verschlüsselung muss die Schlüsselgröße größer oder gleich dem Klartext sein.
OpenSSL hat Ihnen, wie im Deal mit dem Teufel, das gegeben, wonach Sie gefragt haben, aber nicht das, was Sie wollten. Richtig, die verschlüsselte Datei war leer.



Sie können jedoch eine kleinere Datei als den Schlüssel verschlüsseln. Lass es uns versuchen.

Erstellen Sie eine kleine Datei.

Zum Beispiel habe ich das getan:

 echo "hellow world my name is admin is a secret text nobody know it hahahahaahah" > text.txt 



Wir werden es mit unserem öffentlichen Schlüssel verschlüsseln, den jeder auf der Welt kennt!

 openssl rsautl -encrypt -inkey publickey.pem -pubin -in text.txt -out text.txt.enc 

Wie Sie im unteren Bild sehen können, ist die Datei verschlüsselt. Nichts ist klar! Wer versteht wer du bist?



Jetzt entschlüsseln wir, nachdem wir zuvor die Quelldatei für die Reinheit des Experiments gelöscht haben.

 openssl rsautl -decrypt -inkey privatkey.pem -in text.txt.enc -out text.txt 



Wir haben eine entschlüsselte Datei. Alles in Ordnung ist.

Um all dieses verschlüsselte Gut zu übertragen, ist es besser, letzteres in base64 zu kodieren. Dementsprechend müssen Sie vor dem Entschlüsseln zuerst entschlüsseln.
Codiert.

 openssl enc -base64 -in text.txt.enc -out text.txt.bs64 



Entschlüsselt.

 openssl enc -base64 -d -in text.txt.bs64 -out text.txt.enc 



Und wieder haben wir einen Beleberd, den niemand versteht! Wenn Sie verstehen, dann ist dieses Dokument nichts für Sie!

So funktioniert die Verschlüsselung beim Erstellen von Schlüsseln und Datenverschlüsselung am Beispiel des OpenSSL-Dienstprogramms.

Später werde ich die Verschlüsselungsmodi von blocksymmetrischen Chiffren beschreiben.

Source: https://habr.com/ru/post/de417069/


All Articles