willemx schreef op zaterdag 20 oktober 2018 @ 15:32:
Ik zie in liveupdate.py dat er af en toe een "0503 key" gelezen word uit de PCAP info. Ik snap echter niet waar deze key voor gebruikt word (ik weet weinig van crypto). Voor zover ik zie wordt deze key eenmalig bij het opstarten uit de SQL database gelezen en gebruikt om een "decryptor" te fabriceren.
Die decryptor is nodig om de data die je omvormer verzendt te ontcijferen, SolarEdge versleutelt namelijk die informatie. De "0503 key" is een soort decryptiesleutel die periodiek wijzigt.
Daarna lijkt het me dat er op random momenten in de PCAP info nieuwe 0503 keys op kunnen duiken,
Klopt, wanneer dit gebeurt zal vanaf dat moment die nieuwe 0503 key worden gebruikt en is de voorgaande niet meer bruikbaar voor het ontsleutelen van informatie die daarna wordt verzonden.
maar daar wordt niets mee gedaan, behalve steeds de meest recente key te bewaren in de SQL db. Pas bij het opnieuw opstarten van liveupdate.py wordt de laatst gelezen key weer gebruikt.
Dat zie je niet goed, de key wordt niet alleen opgeslagen, er wordt ook weer een nieuwe decryptor gemaakt die gebruikmaakt van deze nieuwe 0503 key. Dit gebeurt helemaal aan het einde van de get_messages functie. De nieuwe key wordt dus ook opgeslagen in de database, zodat se-logger bij een herstart de meest recente 0503 key uit de database kan halen (in de hoop dat die nog geldig is).
Als ik dus met een enkel commando liveupdate *.PCAP een groot aantal PCAP files ga verwerken word alleen de bij het opstarten gelezen 0503 key gebruikt voor alle PCAP files. Of zie ik iets over het hoofd?
Hij zal dus de 0503 key die hij bij het opstarten uit de database leest gebruiken voor de eerste PCAP files, totdat hij in die PCAP files een nieuwe key tegenkomt, daarna wordt de nieuwe 0503 key gebruikt voor het vervolg (tot er wéér een nieuwe voorbij komt).
Kan iemand me uitleggen hoe het decodeerproces werkt?
Whizkidzz op GitHub (23 maart 2016) had het voor het eerst ontcijferd. Een dag later vind je een comment van mij met de eerste implementatie van de 'SEDecrypt' class die ook in liveupdate.py te vinden is.
Met name de comments van mij en Whizkidzz in dat draadje zijn wel informatief voor het uitpuzzelen van hoe dit protocol werkt.