Class SrpTelegramEncryption


  • public class SrpTelegramEncryption
    extends java.lang.Object
    Klasse, die die Verschlüsselung von Telegrammen nach einer erfolgreichen SRP-Authentifikation ermöglicht. In Konstruktor der Klasse wird der SRP-Sitzungsschlüssel übergeben (oder zwei Schlüssel bei Dav-Dav-Verbindungen), daraus berechnet diese Klasse je einen AES-Schlüssel für beide Richtungen sowie GCM-Noncen gemäß RFC5288. Jeder Kommunikationspartner sollte eine Instanz dieser Klasse (pro Verbindung) erzeugen und kann dann mit encrypt(byte[]) Daten vor dem Versand verschlüsseln und mit decrypt(byte[]) empfangene Daten entschlüsseln. Es ist wichtig, dass die Reihenfolge der Telegramme beibehalten wird und kein Telegramm ausgelassen wird, da die GCM-Noncen durch einen einfachen Zähler realisiert werden, der auf beiden Seiten der Verbindung denselben Wert annehmen muss. Diese Klasse ist nur eingeschränkt threadsafe, es dürfen nicht mehrere Verschlüsselungen oder Entschlüsselungen gleichzeitig durchgeführt werden, was allerdings sowieso verboten ist, da es eine fest definierte Telegramm-Reihenfolge geben muss. Es ist kein Problem, parallel eine Verschlüsselung und eine Entschlüsselung durchzuführen.
    • Constructor Summary

      Constructors 
      Constructor Description
      SrpTelegramEncryption​(byte[] sessionKey, boolean isClient, SrpCryptoParameter srpCryptoParameter)
      Erstellt eine neue SrpTelegramEncryption-Instanz für eine Verbindung.
    • Method Summary

      Modifier and Type Method Description
      static byte[] computeHash​(int outputMinimumSize, java.lang.String hashAlgorithm, byte[] data)
      Berechnet einen Hashwert der angegebenen Länge aus den übergebenen Daten
      byte[] decrypt​(byte[] telegram)
      Entschlüsselt ein Telegramm von der Gegenseite
      byte[] encrypt​(byte[] telegram)
      Verschlüsselt ein Telegramm zum Versand an die Gegenseite
      java.lang.String getCipherName()
      Gibt den Namen der verwendeten Verschlüsselung zurück
      static void increment​(byte[] bytes)
      Inkrementiert ein Byte-Array wie einen Integer.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • SrpTelegramEncryption

        public SrpTelegramEncryption​(byte[] sessionKey,
                                     boolean isClient,
                                     SrpCryptoParameter srpCryptoParameter)
                              throws SrpNotSupportedException
        Erstellt eine neue SrpTelegramEncryption-Instanz für eine Verbindung. Der AES-Key wird aus dem Sitzungsschlüssel bestimmt.
        Parameters:
        sessionKey - Sitzungsschlüssel (z.B. aus SRP-Authentifizierung)
        isClient - Handelt es sich hierbei um den Client?
        srpCryptoParameter - Cryptographische Verschlüsselungsparameter
        Throws:
        SrpNotSupportedException
    • Method Detail

      • encrypt

        public byte[] encrypt​(byte[] telegram)
                       throws java.io.IOException
        Verschlüsselt ein Telegramm zum Versand an die Gegenseite
        Parameters:
        telegram - Telegramm
        Returns:
        Verschlüsselte Daten
        Throws:
        java.io.IOException - Fehler beim Verschlüsseln
      • decrypt

        public byte[] decrypt​(byte[] telegram)
                       throws java.io.IOException
        Entschlüsselt ein Telegramm von der Gegenseite
        Parameters:
        telegram - Verschlüsselte Daten
        Returns:
        Entschlüsseltes Telegramm
        Throws:
        java.io.IOException - Fehler beim Entschlüsseln
      • increment

        public static void increment​(byte[] bytes)
        Inkrementiert ein Byte-Array wie einen Integer. Der erste Wert den Arrays ist am signifikantesten.
        Parameters:
        bytes - Byte-Array
      • computeHash

        public static byte[] computeHash​(int outputMinimumSize,
                                         java.lang.String hashAlgorithm,
                                         byte[] data)
                                  throws java.security.NoSuchAlgorithmException,
                                         java.security.DigestException
        Berechnet einen Hashwert der angegebenen Länge aus den übergebenen Daten
        Parameters:
        outputMinimumSize - Mindestlänge in Bytes des Ergebniswerts. Das zurückgegebene Array kann größer sein, aber nicht kleiner.
        hashAlgorithm - Algorithmus zum Hashen
        data - Byte-Array, das zu hashende Daten enthält. Leere Arrays sind nicht zulässig.
        Returns:
        Byte-Array mit Hashwerten
        Throws:
        java.security.NoSuchAlgorithmException - Der Algorithmus existiert nicht
        java.security.DigestException - Fehler beim Hashwert berechnen
      • getCipherName

        public java.lang.String getCipherName()
        Gibt den Namen der verwendeten Verschlüsselung zurück
        Returns:
        Name der Verschlüsselung