Announcement

Collapse
No announcement yet.

Schützen von Schlüsseln

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

  • Schützen von Schlüsseln

    Hallo zusammen!

    Ich habe eine eigens geschriebene Crypto-Klasse, die Funktionen anbietet, um Strings oder auch spezielle Objekte zu ver- und entschlüsseln.
    Um das zu bewerkstelligen, muss ich zu Beginn in dieser Klasse 2 Keys festlegen, womit das Ganze durchgeführt wird. Danach kann zum Beispiel ein String nur entschlüsselt werden, wenn dafür genau die gleichen Schlüssel auch für die Verschlüsselung genutzt wurden.

    Diese Schlüssel sind einfache Byte-Arrays.
    Gibt es eine Möglichkeit diese Schlüssel im Code zu verbergen oder den Zugriff zu verhindern? Sie müssten auch nicht unbedingt im Code bleiben. Sie könnten auch beispielsweise in einer anderen Datei abgelegt werden, wenn das die Sache einfacher machen würde.

    So ein Obfuscator (schreibt man das so?) käme für mich nicht in Frage, da ich die Klasse in verschiedenen Projekten immer wieder verwenden will. Und wenn dann der Funktionsname plötzlich nicht mehr "decodeString()" ist, sondern "sdjkh()" (oder ähnlich) dann kann ich selbst nichts mehr damit anfangen.

    Weiterhin denke ich auch an solche Reflector-Tools, womit sich der Code aus einer DLL wieder sichtbar machen lässt. Damit könnte so ein Schlüssel natürlich sehr schnell herausgefunden werden. Das will ich auch verhindern, daher sollten sie vielleicht eher ausgelagert werden, aber ich weiß nicht wohin.

    Hatte jemand vielleicht schon mal so ein Problem, oder generell ein Idee?

  • #2
    Hallo,

    ein solcher Schlüssel kann mit NET unter keinen Umständen vollständig versteckt werden. Du kannst nur Maßnahmen verwenden, durch die ein String oder Byte-Array o.a. nicht so offen-sichtlich zu erkennen sind.

    Beispiele:
    1. Setze ein konstantes int-Array fest.
    2. Konvertiere die Werte nach einer festen Regel in ein Byte-Array.
    3. Dabei sollen sowohl die Positionen als auch die Werte geändert werden, z.B. mit zwei Konvertierungen modulo-Primzahl.

    Im Quelltext und der DLL ist nur das int-Array zu sehen; dessen Bedeutung wird dort nicht klar. Die Konvertierungsroutine sollte "irgendwo" anders definiert werden. Damit muss man den Code schon sehr genau mit Reflection untersuchen, um den Zusammenhang des int-Arrays mit der Verschlüsselung festzustellen.

    Gruß Jürgen

    Comment


    • #3
      Um das ganze vielleicht noch etwas schwieriger zu machen könnte man das ganze auch in eine C++ Dll packen.
      Allerdings hier auch nicht mit Strings arbeiten, denn diese werden zum größten Teil von Disassemblern erkannt.

      Zu 100% sicher ist NIE etwas

      Comment


      • #4
        Spätestens wenn die Information im Arbeitsspeicher ist wird sie angreifbar


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Dafür muss man dann aber schon ein ziemlicher freak sein und und Reflector kann jeder vollhonk bedienen

          Comment


          • #6
            Dafür muss man dann aber schon ein ziemlicher freak
            Mit dem RAM auslesen hab ich nie probiert, weil mir die Zeit dazu zu schade ist. Aber die Möglichkeit besteht und wird auch genutzt (aber wie gesagt nicht von mir)


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Vielen Dank für die ganzen Antworten.

              Ich denke ich werde es mal mit einer C++ Klasse versuchen. Danach schau ich mal, wie gut ich selbst mein eigenes Tool "knacken" kann. Das was da verschüsselt wird sind auch keine ungeheuer sensiblen Daten, daher sollte das ausreichen.

              Comment


              • #8
                Hallo,

                gestern gabs ein Thema das dich auch interessieren könnte:
                http://entwickler-forum.de/showthread.php?t=57504


                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment

                Working...
                X