Nebenerscheinungen in einem korrekt laufenden Program vertretbar?
-
Hi,
Wie vertretbar sind Erscheinungen in einem Programm, die so nicht sein sollten, aber alles richtig Funktioniert?
Also das "Problem" bzw. den Anreiz zu dieser Frage gab mir meine Version vom Feistelnetzwerk, welches ich nun gerade in meinem eigentliches Programm einfügen wollte.
Hab alles korrekt eingebunden und läuft auch alles. Problem war/ist, wenn ich die Rundenanzahl auf 20 stelle ist der kodierte String gleich dem Klartext. Das Programm funktioniert richtig, aber nach 20 Runden wurde so viel geXort und gewerkelt, dass der Output aussieht wie der Input.Das Auszumerzen ist für den einen Fall vielleicht nicht schwer (leichte Korrekturen an ein paar Funktionen und schon rennts), aber dann könnte ich wieder das Problem habe, dass es bei z.B. 30 Runden nicht "richitg" geht.
Also sollte man da versuchen, diese "Fehler" alle zu finden und auszumerzen oder sagen "das Programm funtzt ja richtig und das ist nur eine doofe Nebenerscheinung. Seht es als Feature, der Angreifer ist verwirrt, weil er Klartext sieht und weiss nicht was Sache ist"Edit: Mal abgesehn, dass diese Frage nun allgemein im Raum steht:
In einem Feistelntzwerk sollte die Rundenzahl doch frei wählbar sein, aber wenn ich dann mehr also 20 Runden habe fängt mein Rechner doch sozusagen wieder von vorne an oder?
-
Entweder funktioniert das Programm fehlerfrei, oder es hat Fehler. Es gibt kein: Fehlerfrei aber mit leichten "Nebenerscheinungen". Wenn gerade dein eigener Source etwas macht was Du Dir nicht erklären kannst, dann ist das schonmal ein schlechtes Zeichen und normalerweise ein Hinweis auf einen Fehler.
Solange Du das Verhalten nicht erklären kannst ist es grundlegend _falsch_ es einfach zu ignorieren und per Definition zu behaupten: Aber es läuft ja ansonsten fehlerfrei.
Sicher, möglicherweise ist es tatsächlich kein Fehler im Source sondern ein Verständnisproblem auf Deiner Seite oder ein Designfehler insgesamt, doch in _allen_ Fällen ist es notwendig solange zu graben, recherchieren und debuggen bis Du eindeutig erklären kannst was das Verhalten auslöst. Erst dann kannst Du beurteilen ob es sich nun um einen Fehler oder ein normales Verhalten des Algorythmus handelt und inwiefern das nun als bug oder feature zu bewerten ist.
Imho ist _nichts_ was nicht sein sollte in einem Programm vertretbar. Und darüber hinaus ist _kein_ Programm, das "Erscheinungen" hat die man sich selbst als Entiwckler dieses Programms nicht erklären kann als "funktioniert richtig" zu titulieren.
-
So wie ich das verstanden habe ist das kein "Fehler" sondern mehr ein dummer Zufall, der hin und wieder auftreten kann. Du kannst das Ergebnis doch am Ende überrpüfen ob es dem klartext ähnlich ist und dann eine Warnung ausgeben.
-
du solltest dein programm unbedingt mit referenzdaten testen. wenn du einen bekannten algorithmus implementiert hast, besorg dir eine korrekte implementierung, generier daten und vergleich sie mit dem ergebnis deines programms.
wenn du eine eigenen implementierung gewählt hast, dann schau dir die mathematischen grundlagen nochmal an. möglich, dass dein algorithmus zyklen erlaubt. dann wäre das keine nebenerscheinung, sondern ein teil der korrekten funktionsweise.
grundsätzlich sollte man bei unerwarteten ergebnissen aber davon ausgehen, dass das programm fehlerhaft arbeitet oder die grundannahmen fehlerhaft waren. es wird aber auf jedenfall irgendwo ein fehler stecken.
-
Jedes Programm hat Bugs. Je nachdem was dein Programm nun tun soll, ist der Fehler schwerwiegend oder vernachlässigbar. Da es etwas mit Verschlüsselung zu tun hat und du nicht richtig verschlüsselst: grober Fehler würde ich behaupten.
Wenn dagegen die Farben leicht variieren oder teilweise der Memory Footprint viel zu hoch wird (vorausgesetzt er wird nicht unendlich groß) so sind das Probleme mit denen man leben kann.
Die Frage die man sich stellen muss ist: erfüllt das Programm seinen Zweck? Wenn ja, dann kann man den Fehler als unwichtig einstufen.