© DrHitch/Shutterstock.com
Kryptografie mit .NET

2 Verschlüsselung mit Microsofts CryptoAPI


Wer seine kryptografischen Algorithmen selbst entwickelt, wird sehr wahrscheinlich von der Regierung durchleuchtet. Wer sich dieses Schicksal ersparen will, muss bei aktuellen Versionen des .NET Frameworks nicht auf externe Bibliotheken zurückgreifen. Microsoft spendiert seiner Laufzeitumgebung ein umfangreiches Kryptografiesubsystem, das auf den Namen .NET Framework Cryptography Model hört.

Alles modular

Erweiterbarkeit ist im Bereich der Kryptografie seit jeher von Bedeutung: Es gibt eine Vielzahl verschiedener Algorithmen und Verfahren. Zudem ist die Auswahl der praktischen Implementierung oft vom Klienten abhängig: Wer mit EU und USA seine Probleme hat, dürfte dem Advanced Encryption Standard (AES) nur wenig Vertrauen entgegenbringen und einen östlichen Algorithmus bevorzugen.

Das gilt naturgemäß und noch mehr für Referenzimplementierungen, in denen Angreifer diverse Backdoors verstecken können. So ist es z. B. möglich, durch gezieltes Absetzen von Programmbefehlen den Stromverbrauch des Prozessors zu beeinflussen – ein an sinnvoller Stelle platziertes Oszilloskop ermöglicht sodann Angriffe auf Basis der Power Analysis.

Microsoft umgeht dieses Problem durch die Einführung der in Abbildung 2.1 gezeigten dreistufigen Klassenstruktur. Auf der obersten Ebene finden sich vollabstrakte Klassen, die die zu implementierenden Algorithmen in „Arten“ unterteilen.

hanna_2_1.png

Abbildung 2.1: Eine mehrlagige Struktur sorgt für zusätzliche Flexibilität

Als Beispiel dafür wollen wir einen kleinen Teil der Klasse SymmetricAlgorithm ansehen, die die im vorigen Kapitel im Detail besprochenen symmetrischen Algorithmen realisiert. Das hier gezeigte Snippet (Listing 2.1) entstand durch Reflektion – die Vollversion von SymmetricAlgorithm wäre rund 12 000 Zeichen lang, weshalb großzügiges Kürzen erforderlich war.

public abstract class SymmetricAlgorithm : IDisposable
{
protected int BlockSizeValue;
protected byte[] IVValue;
protected int KeySizeValue;
protected byte[] KeyValue;

Listing 2.1

An erster Stelle finden sich hier einige Felder, die für Schlüssel, Initialisierungskonstante und ähnliche für die Abarbeitung des Verschlüsselungsalgorithmus notwendige Parameter zuständig sind. Sie werden durch Akzessormethoden exponiert, auf deren Struktur wir hier aus Platzgründen nicht weiter eingehen.

Die Methoden CreateEncryptor und CreateDecryptor liefern sodann Implementierungen von ICryptoTransform zurück. Diese Klassen sind für die eigentliche Anwendung der Verschlüsselungstransformation zu...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang