Python für sicherheitskritische Systeme?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
desaster
User
Beiträge: 5
Registriert: Donnerstag 25. März 2010, 19:58

Hallo,

wir sind gerade am verifizieren, ob Python für ein sicherheitskritisches System nutzbar wäre. Genauer gesagt, handelt es sich um eine Anwendung im medizinischen Bereich mit wahrscheinlich mittlerer oder höchsten Sicherheitsklasse.
Deshalb meine Frage, gibt es bei euch bereits Erfahrungen diesbezüglich?

Danke
desaster
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Nicht, daß ich dir da groß weiterhelfen könnte, aber welche Anforderungen stellen denn die mittlere / höchste Sicherheitsklasse an die Sprache bzw. Software?
desaster
User
Beiträge: 5
Registriert: Donnerstag 25. März 2010, 19:58

Hallo,

- Man muss nach DIN Normen entwickeln.
- Durchführung Machbarkeitsstudie
- Durchführung Anforderungsanalyse und Spezifikation
- Implementierung Risikomanagement
- Komponententest
- Integrationstest
- Systemtest
- Dokumentation, Dokumentation und noch einmal Dokumentation (traceability)
- jedes Modul muss ausführlich getestet werden und jeder Test dokumentiert werden
- jeder Softwareteil von anderen Anbieter muss getestet werden, deren eventuelle Fehler detektiert und eine Risikobewertung durchgeführt werden. (z.B. wenn man ein grafisches Framework benutzt) Dokumentierung mit genauer Versionsangabe
- Einfrieren von Softwareständen
- ....
Ist natürlich sehr oberflächlich beschrieben aber ich hoffe, dass der ungefähre Aufwand erkennbar ist. Wenn ich jetzt also einen erhöhten Arbeitsaufwand (im Vergleich mit C++) hätte, um meine Klassen, Funktionen, usw. sicher zu implementieren (z.B. Typsicherheit bei Parametern) dann ist eine Entscheidung für Python sicherlich zu überdenken.
Da ich/wir in Python bisher diesbezüglich noch nicht aktiv waren, sollte diese Frage sondieren, ob hier im Forum schon jemand Erfahrungen gesammelt hat.

Danke
desaster
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du hast jetzt eher Vorgehensmodelle beschrieben, als Anforderungen an eine konkrete Sprache! Insofern sehe ich da keine Probleme, diese Muster auf jede x beliebige Sprache anzuwenden (ok, die esotherischen mal außen vor gelassen ;-) )

Dass Typsicherheit zu sicherem Implementieren führt, halte ich für ein Gerücht. Wenn das natürlich wieso auch immer eine harte Anforderung ist, fallen demnach alle dynamisch typisierten Sprachen raus. Und das kann ich mir beim besten Willen nicht vorstellen ;-)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Python ist dynamisch typisiert. Du kannst zwar am Anfang deiner Funktionen und Methoden Typchecks durchführen, aber das ist dann eigentlich kein Python mehr. Wenn du der Meinung bist, dass statische Typisierung dein Programm sicherer macht, dann solltest du die Entscheidung für Python wohl tatsächlich nochmal überdenken. Beim Rest der genannten Punkte sehe ich nicht, wieso das in Python nicht gehen sollte...

€: War zu spät...
Zuletzt geändert von snafu am Freitag 26. März 2010, 09:10, insgesamt 1-mal geändert.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo desaster

Auf welchem OS müsste die Python-Software den laufen? Ist ein Windows bzw. Linux überhaupt als sicher zertifiziert? Oder kommt hierfür ein anderes OS zur Anwendung?

Gruß wuf :wink:
Take it easy Mates!
desaster
User
Beiträge: 5
Registriert: Donnerstag 25. März 2010, 19:58

Hallo Hyperion,

Danke für die Antwort.

[quote]
Du hast jetzt eher Vorgehensmodelle beschrieben, als Anforderungen an eine konkrete Sprache! Insofern sehe ich da keine Probleme, diese Muster auf jede x beliebige Sprache anzuwenden (ok, die esotherischen mal außen vor gelassen )
[/quote]

Korrekt. Letztendlich ist es sich ja auch primär ein Model oder Vorgehensweise, das abgearbeitet wird, in der die Programmiersprache eigentlich eher uninteressant ist. Wahrscheinlich hätte ich meine Frage anders stellen müssen. Zum Beispiel Vor- und Nachteile C++ <--> Python. Ich gehe aber davon aus, dass diese Thematik schon des Öfteren diskutiert wurde und man deshalb auf ausreichend Infomaterial stößt.

