Verschlüssselungs Schlüssel

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Verschlüssselungs Schlüssel

    Hi,

    Ich möchte eine sehr wichtige Datei die mit meinem Programm erstellt wird, vom auslesem von anderen schützen, um das zu verwirklichen habe ich mich für den Rijndeal Algorithmus entschieden.
    Mein Problem ist jetzt mit welchem Schlüssel ich das ganze Verschlüsseln soll.

    Soll ich mir einen Schlüssel im Internet anfertigen lassen und den dann in mein Programm einbauen?
    (Theoretisches Problem: falls das Programm dekompiliert wird ist der Algorithmus geknackt)
    Wie kann ich mich vor dem Problem schützen?
    Und wie lang sollte so ein Schlüssel sein?
    Gibt es bessere Algorithmen als Rijndeal?

    Hoffe ihr könnt mir helfen.

    Grüße
    Könntest du den Benutzer über das Passwort entscheiden lassen? Nachteil wäre, dass der Nutzer jedes mal, wenn deine Applikation die Datei benötigt, das Passwort angeben muss. Durch Dekompilieren kann man aber damit nicht an das Passwort, somit auch nicht an die Daten kommen.

    Viele Grüße, Phil.

    YaPh1l schrieb:

    Könntest du den Benutzer über das Passwort entscheiden lassen? Nachteil wäre, dass der Nutzer jedes mal, wenn deine Applikation die Datei benötigt, das Passwort angeben muss. Durch Dekompilieren kann man aber damit nicht an das Passwort, somit auch nicht an die Daten kommen.

    Viele Grüße, Phil.



    Danke für die antworten!
    Aber das geht nicht ;) Das ganze läuft intern ab, nicht mal der Benutzer soll wissen was in der Datei gespeichert wird ;)

    Grüße
    Hi BugBeep,

    der Benutzer muss ja nicht wissen was in der Datei verschlüsselt ist, das Passwort dürfte wohl dann der Schlüssel sein mit dem die Daten zuvor verschlüsselt und dann eben bei Bedarf zum entschlüsseln verwendet wird.

    Das Passwort ist damit zu keiner Zeit Dir bekannt noch steht es im Code der eingesehen werden könnte.

    Denke so war das gemeint :)

    Gruss,
    Dani

    DniBo schrieb:

    das Passwort dürfte wohl dann der Schlüssel sein mit dem die Daten zuvor verschlüsselt und dann eben bei Bedarf zum entschlüsseln verwendet wird.


    Die Daten sind ja noch nicht verschlüsselt.

    Also nochmal zu besseren erklärung.
    Mein Programm schreibt Daten in eine Datei, die soll so verschlüsselt werden das weder der Benutzer sonnst noch wer anders die Datei lesen kann. Als einziges soll das Programm die Dateien entschlüsseln und verarbeitern können.

    Grüße
    Hi BugBeep,

    sofern die Daten vom gleichen Anwender gelesen werden müssen (also nicht auch von jemandem anderen) und dadurch quasi personalifiziert sind, fordere das Passwort zum verschlüsseln an, verwende das Passwort als Schlüssel und verschlüssele damit die Daten.

    Wenn der gleiche Anwender (der ja das Passwort kennt) die Daten wieder benötigt, fordere wieder das Passwort als Schlüssel und hole damit die Daten zurück.

    Aber:
    Vergisst der Anwender das Passwort, sind auch die Daten Vergessenheit :)

    Gruss,
    Dani
    Der Benutzer soll kein Passwort wählen, sonnst könnte er ja die datei öffnen und das ganze dann mit einem anderen tool entschlüsseln.
    Ich will nicht das der Benutzer ein Passwort hat welches zum verschlüsseln dient, allein das Programm soll intern einen Schlüssel zum verschlüsseln haben.
    Das Programm soll auch von mehrern Benutzern genutz werden, aber die Daten sollen immer geheim bleiben.
    Die daten sollen auch nicht in Vergessenheit geraten, denn das Programm speichert ja dadrinnen sehr wichtige informationen, es soll so für den Benutzer oder wen auch immer unmöglich sein die Daten zu lesen/auf sie zuzugreifen.

    Grüße
    Egal was du im Code machst,
    solange der Schlüssel in der Exe drin ist, ist er nicht sicher.
    Du kannst es nur erschweren.
    Der Normale User kommt eh nicht dahinter und der Hacker hohlt sich die Passwörter eh.

    Wie sicher sollen denn die Daten sein ? Lohnt der Aufwand überhaupt ?

    BugBeep schrieb:

    die Exe mit einem Tool vor dem Dekompilieren schütze?

    Wie soll sie denn dann noch laufen ?

    Schutz aufheben und starten. OK. dann ist sie nicht mehr geschützt.

    Dr. Fleischer von MSDN hat mal was schönes geschrieben. Damit kann mann alle Dateien verschlüssel.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' getestet mit jpg und contact
    2. Option Explicit On
    3. Option Infer On
    4. Option Strict On
    5. Imports System.Xml.Serialization
    6. Imports System.IO
    7. Imports System.Security.Cryptography
    8. Public Class Form1
    9. ' Datei Name "Entschlüsseln Verschlüsseln.contact"
    10. ' Datei Verschlüsseln
    11. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    12. '
    13. ' Teil 1 Datei verschlüsseln und ablegen
    14. '
    15. Using fs As New FileStream("EMailAccount.txt", FileMode.Open)
    16. ' verschlüsseln
    17. SaveEncrypted("ACC.CRY", fs)
    18. End Using
    19. End Sub
    20. ' Datei Entschlüsseln
    21. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    22. '
    23. ' Teil 2 Datei wieder entschlüsseln
    24. '
    25. Using fs As New FileStream("OK.txt", FileMode.Create)
    26. ' entschlüsseln
    27. LoadEncrypted("ACC.CRY", fs)
    28. End Using
    29. End Sub
    30. ''' <summary>
    31. ''' Schlüssel für Ver- und Entschlüsselung
    32. ''' </summary>
    33. ''' <remarks></remarks>
    34. '''Dim desKey() As Byte = {1, 2, 3, 4, 5, 6, 7, 8} ' Original
    35. '''Dim desIV() As Byte = {1, 2, 3, 4, 5, 6, 7, 9} ' Original
    36. Dim desKey() As Byte = {3, 2, 3, 4, 5, 6, 7, 8}
    37. Dim desIV() As Byte = {3, 2, 3, 4, 5, 6, 7, 9}
    38. ''' <summary>
    39. ''' XML-Datenstrom verschlüsseln und in Datei ablegen
    40. ''' </summary>
    41. ''' <param name="filename">Dateiname für Ablage</param>
    42. ''' <param name="str">IO-Stream (z.B. MemoryStream) mit Daten</param>
    43. ''' <remarks></remarks>
    44. Private Sub SaveEncrypted(ByVal filename As String, ByVal str As Stream)
    45. Dim fout As FileStream = Nothing
    46. Dim encStream As CryptoStream = Nothing
    47. Try
    48. 'Create the file streams to handle the output files.
    49. fout = New FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write)
    50. fout.SetLength(0)
    51. 'Create variables to help with read and write.
    52. Dim bin(99) As Byte 'This is intermediate storage for the encryption.
    53. Dim rdlen As Long = 0 'This is the total number of bytes written.
    54. Dim totlen As Long = str.Length 'Total length of the input file.
    55. Dim lng As Integer ' This is the number of bytes to be written at a time.
    56. 'Creates the default implementation, which is RijndaelManaged.
    57. Dim des As New DESCryptoServiceProvider
    58. encStream = New CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write)
    59. 'Read from the input file, then encrypt and write to the output file.
    60. str.Position = 0
    61. While rdlen < totlen
    62. lng = str.Read(bin, 0, bin.GetUpperBound(0))
    63. encStream.Write(bin, 0, lng)
    64. rdlen = Convert.ToInt32(rdlen + lng)
    65. End While
    66. Catch ex As Exception
    67. MsgBox(ex.Message)
    68. Finally
    69. If encStream IsNot Nothing Then encStream.Dispose()
    70. If fout IsNot Nothing Then fout.Close()
    71. End Try
    72. End Sub
    73. ''' <summary>
    74. ''' XML-Datenstrom aus Datei laden und entschlüsseln
    75. ''' </summary>
    76. ''' <param name="filename">Dateiname zum Einlesen</param>
    77. ''' <param name="str">IO-Stream (z.B. MemoryStream) mit Daten</param>
    78. ''' <remarks></remarks>
    79. Private Sub LoadEncrypted(ByVal filename As String, ByVal str As Stream)
    80. Dim fin As System.IO.FileStream = Nothing
    81. Dim decStream As CryptoStream = Nothing
    82. Try
    83. fin = New FileStream(filename, FileMode.Open, FileAccess.Read)
    84. 'Create variables to help with read and write.
    85. Dim bin(10000) As Byte ' This is intermediate storage for the encryption.
    86. Dim rdlen As Long = 0 'This is the total number of bytes written.
    87. Dim totlen As Long = fin.Length 'Total length of the input file.
    88. Dim lng As Integer ' This is the number of bytes to be written at a time.
    89. 'Creates the default implementation, which is RijndaelManaged.
    90. Dim des As New DESCryptoServiceProvider
    91. decStream = New CryptoStream(fin, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Read)
    92. 'Read from the input file, then encrypt and write to the output file.
    93. lng = decStream.Read(bin, 0, bin.GetUpperBound(0) + 1)
    94. While lng > 0
    95. str.Write(bin, 0, lng)
    96. rdlen = Convert.ToInt32(rdlen + lng)
    97. lng = decStream.Read(bin, 0, bin.GetUpperBound(0) + 1)
    98. End While
    99. Catch ex As Exception
    100. MsgBox(ex.Message)
    101. Finally
    102. If decStream IsNot Nothing Then decStream.Dispose()
    103. If fin IsNot Nothing Then fin.Dispose()
    104. End Try
    105. End Sub
    106. End Class


    Jedoch ist der Schlüssel in der Exe drin.
    Wenn du das mehrfach machst. Müsste es sehr schwer werden, den Code zu entschlüsseln.

    Also der erste Schlüssel in der Exe , entschlüsselt eine weitere Datei,
    Dort steht der Schlüssel für die nächste Datei.......... So oft du magst wiederholen.


    wie gesagt, nur erschweren.

    Ansonsten hier im Forum mal nach Dodo suchen. Der hatte einige Beiträge darüber verfass.


    Edit: habe den Link wieder gefunden
    InformTool

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bernd“ ()

    Bernd schrieb:

    Wie soll sie denn dann noch laufen ?


    Wie sieht es aus mit Phoenix Protector?

    Danke werde mir den Code mal ansehen ;)

    -edit: das ist ja eine DES verschlüsselung

    Zitat aus Wikipedia:
    Weil die Schlüssellänge nur 56 Bit beträgt, konnte DES bereits durch Brute-Force-Angriffe gebrochen werden, indem systematisch alle möglichen Schlüssel (256 = ca. 72 Billiarden) getestet wurden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BugBeep“ ()

    BugBeep schrieb:

    es soll so für den Benutzer oder wen auch immer unmöglich sein die Daten zu lesen/auf sie zuzugreifen.

    Dann hast du dummerweise ein Problem, denn das geht nicht wirklich. Um eine Datei X auf Rechner A zu verschlüsseln/entschlüsseln muss das Passwort auf Rechner A vorhanden sein. Ganz abgesehen mal davon dass Programm B die Daten ja schon mal erzeugen/schreiben muss.

    Verlorene Liebesmüh.

    BTW Die Art der Verschlüüselung spielt dabei fast keine Rolle, da ja nicht der Algo angeriffen werden muss.