 | TurboSFV - Hashtypen |
Übersicht |
TurboSFV unterstützt verschiedene Hashfunktionen, welche für die Berechnung von
Prüfsummen von Dateien eingesetzt werden, z.B. die aus den SHA-3 oder BLAKE3-Familien. Prüfsummen
sind Fingerabdrucke oder digitale Signaturen von Bitströmen: Ihre Berechnung sowie die
Länge des Hashwerts hängt vom verwendeten Algorithmus ab.
Prüfsummen können dazu verwendet werden, um programmatisch eine Datei identifizieren
zu können. Generell ändert sie sich, sobald sich eine Datei ändert. Daher können Prüfsummen
dazu verwendet werden, um die Integrität von Dateien zu überprüfen und Änderungen an Daten
festzustellen. TurboSFV als Software zur Berechnung und Validierung von Prüfsummen
kann Hashwerte für Dateien in einem ganzen Verzeichnisbaum generieren.
Die Sicherheit einer Hashfunktion hängt im Wesentlichen vom verwendeten Algorithmus und der
Länge der Hashwerte ab. Zur Zeit der Verfassung dieses Artikels gelten CRC-32, MD5 und SHA-1
als unsicher: Eine andere Datei mit der gleichen Prüfsumme kann gefunden oder sogar erstellt werden.
Daher kann diesen Algorithmen nicht vertraut werden und sollten nur in Bereichen mit geringeren
Sicherheitsanforderungen verwendet werden.
Kryptografische Algorithmen, wie die aus den SHA-3 oder BLAKE3-Familien, müssen resistent
gegen derartige Angriffe sein. Zwei unterschiedliche Dateien mit der gleichen Prüfsumme zu finden oder aus
der Prüfsumme auf die Daten schließen zu können, sollte nicht möglich sein. Prüfsummen, die von diesen
Hashfunktionen generiert werden, sollten in einzigartiger Weise die jeweiligen Daten
repräsentieren.
Die Entscheidung, welcher Algorithmus verwendet wird, hängt von der Anwendung, der anfallenden
Datenmenge und der verfügbaren Rechenleistung ab (einige Algorithmen sind sehr rechenintensiv).
So sollte zum Beispiel in Bereichen, wo biometrische Daten anfallen, eine kryptografische
Hashfunktion zum Einsatz kommen.
In TurboSFV wurden die Hashfunktionen sowohl in einer 64-Bit-Version (x64 CPU-Befehle) als auch in einer
32-Bit-Version (x86 CPU-Befehle) implementiert. Beginnend mit SHA-1, können spezielle, SSE-basierende
Befehle (Streaming SIMD (Single Instruction Multiple Data) Extensions) optional
eingesetzt werden, falls die CPU diese unterstützt. Bei SHA-1 handelt es sich um
SHA1RNDS4, SHA1MSG1, SHA1MSG2 und SHA1NEXTE.
Bei SHA-256 (wie auch bei SHA-224), bieten die Anweisungen
SHA256RNDS2, SHA256MSG1 und SHA256MSG2 eine viel bessere Leistung
bei der Berechnung von Prüfsummen.
Darüber hinaus bietet TurboSFV x64 eine spezielle SSE-basierende und eine AVX2-basierende
(Advanced Vector Extensions) Implementierung für Algorithmen aus der
BLAKE3-Familie (BLAKE3-256, BLAKE3-512, BLAKE3-1024, BLAKE3-2048) an, welche Prüfsummen in
paralleler Weise berechnet.
TurboSFV unterstützt die Berechnung von Hashwerten für die nachfolgenden
Hashfunktionen. Weitere Details geben Ihnen die aufgeführten Verweise zu einigen externen
Webseiten.
|
|
SHA-3 Familie |
|
Die SHA-3 Hashfunktionen sind in den FIPS 202, herausgegeben vom NIST (US National Institute
of Standards and Technology), als "SHA-3 Standard" beschrieben. Der Algorithmus
basiert auf KECCAK, den Gewinner des SHA-3 Wettbewerbs, verkündet vom NIST in 2012.
SHA-3 wurde vom NIST spezifiziert, um im Falle eines erfolgreichen Angriffs gegen SHA-2 eine
Alternative zur Verfügung zu haben. SHA-2 basiert auf den gleichen technischen Prinzipien
wie SHA-1, gegen den erfolgreiche Angriffe seit 2005 bekannt sind. SHA-3 verwendet jedoch ein
anderes Verfahren zur Generierung von Prüfsummen, die sogenannte "Sponge-Konstruktion".
In den FIPS 202 weicht die Spezifikation von SHA-3 leicht vom ursprünglichen KECCAK Algorithmus,
so wie er beim NIST SHA-3 Wettbewerb eingereicht wurde, ab. Die Änderung hatte aber keine negativen
Auswirkungen auf die Sicherheit der Hashfunktion: Nur das Padding (Auffüllen des letzten
Nachrichtenblocks mit Bits) wurde im Hinblick auf zukünftige Erweiterungen angepasst.
Der KECCAK Algorithmus basiert auf zahlreichen Operationen mit 64-Bit Zahlen. Daher wird
empfohlen, für die Berechnung von SHA-3 Hashwerten die Fähigkeiten einer 64-Bit CPU zu nutzen,
die jedoch nur auf 64-Bit Betriebssystemen freigeschaltet sind. TurboSFV x64 wurde
für eine 64-Bit Umgebung entworfen.
Unterstützte SHA-3 Hashfunktionen wie in den FIPS 202 spezifiziert und ihre Ausgabelängen:
|
SHA3-224 | 224 Bits |
SHA3-256 | 256 Bits |
SHA3-384 | 384 Bits |
SHA3-512 | 512 Bits |
|
- Dateierweiterung: sh3
- Externe Verweise:
|
|
BLAKE3 Familie |
|
BLAKE3 ist der Nachfolger von BLAKE2 und vereinigt BLAKE2-Varianten in einer Hash-Funktion. Die
Basisstruktur von BLAKE3 bildet ein binärer Baum, der parallele Verarbeitung auf mehreren
Prozessoren oder die Verwendung von SIMD (Single Instruction Multiple Data)
Instruktionen ermöglicht. Darüber hinaus bietet BLAKE3 neben der Standard-Ausgabelänge
von 256 Bits erweiterte Ausgabelängen an. BLAKE3 ist wie BLAKE2 eine kryptografische
Hash-Funktion und unterstützt eine verschlüsselte Berechnung von Hashwerten.
Die Implementierung von BLAKE3 in TurboSFV folgt der BLAKE3-Spezifikation in der Version
20200221.164500. TurboSFV produziert Prüfsummen mit der Standard-Ausgabelänge von 256 Bits
sowie den erweiterten Ausgabelängen (XOF's) 512, 1024 und 2048 Bits. Ein XOF mit 1024 Bits bedeutet
beispielsweise, dass die ersten 512 Bits die selben sind wie bei einer Ausgabelänge von 512 Bits,
plus zusätzliche 512 Bits, die durch eine weitere Komprimierung des Wurzelknotens im binären Baum
erzeugt werden. Mit TurboSFV v9.20 wird auch die parallele Berechnung von BLAKE3-Prüfsummen
unterstützt.
TurboSFV v10.50 (x64) kommt mit einer speziellen SSE (Streaming SIMD Extensions) basierenden
Implementierung für die Berechnung von BLAKE3 Prüfsummen, mit der eine parallele Berechnung
in "Lanes" möglich ist. Zusätzlich können mehrere CPUs für eine noch bessere Leistung verwendet werden.
Als Voraussetzung muss die verwendete CPU SSE-Befehle bis einschließlich des Befehlssatzes
SSE4.1 unterstützen.
TurboSFV v10.60 (x64) führt eine AVX2 (Advanced Vector Extensions) basierende Implementierung
ein. Der Hauptunterschied zu SSE ist, dass AVX2 YMM-Register verwendet, die 256 Bits halten können,
anstatt der 128 Bit breiten XMM-Register bei SSE. Da BLAKE3 mit 32-Bit-Zahlen arbeitet, können wir nun acht Zahlen
auf einmal verarbeiten (SSE: vier Zahlen), was die Parallelität verdoppelt. Die CPU muss aber AVX2-fähig
sein.
Unterstützte BLAKE3 Hashfunktionen und ihre Ausgabelängen:
|
BLAKE3-256 | 256 Bits |
BLAKE3-512 | 512 Bits |
BLAKE3-1024 | 1024 Bits |
BLAKE3-2048 | 2048 Bits |
|
- Dateierweiterung: bk3
- Externe Verweise:
|
|
BLAKE2 Familie |
|
Die Hashfunktionen aus der BLAKE2 Familie basieren auf BLAKE, welcher einer der Teilnehmer in der Endrunde
des SHA-3 Wettbewerbs von NIST war. BLAKE2 ist der Nachfolger von BLAKE, optimiert bezüglich Geschwindigkeit
und Speicherverbrauch. BLAKE2 ist im RFC 7693 beschrieben und gilt als sicher.
In TurboSFV sind die Algorithmen BLAKE2S, BLAKE2SP und BLAKE2B und BLAKE2BP implementiert. BLAKE2S operiert mit 32-Bit Zahlen
und ist optimiert für 32-Bit Umgebungen. BLAKE2SP führt acht Instanzen von BLAKE2S im parallelen Modus aus. Beide erzeugen Hashwerte
bis zu einer Länge von 256 Bits. BLAKE2B wiederum rechnet mit 64-Bit Zahlen und ist optimiert für 64-Bit Plattformen. BLAKE2BP wurde
für den parallelen Modus entworfen und arbeitet mit 4 BLAKE2B-Instanzen. BLAKE2B und BLAKE2BP liefern Hashwerte bis zu
einer Länge von 512 Bits.
Die Algorithmen unterstützen in standardisierter Form sowohl die verschlüsselte Berechnung von Hashwerten als auch Salt, welche
interessante Eigenschaften im Hinblick auf zukünftige Erweiterungen von TurboSFV sind.
TurboSFV bietet bei BLAKE2 Hashwerte von 256 bis 512 Bits an, im Einzelnen sind dies BLAKE2S-256, BLAKE2SP-256, BLAKE2B-256,
BLAKE2B-384, BLAKE2B-512, BLAKE2BP-256, BLAKE2BP-384 und BLAKE2BP-512. Es ist zu beachten, dass die aufgeführten Algorithmen
jeweils unterschiedliche Hashwerte erzeugen.
Unterstützte BLAKE2 Hashfunktionen und ihre Ausgabelängen:
|
BLAKE2S-256 | 256 bits |
BLAKE2SP-256 | 256 bits |
BLAKE2B-256 | 256 bits |
BLAKE2B-384 | 384 bits |
BLAKE2B-512 | 512 bits |
BLAKE2BP-256 | 256 bits |
BLAKE2BP-384 | 384 bits |
BLAKE2BP-512 | 512 bits |
|
- Dateierweiterung: blk
- Externe Verweise:
|
|
SHA-2 Familie |
|
Die SHA-2 Familie beinhaltet die "Secure hash algorithms" SHA-224, SHA-256, SHA-384, SHA-512 und
die beiden T-Bit Hashfunktionen SHA-512/224 und SHA-512/256.
Die T-Bit Hashfunktionen SHA-512/224 und SHA-512/256 basieren auf SHA-512, starten aber mit
anderen Initialvektoren und produzieren kleinere Hashwerte.
SHA-512/256 wird beispielsweise in den Fällen verwendet, wo man eine Schlüssellänge von 256 Bit benötigt,
aber die höhere Sicherheit von SHA-512 gegenüber SHA-256 in Anspruch nehmen möchte. Dazu kommt, dass auf
x64-Plattformen - bei entsprechender Programmierung - SHA-512 schneller und effizienter die Berechnung
durchführt.
Bei den Algorithmen SHA-256 und SHA-224 kann die Berechnung optional auf die Verwendung spezieller SSE
(Streaming SIMD Extensions) basierender Befehle (SHA256RNDS2, SHA256MSG1, SHA256MSG2)
umgeschaltet werden, anstatt die Standard-CPU-Anweisungen in x86 (32-Bit) und x64 (64-Bit)
zu verwenden - falls die CPU diese unterstützt. TurboSFV prüft die CPU auf die benötigten
Eigenschaften hin ab, bevor diese verwendet werden. Mit der Nutzung von SSE Befehlen kann die
Berechnung bis zu siebenmal schneller ablaufen.
Unterstützte SHA-2 Hashfunktionen und ihre Ausgabelängen:
|
SHA-224 | 224 Bits |
SHA-256 | 256 Bits |
SHA-384 | 384 Bits |
SHA-512 | 512 Bits |
SHA-512/224 | 224 Bits |
SHA-512/256 | 256 Bits |
|
- Dateierweiterung: sh2
- Externe Verweise:
|
|
xxHash |
|
xxHash ist ein Open-Source-Projekt mit dem Ziel, einen schnellen Hash-Algorithmus zu entwickeln. Der Algorithmus
wurde nicht für den kryptografischen Einsatz entworfen und ist auch nicht beständig gegen Kollisionen.
TurboSFV unterstützt die Varianten XXH32 und XXH64: XXH32 rechnet mit 32-Bit-Zahlen und ist optimiert für
32-Bit-Umgebungen, während XXH64 mit 64-Bit-Zahlen operiert und daher besonders für 64-Bit-CPUs geeignet ist.
XXH32 erzeugt Hashwerte mit einer Länge von 32 Bits, bei XXH64 beträgt die Länge 64 Bit. Optional können beide
Algorithmen einen "Seed"-Wert (ähnlich Salt) als zusätzliche Eingabe verarbeiten, was von TurboSFV jedoch
nicht unterstützt wird.
Beim gegenwärtigen Stand des Projekts scheinen XXH32 und XXH64 nun stabil zu sein (und die damit erzeugten
Prüfsummen), eine Garantie gibt es hierfür aber nicht.
Die Implementierung in TurboSFV entspricht der Dokumentation v0.1.1 (10/10/18). TurboSFV verwendet
keine Bibliotheken, die vom Open-Source-Projekt angeboten werden.
Unterstützte xxHash Hashfunktionen und ihre Ausgabelängen:
|
XXH32 | 32 Bits |
XXH64 | 64 Bits |
|
- Dateierweiterung: xxh
- Externe Verweise:
|
|
SHA-1 - Secure hash algorithm |
|
SHA-1 wurde 1995 vom NIST veröffentlicht, um Behörden eine kryptologische Hashfunktion
für die Verwendung in Anwendungen, aber auch in Protokollen anbieten zu können, ebenso
verfügbar für private und kommerzielle Anwender. Seit 2005 sind erfolgreiche Angriffe
auf SHA-1 bekannt und SHA-2 wurde später zum Nachfolger ernannt.
Die Basis-Implementierung in TurboSFV arbeitet mit x86 (32-Bit) und x64 (64-Bit) CPU-Befehlen.
Optional kann der Berechnungsprozess auf spezielle SHA-1 SSE (Streaming SIMD Extensions) Befehle
umgeschaltet werden, welche in Intel Prozessoren seit 2016 und AMD Prozessoren seit 2017 zur
Verfügung stehen. Diese SSE-Befehle (SHA1RNDS4, SHA1MSG1, SHA1MSG2, SHA1NEXTE)
erlauben eine parallele Verarbeitung und daher kann die Berechnung bis zu viermal schneller
erfolgen. TurboSFV prüft die CPU, ob die benötigten Eigenschaften vorhanden sind, bevor sie
verwendet werden.
|
- Länge des Hashwerts: 160 Bits
- Dateierweiterung: sh1
- Externe Verweise:
|
|
MD5 - Message-Digest 5 - Hashfunktion |
|
- Länge des Hashwerts: 128 Bits
- Dateierweiterung: md5
- Externe Verweise:
|
|
CRC-32 - Zyklische Redundanzprüfung |
|
- Länge des Hashwerts: 32 Bits
- Dateierweiterung: sfv
- Externe Verweise:
|
|
|
|
|
|
|