Forum: Mikrocontroller und Digitale Elektronik Zeitgleiches Versenden von Nachrichten mit dem AT90CAN


von Peter (Gast)


Lesenswert?

Erstmal ein freundliches Hallo an euch!

Aktuell habe ich mir vorgenommen, einen Schlüsselaustausch mit 
CAN-Controller zu realisieren. Dafür viel mir letztes Jahr im 
CAN-Newsletter das von Bosch vorgestellt Plug-and-Secure Verfahren ein.

Leider ist es doch nicht ganz so simpel, wie es anfangs schien. Das 
Protokoll sieht vor, dass zwei Parteien die Payloadbits (bestehend aus 
dem Schlüsselbit und dem zugehörigen inversen Bit) zeitgleich auf den 
Bus schreiben und lesen. Dadurch kann man bei einer Kombination von '00' 
davon ausgehen, dass beide Parteien sich zueinader inverse Bits 
geschickt haben und entsprechend wissen, wer welches Bit gesendet hat. 
Bei '01' oder '10' werden diese Bits sozusagen verworfen und das 
entsprechende Bit aus dem zu übertragenen Schlüssel gelöscht.
Soviel zu der sehr kurzen Theorie.

Praktisch habe ich es mit einem Transceiver schon hinbekommen, einen 
Schlüsselaustausch damit herzustellen. Nun wollte ich es auch für den 
Controller schreiben.
Dabei benutze ich zwei AT90CAN auf dem Olimex Board.
Langsam zweifle ich jedoch, dass es mit dem AT90CAN möglich ist, dass 
beide Parteien zeitgleich eine Nachricht senden und empfangen. Bisher 
habe ich es mit einem zusätzlichen Interrupt als Trigger versucht, der 
von der einen Partei aktiviert wird und der zweiten damit mitteilt, dass 
beide nun ihre Nachricht senden sollen. Leider ohne Erfolg.

Kann mir einer von euch vielleicht etwas zum zeitgleichen Senden mit dem 
AT90CAN sagen?

Viele Grüße
Peter

von Daniel E. (everyday_fun69)


Lesenswert?

Hallo, ne Frage: dass beide Parteien zeitgleich eine Nachricht senden 
und empfangen.

Zeitlich senden und empfangen? Wie soll das gehen? Ein MC kann doch 
immer nur eins machen oder steh ich da auf dem Schlauch?

Danke.

von Rudolph (Gast)


Lesenswert?

Ugh, das ist doch quasi ein Misbrauch vom CAN?
Also zwei Controller sollen zeitgleich eine Botschaft mit der gleichen 
ID auf den CAN schreiben und die Botschaften sollen sich dann inhaltlich 
gegenseitig überschreiben?

Das wird ohne sehr spezialisierte Hardware nicht funktionieren.
Ein üblicher CAN-Controller kümmert sich um den kompletten Daten-Rahmen, 
das bekommt man erstens nicht synchronisiert und zweitens dürfte das 
Checksummen-Fehler geben, falls man es zufälligerweise doch synchron 
hinbekommt.

Man müsste schon auf den Bus lauschen und den Payload synchron zur 
Botschaft mit eintakten.
Ohne FPGA oder speziell auf sowas angepassten CAN-Controller wird das 
nichts.

von Peter (Gast)


Lesenswert?

Sehen wir mal vom Missbrauch von CAN ab. Es dient ja letztendlich zu 
einem größeren Wohl ;) . Dem Einführen eines gemeinsamen geheimen Keys.

Genau, durch den Payload wird der Key erzeugt. Wie gesagt, kann ein 
Angreifer bei einem '00' Bit Paar im Payload nicht wissen, wer von den 
beiden Parteien die 1 und die 0 gesendet hat. Dadurch kann er nur bei 
jedem Paar raten.

Ich denke mal bei dem CRC Check könnte man irgendwie tricksen, um das 
hinzubekommen. Ich befürchte nur, dass es wirklich daran scheitert, dass 
es unmöglich ist, zwei Nachrichten synchron zu übermitteln.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Peter schrieb:
> Kann mir einer von euch vielleicht etwas zum zeitgleichen Senden mit dem
> AT90CAN sagen?

 Die Antwort lesen:
