Arbeitspaket 2: Random Number Generator

Arbeitspaket 2: Random Number Generator

Eine Studie im Auftrag des Bundesamtes für Sicherheit in der Informationstechnik Projekt 154 Quellcode-basierte Untersuchung von kryptographisch relevanten Aspekten der OpenSSL-Bibliothek Arbeitspaket 2: Random Number Generator Version 1.2.1 / 2015-11-03 Zusammenfassung Die Kryptobibliothek OpenSSL wird seit mehreren Jahren in verschiedenen kryptographischen Systemen eingesetzt. Sie ist besonders wichtig bei gesicherten Datenübertragungen in Computernetzwerken und spielt aufgrund ihrer großen Verbreitung im Internet eine besonders wichtige Rolle bei der Verwendung von HTTPS (HTTP over SSL/TLS). OpenSSL bietet eine große Zahl von kryptographischen Funktionen an; dazu gehören z.B. symmetrische und asymmetrische Datenverschlüsselung, digitale Signaturen, Authentisierung, Hashfunktionen, Erstellung und Verifikation von Zertifikaten inklusive Zertifikatsketten, Mechanismen zum Integritätsschutz, Schlüssel- und Zufallszahlenerzeugung. Die wichtigste Aufgabe von OpenSSL ist es jedoch, eine Implementierung des TLS-Protokolls (früher SSL-Protokoll) zu sein. Damit stellt die Bibliothek sowohl grundlegende Kryptofunktionen als auch das High-Level-Protokoll TLS zur Verfügung. Dieser Bericht ist das Ergebnis der Untersuchung des Zufallszahlengenerators (RNG) der OpenSSL-Bibliothek. Es wird die generelle Einbindung des RNGs in die API, die Verwendung sowie Nicht-Verwendung in anderen Bibliotheks-Funktionen, sowie die Implementierung des Standard-RNGs beschrieben. Autoren Wolfgang Meyer zu Bergsten (MzB), Sirrix AG René Korthaus (RK), Sirrix AG Copyright Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.Jede Verwertung außerhalb der engen Grenzen des Urhebergesetzes ist ohne Zustimmung des BSI unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigung, Übersetzung, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Quellcode-basierte Untersuchung von kryptographisch relevanten Aspekten der OpenSSL-Bibliothek OpenSSL 1.0.1g Inhaltsverzeichnis 1 OpenSSL Zufallszahlengenerator (RNG)......................................................................................11 1.1 Interface für den RNG............................................................................................................11 1.1.1 Rückgabewerte der RNG-Funktionen.............................................................................12 1.1.2 Spezifizieren einer RNG-Implementierung....................................................................13 1.1.3 Speichern von Entropie zwischen zwei Programmläufen...............................................13 1.1.4 Standard-RNG der OpenSSL-Bibliothek........................................................................16 1.2 Testsuite für den RNG............................................................................................................16 1.2.1 Testsuite...........................................................................................................................16 1.2.2 Laufzeit-Tests..................................................................................................................17 1.3 High-Level Analyse des Standard-RNG.................................................................................17 1.3.1 BlackBox-Tests...............................................................................................................17 1.3.1.1 Der RNG kann ohne explizites Seeden genutzt werden..........................................17 1.3.1.2 Seeding und Entnahme von kryptografisch starker Entropie..................................18 1.3.1.3 Weitere in den RNG-Zustand eingepflegte Daten...................................................19 1.3.2 Statische Analyse............................................................................................................19 1.3.2.1 cppcheck..................................................................................................................19 Konfiguration.............................................................................................................19 Ergebnisse..................................................................................................................19 1.3.2.2 clang-analyzer.........................................................................................................19 Konfiguration.............................................................................................................19 Ergebnisse..................................................................................................................20 1.3.2.3 FlexeLint.................................................................................................................20 Konfiguration.............................................................................................................20 Ergebnisse..................................................................................................................20 2 Source Code Review.....................................................................................................................22 2.1 OpenSSL-Adapter...................................................................................................................22 2.2 Warnungen aus der statischen Analyse...................................................................................23 md_rand.c....................................................................................................................23 randfile.c.....................................................................................................................24 2.3 Parameter und Zustand des Standard-RNGs..........................................................................24 2.4 Nebenläufige Programme.......................................................................................................25 2.5 OPENSSL_cleanse()...............................................................................................................26 2.6 Analyse der RAND_SSLeay-Funktionen...............................................................................26 2.6.1 ssleay_rand_add..............................................................................................................26 2.6.2 ssleay_rand_seed.............................................................................................................30 2.6.3 ssleay_rand_bytes...........................................................................................................30 2.6.4 ssleay_rand_pseudo_bytes und ssleay_rand_nopseudo_bytes().....................................34 2.6.5 ssleay_rand_cleanup.......................................................................................................34 2.6.6 ssleay_rand_status...........................................................................................................35 2.6.7 Entropiequellen...............................................................................................................35 2.7 Veränderungen im aktuellen OpenSSL und LibreSSL...........................................................36 2.8 Übersicht: Lebenszyklus des RNGs.......................................................................................37 2.8.1 Sichere Verwendung des RNGs......................................................................................38 3 Verwendung von RNGs in OpenSSL............................................................................................40 3.1 Nutzung des Standard-RNGs in OpenSSL.............................................................................40 3.1.1 Analyse............................................................................................................................44 3.1.2 Fehlerklasse: Ignorieren von Fehlercodes.......................................................................45 3.1.3 Fehlerklasse: Seeding mit Hash einer zu signierenden Nachricht..................................45 3.1.4 Muster: Verwenden von RAND_pseudo_bytes() äquivalent zu RAND_bytes()............45 3.2 Erzeugung von zufälligen BigNum-Zahlen............................................................................46 3.2.1.1 bnrand()...................................................................................................................46 3.2.1.2 bn_rand_range()......................................................................................................47 3.3 Nicht-Verwendung des Standard-RNG durch Kryptoroutinen...............................................47 3.4 Auflistung und Kurzbeschreibung weiterer RNGs.................................................................47 3.4.1 Intel RDRAND...............................................................................................................48 3.4.2 VIA Padlock Engine........................................................................................................48 3.4.3 Cluster Labs....................................................................................................................49 3.4.4 IBM CA...........................................................................................................................49 3.4.5 Zencod Engine................................................................................................................49 3.4.6 CryptoSwift Engine.........................................................................................................50 3.4.7 CHIL Engine...................................................................................................................50

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    54 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us