it-swarm.com.de

Wie verwende ich * .pub/* .sec-Dateien, um eine andere Datei zu ver-/entschlüsseln?

Ich habe ein Paar von *.pub- und *.sec-Dateien mit den Anweisungen und dem folgenden Code erstellt:

https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html

(Ich verwende diese Dokumentation, weil die ultimative Anwendung, die ich in Mind habe, eine automatisierte Ver- und Entschlüsselungspipeline ist.)

Q1: Wie kann ich mit gpg2 und der *.pub-Datei eine andere Datei verschlüsseln?

Q2: Wie kann ich gpg2 und den Begleiter *.sec verwenden, um eine mit der Begleitdatei *.pub verschlüsselte Datei zu entschlüsseln?


Wichtig: _ ​​Ich interessiere mich nur für Antworten, die sich für die programmatische Implementierung einer unbeaufsichtigten Operation eignen. Bitte keine Antworten posten, die nur interaktiv ausgeführt werden können. Ich bin besonders interessiert Lösungen, die in Python implementiert werden können.


Bitte geben Sie genaue Hinweise auf die entsprechende Dokumentation an.

4
kjo

Einige Informationen zu dem, was Sie gesagt haben:

Ich habe mit den Anweisungen ein Paar * .pub- und * .sec-Dateien erstellt

Perfekt, um die öffentlichen Schlüssel mit Personen zu teilen, mit denen Sie Informationen austauschen. Technisch gesehen müssen Sie diese Dateien jedoch nicht direkt verwenden, wenn Sie programmgesteuert arbeiten.

Zu beachten:

  • wenn Sie Daten verschlüsseln, geben Sie den Empfänger an, der dem zu verschlüsselnden Schlüssel entspricht
  • wenn Sie Daten entschlüsseln, importieren Sie zuerst den öffentlichen Schlüssel des Eigentümers. Anschließend können Sie Daten entschlüsseln, ohne den Empfänger anzugeben, da er in die verschlüsselten Daten eingebettet ist

Eigentlich bin ich in dieser Frage etwas verwirrt. Ich habe widersprüchliche Informationen gelesen [...]

Ich stimme zu, dass es ziemlich verwirrend ist. In dieser Situation halte ich es für besser, Version 1 zu verwenden, für die mehr Erfahrung vorhanden ist und für die Sie eine Bibliothek von Drittanbietern verwenden.

In dieser Antwort habe ich versucht:

  • python-gnupg (für GnuPG v1) ist eine bekannte Python-Bibliothek, die perfekt auf Ihre Bedürfnisse abgestimmt ist
  • cryptorito (für GnuPG v2), für das ich nicht genügend Dokumentation gefunden habe

Mit der ersten Bibliothek können Sie sie einfach in Ihrem System installieren:

Sudo pip install python-gnupg

Schreiben Sie dann ein Python-Skript, um alle gewünschten Operationen auszuführen.

Ich habe eine einfache Antwort geschrieben, um Ihre Frage zu beantworten.

#!/bin/python

import gnupg

GPG_DIR='/home/bsquare/.gnupg'
FILE_TO_ENCRYPT='/tmp/myFileToEncrypt'
ENCRYPTED_FILE='/tmp/encryptedFile'
DECRYPTED_FILE='/tmp/decryptedFile'
SENDER_USER='Bsquare'
TARGET_USER='Kjo'

gpg = gnupg.GPG(gnupghome=GPG_DIR)

print("Listing keys ...")
print(gpg.list_keys())

# On SENDER_USER side ... encrypt the file for TARGET_USER, with his public key (would match the kjo.pub if the key was exported).
print("Encrypting file " + FILE_TO_ENCRYPT + " for " + TARGET_USER + " ...")
with open(FILE_TO_ENCRYPT, "rb") as sourceFile:
    encrypted_ascii_data = gpg.encrypt_file(sourceFile, TARGET_USER)
    # print(encrypted_ascii_data)
    with open(ENCRYPTED_FILE, "w+") as targetFile:
        print("encrypted_ascii_data", targetFile)


# On TARGET_USER side ... decrypt the file with his private key (would match the kjo.sec if the key was exported).
print("Decrypting file " + ENCRYPTED_FILE + " for " + TARGET_USER + " ...")
with open(ENCRYPTED_FILE, "rb") as sourceFile:
    decrypted_ascii_data = gpg.decrypt_file(sourceFile)
    # print(decrypted_ascii_data)
    with open(DECRYPTED_FILE, "w+") as targetFile:
        print(decrypted_ascii_data, targetFile)

Zu beachten ist, dass mein Schlüsselring ein pub/sec-Paar für meinen Bsquare-Benutzer und den pub-Schlüssel von Kjo-Benutzer enthält.

5
Bsquare ℬℬ

beim Betrachten Verschlüsseln und Entschlüsseln von Dokumenten

dies deutet auf pexpect ; während ich reguläre expect-Skripte zur Verfügung stellen kann:

dies ist keine direkte Python-Lösung, es sollte jedoch leicht zu portieren sein.

wie der Slogan lautet:

Pexpect macht Python zu einem besseren Werkzeug für die Steuerung anderer Anwendungen.

Verschlüsselung:

gpg --output doc.gpg --encrypt --recipient [email protected] doc

als expect-Skript; use ./encrypt.exp doc [email protected] 1234 (beachte das Leerzeichen nach dem :):

#!/usr/bin/expect -f
set filename [lindex $argv 0]
set recipient [lindex $argv 1]
set passphrase [lindex $argv 2]

spawn gpg --output $filename.gpg --encrypt --recipient $recipient $filename
expect -exact "Enter pass phrase: "
send -- "$passphrase\r"
expect eof

Entschlüsselung:

gpg --output doc --decrypt doc.gpg

als expect-Skript; Verwendung: ./decrypt.exp doc 1234:

#!/usr/bin/expect -f
set filename [lindex $argv 0]
set passphrase [lindex $argv 1]

spawn gpg --output $filename --decrypt $filename.gpg
expect -exact "Enter pass phrase: "
send -- "$passphrase\r"
expect eof

Einführen:

schlüssel können in beide Schlüsselketten importiert werden mit:

gpg --import somekey.sec
gpg --list-secret-keys

gpg --import somekey.pub
gpg --list-keys

es gibt kaum etwas zu automatisieren; Wenn Sie einen importierten Schlüssel als "vertrauenswürdig" festlegen, ist für die Automatisierung expect erforderlich. fand dieses Spickzettel , das alle Befehle auf einer Seite hat; und es gibt auch Hinweise für: If you have multiple secret keys, it'll choose the correct one, or output an error if the correct one doesn't exist (was meinen Kommentar unten bestätigen sollte).

datei ~/.gnupg/options ist eine Optionsdatei eines Benutzers ; wo kann man zb. Definieren Sie den Standard-Key-Server.

1
Martin Zeitler

Seit Version 2.1.14 unterstützt GPG die Option --recipient-file, mit der Sie den zu verschlüsselnden öffentlichen Schlüssel angeben können, ohne den Schlüsselbund zu verwenden. Um den Entwickler zu zitieren :

Es ist jetzt möglich, den Schlüsselbund zu umgehen und den öffentlichen Schlüssel zu nehmen direkt aus einer Datei. Diese Datei kann eine binäre oder eine gepflegte ASCII-Datei sein Schlüssel und nur der erste Schlüsselblock aus dieser Datei wird verwendet. Ein Schlüssel mit dieser Option angegeben ist immer voll vertrauenswürdig.

Diese Option kann mit den Standardoptionen -r Optionen ..__ gemischt werden. --hidden-receiver-file (oder -F) ist ebenfalls verfügbar.

Zur weiteren Unterstützung einiger Anwendungsfälle der Option

--kein Schlüsselring

wurde auch umgesetzt. Das ist ähnlich

--no-default-keyring --keyring/dev/null

aber portierbar für Windows und ignoriert auch jeden angegebenen Schlüsselbund (Befehlszeile oder Konfigurationsdatei).

So verschlüsseln Sie:

gpg --output myfileenc --encrypt --recipient-file key.pub myfile

Zur Automatisierung können Sie zusätzlich zu expect oder Python wie in den anderen Antworten beschrieben auch die --batch-Option verwenden. (Sie müssen sehen, welche der Antworten auf Ihrem System am besten funktioniert.).

Für den geheimen Schlüssel ist jedoch keine solche Option verfügbar, und in der Tat wurde dieselbe Version von PGP (2.1) /die secring-Option im Befehl --generate-key nicht mehr unterstützt Mehr. Der generierte Schlüssel muss dem Schlüsselbund hinzugefügt werden, der zur Entschlüsselung verwendet werden soll.

0
mnistic