암호화 및 해독용 키 생성

업데이트: 2007년 11월

키를 만들고 관리하는 것은 암호화 프로세스에서 중요한 부분입니다. 대칭 알고리즘을 사용할 때는 키와 IV(Initialization Vector)를 만들어야 하며 이 키와 IV는 데이터를 해독해서는 안 되는 사람이 알 수 없도록 해야 합니다. 비대칭 알고리즘을 사용할 때는 공개 키와 개인 키를 만들어야 합니다. 공개 키는 모든 사람에게 공개될 수 있는 반면, 개인 키는 공개 키를 사용하여 암호화된 데이터를 해독할 사람만 알고 있어야 합니다. 이 단원에서는 대칭 및 비대칭 알고리즘에 사용할 키를 생성하고 관리하는 방법에 대해 설명합니다.

대칭 키

.NET Framework에서 제공하는 대칭 암호화 클래스에는 키와 새 IV(initialization vector)가 있어야 데이터를 암호화하고 해독할 수 있습니다. 기본 생성자를 사용하여 관리되는 대칭 암호화 클래스 중 하나의 새 인스턴스를 만들 때마다 새 키와 IV가 자동으로 만들어집니다. 데이터를 해독할 사람은 이와 동일한 키와 IV를 가지고 있어야 하며 동일한 알고리즘을 사용해야 합니다. 일반적으로 모든 세션마다 새 키와 IV가 만들어져야 하며 나중 세션에 사용하기 위해 키나 IV를 저장해서는 안 됩니다.

대칭 키와 IV를 위치상 떨어져 있는 사용자에게 전달하려면 대개 비대칭 암호화를 사용하여 대칭 키 및 IV를 암호화합니다. 이 두 값을 암호화하지 않은 상태로 보안되지 않은 네트워크를 통해 보내면 다른 사람이 이 값을 가로채어 데이터를 해독할 수 있기 때문에 매우 위험합니다. 키 및 IV의 암호화 및 전송 프로세스에 대한 자세한 내용은 암호화 체계 만들기를 참조하십시오.

다음 예제에서는 TripleDES 알고리즘을 구현하는 TripleDESCryptoServiceProvider 클래스의 새 인스턴스를 만드는 방법을 보여 줍니다.

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();

앞의 코드를 실행하면 새 키와 IV가 생성되어 각각 KeyIV 속성에 삽입됩니다.

때로는 사용자가 여러 개의 키를 생성해야 할 수 있습니다. 이 경우에는 대칭 알고리즘을 구현하는 클래스의 새 인스턴스를 만든 다음 GenerateKeyGenerateIV 메서드를 호출하여 새 키와 IV를 만듭니다. 다음 코드 예제에서는 비대칭 암호화 클래스의 새 인스턴스를 만든 후에 새 키와 IV를 만드는 방법을 보여 줍니다.

Dim TDES As TripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider()
TDES.GenerateIV()
TDES.GenerateKey()
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
TDES.GenerateIV();
TDES.GenerateKey();

앞의 코드를 실행하면 TripleDESCryptoServiceProvider의 새 인스턴스가 만들어질 때 키와 IV가 생성됩니다. GenerateKeyGenerateIV 메서드를 호출하면 다른 키와 IV가 만들어집니다.

비대칭 키

.NET Framework에서는 비대칭 암호화를 위해 RSACryptoServiceProviderDSACryptoServiceProvider 클래스를 제공합니다. 이 클래스들은 사용자가 기본 생성자를 사용하여 새 인스턴스를 만들 때 공개/개인 키 쌍을 만듭니다. 비대칭 키는 여러 세션에서 사용하기 위해 저장될 수도 있고 한 세션을 위해서만 생성될 수도 있습니다. 공개 키는 모든 사람이 사용할 수 있는 반면 개인 키는 주의 깊게 보호해야 합니다.

공개/개인 키 쌍은 비대칭 알고리즘 클래스의 새 인스턴스가 만들어질 때마다 생성됩니다. 새 클래스 인스턴스가 만들어지고 나면 다음 두 가지 방법 중 하나로 키 정보를 추출할 수 있습니다.

두 메서드 모두 공개 키 정보만 반환할지 공개 키와 개인 키 정보를 모두 반환할지 여부를 나타내는 부울 값을 허용합니다. RSACryptoServiceProvider 클래스는 ImportParameters 메서드를 통해 RSAParameters 구조체의 값으로 초기화될 수 있습니다.

비대칭 개인 키는 로컬 컴퓨터에 그대로 또는 일반 텍스트로 저장되어서는 안 됩니다. 개인 키를 저장해야 하는 경우에는 키 컨테이너를 사용해야 합니다. 키 컨테이너에 개인 키를 저장하는 방법에 대한 자세한 내용은 방법: 키 컨테이너에 비대칭 키 저장을 참조하십시오.

다음 코드 예제에서는 공개/개인 키 쌍을 만들어 RSACryptoServiceProvider 클래스의 새 인스턴스를 만들고 공개 키 정보를 RSAParameters 구조체에 저장합니다.

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

참고 항목

작업

방법: 키 컨테이너에 비대칭 키 저장

개념

데이터 암호화

데이터 해독

기타 리소스

암호화 작업

암호화 서비스