- 1 Abschnitt
- 11 Lektionen
- Um den Kurs in deinem Profil zu hinterlegen klicke oben auf Starten
- Software & Security12
- 1.1Einführung in die Software-Sicherheit
- 1.2Sicherheitsarchitekturen und -modelle
- 1.3Sichere Softwareentwicklung (Secure Software Development Lifecycle – SSDLC)
- 1.4Bedrohungsanalyse und Risikomanagement
- 1.5Sichere Programmierung
- 1.6Authentifizierung und Autorisierung
- 1.7Kryptographie
- 1.8Sicherheitsprüfungen und -tests
- 1.9Datenschutz und Compliance
- 1.10Software & Security9 Fragen
- 1.11Aufgaben
- 1.12Lösungen
Kryptographie
Kryptographie ist die Wissenschaft der Verschlüsselung und Entschlüsselung von Daten, um deren Vertraulichkeit, Integrität und Authentizität zu gewährleisten. Sie spielt eine zentrale Rolle in der sicheren Kommunikation und im Schutz sensibler Informationen.
Grundlagen der Kryptographie
1. Symmetrische Verschlüsselung:
Bei der symmetrischen Verschlüsselung verwenden Absender und Empfänger denselben Schlüssel zum Verschlüsseln und Entschlüsseln der Daten.
- Eigenschaften:
- Schnelle Verschlüsselung und Entschlüsselung.
- Ein gemeinsamer geheimer Schlüssel ist erforderlich.
- Beispiele:
- AES (Advanced Encryption Standard):
- Verwendung: Weit verbreitet für Datenverschlüsselung.
- Beispiel (Python):
- AES (Advanced Encryption Standard):
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
key = get_random_bytes(16) # Generiere einen zufälligen Schlüssel
cipher = AES.new(key, AES.MODE_EAX) # Erzeuge ein neues AES-Cipher-Objekt
data = b'Sensible Daten'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data) # Verschlüsseln der Daten
# Entschlüsseln der Daten
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
decrypted_data = cipher.decrypt_and_verify(ciphertext, tag)
print(decrypted_data) # Ausgabe: b'Sensible Daten'
2. Asymmetrische Verschlüsselung:
Bei der asymmetrischen Verschlüsselung werden zwei verschiedene Schlüssel verwendet: ein öffentlicher Schlüssel zum Verschlüsseln und ein privater Schlüssel zum Entschlüsseln der Daten.
- Eigenschaften:
- Öffentlicher Schlüssel kann frei verteilt werden.
- Privater Schlüssel muss geheim gehalten werden.
- Beispiele:
- RSA (Rivest-Shamir-Adleman):
- Verwendung: Sicherer Datenaustausch und digitale Signaturen.
- Beispiel (Python):
- RSA (Rivest-Shamir-Adleman):
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# Schlüsselgenerierung
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()
# Verschlüsseln
cipher = PKCS1_OAEP.new(RSA.import_key(public_key))
ciphertext = cipher.encrypt(b'Sensible Daten')
# Entschlüsseln
cipher = PKCS1_OAEP.new(RSA.import_key(private_key))
decrypted_data = cipher.decrypt(ciphertext)
print(decrypted_data) # Ausgabe: b'Sensible Daten'
Hash-Funktionen
Hash-Funktionen erzeugen einen eindeutigen, festen Wert (Hash) aus einer Eingabedatenmenge. Hashes sind deterministisch, d.h., dieselbe Eingabe liefert immer denselben Hash.
- Eigenschaften:
- Einwegfunktion: Der ursprüngliche Wert kann nicht aus dem Hash rekonstruiert werden.
- Kollisionsresistenz: Es ist praktisch unmöglich, zwei verschiedene Eingaben mit demselben Hash zu finden.
- Beispiele:
- SHA-256 (Secure Hash Algorithm 256-bit):
- Verwendung: Datenintegritätsprüfung und digitale Signaturen.
- Beispiel (Python):
- SHA-256 (Secure Hash Algorithm 256-bit):
import hashlib
data = b'Sensible Daten'
hash_object = hashlib.sha256(data)
hash_digest = hash_object.hexdigest()
print(hash_digest) # Ausgabe: Hash-Wert von 'Sensible Daten'
Digitale Signaturen
Digitale Signaturen bieten eine Möglichkeit, die Authentizität und Integrität von Nachrichten und Dokumenten zu gewährleisten. Sie werden mit einem privaten Schlüssel erstellt und können mit dem entsprechenden öffentlichen Schlüssel überprüft werden.
- Eigenschaften:
- Authentizität: Bestätigung der Identität des Absenders.
- Integrität: Sicherstellung, dass die Nachricht nicht verändert wurde.
- Beispiele:
- ECDSA (Elliptic Curve Digital Signature Algorithm):
- Verwendung: Sicherstellung der Datenintegrität und Authentizität.
- Beispiel (Python):
- ECDSA (Elliptic Curve Digital Signature Algorithm):
from Crypto.PublicKey import ECC
from Crypto.Signature import DSS
from Crypto.Hash import SHA256
# Schlüsselgenerierung
key = ECC.generate(curve='P-256')
public_key = key.public_key().export_key(format='DER')
private_key = key.export_key(format='DER')
# Signieren
data = b'Sensible Daten'
h = SHA256.new(data)
signer = DSS.new(ECC.import_key(private_key), 'fips-186-3')
signature = signer.sign(h)
# Überprüfen
verifier = DSS.new(ECC.import_key(public_key), 'fips-186-3')
try:
verifier.verify(h, signature)
print("Die Signatur ist gültig.")
except ValueError:
print("Die Signatur ist ungültig.")
Kryptographische Protokolle
1. SSL/TLS (Secure Sockets Layer / Transport Layer Security):
- Verwendung: Sicherung der Kommunikation über Netzwerke.
- Eigenschaften: Verschlüsselte Datenübertragung, Authentifizierung der Kommunikationsteilnehmer.
2. HTTPS (HyperText Transfer Protocol Secure):
- Verwendung: Sicherung von HTTP-Verbindungen durch SSL/TLS.
- Eigenschaften: Schutz der Vertraulichkeit und Integrität von Daten, Authentifizierung von Servern.
3. VPN (Virtual Private Network):
- Verwendung: Erstellung sicherer, verschlüsselter Verbindungen über öffentliche Netzwerke.
- Eigenschaften: Schutz der Privatsphäre und der Datenintegrität, sicherer Fernzugriff auf Netzwerke.
Beispiel (HTTPS):
Client: Verbindet sich über HTTPS zu einem Webserver.
Server: Sendet ein SSL/TLS-Zertifikat zur Authentifizierung.
Client: Überprüft das Zertifikat und generiert einen Sitzungsschlüssel.
Beide: Verwenden den Sitzungsschlüssel zur Verschlüsselung der Datenübertragung.
