Internship in design and implementation of an algorithm to calculate hidden data included in a cyclic redundancy checksum
7. Oktober 2016
The protocol PROFIsafe utilizes frames with a frame check sequence (fcs), realized as a crc. The bytes used to calculate this fcs contain, besides the user data, some hidden information: a checksum of the communication parameters (F-Parameter checksum) and a consecutive number. Both communication partners (called host and device) agree upon start values of that hidden information during communication initiations and include them into the fcs calculation, without an explicit exchange.
The communication parameter checksum does not change over time, but the consecutive number is increased with every new frame, determined by an algorithm documented in the PROFIsafe specification.
In the event of an fcs mismatch, i.e. when the received and calculated fcs do not agree, the partner detecting the mismatch raises an error and acts accordingly, i.e. devices will be passivated by the host.
Since neither the host nor the device give detailed diagnostics about the faulty frame, the expected and received fcs or the used hidden information, it is impossible to validate a single frame and, in turn, diagnose the possible cause of the fault.
The task of this project is to design and implement an efficient algorithm which can exhaustively provide all possible consecutive numbers to be used in the calculation of the faulty frame in order to validate its correctness. The provided input contains the configuration checksum and a capture of input and output frames before and after the faulty frame in a proprietary file format. The output shall be a list of all possible consecutive numbers
The project´s completion should include a presentation of the algorithm, a short usage description and a detailed technical documentation.
Optional: A possible extension is to support frame data extracted from Wireshark capture (pcap-file). The implementation can be based or integrated into on an existing brute-force solution realized in the programming language ruby.
Student (m/w) of Computer Sciences or Mathematics