2016-09-07 8 views
0

私の仕事は.NETの楕円曲線暗号(クライアント固有)を使用してデータを暗号化することです。毎回。ECDiffieHellmanCngを使用してデータを暗号化するために独自のキーを使用するには

パスワード「S3curEChaNNel_01」を作成するなど、このプロセスに独自のキーを使用する必要があります。それをバイトに変換してキーとして使用しますが、これを行う方法は見つけられません。

Using alice As New ECDiffieHellmanCng() 
    Dim abData() As Byte 
    Dim Str = txtKey.Text 'custom password 
    abData = System.Text.Encoding.Default.GetBytes(Str) 
    Str = System.Text.Encoding.Default.GetString(abData) 

    Dim bobPublicKey() As Byte 
    Dim bobKey() As Byte 
    Dim bob As New ECDiffieHellmanCng() 

    bob.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash 
    bob.HashAlgorithm = CngAlgorithm.Sha256 
    bobPublicKey = bob.PublicKey.ToByteArray() 
    bob.HmacKey = abData 

    bobKey = bob.DeriveKeyMaterial(CngKey.Create(CngAlgorithm.Sha256)) 
    'at this line i get an exception, "The requested operation is not supported." 

    'Dim aliceKey As Byte() = alice.DeriveKeyMaterial(CngKey.Create(CngAlgorithm.Sha256)) 
    Dim encryptedMessage As Byte() = Nothing 
    Dim iv As Byte() = Nothing 
    txtOutput.Text = ByteArrayToString(Encrypt(bobKey, txtPlainStr.Text, encryptedMessage, iv)) 
End Using 

答えて

1

あなたは2つの異なるものを一緒に混合しています。

あなた自身のパスワードが必要な場合は、そのようなパスワードで暗号化されたデータを送信している人は、パスワードを解読して解読する必要があります。しかし、MITMがそれを捕まえることができるので、あなたはパスワードを送ることができません。

Diffie-Hellmanを使用している理由です。
基本的に、Diffie-Hellmanは数字だけを出力しますが、この番号は暗号化キーとして使用できません。これは弱いためです。

KDF(キー導出機能)が入っています。 たとえば、PBKDF2です。パラメータとしてパスワードと塩を取り、送信するデータの暗号化と復号化に使用する派生キーを出力します。

あなたは交換された番号を受け取り、それをパスワードとしてKDFに渡します。 塩として、例えばアリスやボブのIPを使うことができます。

KDFは、両方の側で同じ強力なパスワードを生成し、データの暗号化と復号化を行います。

うまくいけばうまくいきます。

+0

これを見ていただきありがとうございますが、自分のキーを使用することは可能ですか?はいの場合は、どうですか?ありがとう –

+1

可能ですが、Diffie Hellmanは鍵を交換するために使用され、相手側に安全にパスワードを送信することはありません。 あなたは 'S3curEChaNNel_01'というパスワードをKDFのパラメータとして使用し、それから鍵を得ることができます。しかし、パスワードを相手側に確実に送る方法はありません(少なくとも私が知っているところから)。 データを送信している人がパスワードを知らないとします。 – ProXicT

+1

お返事ありがとうございます。最後に動作しますが、私は固定hmacを設定する方法はありますか?値が暗号化されるたびに、hmacは常に新しいものに変更されます。同じ鍵で同じ値を暗号化すると固定されます。ありがとう –

関連する問題