Announcement

Collapse
No announcement yet.

AES Schlüssel verstecken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • AES Schlüssel verstecken

    Hallo!

    Ich habe ein dringendes Problem mit meiner Anwendung:

    Meine Anwendung ist ein Firmware-Loader für das Updaten der Applikation auf Mikrocontrollern. Um die geistigen Ergüsse zu schützen, habe ich die Programmierfiles und die Kommunikation über AES verschlüsselt. Das funktioniert wunderbar nur gibt's da ein Problem:

    Ich kann die die .exe-Datei (mein Bootloader) mit dem Red Gate Reflector (Disassembler) öffnen und der zeigt mir sofort den 128bit Schlüssel (ein byte[] array)!!!

    Ich programmiere nur selten auf Windows und habe leider keine Ahnung wie ich dem beikommen kann.

    Gibt es bestimmte Attribute, die Ich auf Klassen-Member anwenden kann, damit die versteckt werden?

    Ich bin für alle Hinweise dankbar.

    Gruß,
    Uffze

  • #2
    Gibt es bestimmte Attribute, die Ich auf Klassen-Member anwenden kann, damit die versteckt werden?
    Nein.

    Hilfreich wäre vielleicht das Stichwort ist 'Obfuscator'. Such mal danach (zum Beispiel in diesem Forum) um ein Gefühl dafür zu bekommen was das ist und ob dir das hilft.

    Ansonsten muss ich dir leider sagen das die Philosophie in .NET eher ist den User zu schützen und nicht die Anwendungen Es ist sein Rechner auf dem das läuft und damit er sicher sein kann (zumindest theoretisch) das die Anwendung nichts schlimmes tut muss es möglich sein da rein zu gucken.

    Vielleicht wäre es auch angebracht darüber nachzudenken ob es überhaupt sinnvoll ist den Schlüssel im Code unterzubringen und nicht lieber anders sicher zum User zu bringen.

    Comment


    • #3
      Hallo Ralf,

      danke für die schnelle Antwort. Leider haben sich damit meine schlimmsten Befürchtungen bestätigt.

      Leider kann ich die Entschlüsselung nicht aus dem Code entfernen (das System/Protokoll hat sich schon etabliert und ich muss leider abwärtskompatibel bleiben). Ich werde mein Glück mit einem Obfuscator versuchen.

      Danke nochmals.

      Gruß,
      Uffze

      Comment


      • #4
        Vielleicht wäre auch eine Virtualisierungsystem wie Xenocode das Richtige. Nur zum Firmware aktualisieren fänd ich eine echte Installation (vor allem die des .Net Frameworks) ja eh eher zu aufwendig. Da wäre eine virtualisierte Lösung die ohne Installation auskommt und nebenbei denn Inhalt recht gut schützt besser. Man müsste nur mal ausprobieren wie groß die Executable wird und ob man daraus noch an die nicht virtualisierte Hardware kommt.

        Comment


        • #5
          mmmmh... Das Problem haben wir hier in der Arbeit auch schon diskutiert und wir haben auch keine richtige Lösung gefunden. Allerdings kann man mehrere Maßnahmen treffen um das Auslesen wenigstens zu erschweren.

          1. Die Daten nicht in eine .NET Assembly, sondern in eine C++-Dll. Da stehen die Daten zwar auch in reinform drin, allerdings muss man schon wissen wo. Vor allem wenns ein Byte-Array ist.

          2. Die Daten mit dem Schlüssel von der Datei mit den Daten trennen. Falls nur eines mal auf die schiefe Bahn gerät kann man ohne die andre nichts damit anfangen.

          Ansonsten ist das Thema schwierig, weil man vollkommene Sicherheit nur durch physikalisches Trennen des Schlüssels vom System erreichen kann (z.B. nur Anwender wissen Passwort... )

          Comment


          • #6
            @Ralf
            Ich hab mir die Website von XenoCode mal angesehen. So wie ich das verstanden habe kann man alle damit alle benötigten Klassen von .NET Framework zusammen in die .exe (bzw. die ausführbare Datei auch auf andere Systeme als Windows portieren) packen und anschließend mit dem integrierten Obfuscator behandeln. Vielleicht ist da auch eine Funktion für Software-Updates drinnen (werde das bei Gelegenheit genauer unter die Lupe nehmen). Das wäre sicher eine interessante Variante für die Zukunft, momentan scheint mir ein Obfuscator die einfachere Lösung zu sein.

            @fanderlf
            Es waren auch Bestrebungen da, den Schlüssel komplett von der PC-Software zu isolieren, und die Entschlüsselung komplett auf dem Mikrocontroller vorzunehmen. Leider war es aufgrund der Komplexität der Programmdaten bzw. der eingeschränkten Ressourcen (Flash und RAM des uC) kaum möglich.

            Ich werde jetzt die ersten Versuche mit dem DotFuscator machen. Mal sehen wie das läuft...

            Danke für Eure Tipps.

            Gruß,
            Uffze

            Comment


            • #7
              Nachtrag

              Ich habe mich nun für den Crypto Obfuscator entschieden. Der lässt sich zwar nicht voll in die VS IDE integrieren (man muss die .csproj bzw .vsproj files per Hand editieren wenn die Solution ein Setup-Project enthält, wie bei mir der Fall), das Resultat sieht aber recht gut aus.

              Ich danke Euch nochmals für die Hilfe.

              Gruß,
              Uffze

              Comment

              Working...
              X