Software-Projektpraktikum: Entwurf sicherer Kommunikationsprotokolle

How Standards Proliferate

Übersicht

  • SWS: 4, ECTS: 6
  • Veranstalter: Prof. Dr. Klaus Wehrle
  • Assistierende: Daniel Schemmel, Oscar Soria Dustmann
  • Studiengang: Bachelor Informatik
  • Wichtige Termine:
    • Wöchentliche Treffen: Termin wird in Abstimmung mit den Teilnehmenden festgelegt.
    • Vorläufige Termine: Mittwoch+Donnerstag 10:00 und 13:00
    • Kick-off Meeting: 7. Oktober um 13:00 (2015-10-07T13:00:00).
    • Abschlusspräsentationen: Ende der Vorlesungszeit bzw. Anfang der vorlesungsfreien Zeit.

Inhalte des Praktikums

Eine der wichtigsten Regeln der Kryptographie lautet: "Implementiere niemals kryptographische Funktionen selbst!" In diesem Software-Projektpraktikum werden wir diese Regel gründlich verletzen. Anstelle von standardisierten Verfahren, wie etwa TLS, und bekannten Bibliotheken die diese Implementieren, wie etwa OpenSSL, wird in diesem Praktikum von den Studierenden ein eigenes Verfahren selbst entworfen und auch implementiert.

Zu Beginn muss gemeinsam ein Protokoll entworfen werden, das mittels RSA, einer schnellen symmetrischen Chiffre, einem Message Authentication Code und eines Zero Knowledge Proofs eine sichere Verbindung aufbaut und dabei sicherstellt, dass beide Seiten ihren Kommunikationspartner erkennen können. Dieses Protokoll wird dann in Gruppen implementiert und am Ende Allen vorgestellt.

Folgende Technologien werden auf jeden Fall in dem Praktikum verwendet:

  • SSH um auf die von uns gestellte Entwicklungs-/Testumgebung zuzugreifen
  • GIT als Versionskontrollsystem
  • C++ als Programmiersprache (ISO 14882:2014 um genau zu sein)
  • Linux sockets um die Pakete zu übertragen
  • RSA um die Verbindung mit dem Server aufzubauen
  • Symmetrische Kryptographie um den eigentlichen Kommunikationskanal zu sichern
  • Message Authentication Codes um die Unveränderlichkeit des Kanals zu sichern
  • Zero Knowledge Proofs um den Client gegenüber dem Server zu identifizieren

Was muss ich mitbringen?

Grundsätzlich sind Vorkenntnisse im Bereich von Netzwerkprogrammierung und Softwareentwicklung hilfreich für dieses Praktikum, aber nicht erforderlich.

Bei einer Teilnahme am Praktikum wird folgendes erwartet:

  • Anwesenheit bei den Treffen und fristgerechte Bearbeitung
  • Einhalten von Codingstandards
  • Teamfähigkeit und aktive Teilnahme in der Gruppe
  • student.knows("C++") || (student.knows("C") && student.knows("Any Object Oriented Language"))
  • Kenntnis einiger der oben genannten Technologien ist hilfreich, wenn auch nicht unbedingt nötig
  • Folgende Veranstaltungen sind von besonderer Bedeutung für dieses Software-Projektpraktikum:
    • Programmierung
    • Betriebssysteme und Systemsoftware
    • Praktikum Systemprogrammierung
    • Berechenbarkeit und Komplexität
    • Datenstrukturen und Algorithmen