암호화 및 복호화를 위한 키 생성

키 만들기 및 관리는 암호화 프로세스의 중요한 부분입니다. 대칭 알고리즘을 사용할 때는 키와 IV(Initialization Vector)를 만들어야 합니다. 사용자의 데이터를 해독해서는 안 되는 사용자로부터 이 키를 비밀로 유지해야 합니다. IV는 비밀로 할 필요는 없지만 각 세션마다 변경되어야 합니다. 비대칭 알고리즘에서는 퍼블릭 키와 프라이빗 키를 만들어야 합니다. 공개 키는 누구에게나 공용될 수 있지만, 복호화하는 당사자는 해당 프라이빗 키만 알고 있어야 합니다. 이 섹션에서는 대칭 및 비대칭 알고리즘에 대한 키를 생성 및 관리하는 방법을 설명합니다.

대칭 키

.NET에서 제공하는 대칭형 암호화 클래스에는 데이터를 암호화하고 해독하기 위한 키와 새 IV가 필요합니다. 매개 변수 없는 Create() 메서드를 사용하여 관리되는 대칭 암호화 클래스 중 하나의 새 인스턴스를 만들면 새 키와 IV가 자동으로 만들어집니다. 데이터를 암호 해독할 수 있도록 허용하는 모든 사용자는 동일한 키와 IV를 소유하고 동일한 알고리즘을 사용해야 합니다. 일반적으로 새 키와 IV는 각 세션에 대해 생성되어야 하며, 이후 세션을 위해 키와 IV를 저장하면 안 됩니다.

대칭 키와 IV를 위치상 떨어져 있는 사용자에게 전달하려면 대개 비대칭형 암호화를 사용하여 대칭 키를 암호화합니다. 이 키를 암호화하지 않은 상태로 보안되지 않은 네트워크를 통해 보내면 다른 사람이 이 키 및 IV를 가로채어 데이터를 암호 해독할 수 있기 때문에 안전하지 않습니다.

다음 예에서는 Aes 알고리즘에 대한 기본 구현 클래스의 새 인스턴스 만들기를 보여 줍니다.

Dim aes As Aes = Aes.Create()  
Aes aes = Aes.Create();  

이전 코드를 실행하면 새 키와 IV가 생성되고 이를 각각 KeyIV 속성의 값으로 설정합니다.

여러 키를 생성해야 하는 경우도 있습니다. 이 상황에서는 대칭 알고리즘을 구현하는 클래스의 새 인스턴스를 만들 수 있습니다. 그런 다음 GenerateKeyGenerateIV 메서드를 호출하여 새 키와 IV를 만듭니다. 다음 코드 예제에서는 비대칭 암호화 클래스의 새 인스턴스가 생성된 후 새 키와 IV를 만드는 방법을 보여 줍니다.

Dim aes As Aes = Aes.Create()  
aes.GenerateIV()  
aes.GenerateKey()  
Aes aes = Aes.Create();  
aes.GenerateIV();  
aes.GenerateKey();  

이전 코드를 실행하면 Aes의 새 인스턴스가 만들어지고 키와 IV가 만들어집니다. GenerateKeyGenerateIV 메서드가 호출되면 다른 키와 IV가 만들어집니다.

비대칭 키

.NET은 비대칭형 암호화를 위한 RSA 클래스를 제공합니다. 매개 변수 없는 Create() 메서드를 사용하여 새 인스턴스를 만들면 RSA 클래스가 공개/프라이빗 키 쌍을 만듭니다. 비대칭 키는 여러 세션에서 사용하기 위해 저장하거나 하나의 세션에 대해서만 생성할 수 있습니다. 공개 키를 사용 가능하게 만들 수 있지만 프라이빗 키는 철저히 보호해야 합니다.

비대칭 알고리즘 클래스의 새 인스턴스를 만들면 공개/프라이빗 키 쌍이 만들어집니다. 클래스의 새 인스턴스를 만든 후 ExportParameters 메서드를 사용하여 키 정보를 추출할 수 있습니다. 이 메서드는 키 정보를 보유하는 RSAParameters 구조를 반환합니다. 또한 이 메서드는 공개 키 정보만 반환할지 아니면 공개 키와 프라이빗 키 정보를 모두 반환할지 여부를 나타내는 부울 값을 허용합니다.

다음과 같은 다른 방법을 사용하여 주요 정보를 추출할 수도 있습니다.

ImportParameters 메서드를 사용하여 RSA 인스턴스를 RSAParameters 구조의 값으로 초기화할 수 있습니다. 또는 RSA.Create(RSAParameters) 메서드를 사용하여 새 인스턴스를 만들 수 있습니다.

비대칭 프라이빗 키를 그대로 또는 일반 텍스트로 로컬 컴퓨터에 저장하지 마세요. 프라이빗 키를 저장해야 하는 경우 키 컨테이너를 사용해야 합니다. 키 컨테이너에서 프라이빗 키를 저장하는 방법에 대한 자세한 내용은 방법: 키 컨테이너에 비대칭 키 저장을 참조하세요.

다음 코드 예에서는 RSA 클래스의 새 인스턴스를 만들고, 공개/프라이빗 키 쌍을 만들고, 공개 키 정보를 RSAParameters 구조에 저장합니다.

'Generate a public/private key pair.  
Dim rsa as RSA = RSA.Create()  
'Save the public key information to an RSAParameters structure.  
Dim rsaKeyInfo As RSAParameters = rsa.ExportParameters(false)  
//Generate a public/private key pair.  
RSA rsa = RSA.Create();  
//Save the public key information to an RSAParameters structure.  
RSAParameters rsaKeyInfo = rsa.ExportParameters(false);  

참고 항목