Toolypet
Zurück zum Blog
Security

Verschluesselungs-Grundlagen - Symmetrische vs Asymmetrische Schluessel: Was Entwickler wissen muessen

Wenn Sie nicht wissen, wie AES, RSA und HTTPS funktionieren, lesen Sie diesen Artikel. Kernkonzepte der Verschluesselung mit praktischen Beispielen erklaert.

Toolypet Team

Toolypet Team

Development Team

5 Min. Lesezeit

Verschluesselungs-Grundlagen: Symmetrische vs Asymmetrische Schluessel

"Bitte verschluesseln Sie diese Daten und senden Sie sie."

Wenn Sie das hoeren, wissen Sie genau, was zu tun ist und wie?

Es gibt zwei Hauptarten der Verschluesselung. Wenn Sie nicht wissen, wann welche zu verwenden ist, koennte Ihr Sicherheitsdesign fehlerhaft sein.


Verschluesselung vs Hashing

Zunaechst klaeren wir diese haeufig verwechselten Konzepte.

VerschluesselungHashing
RichtungBidirektional (entschluesselbar)Unidirektional (irreversibel)
ZweckDatenschutzIntegritaetspruefung, Passwortspeicherung
Schluessel erforderlichJaNein
BeispieleAES, RSASHA-256, bcrypt

Verschluesselung: Originaldaten koennen wiederhergestellt werden Hashing: Originaldaten koennen nicht wiederhergestellt werden

Verwenden Sie Hashing fuer Passwortspeicherung, Verschluesselung fuer Datenuebertragung.


Symmetrische Schluessel-Verschluesselung

Konzept

Verschluesseln mit einem Schluessel, entschluesseln mit demselben Schluessel.

Klartext + Schluessel → Verschluesseln → Chiffretext
Chiffretext + Schluessel → Entschluesseln → Klartext

Beispiel: Ein Schloss

Denken Sie an Ihren Hausschluessel. Sie schliessen und oeffnen mit demselben Schluessel.

Gaengige Algorithmen

AlgorithmusSchluessellaengeStatus
AES-256256bitAktueller Standard
AES-128128bitSicher
3DES168bitLegacy
DES56bitUnsicher

Code-Beispiel (Node.js)

const crypto = require('crypto');

// Schluessel generieren (in Produktion sicher speichern)
const key = crypto.randomBytes(32);  // AES-256
const iv = crypto.randomBytes(16);   // Initialisierungsvektor

// Verschluesseln
function encrypt(text) {
  const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
  let encrypted = cipher.update(text, 'utf8', 'hex');
  encrypted += cipher.final('hex');
  return encrypted;
}

// Entschluesseln
function decrypt(encrypted) {
  const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
  let decrypted = decipher.update(encrypted, 'hex', 'utf8');
  decrypted += decipher.final('utf8');
  return decrypted;
}

const secret = "sensible Daten";
const encrypted = encrypt(secret);
const decrypted = decrypt(encrypted);

console.log(encrypted);   // "a3f8b2c1..."
console.log(decrypted);   // "sensible Daten"

Vor- und Nachteile

VorteileNachteile
SchnellSchluesselverteilungsproblem
Geeignet fuer grosse DatenmengenBei Schluesseloffenlegung ist alles vorbei
Einfache ImplementierungKomplexe Schluesselverwaltung

Das Schluesselverteilungsproblem

Wenn A eine verschluesselte Nachricht an B senden moechte, muss A zuerst den Schluessel an B uebergeben.

Aber wie uebergibt man diesen Schluessel sicher?

Die asymmetrische Schluessel-Verschluesselung loest dieses Problem.


Asymmetrische Schluessel-Verschluesselung

Konzept

Verwendet zwei Schluessel:

  • Oeffentlicher Schluessel (Public Key): Jeder kann ihn kennen
  • Privater Schluessel (Private Key): Darf niemals geteilt werden
Mit oeffentlichem Schluessel verschluesseln → Nur privater Schluessel kann entschluesseln
Mit privatem Schluessel signieren → Mit oeffentlichem Schluessel verifizieren

Beispiel: Ein Briefkasten

  • Oeffentlicher Schluessel = Briefkasten (jeder kann einen Brief einwerfen)
  • Privater Schluessel = Briefkastenschluessel (nur der Besitzer kann Briefe entnehmen)

Gaengige Algorithmen

AlgorithmusVerwendungSchluessellaenge
RSAVerschluesselung, Signierung2048+ bit
ECDSASignierung256+ bit
Ed25519Signierung256bit

Code-Beispiel (Node.js RSA)

const crypto = require('crypto');

// Schluesselpaar generieren
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  modulusLength: 2048,
});

