2016-09-07 3 views
0

내 작업은 .Net (클라이언트에서 특정)의 타원 곡선 암호화를 사용하여 데이터를 암호화하는 것이지만 Microsoft의 샘플을 사용해 보았지만 자체 키를 생성하는 것으로 보입니다. 매번어떻게 내 자신의 키를 사용하여 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

서로 다른 두 가지를 혼합합니다.

자신의 암호를 원할 경우 암호로 암호화 된 데이터를 보내는 사람은 암호를 해독하여 암호를 해독해야합니다. 그러나 MITM이 그것을 잡을 수 있기 때문에 암호를 보낼 수 없습니다.

Diffie-Hellman을 사용하는 이유입니다.
기본적으로 Diffie-Hellman은 숫자 만 출력하지만이 번호는 약하기 때문에 암호화 키로 사용할 수 없습니다.

여기서 KDF (키 유도 기능)이 제공됩니다. 예를 들어 PBKDF2입니다. 매개 변수로 암호와 소금을 사용하고 전송할 데이터를 암호화하고 암호 해독하는 데 사용되는 파생 키를 출력합니다.

교환 된 번호를 사용하여 암호로 KDF에 전달하십시오. 소금으로 예를 들어 Alice 나 Bob의 IP를 사용할 수 있습니다.

KDF는 데이터를 암호화하고 해독하기 위해 동일한 강력한 암호를 양쪽에서 생성합니다.

바라기를 바랍니다.

+0

이 문제를 확인해 주셔서 감사합니다.하지만 자체 키를 사용할 수 있습니까? 그렇다면 어떻게? 감사합니다 –

+1

가능할 수도 있지만 Diffie Hellman은 키를 교환하는 데 사용되며 상대방에게 안전하게 패스워드를 보내지 않습니다. 'S3curEChaNNel_01' 암호를 KDF의 매개 변수로 사용하고 그로부터 키를 파생시킬 수 있습니다. 그러나 패스워드를 상대방에게 안전하게 전송하는 방법은 없습니다 (적어도 아는 바에 따르면). 데이터를 보내는 사람이 암호를 알지 못한다고 가정합니다. – ProXicT

+1

답장을 보내 주셔서 감사합니다. 마지막으로 작업하지만 고정 hmac을 설정할 수있는 방법이 있습니까? 값이 암호화 될 때마다 hmac은 항상 새로운 키로 변경됩니다. 같은 키로 동일한 값을 암호화 할 때 고정되어 있습니다. 감사합니다. –