🟩/Security

진뚱이용 2024. 6. 12. 19:01

키의 종류

  • 대칭키 (=비밀키)
  • 비대칭키
    • 공개키(public key)
    • 개인키(private key) (=비밀키)

대칭키 생성 (KeyGenerator 클래스를 사용)

// 키 생성기 인스턴스화 및 AES 알고리즘 지정
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");

// 키 길이 설정 (예: 256비트)
keyGenerator.init(256);

// 키 생성
SecretKey secretKey = keyGenerator.generateKey();

256비트의 대칭키 길이면 안전하다.

비대칭키 생성 (KeyGenerator 클래스를 사용)

// 키 쌍 생성기 인스턴스화 및 RSA 알고리즘 지정
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

// 키 길이 설정 (예: 2048비트)
keyPairGenerator.initialize(2048);

// 키 쌍 생성
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();

2048비트의 비대칭키 길이면 안전하다. 

SecureRandom

  • `KeyGenerator`와 `KeyPairGenerator`클래스는 내부적으로 `SecureRandom` 인스턴스를 사용한다.
  • 암호학적으로 강력한 난수 생성기로, 예측이 불가능한 값을 생성하는 데 필요한 특성을 가지고 있다. 
SecureRandom secureRandom = new SecureRandom();

// 안전한 난수 바이트 배열 생성
byte[] randomBytes = new byte[16];
secureRandom.nextBytes(randomBytes);