// Mit oeffentlichem Schluessel verschluesseln
function encryptWithPublic(text) {
  return crypto.publicEncrypt(publicKey, Buffer.from(text)).toString('base64');
}

// Mit privatem Schluessel entschluesseln
function decryptWithPrivate(encrypted) {
  return crypto.privateDecrypt(privateKey, Buffer.from(encrypted, 'base64')).toString();
}

const secret = "sensible Daten";
const encrypted = encryptWithPublic(secret);
const decrypted = decryptWithPrivate(encrypted);

console.log(decrypted);  // "sensible Daten"

Digitale Signaturen

Wenn Sie mit einem privaten Schluessel signieren, kann jeder mit dem oeffentlichen Schluessel verifizieren, wer signiert hat.

// Mit privatem Schluessel signieren
const sign = crypto.createSign('SHA256');
sign.update('Nachricht');
const signature = sign.sign(privateKey, 'base64');

// Mit oeffentlichem Schluessel verifizieren
const verify = crypto.createVerify('SHA256');
verify.update('Nachricht');
const isValid = verify.verify(publicKey, signature, 'base64');

console.log(isValid);  // true

Vor- und Nachteile

VorteileNachteile
Loest SchluesselverteilungsproblemLangsam (1000x langsamer als symmetrisch)
Ermoeglicht digitale SignaturenNicht geeignet fuer grosse Daten
Oeffentlicher Schluessel frei verteilbarLaengere Schluessellaengen

In der Praxis: Beide zusammen verwenden (Hybride Verschluesselung)

So funktioniert HTTPS.

Prozess

1. Server: Generiert RSA oeffentliches/privates Schluesselpaar
2. Client: Erhaelt den oeffentlichen Schluessel des Servers
3. Client: Generiert AES-Sitzungsschluessel
4. Client: Verschluesselt Sitzungsschluessel mit RSA-oeffentlichem Schluessel → Sendet an Server
5. Server: Entschluesselt Sitzungsschluessel mit RSA-privatem Schluessel
6. Beide: Kommunizieren mit AES-Sitzungsschluessel

Warum so vorgehen

  • RSA: Wird nur fuer Schluesselaustausch verwendet (langsam aber sicher)
  • AES: Wird fuer tatsaechliche Datenverschluesselung verwendet (schnell)

Das Beste aus beiden Welten nutzen.


Praktische Checkliste

Bei Verwendung symmetrischer Schluessel (AES)

  • AES-256 oder AES-128 verwenden
  • Neuen IV (Initialisierungsvektor) fuer jede Verschluesselung generieren
  • Schluessel in Umgebungsvariablen oder KMS speichern
  • Niemals ECB-Modus verwenden (CBC, GCM stattdessen)

Bei Verwendung asymmetrischer Schluessel (RSA)

  • Mindestens 2048bit Schluessel verwenden
  • Private Schluessel niemals offenlegen
  • OAEP-Padding verwenden (PKCS#1 v1.5 vermeiden)
  • Schluesselrotationsrichtlinie festlegen

Haeufig gestellte Fragen

F: Sollte ich API-Schluessel zur Speicherung verschluesseln?

A: Verwenden Sie Umgebungsvariablen oder Secret-Management-Tools (AWS Secrets Manager, HashiCorp Vault) anstelle von Verschluesselung. Auch mit Verschluesselung bleibt das Problem der Verwaltung des Entschluesselungsschluessels.

F: Ist clientseitige Verschluesselung sicher?

A: Nein. Clientseitiger Code ist fuer jeden sichtbar und legt den Schluessel offen. Sensible Verschluesselung sollte serverseitig erfolgen.

F: Ist SHA-256 Verschluesselung?

A: Nein. SHA-256 ist Hashing. Es kann nicht entschluesselt werden. Wenn Sie Daten wiederherstellen muessen, verwenden Sie Verschluesselung wie AES.


Zusammenfassung

SzenarioAlgorithmus
Grosse DatenverschluesselungAES-256
SchluesselaustauschRSA, ECDH
Digitale SignaturenRSA, ECDSA, Ed25519
Passwortspeicherungbcrypt, Argon2 (Hashing)
HTTPS-KommunikationHybrid (RSA + AES)

Verwandte Werkzeuge

WerkzeugZweck
Verschluesselung/EntschluesselungAES-Verschluesselung
RSA-SchluesselgeneratorRSA-Schluesselpaar-Generierung
Hash-GeneratorSHA, MD5 Hashing
VerschluesselungAESRSAHTTPSSicherheitEntwicklung

Über den Autor

Toolypet Team

Toolypet Team

Development Team

The Toolypet Team creates free, privacy-focused web tools for developers and designers. All tools run entirely in your browser with no data sent to servers.

Web DevelopmentCSS ToolsDeveloper ToolsSEOSecurity