[java] 블록 암호화 운용 모드

블록 암호화 운용 모드(Block Cipher Mode of Operation)는 블록 암호(Block Cipher)를 사용하여 텍스트나 데이터를 안전하게 암호화하는 방식을 설명합니다. 여러 운용 모드가 있지만, 여기서는 주로 사용되는 몇 가지 모드를 살펴보겠습니다.

ECB (Electronic Codebook)

ECB 모드는 입력된 평문 블록을 동일한 키로 암호화하여 출력하는 가장 간단한 운용 모드입니다. 그러나 동일한 평문 블록이라도 동일한 암호문 블록이 생성되므로, 보안성이 매우 낮습니다.

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encryptedData = cipher.doFinal(plainText);

CBC (Cipher Block Chaining)

CBC 모드는 각 블록의 암호문이 이전 블록의 암호문과 연산되어 생성되는 운용 모드입니다. 초기화 벡터(IV)를 사용하여 첫 번째 블록을 암호화한 후, 그 결과를 다음 블록에 연산하여 사용합니다. 이 운용 모드는 앞선 블록들의 내용이 현재 블록 암호화에 영향을 미치므로 보안성이 높습니다.

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));
byte[] encryptedData = cipher.doFinal(plainText);

CTR (Counter)

CTR 모드는 카운터 값을 사용하여 평문 블록을 암호화하는 운용 모드입니다. 각 카운터 값에 대한 암호문 블록은 평문과 다르게 다루어지기 때문에 병렬적으로 암호화 및 복호화가 가능하고, 무작위 접근이 가능하며 데이터 무결성을 제공합니다.

Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));
byte[] encryptedData = cipher.doFinal(plainText);

이러한 운용 모드를 올바르게 이해하고 적절히 선택하여 사용함으로써 안전한 데이터 전송과 보안을 확보할 수 있습니다.

참고 문헌: