Signatur
Beschreibung
gnupg_sign erstellt eine kryptographische Signatur für den übergebenen Klartext. Der zu verwendende Schlüssel muss zuvor mit gnupg_addsignkey konfiguriert worden sein. Die Funktion nutzt den privaten Schlüssel des festgelegten Signierschlüssels.
Das Standard-Signaturformat ist eine clearsign-Signatur (normaler Text mit angehängter Signatur). Dieses Verhalten lässt sich über gnupg_setsignmode ändern, z. B. auf eine detachierte Signatur (GNUPG_SIG_MODE_DETACH) oder eine normale Signatur (GNUPG_SIG_MODE_NORMAL).
Typische Anwendungsfälle sind die Integritätssicherung von E-Mails, Software-Paketen oder Konfigurationsdateien, bei denen der Empfänger die Herkunft und Unverfälschtheit des Inhalts überprüfen können soll.
- GNUPG_SIG_MODE_NORMAL – Signatur und Text werden komprimiert zusammen ausgegeben.
- GNUPG_SIG_MODE_DETACH – Nur die Signatur wird zurückgegeben, nicht der Originaltext.
- GNUPG_SIG_MODE_CLEAR – Clearsign-Format (Standard): Lesbarer Text mit angehängter Signatur.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $identifier Pflicht | resource | Eine gültige GnuPG-Ressource, die zuvor mit gnupg_init() erstellt wurde. |
|
| $plaintext Pflicht | string | Der zu signierende Text oder Dateninhalt als Zeichenkette. |
Rückgabewert
false zurückgegeben. Über gnupg_geterror() kann die genaue Fehlermeldung abgerufen werden.Beispiele
Clearsign-Signatur erstellen
<?php
// GnuPG-Ressource initialisieren
$gpg = gnupg_init();
// Signierschlüssel setzen (Fingerabdruck + Passphrase)
$fingerprint = 'ABCDEF1234567890ABCDEF1234567890ABCDEF12';
gnupg_addsignkey($gpg, $fingerprint, 'meine-passphrase');
// Signaturmodus auf Clearsign setzen (Standardwert)
gnupg_setsignmode($gpg, GNUPG_SIG_MODE_CLEAR);
$nachricht = 'Dies ist eine wichtige Nachricht.';
$signiert = gnupg_sign($gpg, $nachricht);
if ($signiert === false) {
echo 'Fehler: ' . gnupg_geterror($gpg);
} else {
echo $signiert;
}
Detachierte Signatur erstellen
<?php
$gpg = gnupg_init();
$fingerprint = 'ABCDEF1234567890ABCDEF1234567890ABCDEF12';
gnupg_addsignkey($gpg, $fingerprint, 'meine-passphrase');
// Nur die Signatur zurückgeben (ohne Originaltext)
gnupg_setsignmode($gpg, GNUPG_SIG_MODE_DETACH);
$inhalt = file_get_contents('paket.tar.gz');
$signatur = gnupg_sign($gpg, $inhalt);
if ($signatur !== false) {
// Signatur separat speichern
file_put_contents('paket.tar.gz.sig', $signatur);
echo 'Detachierte Signatur wurde erstellt und gespeichert.';
} else {
echo 'Signierung fehlgeschlagen: ' . gnupg_geterror($gpg);
}
// Wichtig · Fallstricke
Sicherheitshinweis: Das Passwort für den privaten Schlüssel sollte niemals im Klartext im Quellcode hinterlegt werden. Verwende stattdessen Umgebungsvariablen oder sichere Secret-Management-Lösungen.
Die Funktion setzt einen zuvor mit gnupg_addsignkey() konfigurierten Schlüssel voraus — fehlt dieser, gibt gnupg_sign false zurück. Wird kein Signaturmodus mit gnupg_setsignmode() gesetzt, ist der Standard GNUPG_SIG_MODE_CLEAR.
Die GnuPG-Erweiterung muss in PHP aktiviert sein (extension=gnupg) und die gpgme-Bibliothek auf dem System installiert sein. Auf Servern ohne eigenen GPG-Schlüsselbund (z. B. in Docker-Containern) ist gegebenenfalls die Umgebungsvariable GNUPGHOME zu setzen.