IDEA(International Data Encryption Algorithm)는 대표적인 블록 암호(block cipher)로, 64비트 평문을 128비트 키를 사용해 암호화합니다. DES처럼 가역적(reversible) 알고리즘이므로 동일한 알고리즘으로 암호화와 복호화를 모두 수행할 수 있습니다. IDEA가 안전하게 동작하려면 확산(diffusion)과 혼돈(confusion)이라는 두 가지 요소가 모두 적용되어야 합니다.
1991년 라이(Xuejia Lai)와 메시(James Massey)가 설계한 IDEA는 PGP 등에서 실제로 활용된 알고리즘으로, 모듈러 덧셈, 모듈러 곱셈, 배타적 논리합(XOR)을 조합해 강력한 혼돈과 확산 효과를 얻습니다.
전체 구조: 8개 라운드와 출력 변환
64비트 평문은 먼저 16비트씩 네 개의 블록(P1~P4)으로 나뉘어 첫 번째 라운드에 입력됩니다. 전체 알고리즘은 8개의 라운드로 구성되며, 128비트 키로부터 각 라운드마다 16비트 크기의 서브키(sub-key) 여섯 개가 생성됩니다.
첫 번째 라운드에서는 K1~K6, 두 번째 라운드에서는 K7~K12가 사용되는 방식으로 진행되며, 마지막에는 출력 변환(output transformation) 단계가 수행됩니다. 이 단계에서는 네 개의 서브키(K49~K52)가 추가로 필요합니다.
최종 출력은 출력 변환 단계에서 만들어진 결과이며, C1~C4 블록을 연결해 최종 암호문을 완성합니다.
라운드 내부 연산
IDEA에는 총 8개의 라운드가 있으며, 각 라운드는 네 개의 데이터 블록에 대해 일련의 연산을 수행하고 여섯 개의 키를 사용합니다. 주의할 점은 각 라운드의 덧셈(*)과 곱셈(*)이 일반적인 사칙연산이 아니라는 것입니다. 덧셈은 216, 즉 65,536을 법으로 하는 모듈러 덧셈이고, 곱셈은 216+1, 즉 65,537을 법으로 하는 모듈러 곱셈입니다.
라운드별 서브키 생성 과정
1라운드: 키의 비트 위치 1~96을 사용하고, 97~128비트는 사용하지 않은 채 2라운드로 넘깁니다.
2라운드: 먼저 97~128비트를 사용한 뒤 25비트 순환 좌측 시프트(circular left shift)를 수행하여 새로운 26~89비트를 사용합니다. 90~128비트와 1~25비트는 사용되지 않습니다.
3라운드: 앞서 사용되지 않은 90~128비트와 1~25비트를 먼저 사용하고, 25비트 순환 좌측 시프트 후 51~82비트를 사용합니다. 83~128비트와 1~50비트는 사용되지 않습니다.
4라운드: 83~128비트와 1~50비트를 사용합니다.
5라운드: 25비트 순환 좌측 시프트가 발생하며, 76~128비트와 1~43비트를 사용합니다. 44~75비트는 사용되지 않습니다.
6라운드: 5라운드에서 사용되지 않은 비트를 먼저 사용한 뒤 25비트 순환 좌측 시프트가 일어나, 이후 37~100비트가 사용되지 않는 상태가 됩니다.
7라운드: 6라운드의 미사용 비트인 37~100비트를 먼저 사용하고, 25비트 순환 좌측 시프트 후 126~128비트와 1~29비트를 사용합니다. 30~125비트는 사용되지 않습니다.
8라운드: 7라운드의 미사용 비트인 30~125비트를 사용하며, 이로써 키가 모두 소진됩니다.
출력 변환(Output Transformation)
출력 변환은 딱 한 번 수행되는 연산으로, 8번째 라운드가 끝난 직후 진행됩니다. 이때 64비트 값은 네 개의 하위 블록(R1~R4)으로 나뉘고, 네 개의 서브키가 사용됩니다.
IDEA 복호화
복호화 절차는 암호화 과정과 동일합니다. 다만 서브키의 생성과 설계에 일부 차이가 있으며, 복호화에 사용되는 서브키는 암호화 서브키의 역(inverse) 관계에 있다는 점이 특징입니다.