Welche Verschlüsselung für TCP Übertragung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von leonandroid.

    Welche Verschlüsselung für TCP Übertragung

    Hi,
    ich habe in den letzten Tagen mit der Verschlüsselung von Daten angefangen. Diese hab ich lokal mit aes und einem Kennwort verschlüssellt, welches der Benutzer manuell eingeben muss. Jetzt möchte ich aber TCP Nachrichten verschlüsseln und weis nicht so recht wie ich das machen soll.

    Was ist am sichersten?
    Wieder die Verschlüsselung über aes und mittels Diffie-Hellman-Schlüsselaustausch den key übertragen? Und wie lege ich den gleichen Public/private key auf den beiden clienten fest, ohne das ich den key im quellcode speichern muss(unsicher). Wenn ich aes benutze, kann der key dann von dritten nachgestellt werden?

    Ich blicke leider bei dieser Übertragungsverschlüsselung noch nicht richtig durch. Ich hoffe ihr habt halbwegs verstanden was ich meine und könnt mir ein paar infos geben.

    MfG. Leon
    Hab jetzt doch noch ein Problem mit der Verschlüsselung. Die Prozedur wird zwar ohne Probleme durchlaufen, aber leider ist das Ergebnis ein wenig kryptisch. :D

    VB.NET-Quellcode

    1. ​Public Function EnCrypt(ByVal pData As Byte(), ByVal pIV As Byte(), ByVal pKey As Byte()) As Byte()
    2. Dim encrypted() As Byte
    3. Using aes = AesManaged.Create()
    4. aes.KeySize = 256
    5. aes.Key = pKey
    6. aes.IV = pIV
    7. Dim encryptor As ICryptoTransform = aes.CreateEncryptor(aes.Key, aes.IV)
    8. Using msEncrypt As New MemoryStream()
    9. Using csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
    10. Using swEncrypt As New StreamWriter(csEncrypt)
    11. swEncrypt.Write(pData)
    12. End Using
    13. encrypted = msEncrypt.ToArray()
    14. End Using
    15. End Using
    16. End Using
    17. Return encrypted
    18. End Function

    VB.NET-Quellcode

    1. ​Public Function DeCrypt(ByVal pData As Byte(), ByVal pIV() As Byte, ByVal pKey() As Byte) As Byte()
    2. Dim plainData() As Byte
    3. Using aes = AesManaged.Create()
    4. aes.KeySize = 256
    5. aes.Key = pKey
    6. aes.IV = pIV
    7. Dim decryptor As ICryptoTransform = aes.CreateDecryptor(aes.Key, aes.IV)
    8. Using msDecrypt As New MemoryStream(pData)
    9. Using csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)
    10. Using srDecrypt As New StreamReader(csDecrypt)
    11. plainData = New Byte(msDecrypt.Length) {}
    12. msDecrypt.Read(plainData, 0, msDecrypt.Length)
    13. 'plainData = srDecrypt.ReadToEnd()
    14. End Using
    15. End Using
    16. End Using
    17. End Using
    18. Return plainData
    19. End Function
    Und was ist nu deine Frage?


    Äh, stand da mal: Ich bin mir nicht sicher ob die Using Anweisungen stimmen. Besonders das hier:

    VB.NET-Quellcode

    1. Using srDecrypt As New StreamReader(csDecrypt)
    2. plainData = New Byte(msDecrypt.Length) {}
    3. msDecrypt.Read(plainData, 0, msDecrypt.Length)
    4. 'plainData = srDecrypt.ReadToEnd()
    5. End Using

    Bore schrieb:

    Den Text mit AES-256 verschlüsseln, den Entschlüsselungscode zufällig generieren und an den String anhängen, das ganze dann nochmal verschlüsseln, mit einem static Wert (Dann aber AES-192) und dann gib ihm
    Was für'n Müll? Es gibt kein 2 AES Schlüssel für einen gegebenen Ciphertext.
    Zudem sollte man niemals nen statischen AES-Schlüssel irgendwo benutzen, vorallem nicht in der .NET-Umgebung. Wenn man schon mit AES händisch Arbeitet, so kombiniere man es doch bitte mit RSA. Clients schicken dann einen, per RSA verschlüsselten, zufälligen AES-Schlüssel, der für diese eine Session gilt. Nur der Server kann diese Entschlüsseln, da dieser, und nur dieser den private Key besitzt.