Anforderungen an die sichere Übertragung (REQ-COM)
Umgesetzt in crates/railit-rasta (RaSTA-Sicherheits- und Wiederholschicht, no_std, ohne Allokator) und crates/railit-adapters (EULYNX SCI-P, SCI-LS, SCI-TDS, SCI-LX zu simulierten Objektsteuerungen, SCI-ILS zwischen Stellwerken). Nachweise in crates/railit-rasta/tests/rasta.rs, crates/railit-runtime/tests/ils.rs, den Szenarien 18, 19 und 22 und in apps/railitd/tests/api.rs. Die Bedrohungen folgen EN 50159.
| ID | Anforderung | Gefährdung | Nachweis |
|---|---|---|---|
| REQ-COM-001 | Verfälschte Nachrichten werden am Sicherheitscode erkannt und verworfen. | H-005, H-014 | corruption_is_detected, Szenario 18 |
| REQ-COM-002 | Nachrichten mit fremder Absender- oder Empfängerkennung werden abgewiesen (Einfügung, Maskerade). | H-014 | foreign_sender_is_rejected |
| REQ-COM-003 | Der Empfänger erhält Nachrichten genau einmal und in Sendereihenfolge: Wiederholungen werden verworfen, Verlust wird über den Datenindex erkannt – auch der Verlust der letzten Nachricht, über den Index im nächsten Lebenszeichen – und durch Wiederholung behoben. Unter beliebigem Verlust, Verdopplung und Vertauschung ist die Zustellung in beiden Richtungen ein lückenloser Anfang der gesendeten Folge – oder die Verbindung wird abgebaut. | H-014 | replayed_messages_are_discarded, lost_messages_are_retransmitted_in_order, lost_last_message_is_noticed_by_heartbeat, Property-Tests delivery_is_an_in_order_prefix und both_directions_deliver_in_order_prefixes (CI: 5000 Fälle) |
| REQ-COM-004 | Nachrichten, die älter als t_max sind, bauen die Verbindung ab (Verzögerung). | H-014 | delayed_messages_break_the_connection |
| REQ-COM-005 | Lebenszeichen halten die Verbindung; ohne Meldung der Gegenstelle wird sie nach t_max abgebaut. | H-005, H-014 | heartbeats_keep_the_connection_alive, silence_times_out |
| REQ-COM-006 | Das Stellwerk gibt dem Kern nur Meldungen von Objektsteuerungen weiter, deren Verbindung steht. Fällt eine Verbindung aus, fehlen ihre Meldungen; der Kern behandelt die Elemente nach der Meldezeit als gestört (REQ-IXL-009) und nimmt die Fahrt zurück. Die Verbindung wird selbsttätig neu aufgebaut, danach melden die Objektsteuerungen den Zustand ihrer Elemente vollständig. | H-005, H-014 | field_over_eulynx_and_rasta, Szenarien 18 und 19 |
| REQ-COM-007 | Verlust führt zur Wiederholung, nicht zum Abbau: Eine Wiederholung schickt alle unquittierten Nachrichten mit ihrem ursprünglichen Datenindex und ist beliebig oft möglich, ohne doppelt zu liefern; Wiederholanforderungen kreuzen sich nicht zur Blockade. Jede authentische, rechtzeitige Nachricht hält die Lebendüberwachung und die Zeitstempelbestätigung aktuell. t_max und t_h folgen den Vorgaben der DIN VDE V 0831-200 (1800 ms, 300 ms). Bei 20 % Verlust in beide Richtungen bleibt eine Verbindung bestehen. | H-005, H-014 | twenty_percent_loss_does_not_break_the_connection, both_directions_deliver_in_order_prefixes, Szenario 18 |
| REQ-COM-008 | Feldrechner über das Netz: Die Objektsteuerungen können in einem eigenen Prozess laufen (railit-field); jedes Stellwerk verbindet sich je Objektsteuerung über RaSTA auf UDP (railitd --field remote --field-addr), eingehende PDUs werden nach Empfänger- und Absenderkennung auf die Verbindungen verteilt. Meldungen gibt die Stellwerksseite nur von Objektsteuerungen mit stehender Verbindung weiter; verliert eine Objektsteuerung ihr Stellwerk, zeigen ihre Signale Halt und Ersatzsignale erlöschen. Simulationsbefehle des Dienstes gehen an die Steuerung des Feldrechners (--field-control), deren Netz zum Netz des Dienstes passen muss. | H-014, H-015 | leader_connects_and_controls_the_field, remote_field_over_rasta, field_network_must_match |
| REQ-COM-009 | Nachbarstellwerke über SCI-ILS: Die Grenzmeldungen zweier benachbarter Stellbereiche laufen als SCI-ILS-Telegramme (Absender, Empfänger, Nummer der Grenze im Paar, Merkmale, laufende Nummer; Reservebits müssen 0 sein, jedes Telegramm hat genau eine gültige Darstellung) über eine RaSTA-Verbindung je Paar (railitd --borders ils, Szenario-Option borders = "ils"). Zugestellt wird nur, was über eine stehende Verbindung neu eingetroffen ist; fremde oder nicht zuzuordnende Telegramme werden verworfen und gezählt. Bleiben die Meldungen aus – gestörte Strecke oder ein Nachbarkern, der nicht mehr rechnet –, fällt die Ausfahrt über die Grenze auf Halt und die Grenze wird gestört gemeldet (REQ-IXL-020); die Erlaubnis bleibt, wo sie war, und wandert erst wieder, wenn die Verbindung steht. Unter beliebigen Störungen (Unterbrechung, Verlust, Verfälschung, Laufzeit über t_max) halten nie beide Seiten einer Grenze die Erlaubnis und zeigen nie Ausfahrten beider Bahnhöfe in die eingleisige Strecke Fahrt; alle Szenarien verhalten sich wie bei idealer Übertragung. | H-012, H-014 | telegram_roundtrip_and_rejects, interrupted_link_delivers_nothing_and_recovers, corruption_is_never_delivered, Property-Test permission_stays_exclusive_over_disturbed_ils (CI: 1000 Fälle), direction_change_waits_for_the_link, all_scenarios_pass_over_sci_ils, borders_over_sci_ils, Fuzz-Ziel sci_ils, Szenario 22 |
| REQ-COM-010 | Stellbereiche in getrennten Prozessen: Ein Dienst kann nur einen Teil der Stellbereiche rechnen (railitd --areas); Grenzen zu Bereichen anderer Prozesse laufen über SCI-ILS auf RaSTA über UDP (--ils-listen, --ils-peer BEREICH=ADRESSE). Rolle (Aufbau durch den Bereich mit dem kleineren Index im Gesamtnetz), RaSTA-Kennung und Nummer der Grenze im Paar ergeben sich aus dem Gesamtnetz, sodass beide Prozesse sie gleich bestimmen; jede Grenze eines lokalen Bereichs braucht die Adresse ihres Nachbarn, fremde Absender werden verworfen. Ein gemeinsamer Feldrechner hat je Stellbereich eigene Objektsteuerungen und einen eigenen Umschalter (REQ-SVC-013), sodass jedes Stellwerk nur seine Bereiche stellt. Fällt ein Prozess aus, behandeln seine Nachbarn die Grenze als gestört und nehmen Fahrten über sie zurück; aus dem Netz eingehende beliebige PDUs führen nie zu einer Grenzmeldung. Ein Nachbar kann mehrere Adressen haben (Haupt- und Bereitschaftsrechner); PDUs gehen an alle, antworten kann nur, wer führt. Übernimmt ein Bereitschaftsrechner einen Teil des Netzes, baut sich die Verbindung zu ihm neu auf, und der Erlaubniswechsel geht mit den übernommenen laufenden Nummern weiter. | H-012, H-014 | split_processes_exchange_over_the_network, border_between_processes, areas_in_separate_processes, switch_per_area, standby_takes_over_a_part_of_the_network, Fuzz-Ziel ils_net |
| REQ-COM-011 | RaSTA-Redundanzschicht: Mit mehreren Kanälen geht jede PDU der Sicherheitsschicht in einem Rahmen mit Sequenznummer über alle Kanäle. Der Empfänger liefert jede Nummer höchstens einmal und aufsteigend aus, stellt Rahmen vor ihrer Zeit bis t_seq zurück (höchstens 4) und überspringt danach die Lücke; einem neu begonnenen Sender folgt er. Fällt ein Kanal aus, bleiben die RaSTA-Verbindungen bestehen. Je Kanal wird die Zahl fehlender Rahmen je Diagnosefenster festgehalten. | H-014 | duplicates_from_the_second_channel_are_filtered, a_lost_frame_comes_over_the_other_channel, a_gap_is_skipped_after_t_seq, diagnosis_counts_missing_frames_per_channel, redundant_channels_survive_a_channel_failure, Fuzz-Ziel rasta_redundancy |