HM-CFG-LAN AES Verschlüsselung

Hallo!

Ich bin gerade dabei eine Library zu schreiben, die die Kommunikation mit HomeMatic Devices unter Java ermöglicht [1].
Ziel ist es, dass HomeMatic auch in einem Java basierten Smart-Home-System verwendet werden kann.
Die Kommunikation über HM-CFG-USB-2 und HM-CFG-LAN funktioniert mal soweit, dass (unverschlüsselte) Pakete mitgelesen werden können.

Leider bereitet mir der AES Encryption Modus beim HM-CFG-LAN Probleme, bei denen ihr mir hoffentlich weiterhelfen könnt.
Soweit ich das (auch im Homegear Quellcode) nachvollziehen konnte, wir ja gleich nach dem Verbinden zum Gateway ein “V” Packet mit einem 32 stelligem RemoteIV geschickt.
Dieses Packet beantwortet man mit “V” und mit einem selbstgewähltem LocalIV - soweit so gut. Mit deisen beiden IV Parametern und dem AES Key des Gateways wird dann die AES Ent-/Verschlüsselung initialisiert.

In den Homegear Logs kann man das auch schön nachvollziehen:

09/03/16 11:22:55.235 Module HomeMatic BidCoS: LAN-Konfigurationsadapter "My-HM-CFG-LAN": HM-CFG-LAN IV is: 30123C1232E170B80000000000000000
09/03/16 11:22:55.236 Module HomeMatic BidCoS: LAN-Konfigurationsadapter "My-HM-CFG-LAN": Homegear IV is: 861237816BD1234B2D0E7092B1D83123
09/03/16 11:22:55.236 Module HomeMatic BidCoS: LAN-Konfigurationsadapter "My-HM-CFG-LAN": Debug: Sending: V861237816BD1234B2D0E7092B1D83123

Die weitere Kommunikation erfolgt dann AES verschlüsselt, wobei der Cipher Feedback Mode (CFB) verwendet wird [2].
Soweit ich gesehen habe werden die Packets vom Gateway an Homegear mit dem Local IV verschlüsselt und die Packets von Homegear an das Gateway mit dem Remote IV.

In Java gibt es ebenfalls eine Implementierung für AES-128 und CFB [3] - die Ent-/Verschlüsselung klappt aber leider nicht wie gewünscht.

Meine Fragen sind nun:
Stimmen meine Annahmen zu Art der Verschlüsselung und IVs?
Welches Padding wird bei der Verschlüsselung verwendet? Wird überhaupt eines verwendet? (Das kann in Java nämlich noch zusätzlich angegeben werden)

Lg

[1] https://github.com/crea-doo/homematic-java
[2] https://github.com/Homegear/Homegear-HomeMaticBidCoS/blob/master/src/PhysicalInterfaces/HM-CFG-LAN.cpp#L544
[3] https://bouncycastle.org/specifications.html

Hallo crea-doo,

eigentlich ist die Verschlüsselung ganz einfach. Wie du schon selbst herausgefunden hast:

[ul]
[li] Als Schlüssel wird der aufgedruckte verwendet.[/li]
[li] Der IV für die Kommunikation von Homegear zum HM-CFG-LAN wird mit “V” gepräfixt an Homegear gesendet.[/li]
[li] Den IV für die Kommunikation vom HM-CFG-LAN zu Homegear generieren wir selbst und senden ihn an das Gerät.[/li]
[li] Ver- und entschlüsselt wird mit AES-CFB.[/li][/ul]

Ja.

CFB ist ein Stream-Cipher-Modus und benötigt damit kein Padding.

Viele Grüße

Sathya

P. S.: Schreib mir mal irgendwann, wie du vorankommst. Klappt das Timing der Pakete in Java vernünftig?

Hallo!

Bin mittlerweile ein Stückchen weitergekommen:
Hatte die Probleme mit der Verschlüsselung, weil ich nicht darauf geschaut habe die empfangenen Hex-Daten zuerst in Kleinschreibung zu transformieren und dann zu entschlüsseln…

Beim Timing der Pakete bin ich aber noch nicht angelangt :slight_smile:

Lg