Verschlüsselung & Signierung

Das Modul crypto erzeugt Zufallswerte, berechnet HMACs, ver- und entschlüsselt Daten, kodiert und prüft JWTs und leitet Schlüssel ab. In deterministischen Workflows laufen Zufallserzeugung und Verschlüsselung, die eine zufällige Nonce erzeugt, als aufgezeichnete Seiteneffekte; beim Replay werden die aufgezeichneten Bytes zurückgegeben. Andere Operationen wie HMAC, Entschlüsselung, JWT-Verarbeitung, PBKDF2 und Vergleich laufen direkt.

Diese Seite ist eine API-Referenz. Jeder Codeblock ist ein einzelner Aufruf und kein vollständiges System für Schlüsselverwaltung oder Authentifizierung. Namen wie data, key, aad, payload und token stehen für von der Anwendung bereitgestellte Werte. Laden Sie Schlüssel und Passwörter über die Geheimnisverwaltungsgrenze der Anwendung; kodieren Sie sie nicht fest und geben Sie sie weder in Logs noch in Diagnosen aus. Behandeln Sie bei jedem hier gezeigten Ergebnis vom Typ value, error zuerst den Fehler, bevor Sie den Wert verwenden.

Laden

local crypto = require("crypto")

Zufallsgenerierung

Zufallsbytes

local bytes, err = crypto.random.bytes(32)
Parameter Typ Beschreibung
length integer Anzahl Bytes (1 bis 1.048.576)

Gibt zurück: string, error

Zufallsstring

local str, err = crypto.random.string(32)
local str, err = crypto.random.string(32, "0123456789abcdef")
Parameter Typ Beschreibung
length integer Ausgabelänge in Bytes (1 bis 1.048.576)
charset string? Zu verwendendes ASCII-Bytealphabet (Standard: alphanumerisch)

Gibt zurück: string, error

Die Implementierung wählt Bytes aus dem angegebenen Alphabet. Ein Nicht-ASCII-Alphabet kann in ungültiges UTF-8 zerlegt werden; außerdem ist die Modulo-Auswahl nur dann exakt gleichverteilt, wenn die Bytelänge des Alphabets ein Teiler von 256 ist. Verwenden Sie für gleichverteiltes zufälliges Geheimmaterial crypto.random.bytes und kodieren Sie das Ergebnis für das erforderliche Transportformat.

Zufalls-UUID

local id, err = crypto.random.uuid()

Gibt zurück: string, error

HMAC

HMAC-SHA256

local hex, err = crypto.hmac.sha256(key, data)
Parameter Typ Beschreibung
key string HMAC-Schlüssel
data string Zu authentifizierende Daten

Gibt zurück: string, error

HMAC-SHA512

local hex, err = crypto.hmac.sha512(key, data)
Parameter Typ Beschreibung
key string HMAC-Schlüssel
data string Zu authentifizierende Daten

Gibt zurück: string, error

Verschlüsselung

AES-GCM {id="encrypt-aes-gcm"}

local encrypted, err = crypto.encrypt.aes(data, key)
local encrypted, err = crypto.encrypt.aes(data, key, aad)
Parameter Typ Beschreibung
data string Zu verschlüsselnder Klartext
key string 16, 24 oder 32 Bytes (AES-128/192/256)
aad string? Zusätzliche authentifizierte Daten

Gibt zurück: string, error (Nonce vorangestellt)

Beide Verschlüsselungsfunktionen erzeugen eine Nonce und stellen sie dem Ciphertext voran. Entfernen oder verwenden Sie die Nonce nicht erneut und verwenden Sie bei der Entschlüsselung dieselben AAD. Ciphertext ist kein geheimnisfreier Logwert: Er kann Längen- und Korrelationsinformationen preisgeben.

ChaCha20-Poly1305 {id="encrypt-chacha20"}

local encrypted, err = crypto.encrypt.chacha20(data, key)
local encrypted, err = crypto.encrypt.chacha20(data, key, aad)
Parameter Typ Beschreibung
data string Zu verschlüsselnder Klartext
key string Muss 32 Bytes sein
aad string? Zusätzliche authentifizierte Daten

Gibt zurück: string, error

Entschlüsselung

AES-GCM {id="decrypt-aes-gcm"}

local plaintext, err = crypto.decrypt.aes(encrypted, key)
local plaintext, err = crypto.decrypt.aes(encrypted, key, aad)
Parameter Typ Beschreibung
data string Verschlüsselte Daten von encrypt.aes
key string Gleicher Schlüssel wie bei Verschlüsselung
aad string? Muss mit AAD bei Verschlüsselung übereinstimmen

Gibt zurück: string, error

ChaCha20-Poly1305 {id="decrypt-chacha20"}