Beitrag "Re: AT90CAN Probleme beim senden in kurzer Folge"

Rudolph schrieb:
> Man müsste schon auf den Bus lauschen und den Payload synchron zur
> Botschaft mit eintakten.
> Ohne FPGA oder speziell auf sowas angepassten CAN-Controller wird das
> nichts.

 Kann mich dem nur anschliessen.

von Markus D. (mowlwurf)


Lesenswert?

Hier ist ein aktueller Artikel zu dem Verfahren:
http://www.all-electronics.de/security-kommunikation-in-can-netzwerken-plug-and-secure-datensicherheit/

Dort steht u.a., dass zur Einhaltung von Stuff-Bit-Regeln und der 
korrekten CRC entsprechende Hardware im CAN-Controller oder im 
Transceiver vorhanden sein muss (Bild 3).

Sprich: mit den zur Zeit verfügbaren CAN-Controllern, bzw. Transceivern 
funktioniert das Verfahren nicht.

von Peter (Gast)


Lesenswert?

Oh vielen Dank, ich kannte bisher nur das Paper und die Grafik war darin 
nicht enthalten und davon wurde darin nichts geschrieben. Das ist nun 
ein wenig blöd.

von MiWi (Gast)


Lesenswert?

Daniel E. schrieb:
> Hallo, ne Frage: dass beide Parteien zeitgleich eine Nachricht senden
> und empfangen.
>
> Zeitlich senden und empfangen? Wie soll das gehen? Ein MC kann doch
> immer nur eins machen oder steh ich da auf dem Schlauch?
>
> Danke.

Ja, Du stehst drauf.

Der CAN.Controller muß zwecks erkennen von Buskollisionen immer mithören 
(Rx) was er sendet(Tx). Somit it Rx und Tx gleichzeitig möglich und 
nötig.

MiWi

von Peter (Gast)


Lesenswert?

Wenn du das so schreibst, könnte das, was ich vorhabe ja doch in einer 
vereinfachten Weise gehen? Man müsste sie nur noch zum ca gleichen 
Senden bekommen?

von Markus D. (mowlwurf)


Lesenswert?

Hast du den in dem verlinkten Artikel komplett gelesen?

"Durch die zeitgleiche Übertragung von CAN-Botschaften durch Alice und 
Bob im Payload-Teil ergeben sich praktische Herausforderungen, zum 
Beispiel hinsichtlich einer gegebenenfalls notwendigen Einführung von 
Bitstopfen bei der Übertragung von mehr als fünf gleichen Bits in Folge 
oder der Korrektheit der zyklischen Prüfsumme (CRC) für die überlagerte 
CAN-Botschaft. Dies liegt daran, dass die Überlagerung von korrekten 
Einzelbotschaften im Allgemeinen nicht zu einer korrekten überlagerten 
CAN-Botschaft führt. Eine Lösung stellt die dynamische Ermittlung von 
CRC und Bitstopfen basierend auf der effektiven Bitsequenz auf dem 
CAN-Bus anstatt auf Grundlage der jeweiligen Sendesequenzen dar. Damit 
entsteht eine Rückwärtskompatibilität, sodass Steuergeräte, die das 
Verfahren nicht unterstützen, keine Probleme verursachen. Das Verfahren 
lässt sich unkompliziert in den normalen CAN-Verkehr einbinden, sodass 
Nachrichten mit hoher Priorität nicht gestört werden."

Und deswegen braucht es spezielle Hardware im Controller/Transceiver:

"Zur Realisierung des Verfahrens lässt sich ein entsprechendes 
Hardware-Modul entweder direkt in einen Mikrocontroller oder in einen 
CAN-Transceiver integrieren."

Selbst wenn du die Telegramme zeitgleich sendest, ist spätestens 
aufgrund des unterschiedlichen Inhaltes bei der CRC Schluss. Dann siehst 
du nur Active-/Passive-Fehler.

von Steffen R. (steffen_rose)


Lesenswert?