[quote]
Dass Typsicherheit zu sicherem Implementieren führt, halte ich für ein Gerücht. Wenn das natürlich wieso auch immer eine harte Anforderung ist, fallen demnach alle dynamisch typisierten Sprachen raus. Und das kann ich mir beim besten Willen nicht vorstellen
[/quote]

Das bedeutet aber auch, dass man diese dann entsprechend in den Modulen auf den Typ überprüfen muss.

Danke
desaster
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

desaster hat geschrieben:
Dass Typsicherheit zu sicherem Implementieren führt, halte ich für ein Gerücht. Wenn das natürlich wieso auch immer eine harte Anforderung ist, fallen demnach alle dynamisch typisierten Sprachen raus. Und das kann ich mir beim besten Willen nicht vorstellen
Das bedeutet aber auch, dass man diese dann entsprechend in den Modulen auf den Typ überprüfen muss.
Nein, es ist einfach ein anderer Ansatz. Wenn du alles überprüfst, machst du dir z.B. Duck Typing kaputt. Wie gesagt: Überleg dir, ob du Python wirklich benutzen willst oder ob du einfach nur C++ auf eine andere Sprache übertragen willst.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

desaster hat geschrieben: Wahrscheinlich hätte ich meine Frage anders stellen müssen. Zum Beispiel Vor- und Nachteile C++ <--> Python. Ich gehe aber davon aus, dass diese Thematik schon des Öfteren diskutiert wurde und man deshalb auf ausreichend Infomaterial stößt.
Das Problem ist, dass du da zu viele Informationen zu findest. ;)

Ich persönlich würde nie im Leben eine sicherheitskritische Anwendung in C++ entwickeln. In Python aber auch nicht. Vermutlich eher in Java oder C#.
Das bedeutet aber auch, dass man diese dann entsprechend in den Modulen auf den Typ überprüfen muss.
Nein, du musst prüfen ob dein Programm mit dem vorgegebenen Parameterraum zurechtkommt und sinnvolle Ergebnisse liefert. Da hilft dann auch keine statische Typisierung, da hilft nur testen.

Allerdings sollte man nicht verschweigen, dass statische Typisierung eine zusätzliche Prüfung und Dokumentation gegenüber dynamischer Typisierung bietet.

Python ist übrigens typsicher(im Gegensatz zu C++ dank einiger C-Features die man benutzen darf). ;)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Zum Thema "Anwendung von Python im medizinischen Bereich" vielleicht ganz interessant: http://www.python.org/about/success/astra/
BlackJack

@desaster: Wenn diese Art von Typprüfung wichtig ist, dann ist Python die falsche Sprache für die Aufgabe. Wie Darii schon schrieb setzt man in Python auf das Testen von richtigem Verhalten statt richtigem Typ. Aus der Idee heraus, das ein Typtest alleine nicht garantiert, dass das Programmverhalten auch das gewünschte ist, man das Verhalten also sowieso testen muss, ob nun mit oder ohne Typtest. Und wenn es keinen Typtest gibt, ist man als Programmierer flexibler, kann also "duck typing" verwenden.

@Darii: Java oder C# würden mir als Patienten auch ein wenig Angst machen. Ada und Leute die wissen was sie tun wäre nett. ;-)
desaster
User
Beiträge: 5
Registriert: Donnerstag 25. März 2010, 19:58

Hallo,

das mit der Typisierung war nur ein Beispiel meinerseits. Wie bereits gesagt, sind die derzeitigen Erfahrungen bzgl. Python noch sehr eingeschränkt. Deshalb zu der Typisierung mal folgende Situation:

Ich habe eine Funktion die als Parameter einen Integer erwartet. Nun wird meine Funktion durch ein anderes Modul aufgerufen, dass der Meinung ist, mir als Übergabeparameter einen völlig anderen Typ zu schicken. Wie ist denn nun der gewollte Weg diesen Mismatch abzufangen? Ist eine eventuelle Exception (weil wir nicht vorhandene Funktionalität ausführen) das probate Mittel?

[quote]
Zum Thema "Anwendung von Python im medizinischen Bereich" vielleicht ganz interessant: http://www.python.org/about/success/astra/
[/quote]

Ein interessanter Link.

[quote]
@Darii: Java oder C# würden mir als Patienten auch ein wenig Angst machen. Ada und Leute die wissen was sie tun wäre nett.
[/quote]