local plaintext, err = crypto.decrypt.chacha20(encrypted, key)
local plaintext, err = crypto.decrypt.chacha20(encrypted, key, aad)
Parameter Typ Beschreibung
data string Verschlüsselte Daten von encrypt.chacha20
key string Gleicher Schlüssel wie bei Verschlüsselung
aad string? Muss mit AAD bei Verschlüsselung übereinstimmen

Gibt zurück: string, error

JWT

Kodieren

local token, err = crypto.jwt.encode(payload, secret)
local token, err = crypto.jwt.encode(payload, secret, "HS256")
local token, err = crypto.jwt.encode(payload, private_key_pem, "RS256")
Parameter Typ Beschreibung
payload table JWT-Claims (_header für benutzerdefinierten Header)
key string Secret (HMAC) oder PEM-privater Schlüssel (RSA)
alg string? HS256, HS384, HS512, RS256 (Standard: HS256)

Gibt zurück: string, error

Übergeben Sie nur einen der dokumentierten Algorithmusnamen. In dieser Runtime-Version fällt ein von encode nicht unterstützter Wert auf HS256 zurück, statt einen Fehler zurückzugeben. Validieren Sie konfigurierbare Algorithmen vor diesem Aufruf und übernehmen Sie keine nicht vertrauenswürdigen Felder in _header; insbesondere dürfen Eingaben reservierte JWT-Header wie alg nicht überschreiben.

Verifizieren

local claims, err = crypto.jwt.verify(token, secret)
local claims, err = crypto.jwt.verify(token, secret, "HS256", false)
local claims, err = crypto.jwt.verify(token, public_key_pem, "RS256")
Parameter Typ Beschreibung
token string Zu verifizierender JWT-Token
key string Secret (HMAC) oder PEM-öffentlicher Schlüssel (RSA)
alg string? Erwarteter Algorithmus (Standard: HS256)
require_exp boolean? Verlangt, dass ein exp-Claim vorhanden ist (Standard: true); ein vorhandener exp wird immer validiert

Gibt zurück: table, error

Wenn vorhanden, werden exp und nbf gegen die aktuelle Wanduhr der JWT-Bibliothek und nicht gegen die Workflow-Zeitreferenz geprüft. require_exp = false erlaubt ein fehlendes exp-Claim, deaktiviert aber nicht die Validierung eines vorhandenen Claims. Verwenden Sie keine der beiden zeitabhängigen Prüfungen für Replay-abhängige Workflow-Steuerung; führen Sie die Prüfung in einer Aktivität aus oder vergleichen Sie mit einem ausdrücklich Replay-sicheren Wert.

Übergeben Sie stets den vom Herausgeber erwarteten Algorithmus; die Prüfung beschränkt das Token auf genau diese Methode. Behandeln Sie zurückgegebene Claims als authentifizierte Daten, nicht automatisch als autorisierte Anwendungseingabe, und prüfen Sie weiterhin Herausgeber, Zielgruppe, Subjekt und anwendungsspezifische Bedingungen.

Schlüsselableitung

PBKDF2

local key, err = crypto.pbkdf2(password, salt, iterations, key_length)
local key, err = crypto.pbkdf2(password, salt, iterations, key_length, "sha512")
Parameter Typ Beschreibung
password string Passwort/Passphrase
salt string Salt-Wert
iterations integer Iterationsanzahl (max. 10.000.000)
key_length integer Gewünschte Schlüssellänge in Bytes
hash string? sha256 oder sha512 (Standard: sha256)

Gibt zurück: string, error

Der abgeleitete Schlüssel besteht aus Rohbytes. Verwenden Sie für jeden gespeicherten Passwortprüfwert ein neues zufälliges Salt und speichern Sie Salt und Arbeitsfaktorparameter zusammen mit dem Prüfwert; das Salt muss nicht geheim sein. Verwenden Sie kein festes Beispiel-Salt für die produktive Passwortspeicherung.

Hilfsfunktionen

Konstantzeit-Vergleich

local equal = crypto.constant_time_compare(a, b)
Parameter Typ Beschreibung
a string Erster String
b string Zweiter String

Gibt zurück: boolean

Bei unterschiedlichen Längen ist das Ergebnis false. Die Garantie des zugrunde liegenden konstantzeitlichen Vergleichs gilt für gleich lange Eingaben. Vergleichen Sie daher Digests fester Länge oder andere gleich lange Geheimnisse.

Fehler

Bedingung Art Wiederholbar
Ungültige Länge errors.INVALID nein
Leerer Schlüssel errors.INVALID nein
Ungültige Schlüsselgröße errors.INVALID nein
Entschlüsselung fehlgeschlagen errors.INTERNAL nein
Token abgelaufen errors.INTERNAL nein

Informationen zum Umgang mit Fehlern finden Sie unter Fehlerbehandlung.