Peter schrieb:
> Aktuell habe ich mir vorgenommen, einen Schlüsselaustausch mit
> CAN-Controller zu realisieren. Dafür viel mir letztes Jahr im
> CAN-Newsletter das von Bosch vorgestellt Plug-and-Secure Verfahren ein.

Dafür benötigt man einen passend veränderten CAN Controller. Für Bosch 
kein Problem...

Peter schrieb:
> Langsam zweifle ich jedoch, dass es mit dem AT90CAN möglich ist, dass
> beide Parteien zeitgleich eine Nachricht senden und empfangen.

Während der Arbitrierung geht das, wenn man das SOF zeitgleich 
hinbekommt. Mehr als ein Bit pro Arbitrierung dürfte so aber nicht 
hinzubekommen sein.
Wichtig ist, dass für einen mitloggenden Dritten nicht zu erkennen ist, 
welche Teilnehmer welche Nachricht geschickt hat.

Rudolph schrieb:
> Also zwei Controller sollen zeitgleich eine Botschaft mit der gleichen
> ID auf den CAN schreiben und die Botschaften sollen sich dann inhaltlich
> gegenseitig überschreiben?

Zwei Controller senden gleichzeitig. Auf dem CAN Bus alles wie gehabt. 
Die CAN Controller brechen jedoch nicht ab, wenn sie etwas anderes 
empfangen als Senden (und korrigieren den Stream). Da beide Controller 
Ihre Nachrichten kennen, können sie aufgrund der Empfangsdaten auf die 
Sendedaten des jeweils anderen schließen. Wer auf dem CAN Bus ohne 
Kenntnis eines Stream mitliest, kann dies nicht.

Peter schrieb:
> Genau, durch den Payload wird der Key erzeugt.
Nein, es werden die Schlüssel getauscht, ohne dass sie mitgelesen werden 
können.

von Steffen R. (steffen_rose)


Lesenswert?

Hier eine mögliche Methode mit herkömmlichen CAN Controllern:

http://www.esacademy.com/blog/2016/02/26/cancrypt-functionality/

von Markus D. (mowlwurf)


Lesenswert?

MiWi schrieb:
> Der CAN.Controller muß zwecks erkennen von Buskollisionen immer mithören
> (Rx) was er sendet(Tx). Somit it Rx und Tx gleichzeitig möglich und
> nötig.

Das soweit richtig. Allerdings landet die empfangene Nachricht bei den 
CAN-Controllern, die ich kenne, nicht im Empfangspuffer und kann damit 
auch von keiner Software ausgewertet werden.
Wozu auch? Der Controller hat sie ja gerade erst gesendet, also wird sie 
verworfen.

Oder gibt es Controller, bei denen das nicht so ist?

von Peter (Gast)


Lesenswert?

@Marcus:

Gehört zu den dir bekannten Controllern auch der AT90CAN? Das würde mein 
Setup ja direkt für das Vorhaben ausschließen.

von Markus D. (mowlwurf)


Lesenswert?

Nein, den kenne ich nicht. Das von Bosch vorgestellte Verfahren geht 
damit aber definitiv nicht.

Das von Steffen R. verlinkte CANcrypt

> http://www.esacademy.com/blog/2016/02/26/cancrypt-...

scheint aber mit Standardhardware zu funktionieren. Das solltest du dir 
vllt. mal näher angucken.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Wenn der µC in der CAN Peripherie Einheit ein "PnS" hat, dann kann 
dieser die Schlüssel tauschen.

Da der Artikel recht neu ist und der AT90CAN schon zur Steinzeit 
entwickelt wurde, wird dieser wohl ungeeignet sein um Schlüssel aus zu 
tauschen.

Aktuell kenne ich keinen µC der "PnS" drin hat.

Aber Du kannst natürlich Port-Pins setzen/löschen und die CAN-Peripherie 
selbst in Software schreiben - das geht so ziemlich mit jedem µC der 
Port-Pins hat. Nachteil: Die Baudrate müsstest Du recht niedrig wählen, 
zum Test sollte es dennoch reichen.

Jedenfalls: Sehr interessant was die Bosch-Leute erfunden haben!

von Peter (Gast)


Lesenswert?

Bisher habe ich es ja schon direkt über den Transceiver realisiert. 
Dabei steuere ich direkt die Pins RXCAN und TXCAN an und übertrage dann 
nur den Payload über CANH und CANL. Wenn ich es mit dem Oszilloskop 
messe bekomme ich halt ein paar Spikes, da sie nicht komplett synchron 
sind, aber damit ist ja auch zu rechnen.

Schade, dass es nicht auch direkt mit dem integrierten Controller geht.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Markus M. schrieb:
> Jedenfalls: Sehr interessant was die Bosch-Leute erfunden haben!

 Nun, so schwer wird das wohl nicht zu knacken sein.

 Allein schon die Exemplar- und Quartzstreuungen machen es möglich
 (natürlich mit entsprechender Hardware).
 Einer wird immer langsamer sein - und wenn es nur ns sind...

von M. Н. (Gast)


Lesenswert?

Peter schrieb:
> Schade, dass es nicht auch direkt mit dem integrierten Controller geht.

Deswegen entwickeln die ja ein neues Modul :)
Auf dem CAN-Bus entsteht eine Überlagerung, die unterschiedlich zu 
beiden gesendeten Streams ist. Die CAN Controller müssen abhängig von 
der Überlagerung Stuff-Bits und CRC berechnen. Die Überlagerung muss 
schließlich ein echtes CAN-Frame bleiben.

Marc V. schrieb:
> Nun, so schwer wird das wohl nicht zu knacken sein.
>
>  Allein schon die Exemplar- und Quartzstreuungen machen es möglich
>  (natürlich mit entsprechender Hardware).
>  Einer wird immer langsamer sein - und wenn es nur ns sind...

Das geht noch viel einfacher, man kann einfach anhand des Signalpegels 
mit dem Oszi erkennen, ob von einem oder von zwei Stellen getrieben 
wird.
Das sieht man bei normalem CAN schön am ACK Bit, da dieses von mehreren 
Stellen gesendet wird. Die Spannung ist somit höher bzw. niedriger, je 
nachdem welche Leitung man betrachtet.

von Steffen R. (steffen_rose)


Lesenswert?

Marc V. schrieb:
> Markus M. schrieb:
>> Jedenfalls: Sehr interessant was die Bosch-Leute erfunden haben!
>
>  Nun, so schwer wird das wohl nicht zu knacken sein.
>
>  Allein schon die Exemplar- und Quartzstreuungen machen es möglich
>  (natürlich mit entsprechender Hardware).
>  Einer wird immer langsamer sein - und wenn es nur ns sind...

Naja, in Zeiten von CAN FD darf die Varianz nur noch gering sein. Und 
bei Security auf billig-Hardware zu setzen ist auch der falsche Weg.

Und starke Verschlüsselung bei den wenigen Daten, die mit CAN übertragen 
werden, ist auch schwierig. Man kann es nur etwas schwerer machen.
Mit der dargestellten Methode wird man auch keinen Schlüsseltausch 
machen, sondern "nur" Daten austauschen, die vorher im Klartext über die 
Leitung ging (Salt, öffentlicher Schlüssel).
Einfach nur, um einen Angriff zu erschweren.

M. H. schrieb:
> Das geht noch viel einfacher, man kann einfach anhand des Signalpegels
> mit dem Oszi erkennen, ob von einem oder von zwei Stellen getrieben
> wird.
> Das sieht man bei normalem CAN schön am ACK Bit, da dieses von mehreren
> Stellen gesendet wird. Die Spannung ist somit höher bzw. niedriger, je
> nachdem welche Leitung man betrachtet.

Man wird schon aufeinander abgestimmte Hardware nutzen. Ist ja Security! 
Da muss man schon Aufwand und Know How reinstecken. Die 
Spannungsunterschiede entstehen häufiger durch unterschiedliche 
Spannungen, mit denen die Transceiver betrieben werden (3.3V, 5V). Aber 
ja, durch solche Spannungsunterschiede kann man Nachrichten gut den 
Sendern zuordnen, wenn es sie gibt.

Und es ist ja schon an Hand der Daten bekannt, wann einer und wann zwei 
die jeweiligen Daten schicken. Unbekannt ist, wer von beiden welche 
Daten schickt.

Und es ist immer einen Kosten Nutzen Abwägung. Alles ist knackbar. Ist 
immer nur eine Frage des Aufwandes. (und einer cleveren Idee... Nur um 
mal schlechte Zufallszahlen als einen Punkt zu nennen.)

von Rudolph (Gast)


Lesenswert?

Steffen R. schrieb:
> Die Spannungsunterschiede entstehen häufiger durch unterschiedliche
> Spannungen, mit denen die Transceiver betrieben werden (3.3V, 5V).

CAN-Transceiver werden mit nominell 5V betrieben, 3,3V sind da 
bestenfalls als I/O Versorgung zum µC dran.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Steffen R. schrieb:
> Naja, in Zeiten von CAN FD darf die Varianz nur noch gering sein. Und
> bei Security auf billig-Hardware zu setzen ist auch der falsche Weg.

 Selbstverständlich.
 Aber Differenzen muss es ganz einfach geben, deswegen schrieb ich
 auch "(natürlich mit entsprechender Hardware)".


> die jeweiligen Daten schicken. Unbekannt ist, wer von beiden welche
> Daten schickt.

 Mit entsprechender Hardware kann man schon rausfinden, wer A und
 wer B ist. Danach ist es auch kein grosses Problem mehr zu sehen,
 ob Dominant oder Recessive verspätet kommt.

von Markus D. (mowlwurf)


Lesenswert?

> Die Spannungsunterschiede entstehen häufiger durch unterschiedliche
> Spannungen, mit denen die Transceiver betrieben werden (3.3V, 5V).

Die Spannungsunterschiede entstehen eher durch Common-Mode-Versatz, also 
durch unterschiedliche Massen der Geräte/Transceiver
(https://www.gemac-fieldbus.com/de/common-mode/).

M. H. hat aus meiner Sicht Recht. Das ACK-Bit hat einen niedrigeren 
Pegel, weil an der Stelle mehrere Treiber auf den Bus einwirken.

Somit könnte man auch erkennen, wann beim Plug-and-Secure Verfahren in 
einem CAN-Telegramm zwei Controller gleichzeitig ein dominantes Bit 
senden.

: Bearbeitet durch User
von M. Н. (Gast)


Lesenswert?

Steffen R. schrieb:
> Man wird schon aufeinander abgestimmte Hardware nutzen. Ist ja Security!
> Da muss man schon Aufwand und Know How reinstecken.

Das PnS bietet keine Schutz vor Hardwarezugriff. Es bietet lediglich 
Schutz, sollte ein angeschlossenes Gerät gehijackt werden.
Durch Hardwarezugriff mit Oszi oder einer Schaltung deiner wahl, lässt 
sich der Schlüsselaustausch entschlüsseln.

Steffen R. schrieb:
> Naja, in Zeiten von CAN FD darf die Varianz nur noch gering sein. Und
> bei Security auf billig-Hardware zu setzen ist auch der falsche Weg.

Das PnS Modul sendet nur Frames auf klassischen Bitraten. duch die 
Laufzeit auf dem Bus ist eine sichere Überlagerung von Frames mit hoher 
Bitrate nicht möglich. Aus diesem Grund fängt ja jedes CAN-FD Frame 
langsam an, um die Arbitrierung durchzubekommen.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Rudolph schrieb:
> Steffen R. schrieb:
>> Die Spannungsunterschiede entstehen häufiger durch unterschiedliche
>> Spannungen, mit denen die Transceiver betrieben werden (3.3V, 5V).
>
> CAN-Transceiver werden mit nominell 5V betrieben, 3,3V sind da
> bestenfalls als I/O Versorgung zum µC dran.

Nicht alle
http://www.ti.com/product/SN65HVD234
https://www.maximintegrated.com/en/products/interface/transceivers/MAX3051.html

Matthias

von Steffen R. (steffen_rose)


Lesenswert?

Rudolph schrieb:
> Steffen R. schrieb:
>> Die Spannungsunterschiede entstehen häufiger durch unterschiedliche
>> Spannungen, mit denen die Transceiver betrieben werden (3.3V, 5V).
>
> CAN-Transceiver werden mit nominell 5V betrieben, 3,3V sind da
> bestenfalls als I/O Versorgung zum µC dran.

SN65HVD233 ???

Marc V. schrieb:
> "(natürlich mit entsprechender Hardware)"

Ja klar. Genau dieser Aufwand soll es ja unattraktiv machen. Von 
unmöglich ist hier garnicht die Rede. Wenn du ausreichend lange Zugriff 
auf das Gerät hast geht alles. Und wenn du an der Hardware rumbasteln 
kannst noch mehr.

von Steffen R. (steffen_rose)


Lesenswert?


von M. Н. (Gast)


Lesenswert?

Steffen R. schrieb:
> Rudolph schrieb:
>> Steffen R. schrieb:
>>> Die Spannungsunterschiede entstehen häufiger durch unterschiedliche
>>> Spannungen, mit denen die Transceiver betrieben werden (3.3V, 5V).
>>
>> CAN-Transceiver werden mit nominell 5V betrieben, 3,3V sind da
>> bestenfalls als I/O Versorgung zum µC dran.
>
> SN65HVD233 ???

Ja. Dieser Transceiver arbeitet mit 3.3V. Aber es ist so, dass alle mir 
bekannten CAN Transceiver, die nur mit 3.3V arbeiten, die CANH Leitung 
nicht auf das notwendige Level von 3.5V bekommen. Den meisten Empfängern 
ist das jedoch egal, da die differentielle Spannung zwischen CANH und 
CANL ausreicht. Ich habe jedoch auch schon gehört, dass Leute Probleme 
hatten, sobald sie 3.3V CAN Tranceiver und 5V CAN Transceiver an einem 
Bus verwendet haben. Es kam da zu Empfangsproblemen.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

M. H. schrieb:
> Steffen R. schrieb:
>> Rudolph schrieb:
>>> Steffen R. schrieb:
>>>> Die Spannungsunterschiede entstehen häufiger durch unterschiedliche
>>>> Spannungen, mit denen die Transceiver betrieben werden (3.3V, 5V).
>>>
>>> CAN-Transceiver werden mit nominell 5V betrieben, 3,3V sind da
>>> bestenfalls als I/O Versorgung zum µC dran.
>>
>> SN65HVD233 ???
>
> Ja. Dieser Transceiver arbeitet mit 3.3V. Aber es ist so, dass alle mir
> bekannten CAN Transceiver, die nur mit 3.3V arbeiten, die CANH Leitung
> nicht auf das notwendige Level von 3.5V bekommen. Den meisten Empfängern
> ist das jedoch egal, da die differentielle Spannung zwischen CANH und
> CANL ausreicht. Ich habe jedoch auch schon gehört, dass Leute Probleme
> hatten, sobald sie 3.3V CAN Tranceiver und 5V CAN Transceiver an einem
> Bus verwendet haben. Es kam da zu Empfangsproblemen.

Dann hatten diese Leute andere Probleme z.B. nicht standardkonforme 
Empfänger oder zu viel Common Mode Voltage. ISO11898-2 spezifiziert 
keinen min Wert für CANH sondern nur einem nominellen Wert von 3,5V.

Matthias

von Rudolph (Gast)


Lesenswert?

Μαtthias W. schrieb:
>> CAN-Transceiver werden mit nominell 5V betrieben, 3,3V sind da
>> bestenfalls als I/O Versorgung zum µC dran.
>
> Nicht alle
> http://www.ti.com/product/SN65HVD234
> https://www.maximintegrated.com/en/products/interface/transceivers/MAX3051.html

Okay, wieder was gelernt, die gibt es bei TI sogar auch als Automotive 
Version.
Dann bin ich mal gespannt, ob es für die Dinger auch eine Freigabe geben 
wird, im Moment könnte ich die Teile jedenfalls nicht einsetzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.