Grins.

Danke
desaster
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@desaster:

Ist kein anderer Typ gewollt, wirft Python eine Ausnahme. Mal eine Ausgabe des Interpreters:

Code: Alles auswählen

>>> def plus_one(num):
...     return num + 1
... 
>>> plus_one(42)
43
>>> plus_one("42")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in plus_one
TypeError: cannot concatenate 'str' and 'int' objects
Andernfalls kannst du es mit einem Cast probieren:

Code: Alles auswählen

>>> def plus_one(num):
...     return int(num) + 1
... 
>>> plus_one("42")
43
>>> plus_one("spam")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in plus_one
ValueError: invalid literal for int() with base 10: 'spam'
Die Beispiele sind natürlich stark vereinfacht, but you should get the idea. ;)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

desaster hat geschrieben:Wie ist denn nun der gewollte Weg diesen Mismatch abzufangen? Ist eine eventuelle Exception (weil wir nicht vorhandene Funktionalität ausführen) das probate Mittel?
Python ist dynamisch aber nicht schwach typisiert. Übergibt man ein Objekt falschen Typs/Verhaltens gibt dass eine Ausnahme.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

desaster hat geschrieben: Wahrscheinlich hätte ich meine Frage anders stellen müssen. Zum Beispiel Vor- und Nachteile C++ <--> Python.
Wir hätten da:
http://wiki.python-forum.de/Unterschiede%20zu%20C
wohl ehr uninteressant:
http://wiki.python-forum.de/Unterschiede%20zu%20PHP

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo disaster
disaster hat geschrieben: Python für ein sicherheitskritisches System
Meine Frage: Um was für ein sicherheitskritische System handelt es sich genau?

a) Drogenverwaltungsprogramm?
b) Medizinische Messgeräte?
c) Geräte für den Einsatz im OP-Saal?

Übrigens: Keine Programmiersprache kann als sicher bezeichnet werden. Hingegen wenn die gleiche Software in zwei verschiedenen Sprachen (egal in welcher) geschrieben wird, welche sich gegenseitig überwacht und auf zwei getrennten Hardare-Plattformen läüft kann schon ein als sicherere bezeichnet werden.

Gruß wuf :wink:
Take it easy Mates!
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

wuf hat geschrieben:Übrigens: Keine Programmiersprache kann als sicher bezeichnet werden. Hingegen wenn die gleiche Software in zwei verschiedenen Sprachen (egal in welcher) geschrieben wird, welche sich gegenseitig überwacht und auf zwei getrennten Hardare-Plattformen läüft kann schon ein als sicherere bezeichnet werden.
Bleiben bloß noch die Probleme, die man durch so eine doppelte Ausführung verursacht. ;)
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo mkesper

Eine einfache Ausführung kann eben auch schon Probleme machen. Aber bei einem Amoklauf des einen muss es vom anderen sicher stillgesetzt werden. Ein System welches gar nicht läuft ist das sicherste!

Gruß wuf :wink:
Take it easy Mates!
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

wuf hat geschrieben:Hallo mkesper

Eine einfache Ausführung kann eben auch schon Probleme machen. Aber bei einem Amoklauf des einen muss es vom anderen sicher stillgesetzt werden. Ein System welches gar nicht läuft ist das sicherste!

Gruß wuf :wink:
Naja, wenn das Sicherheitssystem eines AKW nicht funktioniert (wohl aber der Reaktor selbst) würde mir schon schummrig werden. Und bei modernen Flugzeugen, wo auch die Steuerflächen elektrisch und nicht mehr hydraulisch angesteuert werden ...
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Pekh
Pekh hat geschrieben:Naja, wenn das Sicherheitssystem eines AKW nicht funktioniert (wohl aber der Reaktor selbst)
Das würde genau bei einem einfachen System der Fall sein. Da würde es mir sogar ein wenig unheimlich werden. Aber bei einem doppelten System nimmt man ja an, dass das eine noch läuf und durch Überwachung des anderen feststellen kann, dass dieses nicht mehr laüft und somit veranlässt, dass die Moderatorstäbe schnellstmöglich in den Reaktor eingeführt werden. So viel ich weiss sind es bei AKW's bis vier unabhängige Systeme die diese Sicherheitsanforderung versuchen sicher zu stellen. Bei Flugzeugen werden vermutlich ähnlich Anforderungen bestehen.

Gruß wuf :wink:
Take it easy Mates!
Antworten