Knowledge/it / / 2024. 6. 5. 09:44

대칭키 공개키 차이 및 설명

반응형

대칭키와 공개키 암호화는 데이터 보호를 위한 두 가지 주요 암호화 방법입니다. 이 두 방법은 각기 다른 방식으로 암호화와 복호화를 수행하며, 각각의 장단점을 가지고 있습니다.

 

대칭키 암호화

개념

  • 대칭키 암호화에서는 동일한 키를 사용하여 데이터를 암호화하고 복호화합니다.
  • 암호화와 복호화에 사용되는 키가 동일하기 때문에 '대칭키'라고 부릅니다.

특징

  • 속도: 대칭키 암호화는 계산 속도가 빠릅니다. 대용량 데이터 암호화에 적합합니다.
  • 보안: 키가 노출되면 암호화된 데이터가 모두 해독될 수 있습니다. 따라서 키의 안전한 관리가 매우 중요합니다.
  • 키 관리: 모든 통신 당사자가 동일한 키를 가져야 하므로, 키 배포와 관리가 복잡할 수 있습니다.

예시

  • AES (Advanced Encryption Standard): 고급 암호화 표준으로, 널리 사용되는 대칭키 암호화 알고리즘입니다.
  • DES (Data Encryption Standard): 이전에 널리 사용되었던 대칭키 암호화 알고리즘입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
 
public class SymmetricEncryptionExample {
    public static void main(String[] args) throws Exception {
        // 키 생성
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(128);
        SecretKey secretKey = keyGen.generateKey();
 
        // 암호화
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedData = cipher.doFinal("Hello, World!".getBytes());
 
        // 복호화
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedData = cipher.doFinal(encryptedData);
 
        System.out.println(new String(decryptedData));
    }
}
cs

 

공개키 암호화

개념

  • 공개키 암호화는 두 개의 키를 사용합니다: 공개키와 개인키.
  • 공개키는 누구나 알 수 있으며, 데이터를 암호화하는 데 사용됩니다.
  • 개인키는 비밀로 유지되며, 암호화된 데이터를 복호화하는 데 사용됩니다.

특징

  • 보안: 개인키가 노출되지 않는 한, 암호화된 데이터를 안전하게 보호할 수 있습니다.
  • 키 관리: 공개키는 누구나 접근할 수 있어 키 배포가 용이합니다.
  • 속도: 공개키 암호화는 대칭키 암호화보다 계산 속도가 느립니다. 따라서 대용량 데이터 암호화보다는 작은 데이터나 대칭키 교환에 적합합니다.

예시

  • RSA (Rivest-Shamir-Adleman): 널리 사용되는 공개키 암호화 알고리즘입니다.
  • DSA (Digital Signature Algorithm): 디지털 서명에 사용되는 공개키 암호화 알고리즘입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.security.*;
import javax.crypto.Cipher;
 
public class AsymmetricEncryptionExample {
    public static void main(String[] args) throws Exception {
        // 키 쌍 생성
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
        keyPairGen.initialize(2048);
        KeyPair keyPair = keyPairGen.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();
 
        // 암호화
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedData = cipher.doFinal("Hello, World!".getBytes());
 
        // 복호화
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedData = cipher.doFinal(encryptedData);
 
        System.out.println(new String(decryptedData));
    }
}
cs

 

대칭키 vs 공개키 요약

 

특징대칭키 암호화공개키 암호화

특징 대칭키 암호 공개키 암호화
키의 수 하나 두 개 (공개키와 개인키)
속도 빠름 느림
키 관리 복잡함 (모든 쌍이 동일한 키를 공유해야 함) 용이함 (공개키를 배포하면 됨)
사용 사례 대용량 데이터 암호화, 세션 암호화 키 교환, 디지털 서명, 작은 데이터 암호화

 

이와 같이 대칭키 암호화와 공개키 암호화는 서로 다른 장단점을 가지며, 다양한 보안 요구 사항에 맞게 선택적으로 사용됩니다. 실제 시스템에서는 종종 이 두 가지 방법을 결합하여 사용하는 경우가 많습니다. 예를 들어, SSL/TLS 프로토콜에서는 공개키 암호화를 사용하여 대칭키를 안전하게 교환한 후, 대칭키 암호화를 사용하여 실제 데이터를 암호화합니다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유