제1장 암호알고리즘 개요
제 1 장 암호알고리즘 개요 1.1 암호학 개요 1.1.1 기본 용어 이 절에서는 먼저 암호알고리즘과 관련된 기본적인 용어부터 살펴본다. 암호알고리즘 (cryptographic algorithm)이란 좁은 의미에서 평문(plaintext, cleartext)을 암호문(ciphertext)으 로 변환하고, 암호문을 다시 평문으로 변환할 때 사용되는 알고리즘을 말하며, 넓은 의미에 서는 암호기술에서 사용되는 모든 알고리즘을 말한다. 여기서 평문이란 누구나 그 내용을 보면 그 내용을 이해할 수 있는 문서를 말하며, 암호문은 그 자체로는 누구도 그 내용을 이 해할 수 없는 문서를 말한다. 암호문의 내용을 이해하기 위해서는 그것을 다시 평문으로 변 환해야 가능하다. 이 때 평문을 암호문으로 바꾸는 과정을 암호화(encryption, encipherment) 라 하고, 암호문을 다시 평문으로 바꾸는 과정을 복호화(decryption, decipherment)라 한다. 현대 암호알고리즘에서는 암호화와 복호화하는 과정에 암호키(cryptographic key)가 필요하 며, 복호화할 때 필요한 키가 없으면 암호문을 다시 평문으로 변환할 수 없다. 암호학(cryptology)은 이와 같이 메시지를 보안목적으로 변환하는 기술에 관한 학문을 말 하며, 크게 암호기술(cryptography)와 암호해독기술(cryptoanalysis)로 분류할 수 있다. 암호기 술은 메시지를 안전하게 유지하는 기술과 학문을 말하며, 암호해독기술은 암호문으로부터 평문을 추정하는 기술과 학문을 말한다. 1.1.2 보안 목적 암호알고리즘을 사용하여 제공되는 보안 서비스 중 가장 중요한 세 가지 서비스는 비밀성 (confidentiality, secrecy, privacy), 무결성(integrity), 인증(authentication)이다. 이 외에 다양한 목적을 위해 암호알고리즘이 사용된다. 비밀성이란 인가된 사용자들만 데이터의 내용을 볼 수 있도록 해주는 서비스를 말하며, 무결성이란 비인가된 데이터의 변경을 발견할 수 있도 록 해주는 서비스를 말한다. 여기서 데이터의 변경이란 인가되지 않은 데이터의 삽입. 삭제, 교체를 말한다. 무결성의 경우 비밀성과 달리 데이터가 변경되지 않도록 보장할 수는 없다. 따라서 변경을 발견할 수만 있으면 무결성이 제공된다고 한다. 인증은 식별(identification)과 검증(verification)이 합쳐진 말로서, 주장된 것을 검증하는 것을 말한다. 인증은 크게 메시지 인증, 메시지 원천 인증, 개체 인증(entity authentication)으로 구분된다. 메시지 인증은 무결 성 검증과 같은 말이며, 메시지 원천지 인증은 메시지의 송신된 위치 또는 송신자를 검증하 는 것을 말한다. 정보보안에서는 보통 위치는 중요하지 않으며, 이 보다는 개체 인증이 중 요하다. 개체 인증이란 주장된 신원을 검증하는 것을 말한다. 세
가지
중요
서비스
외에
가장
많이
요구되는
서비스
중
하나는
부인방지
(non-repudiation)이다. 부인방지는 개체가 지난 행위나 약속을 부인하지 못하도록 하는 서비 스를 말한다. 예를 들어 전자서명을 한 사용자는 나중에 자신이 서명한 사실을 부인할 수 없어야 한다. 메시지의 송・수신과 관련하여 국제표준에서는 크게 네 가지 부인방지 서비스 를 정의하고 있다. 이들 서비스는 송신자와 수신자가 통신에 참여한 사실을 나중에 부인할
한국기술교육대학교 컴퓨터공학부
- 1 -
김상진
제1장 암호알고리즘 개요
수 없도록 해준다. 이 중 송신 부인방지(NRO, Non-Repudiation of Origin)와 수신 부인방지 (NRR, Non-Repudiation of Receipt)는 송신자와 수신자 간에 직접 통신하는 경우에 해당하 며,
제출
부인방지(NRS,
Non-Repudiation
of
Submission)와
전달
부인방지(NRD,
Non-Repudiation of Delivery)는 송신자가 제3의 중계기관을 통해 간접적으로 수신자에게 메 시지를 전달하는 경우에 해당한다. 그림 1.1과 1.2는 두 가지 형태의 차이를 보여주고 있다. 부인방지 서비스는 보통 부인할 가능성이 있는 행위를 실행한 측에서 상대방에게 부인방지 토큰을 만들어 제공한다. 예를 들어 송신 사실을 부인하지 못하게 하기 위해서는 송신자가 부인방지 토큰을 만들어 수신자에게 제공해야 한다. 나중에 토큰을 제공한 자가 부인하게 되면 상대방은 이 토큰을 제시하게 되며, 제3자들은 이 토큰을 통해 부인하고 있다는 것을 명백히 확인할 수 있다.
<그림 1.1> 송신 부인방지와 수신 부인방지 개념
NRO 서비스에서는 송신자가 수신자에게 토큰을 제공하며, 수신자는 나중에 송신자가 송 신 사실을 부인하면 이 토큰을 통해 부인 사실을 입증할 수 있다. NRR 서비스에서는 수신 자가 송신자에게 토큰을 제공하며, 송신자는 나중에 수신자가 수신 사실을 부인하면 이 토 큰을 통해 부인 사실을 입증할 수 있다.
<그림 1.2> 제출 부인방지와 전달 부인방지
제3의 중계기관을 사용하여 메시지를 전달하는 경우에는 송신자는 수신자와 직접 통신을 하지 않는다. 따라서 부인방지와 관련된 토큰들은 중계기관이 전달해 주어야 한다. NRS 서 비스에서는 중계기관이 송신자에게 토큰을 제공하며, 송신자는 중계기간이 나중에 송신자로 부터 메시지를 제출받았다는 사실을 부인하면 이 토큰을 통해 부인 사실을 입증할 수 있다. NRD 서비스는 중계기관이 송신자에게 토큰을 제공하며, 송신자는 수신자가 나중에 수신사 실을 부인하면 이 토큰을 통해 부인 사실을 입증할 수 있다. 여기서 NRD 토큰은 수신자로 부터 NRR 토큰을 받아 송신자에게 주는 형태가 될 수도 있다. 또 송신자는 중계기관에게 NRO 토큰을 전달해 줄 수도 있다.
한국기술교육대학교 컴퓨터공학부
- 2 -
김상진
제1장 암호알고리즘 개요
1.1.3 통신계층과 암호기술 일반적으로 통신구조는 여러 계층으로 구성되어 있으며, 어떤 계층에서 암호기술을 적용 하느냐에 따라 다른 특성을 가지게 된다. 통신 계층에 따른 암호기술 적용은 크게 전송 계 층 이상에서 이루어지는 경우와 네트워크 계층 이하에서 이루어지는 경우로 나눌 수 있다. 전송 계층 이상에서 이루어지는 경우를 단대단(end-to-end) 방식이라 하며, 보통 응용 계층 에서 암호기술을 적용하는 경우가 많다. 단대단 방식에서는 송신측에서 암호기술이 전체 메 시지에 한 번 적용되어 적용된 상태로 목적지까지 전달된다. 반대로 네트워크 계층 이하에 서 이루어지는 경우는 패킷 단위로 홉마다 암호기술이 적용되며, 홉바이홉(hop-by-hop) 방식 또는 링크 방식이라 된다. 두 방식의 차이점은 표 1.1과 같다. <표 1.1> 단대단과 홉바이홉 암호기술 적용의 차이점
단대단(end-to-end)
장점
홉바이홉(hop-by-hop)
l 통신망과 독립적으로 수행가능
l 트래픽 분석이 가능하지 않음
l 기반구조를 신뢰하지 않아도 됨
l 패킷 단위로 암호화가 가능하므로 오류 발생시 해당 패킷만 재전송
l 트래픽 분석이 가능함
l 통신망의 각 호스트/스위치에 암호
l 오류 발생시 전체 메시지를 재전 단점
송해야 함
기술 능력이 있어야 함 l 각 호스트마다 반복적으로 암호기 술을 적용해야 하므로 효율성이 떨어짐 l 기반구조를 신뢰해야 함
표1.1에서 알 수 있듯이 두 방식은 상반되는 특징을 가지고 있다. 단대단 방식에서는 상 위층에서 전체 메시지에 암호기술이 적용되며, 하위 층에서는 일반 메시지와 동일하게 처리 된다. 반면에 홉-바이-홉 방식에서는 하위 층에서 암호기술을 패킷 단위로 직접 적용한다. 만약 암호알고리즘을 통해 메시지를 암호화하여 비밀성을 제공하고자 할 경우 홉-바이-홉 방식에서는 패킷 단위로 각 홉마다 암호화를 반복적으로 적용해야 한다. 그러므로 효율성이 떨어질 뿐만 아니라 중간 호스트들이 패킷의 내용을 볼 수 있게 된다. 반면에 패킷 단위로 암호화를 하기 때문에 오류가 발생하면 해당 패킷만 다시 전송하면 되지만 단대단 방식에서 는 전체 메시지를 다시 전송해야 한다.
1.2 암호알고리즘 1.2.1 암호알고리즘의 정의 암호알고리즘은 앞서 언급한 바와 같이 좁은 의미에서는 평문을 암호화하고 암호문을 복 호화할 때 사용되는 알고리즘을 말하며, 넓은 의미에서는 암호기술에서 사용되는 모든 알고 리즘을 말한다. 이 절에서는 우선 좁은 의미의 암호알고리즘에 대해 살펴본다. 현대 암호알
한국기술교육대학교 컴퓨터공학부
- 3 -
김상진
제1장 암호알고리즘 개요
고리즘은 모두 암호키를 사용하며, 알고리즘의 안전성은 이 키에 의존한다. 초기에는 암호 알고리즘의 안전성은 암호알고리즘 자체의 비밀성에 의존하는 경우도 있었다. 이와 같은 암 호알고리즘을 제한적 알고리즘(restricted algorithm)이라 한다. 제한적 알고리즘의 경우에는 각 사용자 쌍마다 다른 알고리즘을 사용해야 하기 때문에 하나의 알고리즘을 모든 사용자들 이 공유할 수 없으며, 알고리즘이 노출되면 새로운 알고리즘을 개발해야 하는 문제점을 지 니고 있다. 따라서 현재는 이와 같은 형태의 암호알고리즘을 사용하지 않는다. 오늘날에 암 호알고리즘은 그것의 자세한 내부 내용까지 공개되어 있으며, 이 공개가 알고리즘의 안전성 에 영향을 주지 않는다. 따라서 모든 사용자들은 동일한 암호알고리즘을 공유할 수 있다. 다만, 각 사용자 쌍마다 다른 암호키를 사용하며, 암호키가 노출되면 암호알고리즘을 변경 하는 것이 아니라 암호키만 변경하면 된다. 암호알고리즘의 내부 내용의 공개가 암호문을 해독하는데 도움이 줄 수 있는 측면도 있지만 반대로 취약점을 빨리 발견할 수 있다는 긍정 적인 측면도 있다. 평문을 암호문으로 변환하는 함수를 암호화 함수라 하고, 암호문을 다시 평문으로 복원하 는 함수를 복호화 함수라 한다. 암호화 함수는 주로 다음과 같이 표기된다. E(M, K) = C, EK(M) = C, {M}.K 반면 복호화 함수는 주로 다음과 같이 표기된다. D(M, K) = C, DK(M) = C, {M}-1.K 암호시스템(cryptosystem) 또는 암호계는 가능한 평문의 집합, 가능한 암호문의 집합, 가 능한 암호키의 집합, 암호화 함수, 복호화 함수, 총 다섯 개 요소로 정의된다. 이 때 암호화 와 복호화 함수는 D(E(M,K), K) = M을 만족해야 한다. 이것을 만족하기 위해 암호화 함수 는 전단사함수(bijection)이어야 한다. 함수가 전단사함수라는 것은 역함수가 존재한다는 것 을 의미하며, 역함수가 있어야 암호문을 다시 평문으로 바꿀 수 있다. Kerckhoff는 암호시스템의 요구사항을 다음과 같이 정의하고 있다. l 요구사항 1. 암호시스템은 이론적으로 안전하지 않다면 최소한 실제적으로 안전해야 한 다. l 요구사항 2. 시스템의 자세한 내부 사항의 노출이 시스템 안전성에 영향을 주지 않아야 한다. l 요구사항 3. 암호키는 기억 가능해야 하며, 쉽게 변경할 수 있어야 한다. l 요구사항 4. 암호문을 통신을 통해 전달 가능해야 한다. l 요구사항 5. 암호장치는 이동 가능해야 하며, 홀로 사용할 수 있어야 한다. l 요구사항 6. 암호시스템을 사용하는 방법이 쉬워야 한다. 대부분의 현재 암호시스템은 무조건적으로 안전하지 않다. 즉, 무한한 컴퓨팅 자원과 시 간이 있으면 누구나 암호시스템을 해독할 수 있다. 따라서 실제적으로 안전하다는 것은 그 암호시스템을 해독하는 가장 효율적인 방법을 사용하더라도 현재의 컴퓨팅 능력으로는 너무 많은 시간이 소요되어 의미가 없다는 것을 말한다. 이와 같은 안전성을 계산적 안전성이라 한다. 요구사항 2는 사용하는 암호알고리즘이 제한적 알고리즘이 아니라 암호키에 의존하는 알고리즘이어야 한다는 것을 말하고 있다. Kerckhoff의 요구사항은 아주 오래전에 정의된 것 이지만 오늘날에도 거의 그대로 적용되고 있다.
한국기술교육대학교 컴퓨터공학부
- 4 -
김상진
제1장 암호알고리즘 개요
1.2.2 암호알고리즘의 분류 좁은 의미의 암호알고리즘은 평문을 암호화한 결과의 특성에 따라 결정적(deterministic) 또는 확률적(probabilistic) 암호알고리즘으로 분류할 수 있고, 알고리즘에서 사용하는 암호키 에 따라 대칭(symmetric)와 비대칭(asymmetric) 암호알고리즘으로 분류할 수 있다. 결정적 암호알고리즘은 암호키와 평문이 동일하면 항상 암호문이 동일하지만 확률적 암호알고리즘 은 암호키와 평문이 동일하더라도 항상 결과 암호문이 달라지는 암호알고리즘을 말한다. 따 라서 확률적 암호알고리즘이 보다 안전하며, 암호알고리즘이 결정적 방식이더라도 랜덤 요 소를 포함하여 쉽게 확률적 암호알고리즘으로 바꿀 수 있다. 대칭 암호알고리즘(symmetric key algorithm, conventional algorithm, secret key algorithm)은 암호화할 때 사용하는 암호 키와
복호화할
때
사용하는
암호키가
동일하지만
비대칭
암호알고리즘(asymmetric
algorithm, public key algorithm)에서는 두 키가 서로 다르다. 암호키는 사용하는 용도나 특성에 따라 다양한 용어로 표현된다. 암호화키(encryption key)는 암호화할 때 사용하는 암호키를 말하며, 복호화키(decryption key)는 복호화할 때 사 용하는 암호키를 말한다. 비밀키(secret key)란 대칭 암호알고리즘에서 사용되는 암호키를 말한다. 공개키(public key)란 비대칭 암호알고리즘에서 모든 사람들에게 공개하는 암호키를 말하며, 개인키(private key)란 비대칭 암호알고리즘에서 각 사용자가 비밀로 유지하는 암호 키를 말한다. 공개키는 항상 그것에 대응되는 개인키가 존재하며, 이 두 키를 공개키 쌍이 라 한다. 끝으로 세션키(session key)란 보통 비밀키로서 특정 순간에 사용되고 폐기되는 암 호키를 말한다. 1.2.3 대칭 암호알고리즘 대칭 암호알고리즘은 암호화키와 복호화키가 같은 암호알고리즘을 말한다. 다른 말로 비 밀키 암호알고리즘이라 한다. 암호화키와 복호화키가 같아야 하므로 암호화하는 사용자와 복호화하는 사용자가 같은 암호키를 공유하고 있어야 한다. 이것을 어떻게 안전하게 공유할 것인지가 대칭 암호알고리즘을 사용할 때 가장 큰 이슈이다. 특히, 통신수단을 이용하여 원 거리에 있는 두 사용자가 암호키 자체를 비밀스럽게 공유하는 것은 쉽지 않다. 대칭 암호알고리즘은 크게 스트림(stream) 암호방식과 블록(block) 암호방식으로 분류할 수 있다. 스트림 암호방식은 평문의 각 비트 또는 바이트를 하나씩 암호화하는 방식이고, 블록 암호방식은 평문을 일정한 블록 크기로 나누어, 각 블록을 암호화하는 방식이다. 대칭 암호알고리즘은 크게 다음과 같은 세 가지 용도로 사용된다. l 용도 1. 공개 채널로 전달되는 메시지에 대한 비밀성 보장 –
송신자와 수신자가 공유하고 있는 비밀키로 메시지를 암호화하여 교환함으로써 제3 자가 도청하여도 교환하는 내용을 알 수 없도록 만든다.
l 용도 2. 기억장치에 저장되는 데이터에 대한 비밀성 보장 –
다른 사용자가 저장된 데이터를 열람할 수 없도록 데이터를 암호화하여 저장할 수 있 다.
한국기술교육대학교 컴퓨터공학부
- 5 -
김상진
제1장 암호알고리즘 개요
<그림 1.3> 대칭 암호알고리즘을 이용한 인증 프로토콜
l 용도 3. 개체 인증을 위해 사용 –
Alice와 Bob이 비밀키 를 공유하고 있을 경우 그림 1.3과 같은 프로토콜을 통해 인증할 수 있다. Bob은 랜덤한 수 를 하나 생성하여 Alice에게 전달하면 Alice는 이것을 Bob와 공유하고 있는 로 암호화하여 되돌려준다. 는 오직 Alice와 Bob만이 알고 있으므로 Bob은 Alice가 회신하였다는 것을 확신할 수 있다. 또한 는 Bob가 이번 세션을 위해 처음 사용한 값이므로 Bob은 이 값을 이용하여 Alice가 보낸 메시지에 포함된 암호문의 최신성(freshness)을 검증할 수 있다. 이와 같은 용도 로 한번 사용하는 랜덤 수를 난스(Nonce, Number used just ONCE)라 한다.
1.2.4 비대칭 암호알고리즘 비대칭 암호알고리즘은 다른 말로 공개키 암호알고리즘이라 하며, 암호화키와 복호화키가 서로 다르다. 비대칭 암호알고리즘을 사용하기 위해 각 사용자는 한 쌍의 키를 가지고 있어 야 하며, 이 한 쌍의 키 중 하나는 공개키, 다른 하나는 개인키라 한다. 보통 공개키가 암호 화키로 사용되며, 대응되는 개인키는 복호화키로 사용된다. 사용자는 자신의 공개키를 다른 모든 사용자들에게 공개하고, 자신의 개인키는 비밀로 유지한다. 사용자 가 사용자 에게 메시지를 비밀스럽게 전달하고 싶으면 사용자 의 공개키로 메시지를 암호화하여 전달하면 된다. 이 암호문은 외에는 복호화할 수 없으므로 비밀성이 보장된다. 비대칭 암호알고리즘은 Diffie와 Hellman이 1975년에 처음으로 제안하였으며, 대칭 암호알 고리즘에 비해 상대적으로 역사가 짧다. 대칭 암호알고리즘에서는 두 사용자가 어떻게 안전 하게 비밀키를 공유할 지가 가장 중요한 이슈이지만 공개키 암호알고리즘에서는 두 사용자 가 동일한 암호키를 공유하지 않아도 메시지를 비밀스럽게 교환할 수 있다. 공개키 암호알 고리즘을 사용할 경우에 사용자는 해당 사용자의 공개키만 가지고 있으면 메시지를 비밀스 럽게 전달할 수 있다. 하지만 공개키 암호알고리즘을 사용할 경우에는 또 다른 중요한 이슈 가 있다. 공개키 암호알고리즘에서는 공개키를 상대방에게 비밀스럽게 전달하는 것은 필요 하지 않지만 상대방은 공개키를 반드시 인증할 수 있어야 한다. 즉, 주어진 공개키가 누구 의 공개키인지 명확하게 검증할 수 있어야 한다. 만약 Bob이 주어진 공개키를 실제로는 Carol 것이지만 Alice것으로 착각하여 중요한 메시지를 이 공개키로 암호화하여 전달하면 Alice는 그 내용을 볼 수 없고, 오히려 Carol만 볼 수 있게 된다. 비대칭 암호알고리즘은 대칭 암호알고리즘과 같은 용도로 사용할 수 있지만 성능 때문에 매우 큰 메시지의 비밀성을 보장하기 위해서는 사용되지 않고, 주로 인증 목적으로 많이 사 용된다. 그 이유는 공개키로 메시지를 암호화할 수 있을 뿐만 아니라 개인키로 메시지를 암 호화할 수 있기 때문이다. 개인키로 메시지를 암호화하면 누구나 공개키로 복호화할 수 있
한국기술교육대학교 컴퓨터공학부
- 6 -
김상진
제1장 암호알고리즘 개요
어 비밀성을 제공할 수 없지만 개인키로 암호화된 메시지는 누가 암호화한 것인지 명확하게 검증할 수 있다. 따라서 개인키로 메시지를 암호화한 결과 암호문은 전자서명 역할을 할 수 있다. 1.2.5 대칭 vs. 비대칭 암호알고리즘 대칭 암호알고리즘에서는 두 사용자 간에 비밀키를 공유하는 것이 가장 중요한 이슈이며, 비대칭 암호알고리즘에서는 다른 사용자의 공개키를 인증하는 것이 가장 중요한 이슈이다. 두 종류의 알고리즘 모두 유사한 용도로 사용할 수 있지만 비대칭 암호알고리즘이 대칭 암 호알고리즘에 비해 상대적으로 많은 계산 비용이 소요되므로 주로 인증 목적으로 많이 사용 된다. 표 1.2는 두 종류의 암호알고리즘을 비교하고 있다. <표 1.2> 대칭 vs. 비대칭 암호알고리즘
대칭 암호알고리즘
비대칭 암호알고리즘
키 관계
암호화키 = 복호화키
암호화키 ≠ 복호화키
키 길이
짧다 (보통 128비트)
길다 (RSA의 경우 1024비트)
기본연산
비트 조작 연산
수학 연산 (지수 연산)
성능
상대적으로 우수함
상대적으로 떨어짐
대표 알고리즘
DES, AES
RSA
1.2.6 키 위탁 두 사용자가 안전한 대칭 암호알고리즘을 이용하여 메시지를 암호화하여 교환하면 제3자 들은 도청을 하여도 그 내용을 알 수 없다. 만약 범죄 목적으로 메시지를 암호화하여 교환 할 경우에는 정부에서는 감청을 할 수 없게 된다. 이 때문에 정부는 비밀 통신을 감청할 능 력을 유지하고 싶다. 이를 위해 세 가지 방법을 사용할 수 있다. 첫째, 암호화하여 메시지를 교환하는 것을 금지하는 것이다. 그러나 이 방법은 현실적인 대안이 되지 못한다. 각 사용 자들의 행동을 제한하는 것은 한계가 있다. 둘째, 암호알고리즘을 해독할 수 있는 능력을 보유하는 것이다. 이 방법도 현실적인 대안이 되지 못한다. 현재 공개되어 있는 수많은 암 호알고리즘은 안전성이 어느 정도 증명되어 있는 것들이다. 따라서 정부가 이들을 해독할 수 있는 능력을 가지는 것은 이와 같은 학문적 증명에 배치되기 때문에 가능한 것은 아니 다. 셋째, 키 위탁(key escrow) 방법을 사용하는 것이다. 키 위탁이란 사용자들이 사용하는 모든 암호키를 강제로 받아 보관하는 것을 말한다. 이 역시 강제로 사용자들로부터 암호키 를 받는 것은 쉽지 않다. 강제로 받을 수 있는 방법이 존재하더라도 사용자들이 키 위탁을 신뢰하기 위해서는 정부가 주어진 권한을 남용하지 않을 것을 믿어야 한다. 특히, 오늘날 사용자의 프라이버시는 또 다른 중요한 요구사항이다. 따라서 이를 위해 암호기술에서는 threshold 기법을 사용한다. 이 기법에서는 하나의 정보를 여러 개로 나누어 독립적인 기관 이나 사용자들에게 분배하며, 이들 중 일부가 동의하면 다시 원 정보를 복원할 수 있다. 따 라서 키를 위탁할 때 이것을 여러 개로 나누어 여러 기관이 유지하게 하면, 특정 기관이 홀
한국기술교육대학교 컴퓨터공학부
- 7 -
김상진
제1장 암호알고리즘 개요
로 권한을 남용할 수 없게 된다. 키 위탁은 키를 분실하였을 때 키를 복구하는데 유용하게 사용될 수 있다. 키 복구(key recovery)를 키 위탁과 혼돈하는 경우가 있는데, 키 복구는 키 위탁을 통해 제공될 수 있는 하나의 서비스이다. 키 복구는 키 위탁 외에 여러 다른 방법을 통해 복구할 수 있다. 예를 들어 키를 여러 곳에 백업하여 문제가 발생하였을 때 복구할 수도 있다. 암호문은 그것을 복호화할 수 있는 키가 없으면 아무런 가치가 없다. 따라서 데이터를 안전하게 암호화하여 파일 서버에 보관하고 있을 때 해당되는 복호화키를 분실하면 이 데이터들은 더 이상 열람 할 수 없게 된다. 따라서 키 복구도 키 관리 측면에서 매우 중요한 요소이다. 1.2.7 전자서명 암호알고리즘은 좁은 의미에서는 암호화와 복호화에 사용되는 알고리즘을 말하지만 넓은 의미에서는 암호기술에서 사용되는 모든 알고리즘을 말한다. 암호기술에서 널리 사용되는 알고리즘에는 앞서 설명한 대칭과 비대칭 암호알고리즘 외에 전자서명(digital signature), 해 쉬함수(hash function), 의사난수 비트 생성기(pseudo-random bit generator) 등이 있다. 이 절에서 전자서명에 대해 알아본다. 전자서명은 기존 서명을 전자적으로 구현한 것으로서 기 존 서명이 갖추어야 하는 요구사항뿐만 아니라 전자적으로 구현하였기 때문에 갖추어야 하 는 추가 요구사항을 가지고 있다. 따라서 전자서명의 요구사항은 다음과 같다. l 요구사항 1. 인증(authentic): 누가 서명하였는지 확인이 가능해야 한다. l 요구사항 2. 위조불가(unforgeable): 위조가 불가능해야 한다. l 요구사항 3. 재사용불가(not reusable): 서명을 다시 사용할 수 없어야 한다. l 요구사항 4. 변경불가(unalterable): 서명된 문서의 내용을 변경할 수 없어야 한다. l 요구사항 5. 부인방지(non-repudiation): 나중에 부인할 수 없어야 한다. 요구사항 1을 충족하기 위해서는 각 서명자마다 서명이 독특해야 한다. 요구사항 3에서 다시 사용할 수 없다는 것은 두 가지 측면으로 해석될 수 있다. 첫 번째 측면은 특정 메시 지에 대한 서명 블록을 다시 사용할 수 없어야 한다는 것이다. 즉, 특정 메시지의 서명 블 록을 다른 메시지의 서명 블록으로 사용할 수 없어야 한다. 여기서 서명 블록이란 메시지와 별도로 존재하는 서명값을 말한다. 보통 전자서명은 일반서명과 달리 서명한 문서 또는 메 시지와 별도로 존재한다. 이 요구조건이 충족되기 위해서 전자서명은 메시지에 의존해야 한 다. 두 번째 측면은 특정 메시지와 그것의 서명 블록 전체를 다시 사용할 수 없어야 한다는 것이다. 이것의 필요성은 응용에 따라 다르며, 이것을 방어하기 위해서는 서명에 서명 시간 을 포함하여 서명을 확인하는 사용자가 이미 확인한 것인지 또는 서명의 유효기간이 지난 것인지 검사해야 한다. 요구사항 4는 요구사항 3의 첫 번째 측면과 동일한 의미이다. 따라 서 전자서명이 메시지에 의존하면 요구사항 4를 충족시킬 수 있다. 전자서명은 다음과 같은 측면에서 일반 서명과 다르다. 첫째, 전자서명은 수학적으로 서 명자를 검증할 수 있다. 하지만 일반 서명은 보통 원 서명과 눈으로 대조하여 검증하며, 각 서명자의 서명마다 위조의 어려움이 다를 수 있다. 따라서 일반 서명보다 전자서명이 상대 적으로 안전하다고 할 수 있다. 둘째, 일반 서명은 문서 위에 하지만 전자서명은 앞서 언급 한 바와 같이 문서와 보통 별도로 존재한다. 셋째, 일반 서명은 서명마다 동일한 형태이지
한국기술교육대학교 컴퓨터공학부
- 8 -
김상진
제1장 암호알고리즘 개요
만 전자서명은 메시지에 의존해야 하므로 문서마다 다른 형태이어야 한다. 넷째, 전자서명 은 원본과 복사본을 구분하기가 어렵다. 따라서 전체 재사용을 방지하기 위해 서명시간을 서명에 포함해야 하며, 검증자는 이미 처리한 서명인지 중복검사를 해야 한다. 전자서명의 요구사항에서 알 수 있듯이 전자서명은 서명자와 메시지에 의존해야 한다. 따 라서 전자서명 함수는 메시지와 서명자마다 다른 서명키를 입력으로 사용한다. 보통 공개키 암호알고리즘에서 개인키가 서명키의 역할을 하며, 공개키가 확인키의 역할을 한다. 전자서 명의 구성요소는 서명할 수 있는 메시지의 유한집합 , 고정된 길이의 서명의 유한집합 , 서명을 생성하기 위해 사용되는 함수 , 서명을 검증하기 위해 사용되는 함수 , 가능한 서 명키/확인키의 유한집합으로 구성된다. 여기서 서명함수 는 서명키 ‑ 와 메시지 ∊ 을 입력받아 전자서명 ∊ 를 출력하여 주며, 확인함수 는 ∊ , ∊ , 확인키 + 를 입력받아 가 을 ‑ 로 서명한 전자서명이 맞으면 true 아니면 false를 출력하여 준다. 앞서 언급한 위조불가 요구사항을 수학적으로 표현하면 다음과 같다. l 요구사항 2. 위조불가(unforgeable): ‑ 를 모르는 사람이 + 인 임의의 ∊ 과 ∊ 를 찾는 것은 계산적으로 어려워야 한다. 1.2.8 해쉬함수 해쉬함수는 임의의 길이에 이진 문자열을 고정된 길이의 이진 문자열로 매핑하여 주는 함 수를 말하며, 해쉬함수의 결과를 해쉬값, 메시지 다이제스트, 메시지 지문이라 한다. 해쉬함 수는 크게 다음과 같은 요구사항을 충족해야 한다. l 요구사항 1. 압축: 임의의 길이의 이진 문자열을 일정한 크기의 이진 문자열로 변환해야 한다. l 요구사항 2. 계산의 용이성: 가 주어지면 는 계산하기 쉬워야 한다. l 요구사항 3. 일방향성(one-wayness): 입력을 모르는 해쉬값 가 주어졌을 때, ′ 를 만족하는 ′를 찾는 것은 계산적으로 어려워야 한다. l 요구사항 4. 약한 충돌회피성(weak collision-resistance): 가 주어졌을 때 ′ 인 ′ ≠ 을 찾는 것은 계산적으로 어려워야 한다. l 요구사항 5. 강한 충돌회피성(strong collision-resistance): ′ 인 서로 다른 임 의의 두 입력 와 ′을 찾는 것은 계산적으로 어려워야 한다. 압축함수는 임의의 메시지를 현재 크기보다 작은 크기로 축소해줄 수 있어야 할 뿐만 아 니라 나중에 다시 원래의 크기로 복원할 수 있어야 한다. 하지만 해쉬함수는 압축을 하지만 복원을 할 필요가 없고, 복원이 가능해서도 안 된다. 복원이 가능하지 않다는 것은 다른 말 로 함수가 일방향이라고 한다. 임의 길이의 메시지를 고정된 길이의 메시지로 변환하므로 함수의 치역 집합보다 정의역 집합이 훨씬 크다. 따라서 서로 다른 메시지가 항상 다른 해 쉬값으로 매핑되도록 해쉬함수를 구성하는 것은 불가능하다. 이처럼 서로 다른 메시지가 같 은 해쉬값으로 매핑되면 충돌(collision)이 발생하였다고 한다. 어떤 를 이용하여 계산한 해 쉬값 가 있을 때, 를 찾을 수 없어야 할 뿐만 아니라 해쉬값 로 매핑되는 임의의 입력 을 찾을 수 없어야 일방향성을 만족한다고 말한다. 뿐만 아니라 안전한 해쉬함수가 되기 위
한국기술교육대학교 컴퓨터공학부
- 9 -
김상진
제1장 암호알고리즘 개요
해서는 이와 같은 충돌을 찾는 것이 어려워야 한다. 충돌은 크게 약한 충돌과 강한 충돌로 구분되는데, 약한 충돌은 정해진 어떤 해쉬값으로 매핑되는 또 다른 메시지를 찾는 것이고, 강한 충돌은 같은 해쉬값으로 매핑되는 임의의 메시지 쌍을 찾는 것이다. 따라서 강한 충돌 을 찾는 것이 더 쉽다. 그러므로 강한 충돌을 찾는 것이 어려운 해쉬함수가 가장 안전한 해 쉬함수이다. 일방향성까지 충족되는 해쉬함수를 일방향 해쉬함수(OWHF, One-Way Hash Function)라 하며, 강한 충돌회피성까지 충족하는 해쉬함수를 충돌회피 해쉬함수(CRHF, Collision-Resistant Hash Function)라 한다. 예1.1) 다음과 같은 해쉬함수(물론 안전한 해쉬함수는 아니다)를 가정하자.
mod 이 때 해쉬값 1이 주어졌을 때, 1, 11, 21 등을 찾는 것이 일방향성 문제이고, 정의역 2가 주어졌을 때 12, 22 등을 찾는 것이 약한 충돌 문제이며, <12, 22>, <13, 23> 등과 같은 임 의의 쌍을 찾는 것이 강한 충돌 문제이다. 해쉬함수는 크게 세 가지 용도로 사용된다. 첫째, 전자서명에서 사용된다. 전자서명 암호 알고리즘은 보통 공개키 암호알고리즘을 많이 사용한다. 따라서 매우 큰 길이의 메시지 자 체를 전자서명하기에는 비용이 많이 소요되므로 전체 메시지 대신에 보통 메시지의 해쉬값 에 서명하는 경우가 많다. 원 메시지 대신에 메시지의 해쉬값을 서명하여 동일한 효과를 얻 기 위해서는 기존 전자서명 요구사항이 여전히 충족되어야 한다. 이 때 강한 충돌회피성이 보장되지 않는 해쉬함수를 사용하면 기존 서명 블록을 다른 메시지의 서명 블록으로 활용할 수 있게 된다. 예를 들어 해쉬함수를 활용한다는 것은 메시지
대신에 에 서명한
다는 것을 말한다. 만약 공격자가 ′ 인 메시지 ′을 알고 있으면 메시지 에 대한 서명을 메시지 ′에 대한 서명이라고 주장할 수 있다. 둘째, 메시지의 무결성을 제공하기 위해 사용된다. 셋째, 패스워드를 안전하게 유지하기 위해 사용된다. 해쉬함수는 보통 비밀키를 사용하지 않는다. 따라서 메시지와 그것의 해쉬값을 함께 전송 하거나 저장할 경우 그것의 무결성을 안전하게 보장하기가 어렵다. 그 이유는 고의적인 공 격자는 메시지뿐만 아니라 해쉬값도 함께 변경할 수 있기 때문이다. 따라서 보다 안전하게 무결성을 보장하기 위해 해쉬값을 생성할 때 비밀키를 사용하여 해당 비밀키를 모르는 경우 에는 올바른 해쉬값을 계산할 수 없도록 하는 기법을 사용한다. 이 처럼 비밀키를 사용하여 계산되는 해쉬값을 메시지 인증 코드(MAC, Message Authentication Code)라 하고, 비밀키 를 사용하지 않는 일반 해쉬값을 조작 탐지 코드(MDC, Modification/Manipulation Detection Code)라 한다.
1.3 암호해독 1.3.1 암호알고리즘에 대한 공격 좁은 의미의 암호알고리즘에 대한 공격의 목적은 암호문을 생성할 때 사용한 암호키를 발 견하거나 암호키를 모르는 상태에서 암호문으로부터 평문을 얻어내는 것이다. 이와 같은 공 격을 암호해독 공격이라 한다. 암호해독 공격 외에 다른 방법으로 키가 알려지는 것을 노출 (compromise)되었다고 한다. 예를 들어 암호키를 알고 있는 사용자에게 뇌물을 주고 암호키
한국기술교육대학교 컴퓨터공학부
- 10 -
김상진
제1장 암호알고리즘 개요
를 알게 된 경우에 노출되었다고 한다. 암호기술을 사용하는 암호프로토콜(cryptographic protocol)에 대한 공격은 크게 수동 공격 (passive attack)과 능동 공격(active attack)으로 분류할 수 있다. 수동 공격이란 프로토콜의 진행을 방해하지 않고 공격하는 것을 말하고, 능동 공격이란 프로토콜의 진행에 개입하여 공격하는 것을 말한다. 따라서 암호알고리즘에 대한 해독 공격은 수동 공격의 한 종류로 볼 수 있다. 대칭 암호알고리즘에 대한 가장 쉬운 공격은 전사공격(brute-force attack)이다. 전사공격이 란 가능한 모든 키를 검사하는 방법을 말하며, 가능한 모든 키를 검사하면 당연히 공격에 성공할 수 있다. 문제는 소요되는 시간이다. 따라서 전사공격을 통해 공격에 성공하는 것이 어렵도록 충분히 긴 길이의 암호키를 사용해야 한다. 이 때문에 매우 큰 길이의 암호키를 사용하는 비대칭 암호알고리즘에 대한 전사공격은 의미가 없다. 또 전사공격은 기계적인 공 격이므로 암호해독 공격이라고 하지 않는다. 암호알고리즘에 대한 암호해독 공격은 공격자가 어떤 정보를 가지고 있는지에 따라 크게 암호문 단독 공격(ciphertext-only attack), 기지 평문 공격(known-plaintext attack), 선택 평문 공격(chosen-plaintext attack), 적응적 선택 평문 공격(adaptive chosen-plaintext attack), 선 택 암호문 공격(chosen-ciphertext attack)으로 분류할 수 있다. 이와 같은 공격들은 실제 일 어날 수 있는 공격이라기보다는 암호알고리즘이 얼마나 안전한지 검사하기 위한 가상의 공 격으로 보는 것이 올바르다. 공격자가 가장 적은 정보를 가지고 공격하는 것을 암호문 단독 공격이라 한다. 이 공격에 서 공격자는 같은 암호키를 사용하여 같은 알고리즘으로 암호화된 유한 암호문 집합만을 가 지고 있다. 따라서 공격자의 목표는 대응되는 평문을 찾거나 사용된 암호키를 찾거나 암호 키를 찾지 못하였지만 암호키 없이 암호문을 복호화할 수 있는 새로운 알고리즘을 발견하는 것이다. 기지 평문 공격에서 공격자는 암호문뿐만 아니라 대응되는 평문도 가지고 있다. 하 지만 가지고 있는 암호문/평문 쌍을 공격자가 선택할 수 없다. 이 공격에서 공격자의 목표 는 사용된 암호키를 찾거나 암호키를 찾지 못하였지만 암호키 없이 암호문을 복호화할 수 있는 새로운 알고리즘을 발견하는 것이다. 선택 평문 공격에서 공격자는 기지 평문 공격과 마찬가지로 공격자가 평문과 암호문 쌍들 의 유한집합을 가지고 있다. 차이점은 선택 평문 공격에서 공격자는 자신이 원하는 평문과 암호문 쌍을 가질 수 있지만, 공격이 시작된 이후에는 새로운 쌍을 얻을 수 없다. 공격 목 표는 기지 평문 공격과 동일하다. 적응적 선택 평문 공격에서 공격자는 공격을 하면서 원하 는 평문과 암호문 쌍을 계속 얻을 수 있다. 따라서 지금까지 소개한 공격 중 공격자의 능력 이 가장 강하다. 선택 암호문 공격은 기존 선택 평문 공격과 달리 공격자가 원하는 평문을 선택하면 대응되는 암호문을 얻을 수 있는 것이 아니라 반대로 암호문을 선택하면 그것에 대응되는 평문을 얻을 수 있는 공격을 말한다. 선택 암호문 공격은 주로 공개키 암호알고리 즘의 안전성 분석할 때 사용된다. 암호알고리즘에 대한 공격의 결과는 크게 다음과 같은 네 가지로 분류할 수 있다. 첫째, 암호키를 발견하면 완전 성공(total break)을 거두었다고 한다. 둘째, 암호키를 발견하지 못 하였지만 복호화할 수 있는 알고리즘을 발견하면 광역 성공(global deduction)을 거두었다고 말한다. 셋째, 어떤 한 암호문으로부터 그것의 평문을 얻어낸 경우 인스턴스 성공(instance deduction)을 거두었다고 한다. 넷째, 암호문으로부터 평문의 일부나 암호키와 관련된 일부 정보를 얻어낸 경우 정보 추출 성공(information deduction)을 거두었다고 한다.
한국기술교육대학교 컴퓨터공학부
- 11 -
김상진
제1장 암호알고리즘 개요
공격의 복잡성을 측정하는 척도로는 데이터 복잡성, 처리 복잡성, 공간 요구사항 등이 사 용된다. 데이터 복잡성은 공격이 성공하기 위해 필요한 데이터의 양을 말하며, 처리 복잡성 은 공격이 성공하기 위해 필요한 시간을 말하고, 저장공간 요구사항은 공격하기 위해 필요 한 메모리 공간을 말한다. 1.3.2 암호알고리즘의 안전성 암호알고리즘의 안전성은 해독하기 위해 요구되는 노력에 의해 측정된다. 보통 대칭 암호 알고리즘 같은 경우에는 전사공격을 통해 암호해독이 가능하다. 즉, 현재 실제 사용되는 암 호알고리즘들은 무조건적으로 안전하지 않다. 무조건적으로 안전하다는 것은 무한한 컴퓨팅 자원을 가져도 공격에 성공할 수 없다는 것을 말한다. 전사공격을 통해 해독이 가능하더라 도 소요되는 시간이나 필요한 컴퓨팅 능력이 현실성이 없어 실제 사용하는데 아무런 문제가 없다. 이처럼 어떤 암호알고리즘을 지금까지 알려진 가장 우수한 공격방법으로 공격하여 성 공하는데 소요되는 시간이 불합리하게 많은 컴퓨팅 능력이나 시간을 요구할 경우 이 알고리 즘은 계산적으로 안전(computationally secure)하다고 말한다. 공개키 암호알고리즘도 대칭 암호알고리즘과 마찬가지로 전사공격 측면에서는 계산적으로 안전하다. 하지만 이들은 보통 어렵다고 알려진 어떤 수학문제에 의존하므로 전사공격하기보다는 이 수학문제를 푸는 것이 빠르다. 그러나 공개키 암호알고리즘에 사용되는 수학문제를 푸는 것 자체가 계산적으로 어 렵다고 알려져 있다. 다시 말하면 의존하는 수학문제를 푸는 것이 불가능하다고 증명되어 있지는 않지만 지금까지 알려진 어떤 방법을 사용하더라도 불합리하게 많은 시간과 비용이 요구된다는 것이다. 이처럼 알고리즘의 안전성이 어렵다고 알려진 다른 문제와 등가일 경우 에는 이 알고리즘은 증명 가능한 안전성(provably secure)을 가지고 있다고 한다. 지금까지는 공격을 이용하여 해독할 수 있는지에 따른 암호알고리즘의 안전성 분류에 대 해 살펴보았다. 암호알고리즘 이와 같은 기준 외에 안전성을 논하기 위해 사용되는 몇 가지 개념이 있다. 어떤 알고리즘이 의미론적으로 안전(semantically secure)하다는 것은 암호문이 주어졌을 때 효율적으로 계산할 수 있는 모든 것은 암호문이 없어도 계산할 수 있다는 것을 말한다. 즉, 주어진 암호문에서 공격자는 추가적으로 얻을 수 있는 정보가 아무것도 없어야 한다는 것을 말한다. 어떤 알고리즘이 구별불가 안전성을 가지고 있다는 것은 두 개의 메시 지 중 하나를 암호화한 암호문이 주어졌을 때, 공격자가 어떤 평문을 암호화한 것인지 맞출 수 있는 확률이 50%보다 높지 않다는 것이다. 어떤 알고리즘이 NM(Non-Malleability) 특성 을 제공한다는 것은 암호문에 대응되는 평문을 알지 못하는 경우 이 암호문을 의미 있는 다 른 암호문을 변경하는 것이 가능하지 않다는 것을 말한다. 참고문헌 [1] Jianying Zhou and Dieter Gollmann, “Evidence and Non-repudiation," Journal of Network and Computer Applications, Vol. 20, No. 3, pp. 267–281, Jul. 1997. 연습문제 1. 단대단 암호방식과 홉-바이-홉 암호방식을 비교 설명하시오.
한국기술교육대학교 컴퓨터공학부
- 12 -
김상진
제1장 암호알고리즘 개요
2. 대칭 암호알고리즘을 사용하기 위해 원거리 사용자간에 먼저 선행되어야 하는 것과 비대 칭 암호알고리즘을 사용하기 위해 원거리 사용자간에 먼저 선행되어야 하는 것을 설명하 시오. 3. 전자서명과 일반서명을 비교 설명하시오. 4. 약한 충돌회피성과 강한 충돌회피성을 예를 들어 비교 설명하시오.
한국기술교육대학교 컴퓨터공학부
- 13 -
김상진
제2장 고전암호알고리즘
제 2 장 고전암호알고리즘 최근에는 암호기술이 다양한 목적으로 사용되고 있지만 이전에는 주로 비밀성을 보장하기 위해서만 사용되었다. 특히, 민간 부분보다는 군사적 목적으로 많이 사용되었다. 메시지의 비밀성을 보장하기 위해 암호화하는 기술은 고대 로마시대부터 사용되었다. 2차 세계 대전 이전에 사용된 암호기술들을 고전 암호기술이라 한다. 고전 암호기술 중 암호알고리즘들은 주로 치환(substitution) 암호방식이거나 자리바꿈(permutation) 암호방식을 사용하였다. 치환 암호방식은 평문의 정보를 다른 정보로 바꾸어 암호화하는 방식이고, 자리바꿈 암호방식은 평문을 구성하는 정보들의 위치를 바꾸어 암호화하는 방식이다.
2.1 치환암호방식 가장 기초적인 치환 암호방식은 단일치환(monoalphabetic) 암호방식이다. 고전 암호알고 리즘에서 평문은 주로 영문 데이터이며, 수작업으로 보통 암호화가 이루어졌다. 단일치환 암호방식은 영문의 각 문자를 다른 문자로 바꾸어 암호화하는 방식이다. 가장 대표적인 단 일치환 암호알고리즘은 이동(shift) 암호알고리즘이다. 이 알고리즘은 평문의 각 영문자를 암 호키에 해당되는 수만큼 이동하여 암호화한다. 이와 같은 이동 암호방식은 고대 로마시대부 터 사용되었으며, 줄리우스 카이사르(Julius Caesar)는 키를 3으로 사용하였다고 하여, 키가 3인 경우를 카이사르 암호방식이라 한다. 하지만 키는 0부터 25까지 임의의 수를 사용할 수 있다. 키가 3인 경우에 'A' 문자는 'D'로, 'B' 문자는 'E'로 바꾸어 표현함으로써 암호화된다. 물론 키 값으로 0을 사용하면 평문이 전혀 바뀌지 않으므로 의미가 없다. 따라서 이동 암호 알고리즘은 총 25개의 키가 존재한다. 뿐만 아니라 실제 단일치환 암호알고리즘은 키로 표 2.1과 같은 임의의 맵(map)을 사용할 수 있으며, 이 경우 총 26!개의 키가 존재한다. <표 2.1> 단일치환 키 맵
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z W Q A D S T M U B Y L O P C E V Z X F H J G I R N K
하지만 이동 암호방식처럼 어떤 규칙이 없으면 그 키를 암기하기가 어렵다는 문제점이 있 다. 즉, 키가 복잡해지면 안전성은 증가할 수 있지만 반대로 키를 안전하게 유지하는 것이 어려워질 수 있고 사용하기가 불편해질 수 있다. 임의의 맵을 사용하는 단일치환 암호알고리즘은 총 26!개의 키가 존재하므로 가능한 모든 키를 검사하는 전사공격을 통해서는 해독하기가 어렵다. 그러나 영문에 대한 단일치환 암호 알고리즘은 비교적 쉽게 해독할 수 있다. 암호해독을 할 때 평문의 내용을 알 수 없지만 평 문의 형태를 알고 있다면 암호해독에 많은 도움이 된다. 특히, 평문의 특징이 암호문에 그 대로 또는 일부 나타날 수 있으므로 이것을 암호해독할 때 활용할 수 있다. 예를 들어 단일 치환 암호알고리즘에서 특정 문자는 항상 같은 문자로 암호화된다. 따라서 ‘A’ 문자가 ‘X’로 암호화된다고 가정하였을 때 평문에 ‘A’ 문자가 10번 등장하면 암호문에도 ‘X’ 문자가 10번 등장한다. 이와 같은 정보는 암호해독에 매우 유용한 정보가 된다. 단일치환 암호방식에서 평문의 형태가 영문일 경우
한국기술교육대학교 컴퓨터공학부
- 1 -
영문은 암호해독에 활용할 수 있는
김상진
제2장 고전암호알고리즘
여러 가지 특징을 가지고 있다. 영문의 가장 큰 특징은 등장하는 각 문자의 출현 빈도가 일 정하다는 것이다. 실제 일반 영문에서 각 문자의 등장 빈도는 표 2.2와 같다. 영문은 이 외 에도 다음과 같은 추가적인 특징을 가지고 있다. l ‘e’, ‘t’, ‘a’, ‘o’ 등은 다른 문자들에 비해 출현 빈도가 매우 높다. l 단어의 시작에서 가장 많이 사용되는 문자는 ‘t’이고, 단어 끝에 가장 많이 사용되는 문자 는 ‘e’이다. l 길이가 1인 단어는 ‘a’와 ‘I’가 유일하다. l 길이가 2인 단어 중 가장 많이 사용되는 것은 “to”와 “in”이다. l 세 개의 문자 조합 중 가장 많이 사용되는 것은 “ing”, “ion”, “ent”이다. l 모음 다음에 가장 많이 등장하는 문자는 ‘n’이다. <표 2.2> 영문에서 각 문자의 등장 빈도
문자
확률
문자
확률
A
.082
N
.067
B
.015
O
.075
C
.028
P
.019
D
.043
Q
.001
E
.127
R
.060
F
.022
S
.063
G
.020
T
.091
H
.061
U
.028
I
.070
V
.010
J
.002
W
.023
K
.008
X
.001
L
.040
Y
.020
M
.024
Z
.001
0.140
상대적 빈도
0.120 0.100 0.080 0.060 0.040 0.020 0.000 A B C D E F G H
I
J K L M N O P Q R S T U V W X Y Z
문자 <그림 2.1> 일반 영문에서 각 문자의 등장 빈도에 따른 분포
표 2.2는 일반 영문에서 각 문자가 등장하는 비율이며, 그림 2.1은 각 문자 등장 빈도에
한국기술교육대학교 컴퓨터공학부
- 2 -
김상진
제2장 고전암호알고리즘
따른 분포를 나타내고 있다. 따라서 일반 영문 데이터를 이동 암호방식을 이용하여 암호화 한 후에 결과 암호문에서 각 문자의 등장 빈도에 따른 분포를 그리면 그림 2.1의 분포도를 일정하게 이동시킨 형태가 된다. 따라서 특별한 어려움 없이 키를 알아낼 수 있다. 따라서 키의 개수가 많아져 모든 경우의 수를 검사하여 키를 알아내는 것이 어렵다고 하여 무조건 암호방식이 안전한 것은 아니다. 예2.1) 이동 암호방식으로 암호화된 다음과 같은 암호문을 해독하시오. SLAAP ABMMV LYMPY LWLYP UKKLU ZVUHI
UNAOL BAPZA LDHSS AOHZA FAOLT SFKLS
NVVKZ OLJYP ULLKZ VMPNB LUAYF HFPUN
ABMMP APJHS AVZVS YLVBA PAOHZ AYHMM
UDOPS WYVIS CLPAO DOPJO AVKVA PJ
LRLLW LTAOH HZAVH IPAZH OPZDP
PUNAO AHUFJ JAHZN YLOHY AOVBA
LIHKZ VTWBA HALRL TMBSH BUYLH
제일 먼저 암호문에 등장한 각 문자의 빈도를 계산한다. <표 2.3> 예2.1 암호문의 문자등장 빈도
A B C D E F G H I 29 9 1 4 0 5 0 18 4
J 6
K L M N O P Q R S T U V W X Y Z 7 24 9 6 14 18 0 2 10 4 11 14 4 0 11 12
가장 많이 등장한 것은 ‘A’, ‘L’, ‘H’, ‘P’ 순이다. 영문에서 가장 많이 등장하는 문자는 ‘E’이 므로 우선 ‘E’가 ‘A’로 매핑되는 키를 가정하여 암호문을 복호화한다. 복호화가 성공적이면 해독이 완료되지만 성공적이지 못하면 ‘E’가 ‘L’에 매핑되는 키를 가정하여 암호문을 복호화 한다. 이와 같은 과정을 해독이 성공할 때까지 반복한다. 이 예제의 경우 ‘E’가 ‘L’로 매핑되 는 키를 가정하여 암호문을 복호화하면 성공적으로 암호문이 복호화된다. 단일치환 암호방식의 문제점을 극복하기 위해 몇 가지 방법이 제시되었다. 그 중 동음 (homophonic) 치환 암호방식은 한 문자를 여러 개의 다른 값으로 매핑하여 암호화하며, 다 중문자(polygram) 치환 암호방식은 문자들을 블록단위로 매핑한다. 동음치환 방식의 경우에 는 평문의 가능한 문자보다 암호문의 가능한 문자의 수가 커진다. 동음 치환 암호방식이나 다중문자 치환 암호방식은 단일치환 암호방식의 출현 빈도 노출 문제를 극복할 수 있지만 암호키의 표현이 어려우지는 단점을 지니고 있다. 단일치환 암호방식의 문제점을 근본적으로 해결하기 위한 가장 효과적인 방법은 다중치환 (polyalphabetic) 암호방식이다. 이 방식에서는 주기적으로 문자의 위치마다 다른 이동 암호 방식을 사용한다. 이렇게 하면 문자 출현 빈도를 은닉하는 동시에 키의 표현이 단순하고 사 용하기가 편리해진다. 다중치환 암호방식의 가장 대표적인 알고리즘은 Vigenere 암호방식이 다. 이 방식의 경우 키 길이가 이면 매 번째 문자마다 같은 키로 이동 치환하여 암호화 한다. 예를 들어 K=(2,8,15,7,4,17)=“cipher”이고 평문이 “thiscryptosystemisnotsecure"이면 결 과 암호문은 ”VPXZGIAXIWPUBTTMJPWIZITWZT"이다. 즉, 첫 문자인 't'와 일곱 번째 문자 인 ‘y' 등은 모두 키 2로 암호화된다.
한국기술교육대학교 컴퓨터공학부
- 3 -
김상진
제2장 고전암호알고리즘
2.2 자리바꿈 암호방식 자리바꿈 암호방식은 평문을 구성하는 요소들의 위치를 바꾸는 암호방식을 말한다. 가장 단순한 자리바꿈 암호방식은 다음과 같은 열기준 암호방식이 있다. l 단계 1. 평문의 작업 단위를 결정한다. 예) 여섯 문자 l 단계 2. 평문을 정해진 열 단위로 표현한다. 예2.2) LASTNITEWASHEAVENPLEASEMARRYME L
A
S
T
N
I
T
E
W
A
S
H
E
A
V
E
N
P
L
E
A
S
E
M
A
R
R
Y
M
E
l 단계 3. 열 기준으로 다시 표현한다. 예2.3) LTELA AEAER SWVAR TAESY NSNEM IHPME 자리바꿈 암호방식도 추측 공격이 가능하다. 자리바꿈 암호방식의 안전성을 높이기 위해서 는 자리바꿈을 여러 번 반복할 수 있다. 위 예에서 동일한 방식으로 한번 더 자리바꿈을 하 면 다음과 같다. 예2.4) LTELA AEAER SWVAR TAESY NSNEM IHPME L
T
E
L
A
A
E
A
E
R
S
W
V
A
R
T
A
E
S
Y
N
S
N
E
M
I
H
P
M
E
→ LEVSM TAAYI EERNH LRTSP ASANM AWEEE 컴퓨터에서 자리바꿈 암호는 보통 자리바꿈 맵을 사용한다. 자리바꿈 맵을 사용할 경우에 도 작업 단위를 먼저 결정해야 한다. 단일 자리바꿈처럼 작업 단위를 여섯 문자라고 가정하 면 키는 다음과 같이 표현할 수 있다.
예2.5)
x π(x)
1 2
2 4
3 5
4 1
5 6
6 3
평문: LASTNI TEWASH EAVENP LEASEM ARRYME 암호문: ATNLIS EASTHW AENEPV ESELMA RYMAER 치환 암호방식과 자리바꿈 암호방식을 결합하여 사용하면 안전성을 높일 수 있다. 이 처 럼 치환과 자리바꿈을 함께 사용하는 암호방식을 혼합(product) 암호방식이라 하고, 현대 대 칭 암호알고리즘은 모두 혼합 암호방식을 사용하고 있다.
한국기술교육대학교 컴퓨터공학부
- 4 -
김상진
제2장 고전암호알고리즘
2.3 다중치환 암호방식에 대한 암호해독 이 절에서는 다중치환 암호방식으로 암호화된 암호문을 해독하는 방법을 살펴봄으로써 기 본적인 암호해독 기술을 경험해본다. 다중치환 암호방식으로 암호화된 암호문을 해독하는 방법은 크게 두 가지 원리를 이용한다. 첫째, 다중치환은 단일치환의 반복이다. 둘째, 단일 치환은 영문의 등장 빈도를 숨길 수 없으므로 앞서 언급한 바와 같이 영문의 특성을 이용하 여 쉽게 해독할 수 있다. 따라서 다중치환 암호방식으로 암호화된 암호문을 단일치환 암호 방식으로 암호화된 여러 개의 암호문으로 나눌 수만 있다면 이들을 개별적으로 해독함으로 써 전체를 해독할 수 있다. 다중치환 암호방식으로 암호화된 암호문을 단일치환 암호방식으 로 암호화된 암호문으로 나누기 위해서는 사용된 키 길이를 알아내야 한다. 다중치환 암호 방식의 암호문에서 키 길이는 두 가지 방법으로 예측이 가능하다. 하나는 Kasiski 방법이고, 다른 하나는 IC(Index of Coincidence) 방법이다. Kasiski 방법은 영문에서 높은 빈도로 등장하는 패턴을 이용하는 방법이다. 기본 원리는 길이가 인 키를 사용하여 메시지를 다중치환 암호방식으로 암호화할 때, 어떤 특정 단어 또는 문자 그룹이 평문에 번 등장하면 그것은 같은 문자로 거의 번 암호화된다는 것이 다. 이것은 길이가 인 키를 사용할 경우 특정 문자 그룹이 암호화될 수 있는 경우의 수는 이기 때문이다. 즉, “the”라는 단어 또는 문자그룹이 평문에 번 이상 등장하면 최소 두 번은 동일한 키로 암호화된다는 것이다. 따라서 암호문에서 반복하여 나타나는 길이가 3이 상인 영문 패턴을 찾아 그 위치를 기록하고, 나타난 위치 간에 공약수를 찾아 키의 길이를 결정할 수 있다. 예2.6) 암호문이 다음과 같다고 가정하자 vyclh kdccm ebcgy ebcgt qwqnl gnmgw pfrpi jrazx
tufpv vyccb qirwx urlxg vvkhy fvqrk cirxv tjhjl
mvpwt vscrt drbvn fztxw qigcm kscht wcygl vrqia
ujckx ovycb ajycw wrjla gcjtv rvphh gkmuf gicpk
trjsx pjsam jrazx qvvex vlyav pngia qiyal gxmdw
hzlxm nrrte twmgm tzktg wigdl cgygm vycgx rcsbx
kflhb agcdi jvedh vjuxm kkwdk ktsat cicvh tjycw
vlqtw nvqtx fxsnl jkfte uyctk tjcih qufpv drbee
vfztt okmab kucub kdgit rccpl hjixe mvpht wdcgl
efkee mvagt pvywt vzmcl wicia njycw puzpw
“vyc”와 “jycw"가 암호문에 등장한 횟수, 위치, 위치 간의 차이는 다음과 같다.
vyc 시작 위치
차이
jycw
약수 시작 위치
1
차이
약수
56
55
1,5,11
117
67
11
1,11
297
180
1,2,3,5
326
259
1,7,37
382
85
1,5,17
위 표에서 “vyc"의 경우에는 공통약수가 1이지만 키 길이가 1이 아닐 확률이 많기 때문에
한국기술교육대학교 컴퓨터공학부
- 5 -
김상진
제2장 고전암호알고리즘
“vyc” 중에 대응되는 평문이 다른 경우가 존재한다는 것을 의미한다. 반면에 “jycw”는 공통 약수에 5가 있으므로 키 길이가 5라고 예측할 수 있다. “vyc”의 경우에도 세 번째 위치가 우연히 나타난 것으로 생각하고 다시 약수를 구하면 키 길이가 5라고 예측된다. IC 방법은 단일치환 암호방식으로 암호화된 암호문에 등장하는 문자 빈도는 이것에 대응 되는 평문의 문자 빈도와 같다는 원리를 이용한 방법이다. 즉, 일반 영문에서 각 문자의 등 장 빈도에 따른 분포는 그림 2.1과 같다. 이것을 이동 암호방식을 이용한 단일치환 암호방 식으로 암호화하여 암호문의 문자 빈도 분포를 그리면 그림 2.1의 분포를 왼쪽 또는 오른쪽 으로 이동한 형태가 된다. 다중치환 암호방식에서 키 길이가 길어지면 길어질수록 평문에 등장하는 문자 빈도 분포와 암호문에 등장하는 문자 빈도 분포가 다르게 된다. 특히, 길이 가 길어지면 길어질수록 암호문의 등장하는 문자 빈도 분포는 균등 분포가 된다. 따라서 암 호문의 등장하는 문자 빈도 분포를 조사하여 키 길이가 어느 정도인지 예측할 수 있으며, 이것을 IC 방법이라 한다. Proba가 문자 ‘a’가 평문에 등장할 확률이면 P rob 이다. 모든 영문자가 동일한 확률로 등장하면 각 문자가 평문에 등장할 확률은 모두 0.0384가 된다. 현재 분포가 균등 분포와 얼마나 차이가 나는지 평가하기 위해서는 표준편차를 이용해야 한다. 즉, 다음 식을 이용하여 표준편차를 계산해야 한다. z
var
P rob
a
P r
이 값을 계산하기 위해서는 P rob 를 계산해야 하며, 이 값은
Freq Freq 으로 추정
할 수 있다. 여기서 Freq 는 문자 ‘a’가 암호문에 등장한 빈도이고, 은 암호문의 길이이 다. 이 때 IC는 다음과 같이 정의되며,
IC
Freq Freq
키 길이와 IC와의 관계는 표 2.4와 같다. <표 2.4> IC와 키 길이의 관계
키의 길이
1
2
3
4
5
10
>10
IC
.068
.052
.047
.044
.044
.041
.038
예2.7) 예2.5의 암호문에서 각 문자의 등장 빈도를 계산한 후에 IC값을 계산하면 IC = 0.440275이다. 따라서 Kasiski 방법을 통해 예측한 키 길이가 올바르다는 것을 알 수 있다. Kasiski 방법과 IC 방법을 이용하여 다중치환 암호방식으로 암호화된 암호문을 해독하는 방법은 다음과 같다. l 단계 1. Kasiski 방법을 이용하여 키 길이를 예측한다. l 단계 2. 예측한 키 길이의 올바름을 IC를 구하여 확인한다. l 단계 3. 암호문을 해독하기 위해 암호문을 키 길이만큼 나눈다.
한국기술교육대학교 컴퓨터공학부
- 6 -
김상진
제2장 고전암호알고리즘
l 단계 4. 나누어진 각 부분은 이동 암호방식으로 암호화되어 있다. 따라서 각 부분에서 각 문자의 등장 빈도를 계산한 다음에 가장 많이 등장한 문자를 e, t, a, o, n 순으로 매 핑하면서 키를 구한다.
2.4 XOR 연산을 이용한 암호알고리즘 XOR 연산은 ⊕ , ⊕ 라는 특성을 가지고 있다. 따라서 ⊕ ⊕ 이다. 이 원리를 이용한 다음과 같은 알고리즘을 통해 메시지를 암호화하고 복호화할 수 있다. l 암호화 알고리즘: ⊕ l 복호화 알고리즘: ⊕ 만약 키 길이가 평문보다 짧으면 다중치환처럼 반복적으로 키를 적용하여 암호화한다. 이 때 키 길이가 짧고 일반 영문을 이와 같은 방법으로 암호화할 경우에는 다중치환 암호방식 처럼 쉽게 해독할 수 있다. 이 해독 방법에서도 가장 중요한 것은 키 길이를 구하는 것이 다. 키 길이는 다중치환 암호방식처럼 Kasiski나 IC 방법을 사용할 수 있다. 키 길이가 결정 되면 암호문과 키의 길이만큼 이동한 암호문을 XOR한다. 이렇게 하면 평문 간에 XOR한 문자열을 얻을 수 있으며, 평문 간에 XOR한 문자열은 쉽게 해독할 수 있다. 그러나 키 길 이가 매우 길면 키 길이를 예측하기 어려워 이와 같은 해독 공격을 하기 어렵다. XOR를 이 용한 암호방식에서 동일한 키를 주기적으로 반복하여 암호화하지 않고 매번 평문과 같은 길 이의 다른 키를 사용하여 암호화하는 방식을 one-time pad 암호방식이라 한다. 이 암호방식 은 암호문 단독 공격에 대해서는 무조건적으로 안전하다는 것이 증명되어 있다. 하지만 무 한하고 랜덤한 키를 사용하기 때문에 이것을 공유하기가 어렵다는 단점을 가지고 있다.
2.5 혼돈과 확산 Shannon은 암호알고리즘 설계의 두 가지 기본 원칙인 혼돈(confusion)과 확산(diffusion) 이론을 제시하였다. 혼돈이란 평문과 암호문과의 상관관계를 숨기는 것을 말하며, 이를 통 해 암호문과 암호키 간에 관계를 알기 어렵게 만든다. 확산이란 평문의 통계적 특성을 암호 문 전반에 확산시켜 이를 숨기는 것을 말하며, 이를 통해 암호문과 평문 사이의 관계를 어 렵게 만든다. 단일치환은 혼돈 특성만 갖으며, 자리바꿈은 확산 특성만 갖는다. 따라서 Shannon은 혼돈과 확산 특성을 동시에 갖도록 치환과 자리바꿈을 결합하여 사용해야 한다 는 것을 제시하였으며, 안전성을 높이기 위해 연산들을 반복적으로 사용할 것을 제시하였 다. 이 이론은 오늘날까지 계속 적용되고 있다.
한국기술교육대학교 컴퓨터공학부
- 7 -
김상진
제2장 고전암호알고리즘
1
2
3
4
5
1
a
b
c
d
e
2
f
g
h
i/j
k
3
l
m
n
o
p
4
q
r
s
t
u
5
v
w
x
y
z
<그림 2.2> Polybious Square
Polybious는 Polybious square를 이용하는 단일치환 암호방식을 제안하였다. 예를 들어 그 림 2.2와 같은 Polybious square를 사용한다고 가정하자. 그러면 ‘a’ 문자는 11로 ‘b’ 문자는 12 등 문자를 그것의 행과 열 번호로 매핑하여 암호화한다. 따라서 “hello”를 그림 2.2의 square를 이용하여 암호화하면 “23 15 31 31 34”가 된다. 결과 암호문을 보면 이것의 대응 되는 평문은 “sunny”, “hobby”와 같이 셋 번째와 네 번째 문자가 같은 단어를 암호화한 것이 라고 알 수 있다. 이 처럼 치환은 평문의 통계적 특성이 그대로 나타난다. 만약 결과 암호 문에 추가적으로 자리바꿈 맵 (5, 3, 4, 1, 2)을 이용하여 한 번 더 암호화하면 “34 31 31 23 15”가 된다. 즉, 치환하였을 때 나타난 평문의 특성이 이제는 사라졌다. 참고문헌 [1] C. Shannon, "Communication Theory of Secrecy Systems," Bell Systems Journal, Vol. 28. pp. 659‒715, 1949.
한국기술교육대학교 컴퓨터공학부
- 8 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
제 3 장 대칭 암호알고리즘: 암호화 모드 3.1 암호화 모드 개요 대칭 암호알고리즘은 크게 블록(block) 암호방식과 스트림(stream) 암호방식으로 분류된다. 블록 암호방식은 메시지를 일정한 크기로 나누어 각 나누어진 부분을 동일하게 반복적으로 암호화하는 방식이다. 이 때 일정한 크기로 나누어진 메시지의 각 부분을 블록이라 한다. 스트림 암호방식은 한 번에 한 비트 또는 한 바이트를 암호화하는 방식이다. 2장에서 살펴 본 단순치환 암호방식은 한 문자 단위로 암호화하기 때문에 스트림 암호방식이고, 컴퓨터에 서 사용하는 자리바꿈 맵을 이용한 자리바꿈 암호방식은 어떤 블록 단위로 동일 맵을 반복 적으로 적용하기 때문에 블록 암호방식이다. 블록 암호방식은 항상 정해진 블록 크기의 입력만 받을 수 있으므로 블록크기보다 큰 메 시지를 암호화하는 방법이 필요하며, 블록보다 작은 메시지는 블록크기로 확장하는 방법도 필요하다. 암호화 모드(cryptographic mode)란 임의 크기의 메시지를 블록 암호방식으로 암 호화하는 방법을 말한다. 가장 기본적인 방법은 블록 단위로 메시지를 나누어 각 블록을 독 립적으로 암호화하는 것이다. 이 때 맨 마지막 블록이 블록 크기보다 작을 경우에는 채우기 (padding)이라는 방법을 이용하여 완전한 블록으로 만들어 주어야 한다. 이와 같은 방식으로 암호화하는 모드를 ECB(Electronic CodeBook) 모드라 한다. 이 모드를 사용하면 같은 평문 블록은 항상 같은 암호문 블록으로 암호화되기 때문에 복호화키 없이 암호문 블록으로부터 평문 블록을 유추할 수 있게 되는 문제점이 있다. 이 문제를 극복하기 위해 현재 널리 사용 되고 있는 암호화 모드들은 피드백(feedback)을 활용하고 있다. 여기서 피드백이란 한 평문 블록을 독립적으로 암호화하지 않고, 다른 블록이나 다른 블록의 암호화한 결과를 활용하는 것을 말한다. 한 블록을 암호화할 때 다른 것을 추가로 활용하더라도 기존 알고리즘 성능에 는 큰 영향을 주지 않아야 한다. 따라서 보통 XOR 연산을 이용하여 피드백한 내용을 적용 하고 있다. 스트림 암호방식은 블록 암호방식과 달리 이와 같은 암호화 모드가 필요 없다. 스트림 암 호방식은 각 바이트 또는 비트는 암호화될 때마다 보통 항상 다른 바이트 또는 비트로 암호 화된다. 물론 2장에서 살펴본 단일치환이나 다중치환 암호방식은 이와 같은 특성을 가지지 않거나 주기적으로 반복된다. 현대 스트림 암호방식도 실제 주기적으로 반복되지만 그 주기 가 매우 길어 문제가 되지 않는다.
3.2 ECB 모드 전자부호표(ECB) 모드는 앞서 언급한 바와 같이 평문 메시지를 블록 크기 단위로 나누어 각 블록을 독립적으로 암호화한다. 따라서 동일 평문 블록은 동일 암호문 블록으로 암호화 되는 문제점을 가지고 있다. ECB 암호화 모드는 다음과 같이 나타낼 수 있다. l 암호화: l 복호화:
한국기술교육대학교 컴퓨터공학부
- 1 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
여기서 는 번째 평문블록을 말한다. 암호화 모드의 특성을 논할 때 항상 다음 사항들을 분석한다. l 첫째, 암호화된 암호문에서 두 암호문 블록을 바꾼 경우에 복호화 결과 l 둘째, 암호화하기 전에 에 오류가 발생하였을 때 암호문 블록에 미치는 파급 효과 l 셋째, 암호화한 후에 에 오류가 발생하였을 때 복호화된 평문 블록에 미치는 파급 효 과 l 넷째, 암호화 모드 사용에 따른 추가 보안 문제의 유무 ECB 모드에 대해 위 네 가지에 대해 분석하여 보자. l 암호화된 암호문에서 두 암호문 블록을 바꾼 경우에 복호화한 결과: 그림 3.1처럼 암호 화된 메시지의 블록들의 위치를 바꾸면 복호화된 평문 블록 위치들도 동일하게 바꾸게 된다. 이것은 각 블록이 독립적으로 암호화되기 때문이다.
<그림 3.1> ECB 모드에서 두 암호블록을 바뀐 상태로 복호화한 경우
–
예) : 출금 계좌번호, : 입금 계좌번호, : 이체금액이라고 가정하자. 여기서 과 를 바꾸면 출금과 입금 계좌가 바뀌게 된다.
l 암호화하기 전에 에 오류가 발생한 경우: 각 평문 블록은 독립적으로 암호화되기 때문 에 한 평문 블록에 오류가 있는 상태로 암호화되어도 그것은 오직 해당 암호문 블록에만 영향을 준다. l 암호화한 후에 에 오류가 발생한 경우: 각 암호문 블록은 독립적으로 복호화되기 때문 에 한 암호문 블록에 오류가 발생한 상태로 복호화하면 그림 3.2처럼 그 블록의 복호화 에만 영향을 준다.
<그림 3.2> ECB 모드에서 한 암호문에 오류가 발생한 경우
ECB 모드는 특별한 피드백을 적용하지 않기 때문에 모드 사용에 따른 추가적인 보안 문 제는 없다. 다만. 피드백을 사용하지 않기 때문에 같은 평문 블록은 같은 암호문 블록으로 암호화된다는 문제점을 지니고 있다.
3.3 채우기 피드백을 사용하는 암호화 모드를 설명하기 전에 먼저 블록 암호방식에서 꼭 필요한 또 다른 요소인 채우기(padding)에 대해 알아볼 필요가 있다. 평문 메시지의 크기가 정확하게
한국기술교육대학교 컴퓨터공학부
- 2 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
블록 크기의 배수가 아닌 경우에는 완전하지 않은 마지막 블록을 완전한 블록으로 만들어 암호화하여야 한다. 완전하지 않은 마지막 블록 끝에 규칙적인 일련의 비트를 추가하여 완 전한 블록을 만드는 것을 채우기라 한다. 채우기의 한 가지 요구사항은 나중에 암호문을 복 호화한 사용자가 채우기를 한 부분을 정확하게 제외시킬 수 있어야 한다. 이를 위해 보통 두 가지 방법을 사용한다. 하나는 암호문과 별도로 평문의 길이를 따로 보내는 것이다. 다 른 하나는 채우기를 한 부분에 채운 부분을 제거할 수 있는 요소를 포함하는 것이다. 후자 의 방법은 채우기 끝에 채운 크기를 기록하거나 끝 표시 문자 등 다양한 방법이 사용된다. 후자의 방법 중에는 평문의 크기가 정확하게 블록 크기의 배수이어도 채우기를 해야 하는 경우가 있다. 이것은 원래 평문을 채우기로 생각하여 제거할 수 있기 때문이다. 블록 크기가 8바이트이고 마지막 평문 블록의 크기가 일 때 채우기 끝에 채운 크기를 기록하는 방법으로 채우기를 하는 방법은 다음과 같다. 그림 3.3부터 3.6에서 빈 원으로 표 시된 바이트는 원래 평문이고, 검은색으로 채워진 원으로 표시된 바이트는 채우기를 한 바 이트이다. l : 평문의 크기가 정확하게 블록 크기의 배수인 경우
<그림 3.3> 평문의 크기가 정확하게 블록 크기의 배수일 때 채운 크기를 기록하는 채우기 방법
l ≥ : 평문의 크기가 블록 크기의 배수가 아닌 경우
<그림 3.4> 평문의 크기가 블록 크기의 배수가 아닐 때 채운 크기를 기록하는 채우기 방법
PKCS #5, PKCS #7, RFC3369 표준에 제시된 채우기 방법은 그림 3.3과 그림 3.4에 제시 된 방법과 유사하다. 다만, 채워지는 바이트들을 마지막 블록에 기록한 크기와 동일한 값으 로 채운다. l : 평문의 크기가 정확하게 블록 크기의 배수인 경우
<그림 3.5> 평문의 크기가 정확하게 블록 크기의 배수일 때 표준에 제시된 채우기 방법
l ≥ : 평문의 크기가 블록 크기의 배수가 아닌 경우
한국기술교육대학교 컴퓨터공학부
- 3 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
<그림 3.6> 평문의 크기가 정확하게 블록 크기의 배수일 때 표준에 제시된 채우기 방법
이 외에도 다양한 채우기 방법이 있지만 모두 원래의 평문 크기보다 암호문의 크기가 커지 는 단점을 가지고 있다. 특히, 앞서 살펴본 두 방법은 평문의 크기가 블록의 크기의 정확한 배수이어도 채우기를 해야 하는 단점을 지니고 있다. 이와 같은 모든 문제를 해결할 수 있 는 방법이 암호문 훔침(ciphertext stealing) 기법이다. 암호문 훔침 기법은 바로 전 암호문 블록을 이용하여 채우기를 하는 방식으로 암호문의 크기가 평문의 크기와 같아진다는 장점을 지니고 있다. 암호문 훔침 기법에서 암호화와 복 호화는 그림 3.7과 같으며, 식으로 표현하면 다음과 같다. l 암호화: ′ ′ l 복호화: ′ ′ 암호문을 복호화해야 하는 사용자는 암호문의 크기가 블록의 배수가 아니면 끝에서 두 번째 암호문 블록을 복호화한 다음에 마지막 암호문 블록의 크기만큼을 으로 간주하고, 남은 부분을 마지막 블록과 결합하여 복호화하여 를 얻는다.
(ㄱ) 암호문 훔침 기법을 이용한 암호화 (ㄴ) 암호문 훔침 기법을 이용한 복호화 <그림 3.7> 암호문 훔침 기법
3.4 CBC 모드 암호블록연쇄(CBC, Cipher Block Chaining) 모드는 바로 전 암호문 블록 을 현재 평문 블 록을 암호화할 때 사용하는 모드이다. 따라서 같은 평문 블록들도 서로 다른 암호문 블록으 로 암호화된다. 그림 3.8에 기술된 CBC 모드를 식으로 표현하면 다음과 같다. l 암호화: ⊕ l 복호화: ⊕
한국기술교육대학교 컴퓨터공학부
- 4 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
평문을 암호화할 때 이전 암호문 블록을 이용하기 때문에 첫 평문 블록은 이용할 수 있는 암호문 블록이 없다. 따라서 랜덤 블록을 하나 생성하여 이를 이용한다. 복호화하는 측에서 도 첫 번째 평문 블록을 얻기 위해서는 사용된 랜덤 블록이 필요하다. 따라서 이 블록을 암 호문의 첫 블록을 사용하며, 이 블록을 초기화 벡터(IV, Initialization Vector)라 한다. 이 벡 터를 사용하므로 같은 메시지를 다시 암호화하여도 IV가 다르면 결과가 다르게 된다. 하지 만 초기 벡터가 공개된다고 하여 공격자들이 첫 평문 블록을 복호화할 수 있는 것은 아니므 로 비밀성을 유지할 필요는 없다. 하지만 IV가 사용되므로 암호문의 크기는 평문의 크기보 다 한 블록이 증가하게 된다. 또 채우기까지 고려할 경우 최대 두 블록이 커질 수 있다. 물 론 CBC 모드에서도 다음과 같이 암호문 훔침 기법을 활용할 수 있다.
(ㄱ) CBC 모드를 이용한 암호화
(ㄴ) CBC 모드를 이용한 복호화
<그림 3.8> CBC 모드
l CBC 모드에서 암호문 훔침 기법을 이용한 암호화:
⊕ ′ ⊕ ′ l CBC 모드에서 암호문 훔침 기법을 이용한 복호화:
⊕ ′ ′ ⊕ CBC를 이용한 암호화의 특성은 다음과 같다. l 암호화된 암호문에서 두 암호블록을 바꾼 경우에 복호화한 결과: 그림 3.9처럼 암호화된 메시지의 블록들의 위치를 바꾸면 3개의 평문 블록에 영향을 준다. CBC 모드에서는 한 블록에 오류가 발생하면 두 평문 블록에 영향을 주기 때문에 연속된 두 개 암호문 블록 에 오류가 발생한 것과 동일하므로 세 평문 블록에 영향을 준다.
<그림 3.9> CBC 모드에서 인접한 두 암호블록을 바뀐 상태로 복호화한 경우
한국기술교육대학교 컴퓨터공학부
- 5 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
l 암호화하기 전에 에 오류가 발생한 경우: 암호화하기 전에 에 오류가 발생하면 에 영향을 줄 뿐만 아니라 이후 모든 암호문 블록에 영향을 준다. 하지만 복호화하면 오직 에만 영향을 준다. 이것은 당연한 현상이다. 발생된 오류가 실제 오류가 아니라 원래 평문이 그와 같은 형태이었다고 생각하면 쉽게 이해할 수 있다. 여기서 우리가 주 목해야 할 것은 복호화하였을 때의 결과가 아니라 평문의 일부가 바뀌었을 때 그 평문 블록 이후 모든 암호문 블록이 변한다는 것이다. 따라서 CBC 모드로 암호화된 암호문 블록의 마지막 블록은 그 평문을 대표하는 블록으로 사용될 수 있다. 즉, 마지막 블록을 MAC 값으로 사용할 수 있다.
<그림 3.10> CBC 모드에서 암호화하기 전에 평문 블록에 오류가 있는 상태로 암호화된 경우
l 암호화한 후에 에 오류가 발생한 경우: 복호화하면 와 에만 영향을 준다. 에 오류가 발생하였다고 가정하고 이것을 수식으로 살펴보면 다음과 같다. –
′ ′ ⊕ ⊕
–
′ ⊕ ′ ⊕ ⊕ ′
–
′ ⊕ ⊕ ⊕
즉, 에 오류가 발생하면 와 복호화에 영향을 준다. 보다 자세히 살펴보면 에 발생되는 오류는 예측이 가능하지 않지만 는 예측이 가능한 오류가 발생한다. 특히
의 한 비트를 바꾸면 에 동일한 위치에 한 비트만 오류가 발생한다.
<그림 3.11> CBC 모드에서 한 암호문에 오류가 발생한 경우
l 보안 문제: CBC 모드를 사용할 때 추가되는 보안 문제는 크게 다음과 같은 네 가지가 있다. –
문제 1. 암호화된 메시지 끝에 임의의 블록을 추가할 수 있다. 예를 들어 그림 3.12 처럼 같은 키로 암호화된 암호블록을 추가하면 추가된 블록 중 첫 블록만 제대로 복 호화되지 않고 나머지는 모두 제대로 복호화된다. 또 같은 암호키로 암호화된 두 개 의 암호문을 그림 3.13과 같이 조합하면 합쳐진 위치를 제외하고는 모두 올바르게 복 호화된다.
<그림 3.12> CBC 모드에서 암호문 끝에 임의의 블록을 추가하여 새 암호문을 생성할 경우의 문제점
한국기술교육대학교 컴퓨터공학부
- 6 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
<그림 3.13> CBC 모드에서 두 개의 암호문을 조합하여 새 암호문을 생성할 경우의 문제점
–
문제 2. 암호문 블록을 변경하여 예측할 수 있는 변경을 도입할 수 있다. 즉, 의 한 비트를 변경하면 은 같은 위치의 비트만 변경된다. 물론 이 때 는 예측 가능 하지 않은 오류가 발생한다. 특히, 초기화 벡터의 특정 위치를 변경하면 의 같은 위치의 비트만 변경된다.
–
문제 3. 평문의 패턴은 CBC 모드를 통해 은닉되지만 영구적인 것은 아니다. 즉, 메시 지가 매우 길어질 경우에는 패턴이 다시 등장할 수 있다.
–
문제 4. 임의의 두 암호문 블록 와 가 같으면 다음이 성립한다.
⊕ ⊕
3.5 스트림 암호방식 스트림 암호방식은 평문의 비트 또는 바이트를 하나씩 암호화하는 방식이다. 스트림 암호 방식을 위해 전용 스트림 암호알고리즘을 개발할 수 있지만 일반 블록 암호알고리즘을 이용 하여 스트림 암호방식으로 암호화할 수 있다. 스트림 암호방식의 핵심 요소는 키 스트림 생 성기(key stream generator)이며, 암호화하는 사용자와 복호화하는 사용자는 동일한 키 스트 림 생성기를 가지고 있어야 한다. 이 생성기는 평문을 암호화/복호화하기 위해 필요한 비트 또는 바이트를 지속적으로 생성한다. 보통 그림 3.14와 같이 평문과 이 생성기에서 생성한 비트 또는 바이트를 XOR 연산하여 암호화한다. 따라서 이 방식의 안전성은 키 스트림 생성 기의 출력에 의해 결정된다.
<그림 3.14> 키 스트림 암호방식의 기본 구조
이와 같은 방식으로 암호화하므로 공격자가 평문과 그것에 해당하는 암호문을 얻으면 암 호화 과정에서 사용된 키 스트림을 얻을 수 있다. 또 같은 키 스트림으로 암호화된 두 개의 암호문을 가지고 있으면 이들을 서로 XOR하여 두 개의 평문을 XOR한 데이터를 얻을 수 있다. 따라서 키 스트림은 매번 다른 것을 사용해야 한다. 또 스트림 암호방식도 암호키를 사용한다. 암호키를 사용할 경우 생성되는 키 스트림은 암호키에 의해 결정된다. 따라서 키 스트림의 안전성이 떨어질 때 암호키만 바꾸면 새로운 안전한 키 스트림을 얻을 수 있다.
한국기술교육대학교 컴퓨터공학부
- 7 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
3.5.1 키 스트림 생성기
<그림 3.15> 키 스트림 생성기의 구성 요소
키 스트림 생성기는 그림 3.15에 기술된 것과 같이 보통 다음과 같은 세 가지 요소로 구 성된다. l 내부 상태(internal state): 키 스트림 생성기의 현재 상태 l 다음 상태 함수(next-state function): 내부 상태를 입력으로 받아 새로운 상태를 출력하여 주는 함수 l 출력 함수(output function): 키와 내부 상태를 입력으로 받아 키 스트림 바이트(비트)를 생성하여 주는 함수 3.5.2 자체 동기화 스트림 암호방식 키 스트림 생성기의 구성 요소 중에 다음 상태 함수는 외부 값에 의해 결정될 수 있다. 가장 대표적인 키 스트림 생성 방식인 자체 동기화 스트림 방식은 그림 3.16과 같이 출력되 는 키 스트림 바이트(비트)가 고정된 개수의 이전 암호문 바이트(비트)에 의해 결정된다. 이 와 같은 방식을 사용할 경우 암호문을 구성하는 한 바이트에 오류가 발생하더라도 그 바이 트가 더 이상 내부 상태에 영향을 주지 않는 상황이 되면 자동적으로 다시 암호화 측의 키 스트림과 복호화 측의 키 스트림이 동기화된다. 따라서 이 방식을 자체 동기화 스트림 암호 방식이라 한다.
<그림 3.16> 자체 동기화 스트림 암호방식
한국기술교육대학교 컴퓨터공학부
- 8 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
<그림 3.17> 블록방식의 암호알고리즘을 이용한 자체 동기화 스트림 암호방식
다시 말하면 내부 상태가 이전 암호문의 바이트에 의존하면 의미 없는 데이터를 바이 트 전송하여 상호 키 스트림을 다시 동기화할 수 있다. 같은 이유에서는 어떤 암호문 바이 트가 전달되는 과정에서 변경되었으면 총 평문 바이트에 영향을 준다. 자체 동기화 스트림 암호 방식은 전달되는 암호문의 일부를 보관한 후에 나중에 재전송하면 처음 동기화 하는 동안은 쓸모없는 데이터를 얻게 되지만 다음 상태 함수에 따라 정해진 수의 바이트가 지나면 올바르게 복호화되는 문제점이 있다. 일반 블록방식의 암호알고리즘을 키 스트림 생성기 내에 출력함수로 사용하면 블록 암호 방식을 스트림 암호방식으로 전환할 수 있다. 예를 들어 그림 3.17은 64비트 블록 암호방식 을 이용한 8비트 자체 동기화 스트림 암호방식을 보여주고 있다. 이와 같은 방식의 한 가지 문제점은 64비트 블록을 암호화하는데 총 8번의 64비트 블록 암호화를 수행한다는 것이다.
3.6 CFB 모드 암호피드백(CFB, Cipher Feedback) 모드는 앞서 살펴본 자체 동기화 스트림 암호방식을 이용하는 암호화 모드이다. 따라서 블록보다 작은 단위로 암호화가 가능하며, 복호화 연산 없이 암호화 연산과 XOR 연산만 사용한다. 즉, 복호화 모듈을 구현할 필요가 없어 구현이 효율적이다. CFB 모드를 수식으로 표현하면 다음과 같다. l 암호화: ⊕ l 복호화: ⊕ CFB 모드도 CBC 모드와 마찬가지로 초기 벡터가 필요하다. 하지만 CBC와 달리 동일한 IV 를 두 번 사용하면 다음과 같은 이유에서 심각한 보안 문제를 초래할 수 있다.
⊕ , ′ ′⊕ ⊕ ′ ⊕ ′ 즉, 동일한 IV를 사용하는 두 암호문의 첫 블록들을 XOR하면 두 평문 블록을 XOR한 값을
한국기술교육대학교 컴퓨터공학부
- 9 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
얻을 수 있다. 따라서 CFB 모드에서는 반드시 매 번 다른 IV를 사용해야 한다.
(ㄱ) CFB 모드를 이용한 암호화
(ㄴ) CFB 모드를 이용한 복호화
<그림 3.18> CFB 모드
CFB 모드를 사용할 경우에는 블록 크기보다 작은 크기로 암호화할 수 있으며, 이 때문에 채우기가 필요 없다. CFB 모드의 그 밖의 특성은 다음과 같다. l 암호화된 암호문에서 두 암호블록을 바꾼 경우에 복호화한 결과: 연속된 두 암호블록 바 꾼 경우에는 CBC 모드와 마찬가지로 세 블록 복호화에 영향을 주며, 연속되지 않은 두 암호블록 바꾼 경우에는 네 블록 복호화에 영향을 준다. l 암호화하기 전에 에 오류가 발생한 경우: CBC 마찬가지로 암호화하기 전에 에 오 류가 발생하면 에 영향을 줄 뿐만 아니라 이후 모든 암호문 블록에 영향을 준다. 따라서 CFB 모드로 암호화된 암호문의 마지막 블록도 MAC 값으로 사용할 수 있다.
<그림 3.19> CBC 모드에서 암호화하기 전에 평문 블록에 오류가 있는 상태로 암호화된 경우
l 암호화한 후에 에 오류가 발생한 경우: 복호화하면 와 에만 영향을 준다. 에 오류가 발생하였다고 가정하고 이것을 수식으로 살펴보면 다음과 같다. –
′ ′⊕ ⊕
–
′ ⊕ ′ ⊕ ⊕ ′
–
′ ⊕ ⊕ ⊕
즉, 에 오류가 발생하면 와 복호화에 영향을 준다. 보다 자세히 살펴보면 는 예측이 가능한 오류가 발생되며, 는 예측이 가능하지 않는 오류가 발생한다. 특히 의 한 비트를 바꾸면 에 동일한 위치에 한 비트만 오류가 발생한다.
한국기술교육대학교 컴퓨터공학부
- 10 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
3.7 OFB 모드 출력피드백(OFB, Output Feedback) 모드는 CFB 모드와 마찬가지로 암호화 연산만 사용 한다. 실제로는 꼭 암호화 연산을 사용할 필요는 없고, 암호화 연산 대신에 MAC을 사용할 수도 있다. OFB를 수식으로 표현하면 다음과 같다. l 암호화: ⊕ l 복호화: ⊕
(ㄱ) OFB 모드를 이용한 암호화
(ㄴ) OFB 모드를 이용한 복호화
<그림 3.20> OFB 모드
OFB 모드도 CFB 모드와 마찬가지로 블록 단위보다 작은 단위로 암호화할 수 있으므로 채 우기가 필요 없다. 이 방식에서도 초기 벡터가 필요하며, CFB와 마찬가지로 항상 다른 초 기 벡터를 사용해야 한다. CFB 방식에서는 동일한 초기 벡터를 사용하면 첫 블록에 대해서 는 두 평문 블록을 XOR한 값을 얻을 수 있었지만 OFB 방식에서는 동일한 초기 벡터를 사 용하면 모든 블록에 대해 두 평문 블록을 XOR한 값을 얻을 수 있다. 따라서 OFB 방식에서 는 동일한 초기 벡터를 사용하면 더 심각한 보안 문제를 야기 시킬 수 있다. OFB의 그 밖 의 특성은 다음과 같다. l 암호화된 암호문에서 두 암호문 블록을 바꾼 경우에 복호화 결과: 두 블록의 복호화에만 영향을 준다. l 암호화하기 전에 에 오류가 발생한 경우: 에 오류가 발생하면 에만 영향을 준다. 따라서 OFB 모드로 암호화된 암호문의 마지막 블록은 MAC 값으로 사용할 수 없다. l 암호화한 후에 에 오류가 발생한 경우: 복호화하면 에만 영향을 준다. 에 오류가 발생하였다고 가정하고 이것을 수식으로 살펴보면 다음과 같다. –
′ ′⊕ ⊕
–
′ ⊕ ⊕ ⊕
즉, 에 오류가 발생하면 에만 영향을 주며, 에는 예측이 가능한 오류가 발생한 다.
한국기술교육대학교 컴퓨터공학부
- 11 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
3.8 카운터 모드 이 모드는 최근에 많이 사용되는 모드로 CFB, OFB와 마찬가지로 암호화 연산만 사용한 다. 이 모드에서는 각 평문을 암호화할 때 OFB와 마찬가지로 평문과 독립적으로 생성된 랜 덤 블록과 XOR하여 암호화한다. 차이점은 OFB 모드에서는 한 블록에 사용된 랜덤 블록이 다음 랜덤 블록을 생성할 때 사용되는 반면에 카운터 모드에서는 카운터 값을 정해진 증가 함수를 이용하여 증가시켜 이것을 입력으로 사용하여 랜덤 블록을 생성한다. 즉, 를 계산 하는 방법을 제외하고는 동일하다. 카운터 모드를 수식으로 나타내면 다음과 같다. 여기서
는 해당 평문 블록을 암호화할 때 사용되는 카운터 값이다. l 암호화: ⊕ l 복호화: ⊕
(ㄱ) 카운터 모드를 이용한 암호화
(ㄴ) 카운터 모드를 이용한 복호화
<그림 3.21> 카운터 모드
앞서 언급한 바와 같이 를 계산하는 방법을 제외하고는 동일하다. 따라서 카운터 모드의 특성은 OFB 모드의 특성과 동일하다. 그러면 이 차이를 통해 얻을 수 있는 이득은 있는가? OFB의 경우에는 를 알아도 키를 모르면 를 계산할 수 없다. 하지만 카운터의 경우에 는 를 알면 를 계산할 수 있지만 마찬가지로 키를 모르면 나 를 계산할 수 없다. 즉, 안전성 측면에는 큰 차이가 없다. 다만, OFB는 각 들을 순차적으로 계산해야 하지만 카운터 모드에서는 각 들을 독립적으로 계산할 수 있다.
3.9 암호화 모드의 비교 다섯 가지 암호화 모드를 비교하면 표 3.1과 같다. ECB는 동일한 두 평문 블록은 항상 동일한 암호문 블록으로 암호화되는 문제점을 가지고 있지만 나머지 모드는 이것을 극복하 기 위해 사용되는 모드이다. ECB 모드의 경우에는 암호문 블록을 교체, 삽입, 삭제가 가능
한국기술교육대학교 컴퓨터공학부
- 12 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
하다. CBC 모드와 CFB 모드는 앞과 뒤에서 블록을 삭제할 수 있다. 반면에 OFB와 카운터 모드는 초기벡터가 없으면 복호화 과정을 수행할 수 없기 때문에 앞에서 블록을 삭제할 수 는 없다. 하지만 이 두 모드에서는 특정 암호문 블록을 조작하면 해당 평문에 영향을 준다. 이것은 에 한 비트를 조작하면 그것이 그대로 에 영향을 준다. CBC와 CFB의 경우에 도 를 조작하였을 때 또는 가 그대로 영향을 받지만 다른 한 평문 블록 전체가 엉뚱하게 복호화되므로 평문을 조작할 수 있는 정도가 다르다. <표 3.1> 암호화 모드의 비교
ECB
CBC
CFB
OFB
Counter
평문패턴의 은닉
×
○
○
○
○
평문의 조작
○
△
△
△
△
전처리 여부
×
×
△
○
○
ENC:(○)
ENC:(×)
ENC:(×)
ENC:(×)
ENC:(○)
DEC:(○)
DEC:(○)
DEC:(○)
DEC:(×)
DEC:(○)
전체
특정
특정
특정
○
○
병렬 수행 오류 확산
단일블록
블록보다 작은 단위의 암호화
×
특정 전체 ×
○
OFB와 카운터 모드에서는 값들을 미리 계산해 놓을 수 있다. CFB는 현 암호문 블록 을 보기 전에 이전 암호문 블록을 미리 복호화해 놓을 수 있다. 병렬 수행이란 여러 평문의 암호화나 여러 암호문의 복호화를 동시에 수행할 수 있는지 여부를 말한다. 특히 병렬 프로 세서를 사용할 수 있는 환경에서 병렬 수행이 가능하면 매우 효율적으로 암호화나 복호화를 수행할 수 있다. CBC 같은 경우에는 모든 암호문 블록을 수신한 다음에 이들을 병렬로 복 호화한 다음 XOR 연산을 통해 복호화를 수행할 수 있다. CFB도 모든 암호문 블록을 수신 한 다음에 이들을 병렬로 암호화한 다음 XOR 연산을 통해 복호화를 수행할 수 있다. OFB 에서 암호화 또는 복호화를 하기 위해서는 를 계산해야 한다. 하지만 는 순차적으로만 계산할 수 있어 병렬 수행이 가능하지 않다. 하지만 카운터 모드에서는 가 결정되면 나 머지 를 결정할 수 있고, 이 값이 결정되면 를 결정할 수 있다. 그러므로 카운터 모드 는 암호화와 복호화를 모두 병렬로 수행할 수 있다.
3.10 암호화 모드의 비교 이 장에서 소개한 다섯 가지 암호화 모드 중 가장 성능이 좋은 것은 ECB 모드이다. 하지 만 이 모드가 암호해독하기 가장 유리하다. 따라서 보통 일반 메시지들은 ECB 모드로 암호 화하지 않는다. 다만, 암호키와 같이 크기가 작은 랜덤한 값은 ECB로 암호화하여도 문제가 없다. ECB 대신 가장 많이 사용되는 암호화 모드는 CBC 모드이지만 최근에는 카운터 모드 를 많이 사용한다. 또 블록암호 알고리즘을 이용하여 스트림 암호방식으로 암호화하고 싶을 경우에는 보통 CFB 모드를 많이 사용한다.
한국기술교육대학교 컴퓨터공학부
- 13 -
김상진
제3장 대칭 암호알고리즘: 암호화 모드
연습문제 1. 다음 각 질문에 해당하는 암호화 모드를 나열하고, 그 이유를 설명하시오. ㄱ) 채우기가 필요 없는 암호화 모드 ㄴ) 암호화와 복호화를 모두 병렬로 수행할 수 있는 모드 ㄷ) 마지막 암호문 블록을 MAC으로 사용할 수 있는 모드
한국기술교육대학교 컴퓨터공학부
- 14 -
김상진
제 4 장 대칭 암호알고리즘: DES, SEED128
여기서 ⊕ , IP , IP 이다.
4.1 DES 4.1.1 DES 개요 대칭 암호알고리즘에 대한 표준의 필요성이 제기됨에 따라 1972년도에 미국 표준화 기구 인 NIST(National Institute of Standards)는 표준화 작업에 착수하여 그 결과로 1977년에 DES(Data Encryption Standard)를 표준으로 공식 채택하였다. DES는 IBM에서 제안한 Lucifer라는 암호알고리즘을 기반으로 하고 있다. NIST는 표준화 과정에서 Lucifer에 대해 NSA(National Security Agency)로부터 자문을 받았으며, 그 결과 원래 키 길이를 128비트에 서 56비트로 축소하였고, 내부 동작 메커니즘 중 일부를 교체하였다. 표준으로 채택된 DES 의 원래 유효기간은 10년이었지만 20년 동안 표준으로 사용되었다. 그 이유는 10년 후에도 DES가 표준으로 충분한 역할을 할 수 있다고 판단되었기 때문이다. 30년이 지난 현재 시점 에서도 DES 알고리즘 자체에 대한 큰 허점이나 문제점은 발견되지 않았다. 하지만 56비트 길이의 암호키를 사용하는 DES는 오늘날 컴퓨팅 기술로는 그 키 길이가 너무 짧다. 또한 DES는 하드웨어 구현을 고려하여 설계되었기 때문에 소프트웨어로 구현하기에는 효과적이 지 못하다. 따라서 1997년에 새 표준에 대한 작업이 시작되었으며 2000년 10월에 새 표준 이 채택되었다. DES는 블록방식의 대칭 암호알고리즘이며, 블록의 크기는 64비트이다. 앞서 언급한 바와 같이 키의 길이는 56비트이다. 하지만 보통 패러티 비트를 추가하여 64비트로 표현한다. 이 키는 총 16개의 길이가 48비트인 라운드키로 확장된다. 총 16라운드로 구성되며, 각 라운드 는 혼합 암호방식으로 구성되어 있고, 각 라운드마다 하나의 라운드키가 사용된다. 4.1.2 DES 암호화/복호화 함수 DES의 암호화 과정은 그림 4.1과 같다. 그림에 알 수 있듯이 64비트 평문은 초기 자리바 꿈(IP, Initial Permutation) 과정을 거친 후에 두 개의 32비트 블록 , 으로 나누어진다. 이들은 16라운드를 거치게 되며, 두 결과 블록은 다시 합쳐 최종 자리바꿈(FP, Final
<그림 4.1> DES의 암호화 과정
Permutation) 과정을 거쳐 암호문으로 변환된다. 여기서 초기 자리바꿈과 최종 자리바꿈은 서로 역 관계가 성립한다. 즉, 임의의 입력을 초기 자리바꿈을 한 다음에 다시 최종 자리바
초기 자리바꿈과 최종 자리바꿈은 서로 상쇄되는 연산이므로 암호학적으로 아무런 의미가
꿈을 하면 그 결과는 원 입력과 같아진다. 초기 자리바꿈과 최종 자리바꿈은 그림 4.2와 같
없다. 따라서 DES의 안전성은 각 라운드에서 사용되는 F 함수에 의존한다. F 함수의 내부
다. DES는 이미 설명한 바와 같이 총 16라운드를 통해 암호화한다. 이 때 주의할 것은 마
구성은 그림 4.3과 같다. F 함수는 입력으로 받은 32비트 블록을 확장 자리바꿈을 통해 48
지막 라운드는 그 결과가 이전 라운드와 달리 교차되지 않는다. 복호화 과정은 부분키의 사
비트로 확장한 다음 부분키와 XOR 연산을 한다. 그 다음 결과를 S-box 치환을 통해 32비
용 순서가 다르다는 것을 제외하고는 암호화 과정과 동일하다. 암호화 과정은 부분키 1부터
트로 축소하고, 이 결과를 다시 P-box 자리바꿈을 한다. DES에서 사용되는 대부분의 연산
16까지 차례로 사용하지만 복호화 과정에서는 반대 순서로 사용한다. DES 과정을 수학식처
은 역이 가능하다. 유일하게 역을 취할 수 없는 연산이 S-box 치환이다. 따라서 DES 안전
럼 표현하면 다음과 같다.
성에 매우 중요한 역할을 하는 것이 S-box이다. 확장 자리바꿈과 P-box 자리바꿈은 그림 4.4와 같다. 확장 자리바꿈의 경우에는 새로운 값을 이용하여 32비트를 48비트로 확장하는
것이 아니라 기존 비트들 중에 일부를 중복하여 확장을 하고 있다. 이와 같이 확장하는 이
유는 내부 연산의 적용이 빠르게 퍼지도록 하기 위함이다. 이와 같은 효과를 눈사태 효과
IP IP
IP
IP
(avalanche effect)라 한다. 따라서 매우 유사한 평문을 암호화하여도 그 결과는 매우 다르 다.
(ㄱ) 확장 자리바꿈
(ㄴ) P-Box 자리바꿈
<그림 4.4> 확장 자리바꿈과 P-Box 자리바꿈 (ㄱ) 초기 자리바꿈
(ㄴ) 최종 자리바꿈
<그림 4.2> 초기 자리바꿈과 최종 자리바꿈
<그림 4.5> S-box 1
DES에는 총 8개의 S-Box가 정의되어 있다. 각 S-box 치환은 6비트를 입력받아 4비트를 출력한다. 첫 번째 S-box은 그림 4.5와 같다. 그림에서 알 수 있듯이 각 S-box의 모든 행은 0부터 15까지 수로 구성되어 있다. S-box의 치환은 다음과 같은 방법으로 이루어진다. l 입력 6비트를 로 표현하였을 때 이중에 이 행 값이 되고, 가 열 값이 된다. 예를 들어 입력이 011011이면 행은 1(01)이고, 열은 13(1101)이 된다. 따라서 결과는 5(0101)가 된다. 이와 같은 방법을 사용하므로 출력 값이 5이면 그것의 입력은 011000, 011011, 111100, 110001 중 하나가 된다. 따라서 역을 취할 수 없다. S-Box의 동작과 자리바꿈만 보더라도 DES는 소프트웨어로 구현하는 것보다 하드웨어로 구현하는 것이 효과적이라는 것을 쉽게 알 수 있다. <그림 4.3> DES의 F 함수의 구성도
4.1.3 DES 키 스케줄링 DES는 이미 설명한 바와 같이 56비트를 사용한다. 하지만 8개의 패리티 비트를 추가하여 보통 64비트로 표현한다. DES의 56비트 키는 16개의 부분키로 확장되어 각 라운드에 사용 된다. 이 처럼 하나의 짧은 길이의 키로부터 각 라운드에 사용할 키를 생성하는 방법을 키
스케줄링 알고리즘이라 한다. DES의 키 스케줄링 알고리즘은 그림 4.6에 기술되어 있으며, 다음과 같다.
(ㄱ) 왼쪽 압축 자리바꿈 맵
(ㄴ) 오른쪽 압축 자리바꿈 맵
<그림 4.8> 키 자리바꿈
4.1.4 DES의 안전성 DES 내부에서 사용되는 연산은 크게 XOR, 자리바꿈, 순환이동, 치환 등이 있다. 이 중에 유일하게 선형이 아닌 것은 S-Box 치환 연산이다. 즉, 나머지 연산들은 그 역을 취할 수 있 을 뿐만 아니라 기지 평문 공격을 통해 키를 알아낼 수 있다. 따라서 S-Box가 DES의 안전 성에 가장 중요한 부분이다. NSA가 표준에 대한 자문 과정에서 원래 Lucifer가 사용하던 것 을 현재의 S-Box로 바꾸었다. 이와 같은 이유 때문에 NSA가 이 부분에 자신들만이 알고 있는 트랩도어를 숨겼을 것이라는 소문이 있으며, 거꾸로 NSA가 IBM을 믿지 못하였기 때 문에 변경하였을 것이라는 소문도 있다. 대칭 암호알고리즘에 대한 가장 강력한 해독 공격 중 하나가 차분 해독법(differential cryptoanalysis)이다. 그런데 Biham과 Shamir는 DES의 <그림 4.6> DES의 키 스케줄링 알고리즘
S-Box가 차분 해독법에 대해 강건하도록 설계되어 있음을 나중에 증명하였다. 이 증명이 공 개되자 IBM 개발자는 이미 개발할 당시부터 이 해독공격 방법을 알고 있었지만 공표하지
l 단계 1. 56비트 키를 그림 4.7에 기술된 키 자리바꿈 연산을 통해 두 개의 28비트 블록
않았다고 주장하였다. 이 처럼 표준으로 채택 된지 30년이 지난 오늘날까지 DES에 대한 어떤 허점도 알려지지
으로 나눈다. l 단계 2. 두 개의 블록은 각 라운드마다 독립적으로 1비트 또는 2비트 왼쪽 순환이동을
않고 있다. 하지만 DES의 키 길이는 56비트밖에 되지 않으며, 오늘날 컴퓨팅 능력은 DES
한다. 정확하게 말하면 1, 2, 9, 16번째 라운드 키를 생성할 때를 제외하고는 모두 2비트
가 표준으로 채택된 1977년과는 비교되지 않는다. 1977년 당시 Diffie와 Hellman은
이동을 한다.
$20,000,000이면 하루만에 DES 키를 찾아내는 특수 하드웨어를 제작할 수 있음을 보였다.
l 단계 3. 각 28비트 블록은 그림 4.8에 기술된 압축 자리바꿈을 통해 24비트 블록이 되 며, 두 개의 24비트 블록이 결합되어 48비트 라운드 키가 생성된다. l 단계 4. 단계 2부터 3을 16번 수행하여 각 라운드 키를 생성한다.
비용에서 알 수 있듯이 현실적인 보안 문제로 보기 어렵다. 하지만 1993년에 Weiner는 $100,000이면 하루 반 만에 DES 키를 찾아내는 특수 하드웨어를 제작할 수 있음을 보였다. 따라서 DES 알고리즘을 그대로 활용하면서 DES의 키 길이를 확장하는 방안이 필요하게 되었다. 이에 제안된 것이 3중 DES(Triple DES)이다. 56
앞서 언급한 바와 같이 DES에는 큰 허점이 없지만 DES에서 사용 가능한 2 개의 키 중 에 일부를 사용할 경우에는 안전성을 보장할 수 없다. DES는 16개의 라운드 키를 사용하는 데 이들이 모두 다를 경우가 가장 바람직하다. 반대로 이들이 모두 같은 경우가 발생할 수 있는데 이 경우에는 안전성에 치명적인 문제를 야기할 수 있다. 표 4.1에 제시된 4개의 키 를 사용하면 라운드 키가 모두 같아지는 경우가 발생한다. (ㄱ) 왼쪽 키 자리바꿈 맵
(ㄴ) 오른쪽 키 자리바꿈 맵
<그림 4.7> 키 자리바꿈
<표 4.1> DES의 약한 키
약한 키(홀수 패리티 사용) 01 01 01 01 01 01 01 01 01
실제 키 (키 자리바꿈 후) 00 00 00 00 00 00 00
FE FE FE FE FE FE FE FE
FF FF FF FF FF FF FF
1F 1F 1F 1F 0E 0E 0E 0E
00 00 00 0F FF FF FF
E0 E0 E0 E0 F1 F1 F1 F1
FF FF FF F0 00 00 00
를 생성한다. 블록 암호방식은 그림 4.9처럼 라운드 함수를 반복적으로 적용하는 방법에 따 이들을 키로 사용하면 평문을 암호화한 결과가 평문 자체인 경우가 발생할 수 있다. 이들을
라 크게 SPN(Substitution-Permutation Network)과 Feistel 구조로 분류된다. DES는 Feistel
약한 키(weak key)라 한다. 이 외에 12개의 중간 약한 키(semiweak key)들이 있다. 이들을
구조에 속한다. 특히, DES의 복호화 과정에서 암호문이 평문으로 바뀌는 과정을 면밀히 관
사용하면 두 종류의 라운드 키만 사용하게 되며, 이들 키를 사용할 경우에 평문을 암호화한
찰하면 복호화 과정에서 암호화 과정에 계산된 F함수의 값들과 동일한 값들을 만들어 XOR
결과가 평문 자체의 보수가 될 수 있다. 또 4개의 라운드 키들만 사용하게 되는 48개의 키
연산을 통해 상쇄시키고 있다는 것을 알 수 있다. 즉, F함수가 어떤 모습을 하던지 Feistel
가 존재한다. 따라서 이 문제를 극복하기 위해 DES 키를 생성할 때 임의로 생성된 키가 이
구조는 역 변환이 가능하다.
들에 속하는지 검사할 수 있다. 하지만 여기서 주목해야 할 것은 가능한 256개의 키 중에 64개만 문제가 되므로 이것이 큰 문제가 된다고 할 수는 없다. DES의 보안성을 위협하는 또 한 가지 특성은 보수 특성(complementation property)이다. 보수 특성이란 DES에서 다음이 성립한다는 것을 말한다.
즉, 어떤 평문 를 키 로 암호화한 결과가 일 때, 평문을 보수하고 키를 보수하여 암호 화하면 그 결과는 의 보수가 된다. 이것의 의미는 256개의 키 대신에 255개의 키만 검사하 면 키를 찾을 수 있다는 것을 의미한다. 그 이유는 다음과 같이 설명할 수 있다. l 어떤 사용자가 키 를 사용한다고 가정하고, 이 사용자가 이 키로 암호화한 평문과 암 두 개를 공격자가 가지고 있다고 가정하자. 호문 쌍
l 이 경우 공격자는 하나의 키 ′을 검사하면 ′과 ′ 가 사용자의 키인지 동시에 다음 과 같이 확인할 수 있다. – 우선 추측한 키 ′를 이용하여 를 암호화한다. 그 결과가 ′ 라 하자. – 이 때 이면 ′ 가 된다. – 만약 이면 다음과 같은 이유 때문에 ′ 가 된다. ′ 이므로 보수 특성에 의해 이다. 그런데 이고 이므로 ′ 이다. ′ 이 처럼 DES의 보수 특성은 DES의 안전성에 영향을 준다. 하지만 DES는 군이 아니다. 만약 DES가 군 특성을 가지고 있으면 삼중/이중 DES는 그 효과를 기대하기 어렵다. DES
(ㄱ) SPN
(ㄴ) Feistal <그림 4.9> 블록 암호방식의 구조
4.3 대칭 암호알고리즘에 대한 공격
는 군과 관련하여 다음 두 가지 특성을 가지고 있다. 대칭 암호알고리즘에 대해 지금까지 알려진 가장 강력한 공격 방법들은 차분 해독법과 선 l ∃ st : 평문 를 두 개의 다른 키로 연속하여 암호화한 결과 와 동일 효과를 가져다주는 단일 암호화는 없다. l ∃ st : 평문 를 세 개의 다른 키로 연속하여 암호화한 결과와 동일 효과를 가져다주는 단일 암호화는 없다.
4.2 블록 암호알고리즘의 구조
형 해독법(linear cryptoanalysis)이다. 차분 해독법은 두 개의 평문의 XOR 값과 대응되는 두 개의 암호문의 XOR 값을 비교하여 공격하는 방법이며, 선형 해독법은 평문에 있는 비트들 의 선형 관계와 마지막 S-box의 입력 비트들의 선형 관계를 통해 공격하는 방법이다.
4.4 DES의 확장 앞서 언급한 바와 같이 DES의 가장 큰 문제는 키 길이가 짧아 오늘날 컴퓨팅 능력으로 는 쉽게 전사공격을 할 수 있다는 것이다. 이를 극복하기 위해 DES를 확장하는 방법에 대
블록 암호방식은 앞서 살펴본 DES처럼 단순 연산들을 구성된 단순한 함수를 반복적으로 적용하여 암호학적으로 강한 함수를 만드는 과정으로 개발된다. 반복되는 함수를 라운드 함 수라 하고, 이 함수에서 사용되는 암호키를 라운드 키라 한다. 라운드 키는 서로 독립적인 것이 바람직하지만 키 길이가 너무 길어져 보통 하나의 짧은 암호키를 확장하여 라운드 키
해 연구되었다. 이 절에서 DES의 확장인 이중 DES와 삼중 DES를 살펴본다.
4.4.1 이중 DES 이중 DES는 하나의 평문을 암호화할 때 다음과 같이 서로 다른 두 개의 키로 두 번 암 호화하는 것이다. l 암호화: l 복호화: 앞서 언급한 바와 같이 DES는 군 성질을 가지고 있지 않으므로 이 처럼 암호화하면 키의 길이를 56비트에서 112비트로 확장이 가능하다고 생각할 수 있다. 하지만 다음과 같은 중
<그림 4.10> Merkle과 Hellman의 삼중 DES에 대한 선택 평문 공격
간만남 공격(meet-in-the-middle attack) 때문에 안전성이 단일 DES와 별 차이가 없다. 이중 DES에 대한 중간 만남 공격은 와 같다는 특성을 이용한 공격이다. 즉, 기지 평문 쌍 를 가지고 있는 공격자는 를 우선 가능한 모든 키로 암호화하여 목록을 만들고, 를 가능한 모든 키로 복호화하여 또 다른 목록을 만든다. 두 목록을 비교 하여 일치하는 쌍을 찾으면 그 때 사용된 두 개의 키가 후보 키가 될 수 있다. 공격자가 하 나의 기지 평문 쌍만 가지고 있을 경우에는 248개는 엉뚱한 후보를 만날 수 있다. 이것은 112
한 암호문을 생성할 때 사용될 가능한 키의 개수가 2
64
이지만 가능한 암호문의 수는 2 이
48
므로 2 개의 키는 한 평문을 동일한 암호문으로 암호화될 수 있다. 하지만 공격자가 기지 평문 쌍을 두 개만 가지고 있으면 가능한 암호문의 수가 2128로 증가하므로 서로 다른 두 -16
개의 키를 이용하여 평문을 암호화하였을 때 결과 암호문이 같을 확률은 2 이다. 따라서 58
두 개의 기지 평문 쌍만 있으면 2 의 노력으로 정확하게 찾을 수 있다.
Merkle과 Hellman은 복잡도가 O(257)인 삼중 DES에 대한 선택 평문 공격을 발견하였다. 그러나 이 공격은 256개의 선택 평문/암호문 쌍이 필요하므로 현실성이 있는 공격이 아니다. 이 공격의 원리는 그림 4.10에 기술되어 있으며, 다음과 같다. l 단계 1. 모든 비트가 0인 64비트 블록을 만들어 이것을 으로 암호화된 암호문이라고 가정한다. 여기서 이 블록의 비트 값은 꼭 모두 0일 필요는 없다. 이 블록을 가능한 모 든 키로 복호화하여 평문 목록을 만든다, 이 목록은 평문을 으로 암호화하고 로 복 호화한 목록으로도 활용한다. l 단계 2. 공격자는 만들어진 평문 목록에 대한 선택 평문 공격을 할 수 있다고 가정한다. 즉, 이 평문 목록에 대응되는 삼중 DES의 암호문 목록을 공격자가 얻을 수 있다고 가정 한다. l 단계 3. 삼중 DES의 선택 평문 암호문 목록을 대응되는 평문을 얻을 때 사용된 키로 복
4.4.2 삼중 DES
호화한다.
앞 절에 살펴본 바와 같이 이중 DES는 중간 만남 공격 때문에 기대했던 O(2112)의 안전
l 단계 4. 단계 3에서 복호화하여 얻은 목록과 평문 목록을 비교하여 일치된 값을 찾는다.
58
성 대신에 단일 DES와 별 차이가 없는 O(2 )의 안전성만 제공한다. 따라서 이를 극복하기 위해 삼중 DES가 제안되었다. 삼중 DES는 DES를 세 번 사용하지만 세 개의 다른 키 대신 에 두 개의 키만 다음과 같이 사용한다. l 암호화: l 복호화:
단계 1의 비용은 256이며, 단계 4의 비용도 역시 256이다. 따라서 총 비용은 257이다. 이 공 격은 앞서 언급한 바와 같이 256개의 선택 평문이 필요하므로 현실성이 없다. Oorshot와 Wiener는 선택 평문 공격 대신에 기지 평문 공격이 가능하다는 것을 보였다. Merkle과 Hellman은 삼중 DES 암호화 과정의 중간 값을 고정한 상태에서 출발하므로 선택 평문 공격을 해야 하였다. 따라서 Oorshot와 Wiener는 이것을 기지 평문 공격으로 바꾸기 위해 그림 4.11처럼 중간 값을 고정하지 않는다. 대신 추측을 한 다음에 가능한 모든 키로 복호화하여 가지고 있는 기지 평문과 비교하여 일치하는 것을 찾으면 Merkle과 Hellman 방
위 식을 알 수 있듯이 세 번 연속해서 암호화를 하지 않고 중간에 복호화 연산을 사용한다.
법과 동일한 방법으로 공격할 수 있다. 그러면 추측하여 성공할 확률이 어떻게 되는지 살펴
이것은 두 개의 키가 같을 경우에는 단일 DES와 같아지기 때문에 호환성을 위해 이와 같
보자. 하나의 기지 평문 쌍이 있을 때 올바른 중간 값을 선택할 확률은 1/2 이다. 따라서
64
이 정의되었다. 이와 같은 형태로 암호화하면 이중 DES와 달리 중간 만남 공격이 가능하지
개의 쌍이 있으면 성공할 확률은 이다. 그러므로 성공하기 위해서는 대략 번 시
않다.
도를 해야 한다. 따라서 이 공격의 비용은 대략 × 이며, 기지 평문 쌍이 많을수
록 비용이 줄어든다. 하지만 여전히 많은 기지 평문 쌍이 필요하므로 삼중 DES의 사용이 문제가 될 정도의 현실성이 있는 공격은 아니다.
Oorshot와 Wiener의 삼중 DES에 대한 기지 평문 공격
<그림 4.11>
삼중 DES에 암호화 모드 적용하는 방법은 크게 두 종류가 있다. 하나는 삼중 DES를 하 나의 암호화 함수로 보고 암호화 모드를 적용하는 것이고, 다른 하나는 세 번의 DES 암호 화마다 암호화 모드를 적용하는 것이다. 전자를 외부 암호화 모드 방법이라 하고, 후자를 내부 암호화 모드 방법이라 한다. 외부 방법은 하나의 초기벡터만 필요하지만 내부 방법은 3개의 초기벡터가 필요하다. 따라서 결과 암호문이 3블록이나 커진다. 만약 하드웨어로 삼 중 DES를 구현하고, 3개의 DES 칩을 사용한다면 내부 방법은 각 칩을 병행 수행하여 빠르 게 암호화할 수 있지만 외부 방법은 순차적으로 사용할 수밖에 없다. 하지만 안전성은 오히 려 외부 방법이 더 안전하다고 알려져 있다. 참고문헌 [1] Data Encryption Standard (DES), Federal Information Processing Standards Publication 46, Reaffirmed, Oct. 1999. [2] W. Tuchmann, "Hellman Presents No Shortcut Solutions to DES," IEEE Spectrum, Vol. 16, No. 7, pp. 40‒41, 1979. [3] R.C.
Merkle
and
M.
Hellman,
"On
the
Security
of
Multiple
Encryption,"
Communications of the ACM, Vol. 24, No. 7, pp. 465‒467, 1981. [4] P.C. van Oorshot and M.J. Wiener, "A Known-Plaintext Attack on Two-key Triple Encryption," Advances in Cryptology, Eurocrypt 1990, LNCS Vol. 473, pp. 318‒325, 1991. 연습문제 을 증명하시오. 1. DES의 보수 특성 2. DES의 암호화와 복호화가 올바르게 동작한다는 것을 증명하시오. 즉, 이 성립함을 증명하시오.
제 5 장 암호수학 공개키 암호알고리즘은 주로 정수를 이용한 수학연산을 통해 구현된다. 실수보다는 정수 를 이용한 연산이 효율적이며, 컴퓨터로 표현함에 있어서도 정수가 유리하다. 정수 연산의 경우에는 오버플로우 문제를 해결해야 하므로 암호알고리즘에서는 특정 법에서 정수 연산을 사용한다. 특정 법에서 정수 연산은 군(group), 환(ring), 체(field)라는 새로운 체제를 만들게 된다. 따라서 공개키 암호알고리즘의 원리를 이해하기 위해서는 정수론과 응용대수학에 대 한 이해가 선행되어야 한다. 일반적으로 대칭 암호알고리즘에서는 XOR, 순환, 치환과 같은 비트 기반 연산을 이용하였지만 최근에 차세대 미국 대칭 암호알고리즘 표준으로 제정된 AES(Advanced Encryption Standard)에서는 이와 같은 비트 연산 대신에 수학연산을 사용하 고 있다. 따라서 공개키 암호알고리즘 뿐만 아니라 대칭 암호알고리즘에서도 정수론, 응용 대수학에 대한 이해가 필요하다.
5.1 정수론 5.1.1 표기법 이 장에서는 표 5.1과 같은 표기법을 사용하여 서술한다. <표 5.1> 표기법
표기
의미
ℤ
정수 집합
ℤ
양의 정수 집합
ℤ
이 양의 정수일 때 0부터 까지의 정수 집합
ℤ
ℤ 의 원소 중 과 서로 소(relatively prime, coprime)인 원소들의 집합
gcm
양의 정수 와 의 최대공약수
lcm
양의 정수 와 의 최소공배수
정수 는 정수 의 약수
대문자
집합
소문자
원소
예를 들어 ℤ 이며, ℤ 이다. 5.1.2 기초 정수론에서 가장 기본이 되는 정리 중 하나가 다음의 나눗셈 정리이다. 어떤 정수를 또 다른 정수로 나누었을 때 그 몫과 나머지는 유일하다는 것이다.
정리 5.1 (나눗셈 정리) 정수 와 양의 정수 가 주어졌을 때 다음을 만족하는 유일한 정수 와 이 존재한다. ≤ 여가서 를 몫(quotient), 를 나머지(remainder, residue)라 한다. 위 정리에서 나머지가 0일 때 는 의 약수(divisor)라 하며, 가 동시에 와 의 약수이면 는 와 의 공약수(common divisor)라 한다. 공약수 중에 가장 큰 수를 최대공약수(gcd, Greatest Common Divisor)라 하며, 다음과 같이 정의된다. 정의 5.1 (최대공약수) 양의 정수 가 와 의 최대공약수가 되기 위한 조건은 다음과 같 다. l 조건 1. (공약수) , l 조건 2. (최대공약수) 모든 에 대해 이고 이면 이어야 한다. Bezout는 최대공약수와 관련 다음과 같은 정리를 정의하고 있다. 정리 5.2 (Bezout의 identity) 동시에 0이 아닌 두 정수 와 에 대해서 gcd 를 만족하는 정수 와 가 존재한다. 이와 관련하여 gcd 일 때, 어떤 정수 가 로 표현되기 위한 필요충분조건 은 이다. 또 gcd 이면 정수 와 를 서로 소라 한다. 최대공약수를 계산하는 가 장 유명한 알고리즘은 유클리드(Euclid) 알고리즘이다. 이 알고리즘은 다음 정리를 이용한다. 정리 5.3 (유클리드 알고리즘) 이면 gcd gcd이다. 즉, 두 수의 최대공약수를 구할 때 가장 큰 수 대신에 다른 작은 수를 이용하여 계산할 수 있으며, 이것을 반복하여 보다 작은 수들을 이용하여 최대공약수를 구할 수 있다. 정수 중에 다른 수들과 구별되는 소수(prime)라는 수들이 있다. 소수는 1과 자신만을 약수로 가지는 수이다. 유클리드는 소수가 무수히 많이 존재한다는 것을 증명하였으며, 나눗셈 특 성 때문에 이 합성수(소수가 아닌 수)이면 은 보다 작은 소인수를 가진다. 또 모든 정수는 소수를 이용하여 독특하게 표현할 수 있다. 이것과 관련된 정리는 다음과 같다. 정리 5.4 (정수론의 기본정리) 모든 정수 은 소수의 곱으로 표현되며, 소수의 순서를 무시하면 그 표현은 유일하다.
여기서 는 소수이다.
5.1.3 합동식 일반 정수 연산을 암호알고리즘에서 사용하면 정수 값의 크기가 계속 커질 수 있다. 따라 서 특정한 범위로 연산의 결과를 한정하고 싶으면 법(modular) 연산을 사용할 수 있으며, 법 연산과 관련된 것이 합동식이다. 합동은 어떤 기저가 되는 수에 국한된 것으로서, 두 수 가 합동(congruent)하다는 것은 다음과 같이 정의한다. 정의 5.2 (합동) 두 정수 와 가 법 에서 합동이기 위해서는 이어야 하며, 다음 과 같이 표기한다. ≡ mod 예를 들어 2 ≡ 7 (mod 5)이다. 합동은 다르게 표현하면 두 수를 정해진 법으로 나누었을 때 나머지가 같다는 것을 의미한다. 법 ≥ 에서 모든 정수는 ℤ 중 하나의 수를 표기할 수 있으며, ℤ 를 법 의 최소 양 의 잉여(least non-negative residue)라 한다. 다시 말하면 정수 ≤ 에 대해 모든 양의 정수 는 ≡ mod 를 만족하는 가 존재하며, 이 때 는 법 에서 의 최소 양의 잉 여라 한다. 최소 양의 잉여 대신에 특정 법의 모든 원소를 최소 절대 잉여로 나타낼 수 있 다. 이 홀수이면 ± ± ± , 이 짝수이면 ± ± ± 가 최고 절대 잉여들이다. 예를 들어 5의 최소 양의 잉여 집합은 {0, 1, 2, 3, 4}이고, 5의 최소 절대 잉여 집합은 {–2, –1, 0, 1, 2}이다.
법 5에서 3은 –2와 같은 수이다. 이것은
≡ mod 식을 보면 쉽게 이해할 수 있다. 각 잉여류를 대표하는 정수를 정 확하게 하나만 포함하는 정수의 집합을 법 에 관한 완전잉여계(complete set of residues modulo )라 한다. 하지만 보통 최소 양의 잉여계나 최소 절대 잉여계를 많이 사용한다. 최 소 양의 잉여계는 다른 말로 표준 잉여계(standard residue system)이라 한다. ≡ mod 이면 를 법 에서 의 곱셈에 대한 역원(multiplicative inverse)이라 한다. 예를 들어 법 5에서 2의 곱셈에 대한 역원 3이다. 정수 가 법 에서 곱셈에 대한 역원을 가지기 위한 필요충분조건은 gcd 이다. 법 연산을 할 때 곱셈에 대한 역원을 가지 는 원소들이 매우 유용하게 사용된다. 따라서 법 에서 역원을 가지는 잉여를 대표하는 정 수를 정확하게 하나만 포함하는 정수의 집합을 기약잉여계라 한다. 예를 들어 법 10의 표준 기약잉여계는 {1,3,7,9}이다. 즉, 법 의 표준 기약잉여계는 ℤ 로 표기된다. 합동식을 간소화하고 여러 합동식을 하나의 합동식으로 결합할 때 사용할 수 있는 원리는 다음과 같다. l , , 와 이 정수일 때, gcd 이고 ≡ mod 이면 ≡ mod 이다. l 와
는
정수이고,
는
양의
정수라
하자.
또한
≤ ≠ ≤ 에
대해
gcd 라 하자. 이 때 ≡ mod , ≡ mod , ..., ≡ mod 이면 ≡ mod 이다. 예를 들어
≡ mod 을
· · ≡ · mod 로 다시 표현할 수 있다. 즉,
≡ mod 은 ≡ mod 로 바꿀 수 있다. 여기서 중요한 것은 양변에서 제거된
수가 법과 서로 소이어야 한다. ≡ mod 이면 ≡ mod 가 성립하지 않는다. 일 차합동식은 이와 같은 방법으로 해를 찾을 수 있다. 연립합동식의 경우에는 다음과 같은 중국인 나머지 정리를 이용하여 해를 찾을 수 있다. 정리 5.4 (중국인의 나머지 정리) , ..., 은 양의 정수라 하자. 단, ≤ ≠ ≤ 에 대해 gcd 이다. 이 때 연립합동식 ≡ mod ≡ mod ⋮ ⋮ ⋮ ≡ mod 은 ⋯ 을
법으로
유일한
해를
갖는다.
중국인 나머지 정리에 정의된 유일한 해는 다음과 같이 계산할 수 있다. ⋯ 여기서 이고 는 법 에서 의 곱셈에 대한 역원이다. 합동식들의 해를 구하기 위해서는 법 에서 어떤 수의 곱셈에 대한 역원을 구해야 한다. 곱셉에 대한 역원은 확장 유클리드 알고리즘을 통해 구할 수 있다. 유클리드 알고리즘은 최 대공약수를 구하는 알고리즘이지만 확장 유클리드 알고리즘은 최대공약수뿐만 아니라 곱셈 에 대한 역원도 구할 수 있다. 물론 법 에서 정수 의 곱셈에 대한 역원을 구하기 위해서 는 gcd 이어야 한다. 따라서 확장 유클리드 알고리즘을 이용할 경우 계산된 최대공 약수는 1이 된다. 확장 유클리드 알고리즘은 표 5.2처럼 진행된다. <표 5.2> 확장 유클리드 알고리즘
0
1759
1
0
1
3
550
0
1
2
5
109
1
-3
3
21
5
-5
16
4
1
4
106
-339
1
-111
355
5
즉, 법 에서 의 곱셈에 대한 역원을 구하고 싶으면 다음과 같이 진행한 다. l 단계 1. , , , , , 을 설정한다. l 단계 2. , , 를 차례로 계산한다. l 단계 3. 이면 가 법 에서 정수 의 곱셈에 대한 역원이 된다.
이와 같은 과정을 통해 법 에서 정수 의 곱셈에 대한 역원을 찾을 수 있는 이유는 다음 과 같다. 유클리드 알고리즘에 의해 이면 gcd gcd 이다. 따라서 이 방법 을 이용하여 최대공약수를 구하면 다음과 같다. 1759 = 550 × 3 + 109
gcd(1759, 550) =
550 = 109 × 5 + 5
gcd(550, 109) =
109 = 5 × 21 + 4
gcd(109, 5) =
5 = 4 × 1 + 1
gcd(5, 4) = 1
이것을 다시 거꾸로 다음과 같이 표현할 수 있다. 1 = 5 ‒ 4 × 1 = 5 ‒ (109 ‒ 5 × 21) = ‒109 + 5 × 22 = ‒109 + (550 ‒ 109 × 5) × 22 = 550 × 22 ‒ 109 × 111 = 550 × 22 ‒ (1759 ‒ 550 × 3) × 111 = 550 × 355 ‒ 1759 × 111 즉, · ≡ mod 이다. 합동식 중에 암호기술에 많이 사용되는 특수한 합동식들이 있다. 그 중에 가장 핵심이 되 는 합동식이 페르마의 작은 정리와 오일러 정리에 정의된 합동식이다. 페르마의 작은 정리 는 다음과 같다. 정리 5.5 (페르마의 작은 정리) 가 소수이고 gcd 이면 ≡ mod 이다. 페르마의 정리는 소수가 법일 때 사용할 수 있는 합동식이다. 합성수가 법일 때에는 페르마 의 정리와 유사한 오일러 정리를 사용할 수 있다. 오일러 정리에서는 오일러 함수(Euler function)를 사용하는데 이 함수는 다음과 같이 정의되며, 정의 5.3 (오일러 함수) 이 양의 정수일 때 오일러 함수는 보다 작은 양의 정수 중 가 서로 소인 정수의 개수로 정의된다. 즉, 다음과 같다. ≤ ∧gcd 오일리 정리는 다음과 같다. 정리 5.6 (오일러 정리) 은 정수이고 gcd 이면 ≡ mod 이다. 오일러 정리를 이용하기 위해서는 오일러 함수를 계산하는 방법을 알아야 한다. 오일러 함 수는 다음 세 가지 특성을 이용하여 계산한다.
l 가 소수이면 이다. l gcd 이면 이다. l 가 소수이면 모든 에 대해 이다. 모든 양의 정수는 정수론의 기본정리에 의해 소인수분해될 수 있으며, 합성수의 소인수분해 를 구할 수 있으면 그것의 오일러 함수값은 위 특성들을 이용하여 쉽게 계산할 수 있다. 예 를 들어 · 이 된다. 이 두 개의 소수 와 의 곱일 때, 오일러 함수 대신에 보편 지수(universal exponent)라는 것을 사용할 수 있다. 즉, 은 정수이며, 가 의 보편 지수일 때 gcd 이면 ≡ mod 이다. 이 두 개의 소수 와 의 곱일 때 의 보편 지수는 lcm 이다. 보통 어떤 수의 보편 지수는 그 수의 오일러 함수 값보다 작거나 같다. gcd 인 정수 를 법 에서 거듭제곱을 하다 보면 결국에는 1이 된다. 이 때 ≡ mod 을 만족하는 가장 작은 양의 정수 를 법 에서 의 위수(order)라 한다. 법 에서 의 위수를 ord 로 표기한다. 위수와 관련된 특성은 다음과 같다. l gcd 이면 ord 이다. l gcd 이고 ord 이면 를 법 에서 원시근(primitive root)라 한다. l 이 원시근을 가지기 위한 필요충분조건은 이다. 여기서 는 소수이 고, ≥ 인 정수이다.
5.2 응용대수학 5.2.1 군 앞서 언급한 바와 같이 일반 수학연산을 사용하면 값은 무한히 증가할 수 있다. 하지만 공개키 암호알고리즘처럼 컴퓨터를 이용한 수학연산의 경우에는 그 결과가 특정한 범위 내 로 한정되기를 원한다. 따라서 이와 같은 효과를 얻기 위해 보통 법 연산을 사용한다. 법 에서의 연산을 사용할 경우에는 피연산자는 전체 정수가 될 수 있지만 모든 정수는 0부터 까지의 수로 매핑될 수 있으므로 전체 정수 집합보다는 ℤ 집합에 한정하여 연산을 수행한다고 생각할 수 있다. 이와 같은 개념을 보다 구체화하고, 이와 같은 연산의 특성을 생각하면 응용대수학에서 정의하고 있는 군(group), 환(ring), 체(field) 개념과 일치한다는 것 을 알 수 있다. 군은 집합과 이항연산에 의해 정의되며, 이항연산이란 동일한 집합에서 피연산자를 두 개 취하며, 연산의 결과가 다시 그 집합으로 매핑되는 연산을 말한다. 즉, 이항연산의 피연산자 집합에 대해 닫혀있다. 정의 5.4 (군) 공집합이 아닌 집합 위에 다음 세 가지 조건을 만족하는 이항연산 ∘가 정 의될 때, 〈 ∘〉를 군이라 한다.
l (결합법칙) 의 임의의 원소 , , 에 대해 다음이 성립한다. ∘ ∘ ∘ ∘ l (항등원) 의 모든 원소 에 대해 다음이 성립하는 ∊ 가 존재해야 한다. ∘ ∘ 이 때 를 의 단위원 또는 항등원(identity)이라 한다. l (역원) 의 각 원소 에 대해 다음이 성립하는 이 에 존재해야 한다. ∘ ∘ 이 때 를 의 역원(inverse)이라 한다. 따라서 군은 닫힘특성, 결합법칙, 항등원, 역원, 네 가지 특성을 가지고 있어야 한다. 군이 이 네 가지 특성에 추가적으로 교환법칙까지 성립하면 이 군을 아벨군(abelian group)이라 한다. 정의 5.5 (아벨군) 〈 ∘〉가 군일 때 이 군의 이항연산 ∘가 다음을 만족하면 이 군을 아벨 군 또는 가환군(commutative group)이라 한다. l (교환법칙) 의 임의의 원소 와 에 대해 다음이 성립한다. ∘ ∘ 우리가 주로 사용하는 연산은 덧셈 또는 곱셈이다. 따라서 군의 이항연산이 덧셈 계열의 연 산이면 덧셈군(additive group)이라 하고, 곱셈 계열의 연산일 경우에는 곱셈군(multiplicative group)이라 한다. 또 우리는 보통 집합의 크기가 한정되어 있는 유한집합에 정의된 군을 많 이 사용한다. 이렇게 군의 집합이 유한하면 이 군을 유한군(finite group)이라 하고, 무한하면 무한군(infinite group)이라 한다. 이 때 군 집합의 원소의 개수 를 군의 위수(order)라 하 며, 군의 위수를 나타내기 위해 과 같이 표기하기도 한다. 예를 들어 ℤ 은 법 7에서 곱셈 연산에 대해 다음에 의해 유한군을 형성함 을 알 수 있다. l 닫힘 특성: 법 7에서 계산하므로 그 결과는 항상 ℤ 중 하나이다. l 결합 법칙: 곱셈 계열의 연산은 보통 결합 법칙을 만족한다. l 항등원: 1은 이 군의 항등원이다. l 역원: (1,1), (2,4), (3,5), (6,6) 즉, 모든 원소는 항등원을 가진다. 보통 법 연산을 이용한 곱셈군 또는 덧셈군은 교환법칙이 성립한다. 따라서 이 군도 아벨군 이며, 이 군의 위수는 6이다. 군을 구성하는 집합의 부분집합이 원 군에 정의된 연산에 관하여 군을 형성하면 이 부분 집합과 연산에 의해 정의되는 군을 원 군의 부분군(subgroup)이라 한다. 보다 정확한 정의 는 다음과 같다.
정의 5.6 (부분군) 〈 ∘〉가 군일 때 의 부분집합 ≠ ∅ 가 이항연산 ∘에 관하여 군을 이루면 〈 ∘〉는 〈 ∘〉의 부분군이라 한다. 앞서 살펴본 ℤ 에서 는 법 7에서 곱셈 연산에 대해 군을 이루 므로 〈 × mod 〉은
〈ℤ × mod 〉의
진부분군이다. 보통 군의 연산이 명확할 경우
에는 〈 ∘〉 대신에 로 군을 나타낸다. 군 의 각 원소 에 대해 부분군 ∊ ℤ 는 에 의해 생성된 부분순환군(cyclic subgroup)이라 하며, 이 군은 〈〉로 표기한다. 여기서 이며 은 를 피연산자로 군 의 이항연산을 번 수행한 것을 말하며, 은 를 피연산자로 군의 이항연산을 번 수 행한
것을
말한다.
즉,
∘ ∘ 이고,
∘ 이다.
∊ 에
대해
∊ 이므로 이항연산에 대해 는 닫혀 있고, 이므로 항등원 에 존재하
며, 모든 원소의 역원이 존재한다. 따라서 는 부분군이 된다. 가 유한군이면 도 유한 군이다. 그러므로 를 피연산자로 군의 이항연산을 계속 수행하다 보면 궁극에 가 되 어야 한다. ∊ 에 대해 〈〉이면 를 순환군(subgroup)이라 하며, 이 때 를 이 군의 생성자 (generator)라 한다. 어떤 원소가 군의 생성자가 되기 위해서는 그 원소의 위수가 군의 위수 와 같아야 한다. 정수론에서 언급한 바와 같이 이 원시근을 가지기 위한 필요충분조건 은 가 소수이고, ≥ 인 정수일 때, 이다. 따라서 ℤ 가 순환군이 되기 위 해서는 이어야 한다. 군 의 원소 의 위수가 일 때 정수 에 대해 의 위수는 gcd 이다. 즉, 들의 위수는 항수 의 위수의 약수가 된다. 그러므로 다음 정리들이 성립한다는 것을 알 수 있다. 정리 5.7. 위수 인 유한순환군 〈〉의 부분군은 모두 순환군이고, 그 위수는 의 약수 이다. 정리 5.8. 위수 인 유한순환군 〈〉에 대해 가 의 양의 약수이면 위수가 인 의 부분군은 오직 하나 존재한다. 정리 5.9. 유한순환군 〈〉의 위수가 소수인 이면 항등원 를 제외한 의 모든 원소 는 의 생성자가 된다. 유한순환군 〈〉의 위수가 일 때 이 군의 모든 원소 에 의해 생성되는 부분군의 위 수는 gcd 이다. 따라서 이들 부분군의 위수는 원 군의 위수의 약수임을 쉽게 알 수 있다. 또한 이 때 이 소수 이면 gcd 이므로 항등원을 제외한 모든 원소는 원 군의 생성자가 된다. 공개키 암호알고리즘에서 많이 사용되는 군은 ℤ 와 ℤ 이다. 이들은 다음과 같은 특성을
가지고 있다. ℤ 은 법 에 관한 덧셈 연산에 의해 덧셈순환군을 형성하며 그 위수는 이 다, ℤ 는 법 에 관한 곱셈 연산에 의해 곱셈군을 형성하며, 이 군의 위수는 이다. 하 지만 모든 ℤ 는 순환군이 아니다. 순환군이면 생성자가 존재하며, 생성자를 연산의 기저로 사용하면 연산의 결과를 예측할 수 있는 확률은 군의 크기에 의해 결정된다. 그런데 앞서 언급한 바와 같이 ℤ 가 생성자를 가지기 위한 필요충분조건은 이므로 이어야 ℤ 가 순환군이 된다. 따라서 공개키 암호알고리즘에서 가장 많이 사용하는 군은 ℤ 이다. 이 군은 위수가 이며 곱셈순환군이다. 또 이면 위수가 인 ℤ 의 부분군 가 존재하며, 이 군은 또한 순환군이다. 특히 가 소수이면 ℤ 의 부분 군 에서 1를 제외한 모든 원소는 의 생성자가 된다. 즉, 이 군의 어떤 원소를 사용하 여 연산을 하더라도 그 연산의 결과를 예측할 수 있는 확률은 군의 크기에 의해 결정된다. 5.2.2 환 군은 하나의 연산에 대해서 정의되는 대수적 구조이다. 하지만 하나의 연산이 아니라 두 개의 연산에 대해 정의되는 대수적 구조가 필요할 수 있다. 환의 정의는 다음과 같다. 정의 5.7 (환) 집합 ≠ ∅ 위에 이항연산 덧셈 +와 곱셉 •이 정의되어 있고, 또 다음이 성립하면 〈•〉를 환이라 한다. l A. 〈 〉는 아벨군이다. –
A.1 (결합법칙):
–
A.2 (교환법칙):
–
A.3 (영원): 모든 원소 ∊ 에 대해 가 성립하는 ∊ 이 존재한다.
–
A.4 (역원): 각 원소 ∊ 에 대해 이 성립하는 ∊ 이 존재한다.
l M.1 (결합법칙): • • • • l D. (분배법칙): • • • , • • • 환은 덧셈과 곱셈 연산을 모두 고려하는 대수적 구조이지만 정의에서도 알 수 있듯이 덧셈 에 대해서는 군을 형성하지만 곱셈 연산에 대해서는 군을 형성하지 않아도 된다. 위 조건에 서 다음과 같이 곱셈에 대해 교환법칙이 성립하면 가환환(commutative ring)이라 하며, 가환 환이 아닌 환을 비가환환(non-commutative ring)이라 한다. l M.2 (교환법칙): • • 또 환 이 다음 조건을 추가적으로 만족하면 이 환을 단위원 1을 가진 환이라 한다. l M.3 (단위원): 모든 원소 ∊ 에 대해 • • 가 성립하는 ∊ 이 존재한다. M.3 조건까지 만족하면 환 은 덧셈과 곱셈에 대한 항등원을 모두 가진다. 이를 구분하기
위해 덧셈에 대한 항등원 0은 영원이라 하고, 곱셈에 대한 항등원 1은 단위원이라고 한다. 또 영원을 제외한 모든 원소가 곱셈에 대한 역원을 가지면 환 은 덧셈과 곱셈에 대해 모 두 군을 형성하게 되며, 이와 같은 환을 나눗셈환 또는 체라 한다. 보다 정확히 말하면 가 환환인 나눗셈환을 체라 하고, 비가환환인 나눗셈환을 사체(skew field)라 한다. l M.4 (역원): 각 원소 ∊ , ≠ 에 대해 • • 이 성립하는 ∊ 이 존 재한다. 환 이 단위원 1을 가진 가환환으로서 다음 조건을 추가적으로 만족하면 을 정역 (integral domain)이라 한다. l M.5 (역원): • 이면 또는 이다. 가 소수일 때 ℤ 는 위수가 인 체가 되며, 이 체를 또는 로 표기하고, 갈로아 체라고 한다. 또 유한체의 위수는 반드시 소수의 거듭제곱승 형태로 표현된다. 5.2.3 다항식 다항식(polynomial)을 이용하여 환을 구성할 수도 있다. 특히 다항식의 계수가 항상 특정 환 에 속하면 이 다항식을 환 위의 다항식이라 한다. 보다 정확한 정의는 다음과 같다. 정의 5.7 (환 위의 다항식) 를 단위원 1을 가진 가환환이라 하고, 를 부정원이라 할 때, 다음과 같은 형태의 형식적인 무한합을 환 위의 (에 관한) 다항식이라 한다. ⋯ ⋯
∊
단, 유한개를 제외하고는 모든 에 대해 이어야 한다. 여기서 , , ⋯ , 등을
다
항식 의 계수(coefficient)라고 하며, , , ⋯ , 을 다항식 의 항(term)이라 한다. 특히, 을 상수항(constant term)이라
한다.
다항식 ⋯ 에서 을 제외한 모든 계수가 0이면 를 상수다항식 (constant polynomial)이라 하고, 특히 모든 계수가 0인 를 영다항식(zero polynomial)이 라 한다. 만약 에 대해 모든 이고 ≠ 이면 을 의 최고차 항의 계수 (leading coefficient)라 하며, 이 다항식의 차수(degree) deg 를 이라 한다. 특히, 이 때 이면 를 모닉 다항식이라 한다. 우리는 주로 모닉 다항식을 많이 사용한다. 다항식도 정수와 유사하게 사칙연산을 할 수 있다. 하지만 계수들이 환 또는 체에 속하는 환 위의 다항식을 이용한 사칙연산은 우리가 알고 있는 일반 다항식의 사칙연산과 다르다. 예를 들어 이고 일 때 이 두 다항식을 이용한 사칙연산의 결과는 다음과 같다.
l 덧셈: l 뺄셈: l 곱셈: l 나눗셈: 에서 몫은 이고 나머지는 이다. 하지만 위 두 다항식이 위의 체라 가정하자. 의 원소는 0과 1밖에 없다. 따라 서 에서 사칙연산의 결과는 다음과 같다. l 덧셈: l 뺄셈: l 곱셈: l 나눗셈: 에서 몫은 이고 나머지는 이다. 이와 같은 방식으로 사칙연산을 할 경우에는 다항식들이 정수와 매우 유사한 성질을 가지게 된다. 이 가환환이면 다항식환 는 위의 모든 다항식들로 구성되는 환을 말하며, 특 히 체 위의 다항식환 는 다음과 같은 성질을 가지는 정역이 된다. l (1)
임의의 ∊ 에
대해
다음이
성립한다.
deg deg deg l (2) (나눗셈 알고리즘) 임의의 ∊ , ≠ 에
대해
, 또는 ≤ deg deg 인 다항식 ∊ 가 유일하게 존재한다. 체 위의 다항식 ∊ , deg ≥ 에 대해 이면 적당한 ∊ 에 대하 여 또는 일 때, 를 의 기약다항식(irreducible polynomial)이라 한다. 반대로 체 위의 다항식 ∊ , deg ≥ 가 기약다항식이 아닐 때, 를 의 가약다항식(reducible polynomial)이라 한다. 따라서 모든 일차다항식은 모두 기약 다항식이다. 정수와 비교하여 보면 기약다항식은 정수에서 소수와 같은 것이고, 가약다항식 은 합성수와 같은 것이다. 따라서 정수가 소수로 유일하게 인수분해를 할 수 있듯이 다항식 들로 모닉 기약다항식으로 유일하게 인수분해를 할 수 있다. 정리 5.9. (유일인수분해 정리) 체 위의 다항식환 에서 임의의 다항식 ∊ , deg ≥ 는 다음과 같은 형태로 인수분해 된다.
⋯
여기서 ∊ 이고, 는 양의 정수이며, 는 모닉 기약다항식이다. 위의 등식에서 기약 다항식의 곱의 순서를 무시하면 이와 같은 인수분해는 단 한가지뿐이다. 다항식 환에서도 기약다항식을 이용하여 ℤ 와 유사한 체를 만들 수 있다. 보통 컴퓨터를 이용하여 연산을 할 경우에는 피연산자나 연산의 결과를 비트 워드로 제한하고 싶은 경우 가 많다. 특히, 암호기술에서는 더욱 그렇다. 예를 들어 3비트 데이터를 조작하고 싶을 경우
에는 ℤ 의 사용을 고려해 볼 수 있다. 하지만 ℤ 은 체가 아니며 그림 5.1처럼 각 수의 등 3
장 비율이 다르다. 하지만 기약다항식을 이용한 GF(2 )은 체이며, 각 수의 등장비율이 같다. 따라서 최근에 이와 같은 기약다항식을 이용한 체를 활용하여 비트 조작을 한다.
는 체이고 ∊ 는 영다항식이 아닌 기약다항식일 때, 에 있는 모든 다항식 들을 로 나누었을 때 나머지들의 집합을 라 하면, 는 체가 된다. 특히, 의 위수가 소수 인 체이고, 가 에서 차인 기약다항식이라 하면 체 의 위수는 이 된다. 이면 연산의 피연산자와 결과를 비트 워드로 다음과 같이 제한할 수 있 다. l 일 때 의 각 원소는 다음과 같이 정수로 표현할 수 있다. –
의
차수는
3차이므로
의
위수는
이며,
의
모든
원소
와 같은 형태가 된다. 여기서 ∊ 이다. –
따라서 는 표 5.3과 같이 으로 표현할 수 있다. <표 5.3> 의 원소에 대한 정수 표현
0(000) 0
1(001) 1
2(010)
3(011)
4(100)
5(101)
6(110)
7(111)
<그림 5.1> ℤ 과 를 이용한 곱셈표
에서 덧셈과 곱셈은 컴퓨터를 이용하여도 효율적으로 계산할 수 있다. 특히 두 다항 식의 덧셈은 XOR 연산을 이용하면 된다. 예5.1) , 의 체에서 다음 두 다항식의 더한 결과는? , 답) 이다. 에 대한 비트표현은 01010111이고, 에 대 한 비트표현은 10000011이다. 따라서 ⊕ 이다.
곱셈은 덧셈보다 조금 더 복잡하지만 여전히 효율적으로 계산할 수 있다. 예5.1의 체의 속 한 에 를 곱하는 것을 생각하여 보자. · 는 다음과 같다. · 이면
따라서
· 이며
이면
로 나눈 나머지가 · 가 된다. 이므로 · 는 다 음과 같다. · 따라서 · 는 다음과 같이 구할 수 있다. ·
⊕ ≠
위 원리를 이용하면 · 를 오른쪽 이동 연산과 XOR 연산만을 이용하여 계산할 수 있다. 예5.2) , 의 체에서 다음 두 다항식을 곱한 결과는? , 답) · · · 와 같다. 이 때 의 7차항의 계수는 0이므 로 · 는 를 오른쪽 하나 이동한 것과 같다. 또 · 는 다항식 를 7번 곱 한 것과 같으므로 다음과 같이 계산할 수 있다. l · l · · ⊕ l · · · l ... l · 따라서 · ⊕⊕ 이다. 연습문제 1. 가 소수이면 모든 ≥ 에 대해 임을 증명하시오. 2. 다음을 구하시오. (1) (2) 3. 오일러 정리를 이용하여 mod 를 구하시오. (힌트. ≡ ≡ mod ) 4. 확장 유크리드 알고리즘을 이용하여 법 4231에서 1233의 곱셈에 대한 역원을 구하시오. 5. 와 가 서로 다른 소수이고 라 하자. 그러면 lcm 에 대해 gcd 이면 ≡ mod 임을 증명하시오. 6. ℤ 의 부분군 중 위수가 6인 부분군을 구하시오. (힌트. 2는 ℤ 의 생성자이다)
7. ℤ 위에서 다항식 가 기약인지 가약다항식인지 판별하시오. 8. 을 사용할 때 에서 × 를 구하시오. 9. 을 사용할 때 에서 의 곱셈에 대한 역원을 구하시오.
제 6 장 대칭 암호알고리즘: AES 6.1 AES 6.1.1 AES 개요 1977년도에 미국 표준으로 제정된 DES는 지금까지 큰 허점이 발견되지 않았지만 키 길 이가 56비트 밖에 되지 않아 현재의 컴퓨팅 기술로는 쉽게 전사공격을 하여 암호해독을 할 수 있다는 문제점을 지니고 있다. 따라서 1997년에 새 표준에 대한 작업을 시작하여 2000 년 10월에 AES(Advanced Encryption Standard)라는 새 표준을 채택하였다. 1997년 새 표준 에 대한 제안에 의하면 새 암호알고리즘의 블록 크기는 128비트이어야 하며, 알고리즘에 대 한 변경 없이 128비트, 196비트, 256비트 길이의 키를 지원해야 한다. 1998년도에 제출된 여러 제안 중에 15개를 일차적으로 선정하였고, 1999년에 이 중에 다섯 개를 최종 후보로 선정하였다. 이 중에 벨기에 암호학자인 Daemen과 Rijmen이 제안한 Rijndael 암호알고리즘 이 AES로 채택되었다. 채택된 Rijndael 알고리즘은 기존 표준인 DES와 달리 Feistel 구조가 아니었으며, 제안에 서 요구한 사항뿐만 아니라 블록 크기를 192비트, 256비트로 확장할 수 있도록 되어 있었 다. 하지만 제안에서 요구한 128비트 블록 크기 버전만 표준으로 채택되었다. Rijndael 암호 알고리즘의 라운드 수는 블록 크기와 키 길이에 의해 다음과 같이 결정된다. 가 암호블 록의 크기에 대한 32비트 워드의 수이고, 가 암호키 길이에 대한 32비트 워드의 수이면 라운드의 수 max 이다. 표준으로 채택된 블록의 길이는 128비트이므로
이며,
128비트,
192비트,
256비트
세
가지
종류의
키
길이를
지원하므로
이다. 따라서 블록 크기가 128비트이고, 키 길이가 128비트이면 이 된 다. 이 때 암호키는 4행× 열 2차원 바이트 배열로 구성된 것으로 간주한다. 이 암호키는 개의 32비트 워드로 확장되어 사용된다. 즉, 블록 크기와 키 길이가 모두 128비트이 면 128비트 암호키는 총 44개의 32비트 워드로 확장되며, 각 라운드마다 이 중 4개의 워드 가 사용된다. 각 라운드는 그림 6.1처럼 하나의 자리바꿈 연산과 세 개의 치환 연산으로 구성되어 있 다. 그림에서 알 수 있듯이 AES의 라운드는 매우 단순하다. l S-박스: 을 이용한 치환연산 l 행이동(shift row): 단순 자리바꿈 l 열섞음(mix column): 을 이용한 치환연산 l 라운드키 적용(add roundkey): XOR 연산을 이용 여기서 을 이용한 계산이란 기약다항식 을 사용하는 다항 식 체를 말한다. 위 네 가지 세부 연산은 모두 역이 가능하다. 따라서 라운드 키를 적용하 는 부분을 제외하고는 그 자체만으로는 어떤 안전성도 제공하지 못한다. 다른 대부분의 알 고리즘과 마찬가지로 복호화할 때에는 암호화할 때 사용된 라운드 키를 역순으로 사용하며,
전체 알고리즘은 그림 6.2와 같다.
<그림 6.1> AES의 한 라운드 구성도
<그림 6.2> AES 알고리즘
그림 6.2에서 알 수 있듯이 복호화에서 사용되는 연산은 암호화에서 사용된 연산의 역 연 산이다. 앞서 언급한 바와 같이 각 라운드에서 사용되는 모든 연산은 역이 가능하다. 따라
서 그 역을 이용하여 복호화가 이루어진다. 6.1.2 상태 AES의 모든 연산들은 상태(state)라고 하는 2차원 바이트 배열에 수행된다. 이 상태는 항 상 4행으로 구성되며, 각 행은 바이트로 구성된다. 하지만 표준에서 이므로 표준 에서 사용하는 상태는 항상 × 바이트 행이 된다. 128비트 입력을 상태로 전환하는 방법 은 그림 6.3과 같다.
<그림 6.3> AES에서 입력을 상태로 변환하는 방법
예를 들어 128 비트 입력이 EA835CF00445332D655D98AD8596B0C5와 같으면 이것의 상 태는 그림 6.4와 같다. EA
04
65
85
83
45
5D
96
5C
33
98
B0
F0
2D
AD
C5
<그림 6.4> AES의 상태의 예
6.1.3 S-Box 치환 암호화 과정의 각 라운드에서 가장 먼저 수행되는 연산은 s-box 치환 연산이다. 이 연산 은 상태를 구성하는 각 바이트를 s-box을 이용하여 치환한다. 두 개의 s-box가 있으며, 하나 를 전방향 s-box라 하고, 다른 하나를 역방향 s-box라 한다. 두 개의 s-box은 각각 그림 6.5 와 6.6에 기술되어 있다. 두 s-box는 서로 역 관계에 있다. 즉, 특정 바이트 값을 전방향 s-box으로 치환한 후에 그 결과를 다시 역방향 s-box로 치환하면 원래 값을 얻게 된다. 따 라서 전방향 s-box는 암호화할 때 사용되고, 역방향 s-box는 복호화할 때 사용된다. AES에 사용되는 전방향 s-box는 다음과 같은 원리에 의해 구성되었다. l 단계 1. s-box를 00, 01, ..., FF 순으로 초기화한다. l 단계 2. 이 값들을 에서 곱셈에 대한 역원으로 매핑한다. 단, 곱셈에 대한 역원이 없는 00은 00으로 매핑한다. l 단계 3. 한 항의 값이 이면 다음과 같이 변형한다. 여기서 주의해야 할 것
은 덧셈 연산은 모두 XOR 연산이 수행된다.
예6.1) 95에 해당되는 s-box의 값은? –
95의 곱셈에 대한 역원은 8A이다. 그러면 ′ 은 다음과 같이 계산된다. (10001111 × 01010001) ⊕ 1 = (0⊕0⊕0⊕0⊕0⊕0⊕0⊕1)⊕1 = 1⊕1 = 0
–
이와 같이 계산하면 결과는 01010100 = 2A가 된다.
s-box는 알려진 공격에 안전하도록 설계되었으며, s-box 가 되는 경우 또는 s-box 가 되는 경우는 없도록 설계되었다. 또한 그 역을 취할 수 있도록 만들었다,
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
63
7C
77
7B
F2
6B
6F
C5
30
01
67
2B
FE
D7
AB
76
1
CA
82
C9
7D
FA
59
47
F0
AD
D4
A2
AF
9C
A4
72
C0
2
B7
FD
93
26
36
3F
F7
CC
34
A5
E5
F1
71
D8
31
15
3
04
C7
23
C3
18
96
05
9A
07
12
80
E2
EB
27
B2
75
4
09
83
2C
1A
1B
6E
5A
A0
52
3B
D6
B3
29
E3
2F
84
5
53
D1
00
ED
20
FC
B1
5B
6A
CB
BE
39
4A
4C
58
CF
6
D0
EF
AA
FB
43
4D
33
85
45
F9
02
7F
50
3C
9F
A8 D2
7
51
A3
40
8F
92
9D
38
F5
BC
B6
DA
21
10
FF
F3
8
CD
0C
13
EC
5F
97
44
17
C4
A7
7E
3D
64
5D
19
73
9
60
81
4F
DC
22
2A
90
88
46
EE
B8
14
DE
5E
0B
DB 79
A
E0
32
3A
0A
49
06
24
5C
C2
D3
AC
62
91
95
E4
B
E7
C8
37
6D
8D
D5
4E
A9
6C
56
F4
EA
65
7A
AE
08
C
BA
78
25
2E
1C
A6
B4
C6
E8
DD
74
1F
4B
BD
8B
8A
D
70
3E
B5
66
48
03
F6
0E
61
35
57
B9
86
C1
1D
9E
E
E1
F8
98
11
69
D9
8E
94
9B
1E
87
E9
CE
55
28
DF
F
8C
A1
89
0D
BF
E6
42
68
41
99
2D
0F
B0
54
BB
16
<그림 6.6> AES의 전방향 s-box
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
52
09
6A
D5
30
36
A5
38
BF
40
A3
9E
81
F3
D7
FB
1
7C
E3
39
82
9B
2F
FF
87
34
8E
43
44
C4
DE
E9
CB
2
54
7B
94
32
A6
C2
23
3D
EE
4C
95
0B
42
FA
C3
4E
3
08
2E
A1
66
28
D9
24
B2
76
5B
A2
49
6D
8B
D1
25
4
72
F8
F6
64
86
68
98
16
D4
A4
5C
CC
5D
65
B6
92
5
6C
70
48
50
FD
ED
B9
DA
5E
15
46
57
A7
8D
9D
84
6
90
D8
AB
00
8C
BC
D3
0A
F7
E4
58
05
B8
B3
45
06
7
D0
2C
1E
8F
CA
3F
0F
02
C1
AF
BD
03
01
13
8A
6B
8
3A
91
11
41
4F
67
DC
EA
97
F2
CF
CE
F0
B4
E6
73
9
96
AC
74
22
E7
AD
35
85
E2
F9
37
E8
1C
75
DF
6E
A
47
F1
1A
71
1D
29
C5
89
6F
B7
62
0E
AA
18
BE
1B
B
FC
56
3E
4B
C6
D2
79
20
9A
DB
C0
FE
78
CD
5A
F4
C
1F
DD
A8
33
88
07
C7
31
B1
12
10
59
27
80
EC
5F
D
60
51
7F
A9
19
B5
4A
0D
2D
E5
7A
9F
93
C9
9C
EF
E
A0
E0
3B
4D
AE
2A
F5
B0
C8
EB
BB
3C
83
53
99
61
F
17
2B
04
7E
BA
77
D6
26
E1
69
14
63
55
21
0C
7D
<그림 6.7> AES의 역방향 s-box
6.1.4 행이동 자리바꿈 AES의 각 라운드에 사용되는 4개의 기본 연산 중 나머지 세 연산은 치환이고, 이 연산만 자리바꿈이다. 이 연산은 그림 6.8과 같이 이루어지며, 복호화할 때에는 그림 6.8과 정반대 로 이루어진다. 이 연산은 자리바꿈을 통해 암호화 과정이 평문에 모든 비트에 고루 영향을 주도록 하기 위함이다. 더욱이 평문 비트들이 상태로 전환되어 열 단위로 연산을 적용받기 때문에 이와 같은 이동이 영향을 분산시키는 효과는 매우 크다.
<그림 6.8> AES의 행이동 자리바꿈 연산
6.1.5 열섞음 치환 이 연산은 상태 행렬을 다음 행렬에 곱하여 값을 치환하게 되며, 이 때 곱셈 연산은
에서 계산된다. ′
이 계산은 두 가지 형태로 계산될 수 있다. 첫째는 실제 행렬 곱셈을 다음과 같이 하는 것
이다. ′ · ⊕ · ⊕ · ⊕ · 이 경우 이와 같은 계산을 총 16번 해야 한다. 둘째는 입력 상태의 열을 다음과 같은 3차 다항식으로 생각하고 법 에서 에 곱하는 것이다. 이렇게 하여 얻어진 3차 다항식의 각 계수는 출력 상태의 열이 된다. 예6.2) 다음은 주어진 입력 상태를 열섞음 연산에 적용하였을 때 그 결과를 보여주고 있다.
이 예에서 ′ 이 47이 되는 과정을 살펴보면 다음과 같다. × ⊕ × ⊕ ⊕ ⊕ ⊕ ⊕ –
02와 87를 다항식으로 표현하면 각각 와 와 같다. 두 값을 법 에서 곱하면 그 결과는 이 된다. 따라서 이것을 다시 비 트로 표현하면 0001 0101이 된다.
그러면 왜 두 가지 방식의 계산이 동일한 결과를 얻는지 살펴보면 다음과 같다. 계수가
인 두 개의 4차 다항식을 법 에서 곱한 결과는 다음과 같다. l , l × –
×
–
× ⊕ ×
–
× ⊕ × ⊕ ×
–
× ⊕ × ⊕ × ⊕ ×
–
× ⊕ × ⊕ ×
–
× ⊕ ×
–
×
이 다항식을 로 나누었을 때 나머지를 구하면 다음과 같다. l mod –
× ⊕ × ⊕ × ⊕ ×
–
× ⊕ × ⊕ × ⊕ ×
–
× ⊕ × ⊕ × ⊕ ×
–
× ⊕ × ⊕ × ⊕ ×
따라서 계수가 인 두 개의 4차 다항식을 법 에서 곱한 결과는 다음과 같은 행 렬식으로 표현이 가능하다.
따라서 이면 행렬식은 다음과 같이 된다. ′
이 과정을 역하기 위해서는 사용된 곱셈 행렬의 역행렬만 있으면 된다. 따라서 복호화할 때 에는 다음과 같은 행렬을 사용한다. ′
6.1.6 AES 키 스케줄링
<그림 6.10> AED 키 스케줄링 알고리즘
AES는 사용되는 암호키의 길이가 128비트이면 총 44개의 32비트 워드로 확장되어 각 라 운드마다 4개의 32비트 워드를 라운드 키로 사용한다. AES의 키 스케줄링 알고리즘은 그림
6.10과 같으며 다음과 같이 진행된다. l 단계 1. 128비트 키를 그림 4.7에 기술된 것처럼 4개의 32비트 워드로 바꾼다. 이 3개의 값이 첫 4개의 32비트 워드가 된다. l 단계 2. 첫 4개의 워드 중 마지막 워드는 1 바이트 왼쪽 순환 이동된 뒤에 전방향 s-box 를 이용하여 치환된다. 그 다음에 라운드 상수와 XOR된다. 결과 값은 첫 워드와 XOR되 어 다음 4개 워드의 첫 워드가 만들어진다. l 단계 3. 이렇게 만들어진 첫 워드와 기존 4개의 워드 중 두 번째 워드가 XOR되어 두 번째 워드가 만들어지고, 이 결과와 세 번째 워드가 XOR되어 세 번째 워드가 만들어지 며, 마지막으로 이 결과와 네 번째 워드가 XOR되어 마지막 워드가 만들어진다. l 단계 4. 단계 2부터 3을 9번 수행하여 각 라운드 키를 생성한다. 참고문헌 [1] Advanced Encryption Standard (AES), Federal Information Processing Standards Publication 197, Nov. 2001.
제 7 장 해쉬함수 7.1 개요 해쉬함수(hash function)는 임의의 길이에 이진 문자열을 고정된 길이의 이진 문자열로 매 핑하여 주는 함수를 말하며, 해쉬함수의 결과를 해쉬값, 메시지 다이제스트, 메시지 지문이 라 한다. 해쉬함수는 메시지 다이제스트, 메시지 지문과 같은 이름에서 알 수 있듯이 임의 의 길이의 메시지를 대신 대표할 수 있는 고정된 길이의 값을 계산하여 주는 함수를 말한 다. 따라서 해쉬함수는 크게 다음과 같은 요구사항을 충족해야 한다. l 요구사항 1. 압축: 임의의 길이의 이진 문자열을 일정한 크기의 이진 문자열로 변환해야 한다. l 요구사항 2. 계산의 용이성: 가 주어지면 는 계산하기 쉬워야 한다. l 요구사항 3. 일방향성(one-wayness): 입력을 모르는 해쉬값 가 주어졌을 때, ′ 를 만족하는 를 찾는 것은 계산적으로 어려워야 한다. l 요구사항 4. 약한 충돌회피성(weak collision-resistance): 가 주어졌을 때 ′ 인 ′ ≠ 을 찾는 것은 계산적으로 어려워야 한다. l 요구사항 5. 강한 충돌회피성(strong collision-resistance): ′ 인 서로 다른 임 의의 두 입력 와 ′을 찾는 것은 계산적으로 어려워야 한다. 일반적인 압축함수는 임의의 메시지를 현재 크기보다 작은 크기로 축소해줄 수 있어야 할 뿐만 아니라 나중에 다시 원래의 크기로 복원할 수 있어야 한다. 하지만 해쉬함수는 압축을 하지만 복원을 할 필요가 없고, 복원이 가능해서도 안 된다. 임의의 길이의 메시지를 고정 된 길이의 메시지로 변환하므로 함수의 정의역 집합보다 치역 집합이 훨씬 크다. 따라서 서 로 다른 메시지가 같은 해쉬값으로 매핑되는 것은 불가피하다. 이처럼 서로 다른 메시지가 같은 해쉬값으로 매핑되면 충돌(collision)이 발생하였다고 한다. 해쉬값은 입력 메시지를 대 표하는 값이므로 서로 다른 메시지가 동일한 값에 의해 대표되면 그 역할을 하기 어렵다. 따라서 안전한 해쉬함수가 되기 위해서는 이와 같은 충돌을 찾는 것이 어려워야 한다. 충돌 은 크게 약한 충돌과 강한 충돌로 구분되는데, 약한 충돌은 정해진 어떤 해쉬값으로 매핑되 는 또 다른 메시지를 찾는 것이고, 강한 충돌은 같은 해쉬값으로 매핑되는 임의의 메시지 쌍을 찾는 것이다. 예를 들어 학생들이 모여 있는 집합에서 특정한 학생을 선택한 후에 이 학생과 같은 생일인 학생을 찾는 것이 약한 충돌이고, 모여 있는 집합에서 생일이 같은 임 의의 두 학생을 찾는 것이 강한 충돌이다. 따라서 강한 충돌을 찾는 것이 더 쉽다. 그러므 로 강한 충돌을 찾는 것이 어려운 해쉬함수가 가장 안전한 해쉬함수이다. 일방향성까지 충 족되는 해쉬함수를 일방향 해쉬함수(OWHF, One-Way Hash Function)라 하며, 강한 충돌회 피성까지
충족하는
해쉬함수를
충돌회피
해쉬함수(CRHF,
Collision-Resistant
Hash
Function)라 한다. 이와 같은 기본적인 요구사항 외에 다음과 같은 추가적인 요구사항이 충족되어야 안전한 해쉬함수라고 할 수 있다.
l 요구사항 6. 불상관성(noncorrelation): 해쉬함수의 입력과 출력 간에 어떤 상관관계가 없어야 한다. l 요구사항 7. 가까운 충돌회피성(near collision-resistance): 출력이 유사한 임의의 두 입력 을 찾는 것이 계산적으로 어려워야 한다. l 요구사항 8. 부분 원상 불계산성(partial pre-image resistance): 입력의 작은 부분도 출력 으로부터 계산하는 것이 계산적으로 어려워야 한다. 이 중에서 불상관성을 제공하기 위해서는 해쉬함수도 대칭암호알고리즘과 마찬가지로 내부 적으로 눈사태효과(avalanche effect)를 가지고 있어야 한다. 즉, 입력의 1비트가 출력의 반 정도는 영향을 받아야 한다. 해쉬함수는 크게 세 가지 용도로 사용된다. 첫째, 전자서명에서 사용된다. 전자서명 암호 알고리즘은 보통 공개키 암호알고리즘을 많이 사용한다. 따라서 매우 큰 길이의 메시지 전 체를 개인키로 암호화하여 전자서명하기에는 비용이 많이 소요된다. 따라서 전체 메시지 대 신에 그 메시지를 대표하는 짧은 길이의 해쉬값에 서명하는 경우가 많다. 원 메시지 대신에 메시지의 해쉬값을 서명하여 동일한 효과를 얻기 위해서는 기존 전자서명 요구사항이 여전 히 충족되어야 한다. 이 때 강한 충돌회피성이 보장되지 않는 해쉬함수를 사용하면 기존 서 명 블록을 다른 메시지의 서명 블록으로 활용할 수 있게 된다. 둘째, 메시지의 무결성을 제 공하기 위해 사용된다. 셋째, 패스워드를 안전하게 유지하기 위해 사용된다. 유닉스 시스템에서는 사용자의 계정명을 passwd라는 파일에 유지하며, 초기에는 이 파일 에 각 계정의 패스워드도 평문 상태로 함께 보관하였다. 이와 같은 형태로 패스워드를 유지 할 경우에는 이 파일에 접근 권한을 획득하면 모든 계정의 패스워드를 알 수 있게 된다. 이 에 passwd 파일에서 패스워드 부분을 shadow라는 파일로 옮기고 평문 형태로 유지하던 패 스워드 대신에 그것의 해쉬값을 유지하는 형태로 바꾸었다. 이 경우 사용자가 패스워드를 입력하면 그것의 해쉬값을 계산하여 유지하고 있는 해쉬값과 비교하여 올바른 패스워드가 입력되었는지 검사한다. 따라서 기존과 달리 이 파일에 대한 접근 권한을 획득하더라도 해 쉬값의 일방향성 특성 때문에 계정의 패스워드를 알 수 없다. 하지만 패스워드의 해쉬값만 유지할 경우에는 크게 두 가지 문제점이 존재한다. 하나는 공격자들이 이 파일을 이용하여 사전공격(dictionary attack)을 할 수 있다는 것이고, 다른 하나는 해쉬값이 같은 두 사용자는 동일한 패스워드를 사용하고 있다는 것이 노출된다. 따라서 패스워드만을 이용하여 해쉬값 을 계산하지 않고, salt라고 하는 랜덤값과 패스워드를 비트결합한 값을 입력으로 사용하여 해쉬값을 계산한다. 이 경우 올바른 패스워드가 입력되었는지 검사하기 위해서는 시스템에 서 사용된 salt값을 알고 있어야 한다. 따라서 salt도 평문 그대로 해쉬값과 함께 저장된다. 이와 같은 방식을 사용하면 앞서 언급한 두 가지 문제를 모두 어느 정도 극복이 가능하다. 전자에 대해서는 salt를 사용하지 않으면 가능한 패스워드에 대한 해쉬값들만 계산하면 되 지만 이제는 각 가능한 패스워드마다 사용된 salt의 개수만큼 계산해야 한다. 따라서 사전공 격에 소요되는 비용이 증가하게 된다. 후자는 각 계정마다 다른 salt를 사용하므로 동일한 패스워드를 사용하는 사용자라 하더라도 결과 해쉬값은 서로 다르게 된다. 패스워드를 안전하게 유지하기 위해 패스워드의 해쉬값을 보관하는 방법은 패스워드를 보 관하는 서버에 대한 안전성 강화 방법이다. 하지만 패스워드가 평문 상태로 전달되면 통신 채널이 가장 취약한 곳이 된다. 즉, 시스템 전체적으로 동일한 수준의 보안 메커니즘이 사 용되어야 하며, 일부 요소만 안전성을 강화하는 것은 의미가 없다.
해쉬함수는 보통 비밀키를 사용하지 않는다. 따라서 메시지와 그것의 해쉬값을 함께 전송 하거나 저장할 경우 그것의 무결성을 안전하게 보장하기가 어렵다. 그 이유는 고의적인 공 격자는 메시지 뿐만 아니라 해쉬값도 함께 변경할 수 있기 때문이다. 따라서 보다 안전하게 무결성을 보장하기 위해 해쉬값을 생성할 때 비밀키를 사용하여 해당 비밀키를 모르는 경우 에는 올바른 해쉬값을 계산할 수 없도록 하는 기법을 사용해야 한다. 이 처럼 비밀키를 사 용하여 계산되는 해쉬값을 메시지 인증 코드(MAC, Message Authentication Code)라 하고, 비밀키를 사용하지 않는 일반 해쉬값을 조작 탐지 코드(MDC, Modification/Manipulation Detection Code)라 한다.
7.2 생일 파라독스 해쉬함수의 안전성은 강한충돌을 찾는 것이 어느 정도 어려운지에 따라 결정된다. 해쉬함 수의 강한충돌 측면의 안전성을 분석하기 위해서는 이것과 과련된 생일 파라독스에 대해 알 아야 한다. 생일 파라독스란 명 중 특정한 사람을 선택하여 이 사람과 생일이 같은 사람 이 명 중에 있을 확률이 50%가 넘기 위해서는 이 183명이 넘어야 하지만 명 중 생일 이 같은 두 명이 있을 확률이 50%가 넘기 위해서는 이 23명만 넘으면 된다는 것을 말한 다. 이 파라독스와 해쉬함수를 매핑하면 다음과 같다. 먼저 해쉬함수의 입력은 사람이고, 출 력은 생일이라고 하면 생일이 같은 사람을 찾는 것은 해쉬함수에서 충돌을 찾는 것과 같다. 특히, 특정한 사람을 선택한 후에 이 사람과 생일이 같은 사람을 찾는 것은 약한 충돌이고, 생일이 같은 임의의 두 명을 찾는 것은 강한 충돌에 해당된다. 좀 더 수학적으로 생일 파라 독스를 분석하여 보자. 출력의 크기가 365일 때 강한 충돌을 찾을 확률이 50%가 넘기 위해 검사해 보아야 하는 입력의 수를 생각하여 보자. l 임의로 명을 선택하였을 때, 이 중에 생일이 같은 사람이 있을 확률은? Prob = 1-( 명의 생일이 모두 다를 경우) –
이 확률을 계산할 때 사람들의 생일이 균일하게 분포되어 있다고 가정한다. 이 가정 은 물론 현실적으로 잘못된 가정이지만 해쉬함수의 경우에는 해쉬함수의 출력이 균일 하게 분포된다는 것을 가정하는 것은 무리가 없다.
l 위 확률을 일반화하여 생각하여 보자. 개의 통에 개의 구술을 임의로 넣는 경우를 생각하여 보자. 여기서 은 치역 범위의 크기이고, 은 사용된 입력의 개수이다. 이 경 우 위 확률은 개의 통 중에 2개 이상의 구술이 들어 있는 통이 있을 확률과 같다. 이 확률은 1-( 개의 구술이 모두 다른 통에 들어갈 확률)과 같으며, 다음과 같이 수식화할 수 있다. × × ×⋯×
–
매클로린 급수 전개(Maclaurin series expansion)에 의하면 ⋯ 이다. 이 때 가 매우 작으면 ≈ 로 근사화할 수 있다. 따라서 위 식은 다음 과 같이 바꾸어 표현할 수 있다.
≈
l 우리가 찾고자 하는 확률은 ≈
이다. 따라서
≈ 이며,
양변에 로그를 취하면 다음과 같다. ≈ ln l 식의 좌우를 다시 정리하면 다음과 같다.
≈ ln l 항을 무시하면 다음과 같이 다시 근사화할 수 있다. ≈ ln
l , 로 설정하면 ≈ 이 된다. 즉, 23명이 넘으면 강한 충돌을 찾을 수 있는 확률이 50%가 넘는다. 이 수학적 분석을 해쉬함수에 적용하면 다음과 같다. 해쉬함수 출력의 범위가 이면 강 한 충돌을 찾기 위해 개의 해쉬값을 계산하면 강한 충돌을 찾을 수 있는 확률이 50%가 넘는다.
7.3 SHA-1 SHA(Secure Hash Algorithm)은 NIST(National Institute of Standards and Technology)에 서 개발한 미국 표준 해쉬함수이다. SHA는 1993년에 표준으로 제정되었으며, 표준 문서 번 호는 FIPS 180이다. Rivest는 1990년에 MD4라는 해쉬함수를 개발하였으며, 1992년에 이를 개선한 MD5를 제안하였다. 1993년에 표준으로 제정된 SHA 함수는 MD5와 매우 유사한 해 쉬함수이다. 1995년에는 기존 SHA를 개선한 새 표준을 제정하였으며, 기존과 구분하기 위 해 새 표준을 SHA-1이라고 명명하였으며, 이 표준의 문서 번호는 FIPS 180-1이다. SHA-1 의 해쉬값의 길이는 160비트이다. 따라서 생일 파라독스에 의하면 그것의 안전성은 이다. 하지만 2005년 X. Wang, Y.L. Yin, H. Yu는 SHA-1에 대한 새 공격을 발표하였으며, 이 공격에 의하면 의 비용으로 충돌을 찾을 수 있다. 따라서 SHA-256, SHA-386, SHA-512가 최근에 제안되었다. 앞서 언급한 바와 같이 SHA-1의 출력값의 길이는 160비트이며, 입력은 264 비트보다 작 아야 한다. 내부적으로 512비트 단위로 처리하며, 전체 입력의 크기가 512비트의 배수가 아 니면 일반적인 채우기 방법을 사용한다. 즉, 일정한 값으로 채우고 마지막 64비트에 실제 입력의 크기를 기록한다. 첫 512비트 입력을 처리하는 방법은 다음과 같다. l 512비트 입력을 16개의 워드 라 가정하였을 때, 이 입력은 총 80개의 32비트 워드
로 확장된다. 이 때 첫 16개 워드는 입력과 동일하며, 나머지 64개 워드는 기존에 생 성한 워드들을 이용하여 다음과 같이 계산된다.
⊕ ⊕ ⊕
l 다음과 같은 초기 5개의 워드는 총 80 단계를 통해 변형되어 결국 최종 해쉬값이 된다. 이 때 80개의 워드로 확장된 워드들은 각 단계마다 하나씩 사용된다. A = 0x67452301 B = 0xEFCDAB89 C = 0x98BADCFE D = 0x10325476 E = 0xC3D2E1F0 –
80 단계는 크게 4개의 라운드로 구분되며, 각 라운드는 20 단계로 구성된다. 각 단계 는 그림 7.1과 같다. 이 때 는 다음과 같으며,
= 0x5A827999,
= 0x6ED9EBA1,
= 0x8F1BBCDC,
= 0xCA62C1D6,
는 다음과 같다. ∧ ∨ ∨ ,
⊕ ⊕ ,
∧ ∨ ∧ ∨ ∧ ,
<그림 7.1> SHA-1의 내부 단계
7.4
메시지 인증 코드
7.4.1 메시지 인증 코드 개요
MAC은 일반 해쉬함수와 달리 MAC 값을 계산하기 위해서는 입력 메시지뿐만 아니라 암 호키가 필요하다. 따라서 암호키를 모르는 사용자는 MAC 값을 계산할 수 없다. 그러므로 MAC은 해쉬함수와 동일한 안전성(일방향성, 충돌회피성)을 가져야 하며, 추가적으로 사용되 는 암호키와 관련하여 다음과 같은 요구사항들을 충족해야 한다. l 요구사항 1. 과 을 공격자가 가지고 있더라도 를 알아내는 것은 계산적으 로 어려워야 한다. l 요구사항 2. 과 을 공격자가 가지고 있더라도 ′ 인 메시지 ′을 찾는 것이 계산적으로 어려워야 한다. l 요구사항 3. 은 균일하게 분포되어야 한다. 즉, 임의로 선택한 두 개의 메시 지 과 ′에 대해 P r ′ 이어야 한다. 여기서 은 MAC 의 길이이다. 요구사항 1에 대해 좀 더 자세히 살펴보면 다음과 같다. 공격자가 과 을 가지 고 있는 경우 전사공격으로 를 알아내기 위한 비용은 다음과 같다. l : 가능한 모든 키를 이용하여 을 계산하면 총 개의 MAC이 생 성된다. 그러나 개의 MAC만 존재하므로 대략 개의 키 중 어떤 키가 올바른 키인지 알 수 없다. 동일한 키로 계산한 MAC 값을 여러 개 가지고 있을 경 우에는 이 과정을 반복하면 정확한 키를 찾을 수 있다. 그러나 전체 비용은 같은 길이의 키를 사용하는 암호문에 대한 전사공격을 하는 것보다 어렵다. –
80 예7.1) = 32 비트이고, = 80 비트이면 첫 번째 시도에는 2 개의 키를 검 48
사하면 주어진 MAC을 생성하는 키는 대략 2 개를 발견하게 된다. 발견한 이 키들을 이용하여 두 번째 쌍에 대해 검사하면 두 쌍에 대해 모두 일치하는 키는 대략 216개 가 존재한다. l : 가능한 모든 키를 이용하여 을 계산하면 총 개의 MAC이 생 성된다. 앞의 예와 달리 이 경우에는 전사공격의 비용이 대략 가 된다. 7.4.2 MAC을 구현하는 방법 MAC은 기본적으로 해쉬함수의 기능과 인증 기능이 함께 포함되어야 한다. 여기서 인증 기 능은 두 가지 측면으로 볼 수 있다. 첫째는 특정한 사용자만 MAC을 생성할 수 있고, 둘째 는 특정한 사용자만 이를 확인할 수 있어야 한다. 따라서 MAC을 구현하는 방법은 크게 다 음과 같이 분류할 수 있다. l 방법 1. 전용알고리즘 l 방법 2. 대칭암호알고리즘 이용 l 방법 3. 일반 해쉬함수 이용 방법 1은 MAC을 위한 전용알고리즘을 새롭게 만들어 사용하는 것을 말한다. 대표적으로
MAA(Message Authenticator Algorithm)와 MD5-MAC 등이 여기에 해당한다. MD5-MAC은 MD5의 압축 알고리즘이 키에 의존하도록 기존 해쉬함수 MD5를 개조한 알고리즘이다. 따라 서 해쉬값을 계산하는 모든 단계에서 키가 사용된다. 방법 2는 메시지를 대칭암호알고리즘을 이용하여 CBC 또는 CFB 모드로 암호화한 다음 마 지막 블록을 활용하는 방법이다. 이것에 대해서는 7.4.3절에서 자세히 논한다. 방법 3은 기 존 해쉬함수를 변경하지 않고 해쉬함수의 입력 형태를 변경하는 방법이다. 즉, 해쉬함수의 입력으로 메시지뿐만 아니라 키를 포함하는 방법을 말한다. 방법 3에 대해서는 7.4.4절에서 자세히 논한다. 이 외에 대안으로 다음과 같은 방법을 생각해 볼 수도 있다. l 대안 1. 해쉬함수와 대칭암호알고리즘을 함께 사용 l 대안 2. 해쉬함수와 비대칭암호알고리즘을 함께 사용 대안 1의 경우에는 다음과 같이 메시지 해쉬값을 대칭암호알고리즘을 암호화한 암호문을 MAC으로 활용하는 것을 생각해 볼 수 있다.
이와 같은 방식은 MAC으로 충분히 활용 가능하지만 이 때 사용된 암호키가 다른 용도로 사용된다면 의도하지 않게 어떤 메시지에 대한 MAC 값이 노출될 수 있는 문제점이 있다. 대안 2는 메시지 해쉬값에 전자서명을 하는 것을 생각해 볼 수 있다. 이 대안은 MAC 대신 에 전자서명을 사용하는 것을 의미하며, 해쉬함수를 이용한 전자서명은 MAC과 유사한 효과 를 얻을 수 있지만 다음과 같은 측면에서 차이가 있다. l 첫째, 전자서명은 해쉬함수나 대칭암호알고리즘을 이용한 MAC보다 보통 비용이 비싸다. l 둘째, 전자서명은 누구나 확인할 수 있다. 보통 MAC은 대칭키를 소유한 사용자만 확인 이 가능하다. l 셋째, MAC은 부인방지 기능을 제공할 수 없으나 전자서명은 제공이 가능하다. 7.4.3 대칭 암호알고리즘을 이용한 MAC 구현 이미 배운 바와 같이 블록방식의 대칭 암호알고리즘을 CBC나 CFB 모드를 사용하여 메 시지를 암호화하면 그것의 마지막 블록 값은 그 메시지의 MAC 값으로 활용할 수 있다. 이 때 마지막 블록 전체를 MAC 값으로 사용할 수 있고, 왼쪽 비트만 MAC 값으로 사용할 수 있다. 마지막 블록 전체 대신에 이보다 작은 왼쪽 비트만 사용하는 것은 전사공격을 더욱 어렵게 만들기 위함이다. 물론 비트의 수가 적으면 임의로 추측할 확률( )은 증가한 다. 하지만 보유하고 있는 쌍의 개수가 많으면 이와 같은 방법을 통해 안전성을 높이는 효 과는 적다. 국제 표준 ISO 8731-1에 DES 암호알고리즘을 이용한 MAC이 정의되어 있다. 이 MAC은 다음과 같은 단계를 통해 MAC 값을 계산한다.
l 단계 1. 초기벡터 IV를 모두 0으로 설정한다. 메시지가 블록의 배수가 아니면 정해진 채 우기를 한다. l 단계 2. 전체 메시지를 CBC 모드로 암호화한다. l 단계 3. 마지막 블록을 단계 2에서 사용하였던 키와 다른 키로 복호화하고, 이것을 다시 단계 2에서 사용하였던 키로 암호화한다. 결과 블록 전체를 MAC 값으로 사용하거나 왼 쪽 비트만 MAC 값으로 사용할 수 있다. 단계 3과 같은 안전성 강화 기술을 사용하지 않으면 다음과 같은 위조가 가능하다. 여기서 ⊥가 에 대한 64 비트 블록 표현이라 하자. 즉, ⊥은 모든 비트가 0인 64비트 블록을 의미한다. l 이 64 비트 평문 블록이고, 이것에 대한 DES-CBC-MAC 값은 다음과 같다.
⊕ ⊕⊥ l 이면 이것에 대한 DES-CBC-MAC 값은 다음과 같다.
⊕ l ⊥에 대한 DES-CBC-MAC 값은 다음과 같으며, 이 값은 와 같다.
⊥ ⊥⊕ ⊕ 즉, 에 대한 MAC 값을 가지고 있고, 이 MAC 값에 대한 암호화 값을 획득하면 이 공격 자는 ⊥에 대한 MAC 값을 얻을 수 있다. 다음과 같은 위조 방법도 있다. 공격자가 , , 에 대한 MAC 값을 가지고 있다고 갖 정하자. 각 MAC 값은 다음과 같다. 여기서 , , 는 각각 64비트 블록이다. l , , ⊕ 그러면 공격자는 ⊕⊕ 에 대한 MAC 값을 얻을 수 있으며, 이 MAC 값은 ⊕ 와 동일하다. 그 이유는 다음과 같다.
⊕ ⊕⊕ ⊕ 단계 2까지만 사용하는 방식은 미국 표준 FIPS PUB 113에 정의되어 있다. 단계 3에 제 시된 강화 기술은 Black과 Rogaway가 제안한 방식이며, Iwata와 Kurosawa는 다음과 같은 강화 기술을 제안하였다. 여기서 이 마지막 평문 블록이면 마지막 암호문 블록은 기존과 달리 또 다른 키를 하나 더 활용하여 ⊕ ⊕ 과 같이 계산한다. 7.4.4 일반 해쉬함수를 이용한 MAC 구현 해쉬값을 계산할 때 메시지뿐만 아니라 암호키를 포함시켜 계산하여 그 값을 MAC 값으 로 사용하는 것을 생각해 볼 수 있다. 특히, 해쉬함수의 일방향 특성 때문에 이 방법을 사
용하면 MAC 값으로부터 암호키를 공격자가 계산하는 것은 계산적으로 가능하지 않다. 하지 만 이것만으로는 MAC의 안전성을 보장할 수 없다. 먼저 일반 해쉬함수 를 이용하여 메시지 에 대한 MAC 값을 와 같이 계산한 다고 가정하자. 또 사용한 해쉬함수 가 SHA-1과 같이 어떤 일정 블록 단위로 동일한 연 산을 반복하여 계산하는 해쉬함수라 하고, 이 때 는 해쉬함수에 적용할 때 채우기가 필 요 없다고 가정하자. 그러면 공격자는 키를 모르는 상태에서 ′에 대한 MAC 값을 계산 할 수 있다. 해쉬함수 가 블록 단위로 나누어 반복적으로 동일한 연산을 적용하는 해쉬함 수이므로
해쉬함수에서
사용하는
초기값
대신에
를
초기값으로
사용하면
′ 을 계산할 수 있다. 반대로 대신에 형태를 사용하는 것을 고려해 볼 수 있다. 이 경우에는 해쉬함수의 반복적 계산 특성을 이용하여 ′ 를 계산하는 것이 어렵지만 임의의 메 시지를 앞에 추가하는 ′ 를 계산할 수 있는 가능성이 있다. 또한 생일 파라독스를 이용하여 ′ 인 ′을 찾아내면 키를 모르는 상태에서는 ′에 대한 MAC 값을 계 산할 수 있는 가능성이 있다. 따라서 형태로 계산하는 것이 안전하다. 여기서 는 를 해쉬함수에 한 블 록으로 만들기 위한 채우기 값이다. 이것은 최소 두 번의 내부 연산이 수행되도록 하기 위 함이다. 다른 대안으로 , 형태도 제안되어 사용되고 있 다.
<그림 7.2> HMAC 표준
IETF에서 국제 표준으로 제정된 MAC은 형태이다. 이 표준은 SHA-1 해쉬함수를 사용하며, MAC을 계산하는 방법은 다음과 같으며 그림 7.2에 기술되어 있다. l 단계 1. 키 가 64 바이트보다 작으면 0으로 채우기하여 SHA-1의 내부 블록과 같은 크 기로 만든다. 만약 키가 64 바이트보다 크면 를 해쉬한 후에 0으로 채우기하여 내부 블록과 같은 크기로 만든다. l 단계 2. 단계 1에서 만든 블록과 64 바이트가 모두 0x36인 또 다른 블록 ipad와 XOR
연산을 한 후에 입력 와 비트 결합하여 그것을 입력으로 해쉬함수 값을 구한다. l 단계 3. 단계 1에서 만든 블록과 64 바이트가 모두 0x5C인 또 다른 블록 opad와 XOR 연산을 한 후에 단계 2에서 구한 해쉬값과 비트 결합하여 그것을 입력으로 해쉬함수 값 을 구한다. 즉, 메시지 에 대한 MAC 값은 다음과 같다.
⊕ ⊕ 참고문헌 [1] Secure Hash Standard, FIPS Pub 180-1, Apr. 1995. [2] Computer Data Authentication, FIPS Pub 113, May 1985. [3] John Black and Phillip Rogaway, "CBC MACs for Arbitrary-Length Messages: The Three-Key Constructions," Advances in Cryptology, Crypto 2000, LNCS 1880, Springer, pp. 197‒215, 2000. [4] Tetsu Iwata and Kaoru Kurosawa, "OMAC: One-Key CBC-MAC," Proc. of the Fast Software Encryption 2003, LNCS 2887, Springer, pp. 129‒153, 2003. [5] H.
krwaczyk,
M.
Bellare,
R.
Canetti,
HMAC:
Keyed-Hashing
for
Message
Authentication, RFC 2104, Feb. 1997. 연습문제 1. SHA-1의 경우 입력이 512비트의 정확한 배수가 아니면 채우기를 한다. 만약 해쉬함수를 계산한 측과 이것을 확인하는 측이 다른 채우기를 사용하면 어떤 문제가 발생하는가? 또 DES-CBC-MAC에서 IV값으로 블록의 모든 비트가 0인 블록을 사용한다. 그 이유는 무엇 인가?
제 8 장 공개키 기반구조 8.1 인증서 공개키 암호알고리즘을 암호프로토콜에서 활용할 경우 반드시 보장되어야 하는 것은 공개 키의 인증이다. 즉, 주어진 공개키가 누구의 키인지 그것을 사용하는 프로토콜의 참여자가 확신할 수 있어야 한다. 만약 이것이 보장되지 않으면 예 8.1처럼 다양한 공격이 가능하다.
예8.1) 공개키 방식에서 Carol의 공격에 의해 Carol의 공개키인 +KC를 Bob의 공개키로 Alice가 믿게 되면 어떤 문제점이 발생하는가? Alice가 Bob에게 메시지 M을 비밀스럽게 전달하고 싶으면 Bob의 공개키 +KB로 M을 암 호화하여 전달해야 한다. 그러면 오직 Bob만이 자신의 개인키를 이용하여 복호화할 수 있다. 하지만 이 경우에 Alice는 +KB가 아닌 +KC로 메시지를 암호화하여 전달하게 된다. 그러면 Bob은 메시지를 얻을 수 없고, Carol만 메시지를 얻을 수 있다. 뿐만 아니라 만 약 Carol이 자신의 개인키 –KC를 이용하여 메시지에 서명하여 Alice에게 주면 Alice는 이것을 Bob이 서명한 것이라고 착각하게 된다.
공개키가 누구의 공개키인지 참여자들이 확신을 가질 수 있도록 하기 위해 가장 많이 사 용하는 것이 인증서(certificate)이다. 인증서는 공개키와 그것의 소유자를 바인딩시켜주는 전 자문서이며, Kohnfelder가 1978년에 처음으로 제안하였다. 인증서는 보통 신뢰할 수 있는 인증기관(CA, Certification Authority)이 전자서명하여 생성한다. 즉, 인증기관이 공개키를 공 증해준다고 생각하면 된다. 또 인증기관이 전자서명을 생성하므로 유효한 인증서는 오직 인 증기관만 발급할 수 있음을 의미한다. 오늘날 사용되는 대부분의 인증서는 현재 X.509 버전 3 표준을 따르고 있다. 이 표준 외에도 SPKI(Simple Public Key Infracstructure) 인증서, PGP(Pretty Good Privacy) 인증서가 있다.
8.2 인증서의 구성 인증서는 공개키와 그것의 소유자를 바인딩시켜주는 전자문서이기 때문에 다음과 같은 정 보들을 인증기관이 전자서명하여 발급하게 된다. l 일련번호: 인증서를 발급한 인증기관 내의 유일번호이다. l 버전: X.509 버전을 나타내며, 현재는 버전 3.0을 사용하고 있다. l 서명 알고리즘: 이 인증서를 발급할 때 사용한 서명 알고리즘의 식별자 –
예) SHA1 with RSA Encryption
l 발급자: 이 인증서를 발급한 인증기관의 DN(Distinguished Name) l 유효기간: 이 인증서가 유효기간을 나타내며, 시작 날짜(not valid before)와 만료 날짜 (not valid after)를 기록한다.
l 주체(subject): 이 인증서의 소유자 DN l 주체의 공개키 정보: 공개키 값, 알고리즘 식별자 등으로 구성된다.
<그림 8.1> 인증서
여기서
DN이란
X.500
표준에
따라
명명된
이름을
말한다.
X.500은
C(Country),
O(Organization), OU(Organizational Unit), CN(Common Name)과 같은 필드를 사용하여 명 명한다. X.500을 이용한 명명의 예는 다음과 같다. 예) C=KR, O=한국기술교육대학교, OU=인터넷미디어공학부, CN=김상진 인증서에는 추가적으로 다음과 같은 정보를 확장 필드에 포함할 수 있으며, 기본정보와 추 가정보를 모두 해쉬한 값에 전자서명하여 발급된다. 확장 필드 중에 일부는 필수 요소가 있 으며, 이들 필수 요소는 반드시 인증서에 포함되어야 한다. l 키사용 용도: 인증서에 포함된 공개키의 사용 용도를 나타낸다. –
예) 전자서명, 부인방지, 키 암호화, 데이터 암호화, 키 동의, 인증서 서명 등
–
인증기관의 인증서의 경우에는 인증서 발급(keyCertSign), 인증서 폐지 목록(CRL, Certificate Revocation List) 발급(cRLSign), 두 가지 요소는 반드시 설정되어 있어야 한다. 인증서 폐지에 대해서는 8.5절에서 자세히 설명한다.
l 인증기관 공개키 식별자: 인증서를 확인할 때 사용할 공개키의 유일 식별자를 나타낸다. 인증기관은 여러 개의 공개키 쌍을 사용할 수 있다. 따라서 이들 중 어떤 쌍을 이용하여 이 인증서를 발급하였는지 나타내준다. –
자체 서명 인증서를 제외한 모든 인증서의 필수 요소
l 주체 공개키 식별자: 이 인증서에 포함된 공개키의 유일 식별자를 나타낸다. 한 주체가 여러 개의 공개키를 가질 수 있으며, 이들을 구분하기 위한 식별자이다.
–
인증기관 인증서의 경우에는 필수 요소
l 인증서 폐지 목록 분배점(distribution point): 이 인증서의 폐지 여부를 확인하기 위한 인 증서 폐지 목록이 있는 위치 l 기본 제약(basic constraints): 이 인증서가 인증기관 인증서인지 여부를 나타낸다. 사용자 들의 인증서에는 사용되지 않는 필드이다. –
인증기관 인증서의 경우에는 필수 요소
l 최신 CRL(freshest CRL): 최신 델타 CRL의 위치를 나타낸다. l 개인키 유효기간: 이 인증서에 바인딩되어 있는 공개키에 대응되는 개인키의 유효기간
<그림 8.2> 개인키의 유효기간
그림 8.2처럼 전자서명의 경우 서명할 수 있는 유효기간과 서명을 확인할 수 있는 유효기간 이 보통 다르다. 이것은 개인키가 만료되어 더 이상 이 개인키로 서명할 수는 없지만 그 개 인키로 기존에 서명된 전자서명은 검증할 수 있어야 하기 때문이다. 데이터나 키 암호화가 목적인 경우에는 개인키와 공개키의 유효기간이 보통 같다.
8.3 인증서의 검증 인증서를 검증하기 위한 절차는 크게 다음과 같은 네 단계로 이루어진다. l 단계 1. 인증서의 서명 확인 l 단계 2. 인증서의 유효기간 확인 l 단계 3. 인증서의 사용 용도 확인 l 단계 4. 인증서의 폐지 여부 인증서의 서명 확인은 인증서 확장 필드에 있는 인증기관 공개키 식별자 의해 식별되는 인증기관의 공개키를 이용하여 확인해야 한다. 이 때 인증기관의 공개키를 사용하기 위해서 는 이 공개키가 포함된 인증서를 추가로 확인해야 한다. 인증기관의 인증서는 보통 상위 인 증기관이 발급하며, 이 경로를 따라 올라가면 최상위 인증기관의 인증서까지 확인해야 한 다. 이 때 최상위 인증기관은 자체 서명 인증서(self-signed certificate)를 사용한다. 자체 서 명 인증서란 인증서에 포함된 공개키의 대응되는 개인키로 인증서를 생성하는 것을 말한다. 이 처럼 인증서의 서명을 확인하기 위해서는 추가적으로 여러 개의 인증서를 검증해야 한 다. 하지만 한번 검증된 인증서는 매번 다시 검증하지 않는다. 인증서 정책에 따라 바뀔 수 있지만 보통 한번 확인된 인증서는 캐시에 보관되며 나중에는 유효기간과 폐지여부만 확인
한다. 즉, 캐시에 보관된 인증서를 재사용할 경우에는 단계 2와 단계 4만 수행하여 인증서 를 검증한다.
8.4 공개키 기반구조 공개키 기반구조(public key infrastructure)란 공개키 암호알고리즘을 안전하게 사용하기 위해 필요한 서비스를 제공하기 위한 기반구조를 말한다. 공개키 기반구조의 구성요소는 다 음과 같다. l 정책승인기관(PAA, Policy Approving Authority): 공인인증 서비스 전반의 정책과 절차 수 립 l 정책인증기관(PCA, Policy Certification Authority): PAA에서 승인된 전반적인 정책을 확 장하거나 세부화된 정책 생성 l 인증기관(CA, Certification Authority): 인증서를 발급하는 기관 l 등록기관(RA, Registration Authority): 가입자의 등록과 초기 인증(신원확인)을 담당 l 인증서 디렉토리(certificate directory, certificate repository): 인증서 검색 서비스를 제공 l 키 복구 서버(key recovery server) l 타임 서버(time server) l OCSP(Online Certification Status Protocol) 서버: 인증서의 폐지 여부를 온라인으로 확인 하는 서비스를 제공하는 서버 최상위 인증기관이 보통 PAA 역할을 수행한다. PAA는 보통 PKI 전반에 사용되는 정책과 절차를 수립하며, 이 정책과 절차는 PKI의 모든 구성요소가 따라야 한다. PCA가 수립한 정 책의 적법성을 검증하고 하부 PCA가 정해진 정책 준수 상태를 감시한다. PKI 내/외에서 상 호인증(cross-certification)을 위한 정책을 수립하고 승인한다. 상호인증에 대해서는 8.6.2절에 서
자세히 설명한다. PCA는 PAA에서 승인된 전반적인 정책을 확장하여 자신의 도메인 내의 가입자와 인증기
관이 따라야 할 정책을 수립한다. 예를 들어 인증서의 유효기간을 얼마로 할 것인지, 인증 서 폐지 목록의 발급 주기 등을 결정한다. 등록기관은 가입자의 신원을 확인해주는 기관이다. 만약 등록기관이 없으면 인증기관이 등록기관의 역할까지 수행해야 한다. 오늘날 인터넷 뱅킹을 보면 은행이 등록기관 역할을 하고 있다고 보면 된다. 등록기관은 가입자의 신원을 확인한 다음에 신원 확인 증명서를 인 증기관에게 전달한다. 등록기관은 또 가입자가 원하면 가입자를 대신하여 공개키 쌍을 생성 해줄 수 있다. 이 경우 키 복구와 백업 서버 역할까지 등록기관이 할 수 있다. 가입자의 인 증서 폐지 요청을 받아 그 요청의 정당성을 확인하는 역할도 수행한다. 인증기관은 PKI의 구성요소 중 가장 중요한 요소이다. 인증기관의 역할은 크게 다음과 같 다. l 인증서 발급 l 인증서 폐지 l 인증서 정지
l 인증서 갱신(certificate renewal) l 인증서 재발급(certificate update) 인증서의 발급은 등록기관의 도움을 받아 신원을 명백하게 검증한 다음에 발급하여야 한 다. 인증서의 발급은 인증기관의 서명키를 이용하여 발급하기 때문에 인증기관의 서명키가 공개키 기반구조의 안전성에 매우 중요하다. 이 때 적용되는 중요한 규칙이 하나 있다. 인 증기관은 자신의 인증서 유효기간을 초과하는 인증서를 절대 발급하지 않는다. 인증서의 유효기간을 적절하게 설정하여도 유효기간 내에 인증서를 폐지하고 종종 새로 발급받을 필요가 있다. 이것은 신용카드와 그 원리가 비슷하다. 신용카드도 유효기간이 정 해져 있지만 분실하거나 도난 되었을 경우에는 유효기간이 만료되지 않아도 새롭게 재발급 받아야 한다. 인증서도 이와 동일하게 개인키를 분실하였거나 도난당하였거나 인증서에 포 함된 정보가 변경되면 인증서의 유효기간이 만료되지 않아도 새로 발급받아야 한다. 인증서의 정지는 폐지와 달리 일시적으로 인증서의 사용을 정지하는 것이다. 예를 들어 해외 출장으로 인하여 한 달 동안 인증서를 사용할 필요가 없는 경우 이 인증서를 한 달 동 안 정지시켜 놓을 수 있다. 인증서의 갱신은 인증서의 유효기간이 만료되어 다시 발급받는 것을 말하며, 이 때 유효 기간만 변경(renewal)할 수도 있고, 공개키쌍을 새롭게 생성하여 발급(update)받을 수 있다. 전자를 갱신이라 하고, 후자는 재발급이라 한다. 인증서의 변경과 재발급은 모두 기존 인증 서의 폐지를 전제로 한다. 인증서 디렉토리는 인증기관의 인증서, 가입자의 인증서, 인증서 폐지 목록의 공개 보관 소이다. 즉, 사용자들은 이 디렉토리에 접근하여 자신이 필요한 상대방의 인증서를 얻을 수 있다. 국제 표준으로 X.500이 있지만 이 표준보다는 LDAP(Lightweight Directory Access Protocol)을 이용하여 보통 구현된다. 하지만 현재 인증서 디렉토리는 널리 사용되고 있지 못하다.
8.5 인증서 폐지 인증서가 어떤 이유에서든지 폐지되면 이 인증서를 더 이상 사용할 수 없으며, 그것의 사 용은 매우 위험할 수 있다. 예를 들어 공격자가 인증서에 포함된 공개키에 대응되는 개인키 를 확보하면 이 인증서는 더 이상 그 원래의 역할을 할 수 없다. 따라서 인증서 폐지의 목 적은 시기적절하게 폐지를 처리하여 폐지된 인증서의 사용에 따른 피해를 줄이는 것이다. 앞서 언급한 바와 같이 신용카드와 인증서는 폐지 측면에서 유사한 점이 많다. 신용카드 의 경우 초기에는 각 상점에게 폐지된 신용카드 번호 목록을 분배하여 신용카드 폐지를 처 리하였다고 한다. 즉, 상점들은 신용카드로 거래를 승인하기 전에 이 목록에서 카드의 유효 성을 확인해야 했다. 현재는 온라인으로 신용카드의 폐지 여부를 확인한다. 인증서도 이와 비슷한 방법으로 인증서 폐지를 처리한다. 인증기관은 주기적으로 폐지된 인증서 목록을 발급하며, 이 목록을 인증서 폐지 목록이라 한다. 이 목록도 X.509 표준에 정의되어 있으며, 인증서와 마찬가지로 임의로 조작되거나 만들 수 없어야 한다. 따라서 이 목록도 인증서와 마찬가지로 인증기관이 전자서명을 하여 발급한다. 인증서 폐지 목록은 보통 폐지된 인증서들에 관한 정보만 유지한다. 이와 같은 접근 방법
을 나쁜 목록(bad-list) 방법이라 한다. 이와 반대로 좋은 목록(good-list) 방법도 있다. 좋은 목록의 경우에는 이 목록에 포함된 인증서만 사용해야 하며, 나쁜 목록은 이 목록에 포함되 지 않은 인증서만 사용해야 한다. 좋은 목록 방법은 나쁜 목록 방법에 비해 다음과 같은 이 유에서 안전하다. 좋은 목록에 포함되어 있음에도 불구하고 유효하지 않은 인증서일 수 있 고, 나쁜 목록에 포함되어 있지 않음에도 불구하고 유효하지 않을 수 있다. 이 측면에서 차 이가 없다. 하지만 좋은 목록이 공개되어 있으므로 잘못된 인증서를 발견하여 조치를 취할 확률이 나쁜 목록에 포함되어 있지 않은 유효하지 않은 인증서를 발견하여 조치를 취할 확 률보다 높다. 이 측면에서 좋은 목록 방법이 보다 안전하다. 하지만 좋은 목록은 나쁜 목록 보다 상대적으로 매우 크며, 나쁜 목록보다 빠르게 갱신되어야 한다. 따라서 효율성 때문에 보통 나쁜 목록 방법을 사용한다. 8.5.1 인증서 폐지 목록의 구성 인증서 폐지 목록은 그림 8.3처럼 각 폐지된 인증서마다 그것의 일련번호, 폐지날짜, 폐지 사유를 포함하고 있으며, 인증서와 비슷하게 기본적으로 다음과 같은 정보가 포함된다.
<그림 8.3> 인증서 폐지 목록
l 버전: 인증서 폐지 목록의 버전을 나타내며, 값으로 “version 2"를 사용하거나 이 필드를 사용하지 않는다. 이 필드를 사용하지 않으면 버전 1을 나타낸다. l 서명 알고리즘: 이 인증서 폐지 목록을 발급할 때 사용한 서명 알고리즘의 식별자 l 발급자: 이 인증서 폐지 목록을 발급한 인증기관의 DN(Distinguished Name) l 발급날짜: 이 인증서 폐지 목록을 발급한 날짜 l 다음 발급날짜: 차기 인증서 폐지 목록을 발급할 날짜
폐지된 각 인증서마다 기본적으로 인증서의 일련번호와 폐지날짜가 유지되며, 추가적으로 다음을 포함할 수 있다. l 폐지 사유: 키 노출, 소속 변경 등 l 정지 여부: 이 필드가 설정되면 폐지된 것이 아니라 일시적으로 정지된 상태를 나타낸 다. 인증서 폐지 목록도 이 기본 정보 외에 확장 필드에 다음과 같은 정보를 포함할 수 있다. l 인증기관 공개키 식별자: 이 인증서 폐지 목록을 확인할 때 사용하는 공개키에 대한 정 보 l 델타 정보(delta information): 이 CRL에 대한 델타 CRL이 존재한다는 것을 나타낸다. 이 항에는 델타 CRL의 위치 정보와 선택적으로 그 다음 델타 CRL 발급 시간 정보를 나 타낸다. l 델타 CRL 지시자(delta CRL indicator): 이 CRL이 델타 CRL인지 여부를 나타낸다. l CRL 영역(CRL scope): CRL이 다양한 형태로 분할되어 제공될 경우 이 필드는 이 CRL 이 어떤 기준으로 분할되어 있으며, 이 CRL에는 어떤 인증서들이 포함되어 있는지 나타 낸다. l 상태 참조(status referrals): 방향전환(redirect) CRL에서 사용 l 발급 분배점(issuing distribution point): CRL 분배점 이름과 이 CRL에 포함되어 있는 인 증서들의 종류를 나타낸다. 델타 CRL, 방향전환 CRL은 다음 절에서 보다 자세히 설명한다. 8.5.2 인증서 폐지 목록의 종류 인증기관의 도메인에 속한 폐지된 모든 인증서를 하나의 목록에 유지할 경우 이 목록을 완전 인증서 폐지 목록(complete CRL)이라 한다. 완전 인증서 폐지 목록은 목록이 너무 커 질 수 있어 접근 비용이 증가하여 효율성이 떨어질 수 있다. 즉, 확장성 측면에서 바람직하 지 못하다. 하지만 인증서 폐지 목록이 무한정으로 커지는 것은 아니다. 인증서 폐지 목록 에는 유효기간이 남아 있는 인증서들 중에서 폐지된 것들만 유지된다. 즉, 새롭게 폐지된 인증서들이 추가되지만 한편으로는 폐지된 인증서들 중에서 유효기간이 끝난 인증서들은 이 목록에서 제거된다. 유효기간이 끝난 인증서들은 유효기간 때문에 이 목록에 없어도 사용자 들은 사용하지 않는다. X.509는
인증서
폐지
목록을
EPRL(End-entity
Public-key
Revocation
List)과
CARL(Certification Authority Revocation List)로 나누어 발급하도록 하고 있다. EPRL은 최종 사용자들의 폐지된 인증서 정보를 유지하며, CARL은 인증기관의 폐지된 인증서 정보를 유 지한다. CARL은 빈 목록이거나 크기가 매우 작을 것이므로 완전 인증서 폐지 목록 형태로 유지가 가능하지만 EPRL은 완전 인증서 폐지 목록 형태로 유지하는 것이 어렵다. 따라서 EPRL은 다양한 방법으로 분할하여 유지된다. CRL 분배점은 단일 도메인의 폐지된 인증서들을 다양하게 분류하여 여러 개의 CRL에 나
누어 관리할 수 있도록 해준다. CRL 분배점은 인증서의 확장 필드에 기록되는 정보로서 이 인증서와 관련된 폐지 정보가 수록된 CRL의 위치(DNS 이름, IP 주소 등)를 나타낸다. 이것 을 사용하면 CRL를 관리할 수 있는 크기로 나누어 제공할 수 있으며, 사용자가 사전에 CRL이 어디에 있는지 알 필요가 없다. 즉, 그림 8.3과 같이 인증서를 확인할 때 CRL 분배 점 정보를 이용하여 그 위치에서 최신의 CRL를 다운받아 이 인증서의 폐지 여부를 확인할 수 있다. 그림 8.4에 일관성 확인은 CRL 교체 공격을 방지하기 위한 수단이다. CRL 교체 공격이란 원래 위치에 있는 CRL을 다른 위치에 CRL로 교체하는 공격을 말한다. 만약 사용 자가 교체된 사실을 모르면 폐지가 된 인증서를 유효한 것으로 착각할 수 있다. 보통 일련 번호, 인증서의 종류, 폐지 사유 등을 기준으로 CRL을 분할하여 유지한다. 이 때 폐지 사유 의 경우에는 CRL 분배점만을 이용하여 분할하여 유지할 수 없다. 이것은 인증서를 발급할 시점에서는 향후에 이 인증서가 어떻게 폐지될지 알 수 없기 때문이다.
<그림 8.4> CRL 분배점
CRL 분배점을 사용할 경우 CRL 분할이 고정된다. 즉, 인증서를 발급할 시점에서 그것의 CRL 위치를 미리 결정하여 인증서에 그 정보를 기록해야 한다. 따라서 인증서는 그 인증서 의 유효기간이 끝날 때까지 CRL의 위치가 고정된다. 그러나 보다 유연하게 CRL를 관리하 기 위해서는 CRL의 크기와 위치를 동적으로 변경할 필요가 있다. 방향전환 CRL(redirect CRL)은 CRL 분배점을 사용할 경우 각 인증서와 관련된 폐지 정보 가 있는 CRL의 위치가 고정된다는 문제점을 해결하고자 X.509 2000년 버전에 추가된 개념 이다. 인증서를 발급할 때 그 인증서와 관련된 폐지 정보가 수록될 CRL의 위치를 CRL 분 배점에 직접 기록하지 않고 이 인증서와 관련된 방향전환 CRL의 위치 정보를 기록한다. 이 인증서의 폐지 여부를 알고 싶으면 그림 8.5와 같이 이 인증서와 관련된 CRL를 바로 다운 받을 수 없고, 먼저 방향전환 CRL을 검색하여 실제 CRL의 위치를 알아내야 한다. 따라서 특정 인증서와 관련된 폐지 정보가 기록된 CRL의 위치를 변경하고자 하면 방향전환 CRL의 정보만 변경하면 된다. 방향전환 CRL은 확장에 있는 상태참조 필드를 이용하여, 하나의 방 향전환 CRL에는 여러 개의 상태참조 필드가 존재할 수 있다. 사용자는 방향전환 CRL에 있 는 상태참조 필드에 있는 CRL 영역 정보를 이용하여 원하는 실제 CRL의 위치를 찾을 수 있다.
<그림 8.5> 방향전환 CRL
<그림 8.6> 델타 CRL
CRL 분배점은 폐지된 인증서들을 다양한 기준에 따라 분할하여 제공할 수 있도록 하여 완전 인증서 폐지 목록의 크기 문제점을 극복하고 있다. 이 문제점을 극복하는 또 다른 방 법은 델타 CRL(delta CRL)이다. 델타 CRL은 점진적으로 폐지 정보를 공개할 수 있도록 해 준다. 델타 CRL은 그것에 기준이 되는 기준 CRL(base CRL)이 존재하며, 델타 CRL은 기준 CRL이 발표될 당시에 없었던 내용만 추가된다. 따라서 델타 CRL의 크기는 상대적으로 매 우 작다. 델타 CRL의 동작 원리를 보다 구체적으로 설명하면 다음과 같다. l CA는 주기적으로 완전 CRL을 발급한다. 이 주기 사이에 CA는 델타 CRL들을 발급한다. 델타 CRL은 기준 CRL이 발급된 이후에 새롭게 폐지된 CRL 정보를 유지하며, 여기에는 이전 델타 CRL에 포함된 정보까지 유지된다. l 사용자는 어떤 인증서의 폐지 여부를 확인해야 할 때 캐시에 현재 유효한 완전 CRL을
가지고 있지 않으면 새롭게 완전 CRL을 다운받아 검증한다. 사용자들은 보통 다운받은 CRL을 그 유효기간 동안 캐시에 유지한다. 다운받은 완전 CRL의 주기 동안에 최신 정 보를 얻고 싶으면 이 CRL의 최신 델타 CRL을 다운받아 확인한다. 간접 CRL(indirect CRL)은 여러 인증기관이 발급한 CRL를 하나로 결합하여 사용할 수 있 도록 해준다. 간접 CRL은 사용자들이 여러 개의 CRL를 다운받아 확인해야 하는 문제점을 해결하여 주지만 반대로 완전 CRL처럼 크기 문제가 발생할 수 있다. 8.5.3 온라인 질의 메커니즘 온라인 질의 메커니즘이란 온라인으로 특정 인증서의 폐지 여부를 문의하는 것이다. 이와 같은 메커니즘은 다음과 같은 측면에서 주기적 공표 메커니즘과 차이가 있다. 온라인 질의 메커니즘은 이것을 서비스해주는 온라인 서버가 항상 정상적으로 동작을 해야 한다. 반면에 주기적 공표 메커니즘은 사용자들이 정보를 캐쉬할 수 있으므로 오프라인 작업이 가능하다. 온라인
질의
메커니즘은
IETF
PKIX
워킹그룹에서
주로
연구되었다.
OCSP(Online
Certificate Status Protocol)는 1999년에 RFC 2560으로 표준화되었다. OCSP는 매우 단순한 질의 프로토콜로서 OCSP 요청에 대해 OCSP 서버는 “good", "revoked", "unknown" 세 가 지 방법으로 응답한다. 즉, 인증서가 유효하다, 유효하지 않다, 모른다, 세 가지 형태로 응답 한다. OCSP 서버는 기존 CRL을 이용하여 사용자를 대신하여 상태를 검색할 수도 있고, 다 른 방법을 통해 인증서의 폐지 여부를 확인하여 응답할 수 있다. OCSP의 응답은 반드시 서명되어 전달해야 한다. OCSP는 사용자의 요청과 응답에 대해서만 정의되어 있고, OCSP 서버가 어떻게 최신의 인증서 폐지 정보를 획득하는지에 대해서는 정의되어 있지 않다. IETF PKIX 워킹그룹은 OCSP 외에 SCVP(Simple Certificate Validation Protocol)도 제안 하고 있다. SCVP는 OCSP와 달리 인증서 폐지 정보만 알려주는 것이 아니라 인증서 검증 자체를 대신하여 주는 프로토콜이다.
8.6 신뢰 모델 하나의 인증기관만이 존재하는 것이 아니기 때문에 인증기관들 간에 신뢰 모델이 전체 PKI 동작에 중요한 역할을 하게 된다. 8.6.1 순수 계층구조 모델 모든 인증기관이 단일 계층구조를 형성하고 있으면 순수 계층구조 모델이라 한다. 이 계 층구조에서 부모 인증기관이 자식 인증기관의 인증서를 발급하여 주며, 단말 인증기관은 일 반 가입자의 인증서를 발급하여 준다. 중간 인증기관(intermediate CA)이란 루트 인증기관과 단말 인증기관을 제외한 나머지 인증기관들을 말하여, 중간 인증기관은 오직 다른 인증기관 들만 인증을 한다. 루트 인증기관은 자신을 인증해줄 인증기관이 없으므로 자체 서명 인증 서를 사용한다. 따라서 순수 계층구조 모델에서 루트 CA는 모든 신뢰 관계의 공통된 기준 점(anchor)이 된다. 즉, 모든 가입자는 공통적으로 루트 CA는 신뢰를 하고 있으며, 루트 CA 를 포함하여 자신의 위치부터 루트 CA까지 경로 상에 있는 모든 인증기관의 인증서를 자신
의 시스템에 유지한다.
<그림 8.7> 순수 계층구조 모델
그림 8.7에서 Alice가 Bob의 인증서를 확인하기 위해서는 루트 인증서를 이용하여 인증기 관 CA2의 인증서를 확인하고, 인증기관 CA2의 인증서를 이용하여 인증기관 CA1의 인증서 를 확인한 다음, 인증기관 CA1의 인증서를 이용하여 Bob의 인증서를 확인해야 한다. 이 때 Alice가 Bob을 인증하기 위한 인증 경로(certification path)는 ROOT→CA2→CA1이 된다. 여 기서 인증경로란 확인하고자 하는 사용자가 신뢰하는 기준점에서 출발하여 목적 인증서를 검증하기 위한 순서가 있는 인증서 리스트를 말한다. 인증경로는 크게 순방향(forward) 방식 과 역방향(backward) 방식으로 구성할 수 있다. 순방향이란 목적 인증서에서 출발하여 기준 점까지 찾는 방식을 말하며, 역방향은 기준점에서 출발하여 목적 인증서까지 찾는 것을 말 한다. 순수 계층구조에서는 순방향 방식으로 경로를 보통 형성한다. 그림 8.7에서 Alice가 Bob의 인증서를 확인하기 위한 인증 경로를 형성하는 순방향 방식의 과정은 다음과 같다. Bob의 인증서를 발급한 인증기관의 인증서를 얻고, 그 다음 이 인증기관의 인증서를 발급 한 인증기관의 인증서를 얻는다. 이와 같은 방법으로 기준점까지 찾아간다. 이 그림에서 기 준점은 루트 CA가 된다. 이 모델의 경우에는 하나의 가입자의 인증서를 확인하기 위한 인 증 경로가 고정되어 있어 편리하지만 다음과 같은 문제점이 있다. l 문제점 1. 현실적으로 전세계의 다양한 인증기관을 하나의 순수 계층구조 모델로 구성하 기가 어렵다는 문제점이 있다. 즉, 모든 기관들이 공통으로 신뢰할 수 있는 하나의 루트 기관를 찾기는 어렵다. l 문제점 2. 루트 인증기관이 노출되면 시스템의 모든 인증서를 교체해야 한다. 인증기관의 개인키가 유효기간 내에 노출되어 교체하여야 하는 경우 그 인증기관이 발급 한 모든 인증서를 갱신해야 한다. 이것은 신뢰 모델과 상관없이 어떤 모델에서도 인증기관
의 인증서가 폐지되면 그 인증기관이 발급한 모든 인증서는 갱신되어야 한다. 여기서 갱신 이란 인증서의 유효기간과 인증기관 공개키 식별자 정보를 변경하여 인증기관의 새 개인키 로 다시 발급하는 것을 말한다. 8.6.2 네트워크 구조 모델
<그림 8.8> 상호 인증
모든 인증기관들이 계층구조 모델에서 단말 인증기관 역할을 하고 있고, 인증기관들은 서 로 상호 인증을 통해 연결되어 있다면 순수 네트워크 모델이라 한다. 순수 네트워크 모델은 다른 말로 그물형(mesh) 모델이라 한다. 상호 인증이란 두 개의 인증기관이 서로 상대방의 공개키를 인증하여 주는 인증서를 발급하여 사용하는 경우를 말하며, 이와 같은 인증서를 상호인증서(cross-certificate)라 한다. 그림 8.8에서 Alice의 인증서는 인증기관 CA0가 발급하 였으며, Bob의 인증서는 인증기관 CA1이 발급하였다. 또한 Alice는 CA0를 신뢰하고 있지만 CA1은 신뢰하고 있지 않으므로 Bob 인증서를 확인하기 위해서는 추가적인 인증서가 필요 하다. 즉, Alice는 자신이 신뢰하는 인증기관이 발급한 CA1의 인증서가 필요하다. 상호인증 서는 이 때 사용할 수 있다. Alice는 자신이 신뢰하고 있는 CA0가 발급한 CA1에 대한 역방 향(reverse) 상호인증서가 있으면 이를 통해 Bob의 인증서를 확인할 수 있다. 순방향 (forward), 역방향 상호인증서 용어는 X.509 1997년도 버전에 사용된 용어이다. 이 용어는 현재 사용되고 있지 않지만 CA0 입장에서 다른 인증기관이 발급한 자신의 인증서를 순방향 상호인증서라 하며, 다른 인증기관을 위해 자신이 발급한 인증서를 역방향 상호인증서라 한 다. 그림 8.8에서 CA0 입장에서 CA1이 발급한 본인 인증서를 순방향 상호인증서이며, 자신 이 발급한 CA1 인증서가 역방향 상호인증서가 된다. 2000버전에서는 이 용어 대신에 “issued to this CA”와 “issued by this CA”로 바꾸어 사용하고 있다. 순수 네트워크 모델은 순수 계층구조 모델과 달리 하나의 가입자의 인증서를 확인하기 위 한 경로가 여러 개 존재하며, 경로를 형성하는 과정에서 루프가 발생할 수도 있다. 따라서 경로를 찾는 비용이 계층구조 모델에 비해 비싸다. 그림 8.8에서 Alice가 Bob의 인증서를 확인하기 위한 인증경로는 CA0→CA2→CA1, CA0→CA3→CA2→CA1 등 다양하게 존재한 다. 이 인증경로를 찾는 방법은 다양한 그래프 알고리즘을 활용할 수 있다. 네트워크 모델 에서 인증경로는 순방향과 역방향 방식 모두 사용이 가능하다. 순방향 방식으로 검색하기 위해서는 순방향 인증서 목록을 검색할 수 있어야 한다. 즉, Alice가 Bob의 인증서를 확인하 기 위한 경로를 형성할 때 먼저 CA1의 순방향 인증서를 검색해야 한다. 그림 8.9에서는
CA1의 순방향 인증서는 CA2 밖에 없으므로 그 다음에는 CA2의 순방향 인증서를 검색해야 한다. 반대로 역방향 방식으로 검색하기 위해서는 역방향 인증서 목록을 검색할 수 있어야 한다. 즉, Alice가 Bob의 인증서를 확인하기 위한 경로를 형성할 때 먼저 기준점인 CA0가 발급한 역방향 인증서를 검색한다. 이 경우 CA0가 발급한 역방향 인증서는 CA2와 CA3가 있다.
<그림 8.9> 순수 네트워크 모델
복잡한 네트워크 구조에서는 인증경로를 찾는 것이 쉽지 않을 수 있으며, 가장 효율적인 인증경로를 찾는 것은 어려울 수 있다. 다시 말하면 인증경로가 짧을 수록 인증서를 확인하 는 비용이 저렴하지만 가장 짧은 인증경로를 찾는 것은 매우 어렵고, 그 자체가 비용이 많 이 소요될 수 있다. 즉, 순수 네트워크 모델의 단점을 요약하면 다음과 같다. l 문제점 1. 경로를 찾는 비용이 비싸다. l 문제점 2. 확장성이 떨어진다. 이것을 해결하기 위해 완전 그물형(full mesh) 구조를 사용할 수 있다. 즉, 모든 인증기관 이 상호인증하도록 하는 것이다. 그러면 항상 인증경로의 길이는 2가 된다. 하지만 확장성 이 떨어지며, 현실성이 없는 접근 방식이다. 따라서 현재에는 순수 계층구조와 네트워크 모 델을 결합하여 루트CA 간에는 상호인증을 하는 방식을 사용한다. 이 방법을 혼합 모델이라 한다.
8.6.3 혼합 모델
<그림 8.10> 혼합 모델
이 모델에서는 계층구조와 네트워크 모델을 혼합하여 사용한다. 즉, 전세계의 모든 인증 기관을 단일 계층구조로 형성하기 어렵기 때문에 각 나라에서 하나 또는 두 개의 계층구조 로 모든 인증기관을 구성하며, 계층구조 간에는 상호인증을 통해 관계를 형성한다. 예를 들 어 그림 8.10에서 Bob이 전자서명한 전자우편을 Alice가 수신하였다고 하자. 이 때 Alice는 순방향과 역방향을 모두 이용하여 인증경로를 구성할 수 있다. 먼저 순방향 방식을 이용하 여 CA3→CA2→CA1의 인증경로를 찾은 후에 계층구조가 끝나므로 이 시점부터는 역방향 방식을 이용할 수 있다. 여기서 Alice의 신뢰 기준점은 CA0이므로 CA0부터 CA3까지의 경 로를 역방향 방식을 이용하여 찾아야 한다. 이 예에서는 CA0는 CA5와 CA6에 대한 역방향 상호인증서를 발급하였다. 따라서 CA5와 CA6의 디렉토리를 접근하여 검색한다. 이 경우 CA5 디렉토리에는 CA3에 대한 역방향 상호인증서가 있음으로 최종 인증경로는 CA0→CA5 →CA3→CA2→CA1이 된다.
<그림 8.11> 브리지CA
혼합 모델의 경우에도 모든 루트CA 간에 상호인증을 하게 되면 내부 그물형 구조가 매우 복잡할 수 있어, 여전히 확장성 측면에 문제가 될 수 있다. 이를 극복하기 위해 사용하는 방법이 브리지(bridge) CA 모델이다. 브리지 CA는 루트 인증기관들 사이에 허브 역할을 하 는 CA로서 각 인증기관과 브리지 CA 간에는 상호인증을 통해 연결되어 있다. 8.6.4 푸시 모델 vs. 풀 모델 푸시(push)와 풀(pull) 모델은 인증서를 획득하는 방법에 대한 모델이다. 푸시 모델은 하나 의 인증서를 확인하기 위해 필요한 모든 인증서를 함께 전달하는 방식을 말하고, 풀 모델은 하나의 인증서만 전달하고, 이 인증서를 확인하기 위해 필요한 추가적인 인증서는 사용자가 문의하여 직접 가져오는 방식을 말한다. 순방향 방식의 탐색을 사용할 경우에는 인증서에 있는 발급자 정보를 이용하여 필요한 인증서를 추가적으로 받을 수 있지만 그렇지 않은 경 우에는 가입자가 필요한 인증서를 찾는 것이 어려울 수 있다. CRL과 관련하여 이 용어가 사용되는 경우도 있다. 이 역시 사용자가 필요한 CRL를 문의하여 가져오는 방식이면 풀 모 델이 되고, 주기적으로 보내주거나 인증서를 요청하였을 때 관련 CRL를 함께 보내면 푸시 모델이 된다. 8.6.5 국내 인증체계 국내 인증체계는 그림 8.12와 같다.
<그림 8.12> 국내 인증체계
8.6.6 기타 모델 가장 널리 사용되는 신뢰 모델은 혼합 모델이지만 이 외에 독점 모델, 소수 독점 모델 (oligarchy) 등이 있다. 소수 독점 모델은 다른 말로 웹 모델이라 하며 몇 개의 CA만 존재하 는 모델로서, 현재 브라우저 등에서 널리 사용되는 모델이다. 이 모델에서 제품(브라우저)을 설치하면 여러 개의 CA의 인증서를 자체적으로 설치되며, 이들 CA가 발급한 인증서들은 사용자가 신뢰해야 하는 모델이다.
8.7 공개키 쌍 생성 가입자나 인증기관의 공개키 쌍의 생성은 크게 두 가지 방식으로 생성이 가능하다. 첫째 는 기본 방식(BAS, Basic Authenticated Scheme)이라 하며, 이 경우에는 가입자가 직접 공 개키 쌍을 생성하여 공개키만을 안전하게 인증기관/등록기관에 전달하여 인증서를 발급받는 방식이다. 이 방식은 인증기관이 가입자의 개인키를 모르기 때문에 부인방지에 보다 효과적 이다. 두 번째 방법은 중앙집중 방식(centralized scheme)이며, 이 방식에서는 등록기관이 공개키 쌍을 생성하여 대신 인증서를 발급받아 준다. 이 경우 개인키는 안전하게 가입자에 게 전달되어야 한다. 이 방식은 가입자의 개인키를 등록기관이 알고 있으므로 등록기관에 대한 신뢰가 절대적이어야 한다. 이 방식은 키 위탁과 키 복구가 용이하다는 장점을 가지고 있다. 첫 번째 방식에서는 가입자가 요청한 인증서에 대응되는 개인키를 알고 있다는 것을 반드 시 확인해야 한다. 이와 같은 확인은 그림 8.13부터 8.15에 기술된 프로토콜들을 이용하여 쉽게 확인할 수 있다.
<그림 8.13> 개인키 확인 프로토콜: 서명방식
<그림 8.14> 개인키 확인 프로토콜: 복호화 능력 검증 방식 1
<그림 8.15> 개인키 확인 프로토콜: 복호화 능력 검증 방식 2
그림 8.13 방식에서는 임의의 메시지를 서명하여 인증기관에 전달함으로써 공개키에 대응 되는 개인키를 가지고 있음을 증명하는 방식이고, 그림 8.14와 8.15는 인증기관이 보낸 암 호문을 복호화할 수 있음을 증명하여 개인키를 가지고 있다는 것을 입증하는 방식이다. 그 림 8.15의 경우에는 인증서 자체를 공개키를 암호화하여 전달함으로써 이 방식에서는 대응 되는 개인키가 없는 가입자는 인증서 자체를 얻을 수 없다. 참고문헌 [1] Carlisle Adams and Steve Lloyd, Understanding PKI, 2nd Ed., Addison Wesley, 2003. [2] Steve Lloyd, Understanding Certification Path Construction, PKI Forum White Paper, 2002. [3] M. Myers, R. Ankney, A. Malpani, S. Galperin, C. Adams, X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP, IETF RFC 2560, 1999. [4] M. Cooper, Y. Dzambasow, P. Hesse, S. Joseph, R. Nicholas, Internet X.509 Public Key Infrastructure: Certification Path Building, IETF RFC 4158, 2005. 연습문제 1. Alice는 Bob의 인증서를 이미 정상적인 모든 절차에 따라 검증한 바 있으며, Bob의 인증 서를 자신의 시스템에 보관하고 있다. 그런데 다시 같은 용도로 Bob의 인증서를 사용할 필요가 발생하였다. 이 때 검증 절차에 대해 설명하시오. 2. CRL 교체 공격의 원리를 설명하고, 발급분배점 정보를 CRL 포함하여 이를 방지할 수 있는 이유를 설명하시오. 3. 방향전환 CRL은 발급분배점을 이용한 기존 방식의 어떤 문제점을 극복하기 위한 방법인 지 설명하시오. 4. 신뢰모델에서 순수 계층구조와 네트워크 구조를 비교하시오. 5. 공개키 쌍의 생성에서 기본 키 생성 방식과 중앙집중 방식을 비교하시오.
제 9 장 공개키 암호알고리즘 관련 수학적 배경 공개키 암호알고리즘은 비밀키 암호알고리즘과 달리 대부분 풀기 어려운 계산 문제 (computational problem)에 기반을 두고 있다. 이와 같은 계산 문제들은 풀기 어렵다고 증명 되어 있지는 않다. 즉, 이와 같은 문제를 해결하여 주는 알고리즘들이 존재하지만 가장 좋 은 알고리즘을 사용하더라도 그것을 기반으로 하는 공개키 암호알고리즘의 안전성을 해칠 정도로 적은 비용과 빠른 시간 내에 해결할 수 없다는 것이다. 그러나 반대로 이와 같은 문 제를 효율적으로 해결할 수 있으면 해당 문제에 의존하는 공개키 암호알고리즘의 안전성은 더 이상 보장될 수 없다. 따라서 공개키 암호알고리즘들은 컴퓨팅 기술의 발달로 키의 길이 등을 지속적으로 늘려주어야 하는 문제점을 공통적으로 가지고 있다. 현재 공개키 암호알고리즘에서 가장 많이 사용되는 계산 문제는 인수분해 문제, 이산대수 문제이다. 이 장에서 이와 같은 문제들의 특성을 살펴본다.
9.1 인수분해 문제 정수의 인수분해 문제(integer factorization problem)란 주어진 합성수의 소인수를 모두 찾 는 문제를 말한다. 수학적으로 이 문제를 정의하면 다음과 같다.
정의 9.1 (정수의 인수분해 문제) 양의 정수 이 주어졌을 때 ⋯ 를 만족하는 서로 다른 소수 와 양의 정수 를 찾는 문제를 말한다. 정수의 인수분해 문제와 소수 검사 문제(primality decision problem)를 같은 문제로 생각하 는 경우도 있다. 하지만 어떤 정수가 합성수인지 소수인지 결정하는 것은 그것을 소인수분 해하는 것보다 쉽다. 주어진 정수를 인수분해하는 가장 단순한 방법은 그 수보다 작은 모든 수로 나누어 보는 것이다. 이 때 다음 정리를 이용하면 모든 수로 나누어보지 않고 인수분 해를 할 수 있다. 정리 9.1. 이 합성수이면 은 보다 작은 소인수를 가진다. 증명. 이 합성수이므로 ≤ 로 표현할 수 있다. 그런데 이 때 이 어야 한다. ≥ 이면 · 이므로 이 되어야 한다는 것을 알 수 있다. 뿐만 아니라 1보다 큰 모든 양의 정수는 소인수를 가지므로 는 소인수를 가지며, 이 소인수는 보다 작으므로 은 보다 작은 소인수를 가진다. 따라서 를 소인수분해하기 위해서는 보다 작은 소수들로 나누어 보면 된다. 이와 같은 방법으로 인수분해하는 것을 “trial division"이라 한다. 이 방법을 사용할 경우 최악에는 번 나눗셈을 시도해야 한다. Pollard는 합동을 이용한 두 가지 인수분해 알고리즘을 제안하였다. 첫 번째 알고리즘은 rho 알고리즘이라 하며, 그것의 원리는 다음과 같다. 가 의 소인수일 때 ≡ mod
mod 이면 gcd 은 의 자명하지 않은 약수가 된다. 이것은 이지만 ≡
는 의 배수이지만 의 배수는 아니므로 와 은 공통된 약수를 가지기 때문 이다. 그런데 최대공약수는 유크리드 알고리즘을 통해 빠르게 계산할 수 있다. 따라서 mod 인 와 를 찾을 수 있으면 을 인수분해할 수 있 ≡ mod 이지만 ≡
다. 그러므로 이 방법의 복잡성은 앞서 설명한 조건을 만족하는 와 를 어떻게 빠르게 찾느냐에 의해 결정되며, Pollard가 제시한 방법을 사용하면 복잡성이 이다. 두 번째 알고리즘은 알고리즘이라 하며, 그 원리는 다음과 같다. 합성수 이 소인 수 를 가지고 있으며, 양의 정수 에 대해 이면 mod 과 은 공통된 약수 를 가진다. 따라서 gcd mod 은 의 자명하지 않은 약수이다. 보다 자세히 이 원 리를 살펴보면 다음과 같다. 이므로 인 정수 가 존재한다. 이 때 을 생각하여 보자. ≡ ≡ mod 임을 알 수 있다. 즉, 이다. 따라서 mod 이면 이고 이므로 이다. 따라서 gcd 은 의 자명하지 않은 소인수이다. 따라서 라 하고, gcd mod 을 지속적으로 구하 면 을 인수분해할 수 있다. 다음
원리를
이용하는
인수분해
알고리즘도
있다.
≡ mod 이지만
± mod 이면 이지만 이다. 따라서 gcd 은 의 자명 ≡
하지 않은 인수이다. 이 알고리즘을 "random squaring" 알고리즘이라 하며, 이 알고리즘의 ± mod 인 복잡성도 Pollard의 rho 알고리즘과 만찬가지로 ≡ mod 이지만 ≡
와 를 찾는 것에 의해 결정된다. 이 외에도 elliptic curve 인수분해 알고리즘, quadratic sieve 알고리즘, number field sieve 알고리즘 등이 있으며, 이 중에 number field sieve가 지금까지 알려진 가장 빠른 범용 알고 리즘이다. 하지만 이 1024비트 이상의 수이면 현재 컴퓨팅 능력을 고려할 때 이들을 이용 하여 그 수를 인수분해하는 것은 비용과 시간 측면에서 계산적으로 어렵다.
9.2 RSA 문제 이 문제는 공개키 암호알고리즘 중 현재 가장 널리 사용 중인 RSA 공개키 암호알고리즘 이 기반으로 하고 있는 문제이며, 그 정의는 다음과 같다. 정의 9.2 (RSA 문제) 두 개의 서로 다른 소수 와 의 곱인 양의 정수 , gcd 인 양의 정수 , 양의 정수 가 주어졌을 때, ≡ mod 인 을 찾는 문제를 RSA 문 제라 한다. 이 문제는 을 인수분해할 수 있으면 쉽게 다음과 같이 해결할 수 있다. l 단계 1. 을 인수분해할 수 있으므로 을 계산한다. l 단계 2. ≡ mod 인 를 찾는다. (확장 유크리드 알고리즘 이용) l 단계 3. 다음 식을 이용하여 을 계산한다. ≡ ≡ mod
RSA 문제는 다항시간 내에 인수분해 문제로 변환할 수 있다. 즉, 인수분해 문제를 해결 할 수 있으면 RSA 문제를 해결할 수 있다. 반대로 RSA 문제를 해결하면 인수분해 문제를 해결할 수 있다는 것은 증명되어 있지 않다. 하지만 많은 사람들은 RSA 문제와 인수분해 문제가 등가라고 믿고 있다.
9.3 이차잉여 문제 이차잉여 문제(QRP, Quadratic Residuosity Problem)도 인수분해와 매우 관련이 있는 문 제 중 하나이다. gcd 인 정수 에 대해 이차합동식 ≡ mod 이 해를 가지면 를 법 에 관한 이차잉여(quadratic residue)라 하고, 해를 갖지 않으면 이차비잉여 (quadratic nonresidue)라 한다. 즉, 쉽게 표현하면 어떤 정수 가 법 에서 제곱근을 가지 면 법 에서 는 이차잉여라 한다. 이 때 법 의 모든 이차잉여들의 집합을 이라 하며. 법 의 모든 이차비잉여들의 집합을 이라 한다. 이차잉여와 관련하여 다음과 같은 기호 가 정의되어 있으며, 이 기호를 르장드로 기호(Legendre symbol)라 한다. i f if ∊ i f ∊
이 기호는 법이 소수일 때 의미가 있는 기호이다. 법의 소수가 아닐 경우에는 대신 야코비 기호(Yacobi symbol)가 있다. 이 기호는 르장드로 기호를 이용하여 정의되며, ≥ 의 소
인수분해가 ⋯ 이고 가 정수일 때, 야코비 기호는 다음과 같이 정의된다.
⋯
여기서
는 르장드로 기호이다. 르장드로 기호는 야코비 기호들의 곱이므로 결과는 르장
드로 기호와 마찬가지로 0, -1, 1이다. 하지만 르장드로 기호와 달리 야코비 기호 이어도
가 1
가 법 에서 이차잉여가 아닐 수 있다. 한편 이 값이 -1이나 0이면 는 법 에서
비이차잉여가 확실하다. 따라서 이 야코비 기호 값이 1인 모든 ∊ ℤ 들의 집합이라고 할 때, 이차잉여 문제의 정의는 다음과 같다. 정의 9.3 (이차잉여 문제) 홀수인 양의 정수 과 ∊ 이 주어졌을 때, 가 법 에서 이차 잉여인지를 결정하는 문제를 이차잉여 문제라 한다. 르장드로 기호나 야코비 기호 값을 계산하여 주는 효율적인 알고리즘이 존재한다. 즉, 을 인수분해하지 않고도 야코비 기호 값을 계산하여 주는 효율적인 알고리즘이 존재한다. 하지만 야코비 기호
가 1이어도 가 법 에서 이차잉여가 아닐 수 있기 때문에 이 문
제가 어려운 문제이다. 여기서 이 일반적인 합성수일 때는 문제가 복잡해지므로 암호기술 에서 널리 사용되는 이 서로 다른 두 소수 와 의 곱일 때로 한정하여 이 문제를 생각하
이다. 따라서 야코비 기호 가 1이면 와 가 모두 1이거나 와 가 모두 -1이어야 한다.
면 다음과 같다. 이므로
정리 9.1 이 서로 다른 두 소수 와 의 곱일 때 ∊ 이기 위한 필요충분조건은 ∊ 이고 ∊ 이어야 한다. 증명. ∊ 라는 것은 일 때 다항합동식 ≡ mod 이 해가 존재한다 는
것을
말한다.
이
때
가
다항합동식
≡ mod 의
해이면
이
는
≡ mod 와 ≡ mod 의 해이다. 즉, ∊ 이면 ∊ 이고 ∊ 이다. 거꾸로 ∊ 이고 ∊ 이면 ≡ mod 와 ≡ mod 가 각각 해를 가진다. 이 때 이 해가 와 라 하자. 그러면 중국인 나머지 정리에 이용하여 ≡ mod 와 ≡ mod 를 동시에 만족하는 법 에서 를 찾을 수 있다. 그런데 ≡ mod 이고 ≡ mod 이므로 ≡ mod 이다. 따라서 이 는 ≡ mod 의 해가 되므로 ∊ 이다.
따라서 야코비 기호
가 1일 때, 와 가 모두 1인지 확인할 수 있다면 ∊
인지 알 수 있다. 즉, 을 인수분해할 수 있으면 ∊ 이 주어졌을 때, 가 법 에서 이차 잉여인지를 결정할 수 있다. 여기서 야코비 기호
가 1일 때 ∊ 일 확률은 50%이다.
그 이유는 다음과 같다. ℤ 는 생성자를 가진 순환군이므로 이 군의 생성자가 일 때 이 군 의 모든 원소는 로 표현할 수 있다. 이 때 가 짝수이면 는 법 에서 이차잉여가 된다. 따라서 이다. 즉, ℤ 의 원소의 반은 이차잉여이고, 나머지 반은 비이차잉여 이다. 마찬가지로 이다. 가 ℤ 의 이차잉여이고 가 ℤ 의 이차잉여일 때, 중국인 나머지 정리를 이용하여 다음 연립합동식의 해를 구하면 ≡ mod ≡ mod 이 해는 ℤ 의 이차잉여가 된다. 그 이유는 이 해는 법 에서 이차잉여이고, 법 에서 이 차잉여이므로 정리 9.1에 의해 법 에서 이차잉여가 된다. 즉, ℤ 와 ℤ 의 이차잉여를 하 나씩 가지면 ℤ 의 이차잉여를 독특하게 하나 만들 수 있다. 따라서 ℤ 의 이차잉여의 개 수는 이다. 이 사실은 다음과 같은 원리를 이용해서도 성립 함을 알 수 있다. 법 에서 ∊ ℤ 가 이차잉여이면 ≡ mod 는 정확하게 4개의 해를
가진다.
이들
4개가
하나의
이차잉여를
나타내므로
법
에서
이차잉여는
총
개 존재한다. 같은 이유에서 ℤ 의 비이차잉여와 ℤ 의 비이차잉여를 하나씩 이용하여 에 속하지만 에 속하지 않는 ℤ 의 원소를 독특하게 하나 만들 수 있다. 따 라서 의 크기는 이고 는 이므로 야코비 기호 일 때 ∊ 일 확률은 50%가 된다.
가 1
9.4 법 에서 제곱근 문제 이차잉여 문제는 주어진 수가 제곱근을 가지고 있는지 결정하는 문제이다. 반면 제곱근 문제는 법 의 이차잉여가 주어졌을 때 제곱근 자체를 계산하는 문제를 말한다. 이 문제의 정의는 다음과 같다. 정의 9.4 (법 에서 제곱근 문제) 합성수 과 법 에서 이차잉여 가 주어졌을 때, 법 에 서 의 제곱근을 찾는 문제를 말한다. 문제의 정의에서도 알 수 있듯이 주어진 법 이 합성수일 경우에만 이 문제는 어려운 문 제이다. 즉, 소수 가 법일 경우에는 그것의 제곱근은 효율적으로 계산할 수 있다. 예를 들 어 가 형태이면 이 법에서 이차잉여 의 제곱근은 이다. 그 이유는 다음 사 실로부터 유추할 수 있다. 가 소수이고 가 법 에서 이차잉여이면 ≡ mod 이다. 이것이 성립하는 이유는 가 의 제곱근이면 다음이 성립하기 때문이다. ≡ mod 따라서 다음이 성립하므로 법 에서 이차잉여 의 제곱근은 이다. ≡ mod 이차잉여와 마찬가지로 이 두 개의 소수의 곱일 경우로 한정하여 이 문제를 생각하여 보 자. 서로 다른 소수 와 의 곱인 양의 정수 과 법 에서 이차잉여 가 주어졌을 때, 을 인수분해할 수 있으면 다음과 같은 방법을 통해 이 법에서 의 제곱근을 계산할 수 있 다. l 단계 1. 법 에서 의 제곱근 과 을 구하고, 법 에서 의 제곱근 과 을 구한 다. l 단계 2. 확장 유크리드 알고리즘을 이용하여 인 와 를 구한다. l 단계 3. mod 과 mod 은 법 에서 의 제곱근이 된다. 여기서 단계 2와 단계 3은 중국인 나머지 정리에서 다음 연립합동식을 구하기 위한 절차이 다. ≡ mod ≡ mod 이 처럼 인수분해 문제를 해결할 수 있으면 법 에서 제곱근 문제도 해결할 수 있다. 그런 데 제곱근 문제는 RSA나 이차잉여 문제와 달리 그 역도 성립한다. 즉, 법 에서 제곱근 문 제를 해결할 수 있으면 인수분해 문제를 해결할 수 있다. 이것은 random squaring 인수분해 알고리즘을 적용할 수 있는 두 개의 이차잉여를 찾을 수 있기 때문이다. 좀 더 구체적으로 설명하면 법 에서 제곱근 문제를 해결할 수 있는 라고 하는 효율적인 알고리즘이 있으 면 다음과 같은 방법을 통해 을 인수분해할 수 있다.
l 단계 1. gcd 인 정수 를 랜덤하게 선택한다. l 단계 2. mod 을 계산한다. l 단계 3. 과 를 이용하여 알고리즘 를 수행하여 의 제곱근 를 얻는다. l 단계 4. ≡± mod 이면 단계 3을 다시 수행한다. ± mod 이면 gcd 은 의 자명하지 않은 인수가 된다. l 단계 5. ≡
9.5 이산대수 문제 이산대수 문제(DLP, Discrete Logarithm Problem)는 인수분해 문제와 더불어 암호기술에 서 가장 널리 사용되는 문제이다. 먼저 이산대수의 정의는 다음과 같다. 정의 9.4 (이산대수) 유한순환군 〈〉에서 기저 에 대한 ∊ 의 이산대수란 인 , ≤ 를 말하며, log 로 표기한다. 어떤 원소의 이산대수를 다른 말로 그 원소의 색인(index)이라 한다. 일반 로그 관련 성질은 이산대수에서도 성립한다. 예를 들어 〈〉이고, ∊ 이면 다음이 성립한다. l 모든 ∊ ℤ 에 대해 log ≡ log mod 이다. l log ≡ log log mod 이다. 이산대수 문제란 유한순환군의 원소가 주어졌을 때, 그것의 이산대수를 찾는 문제를 말하 며, 그것의 정의는 다음과 같다. 정의 9.5 (이산대수 문제) 유한순환군 〈〉와 어떤 ∊ 가 주어졌을 때, 인 , ≤ 를 찾는 것을 이산대수 문제라 한다. 정의에서 알 수 있듯이 이산대수 문제는 , 과 같이 차례대로 구하여 결국에는 찾을 수 있다. 하지만 군의 위수가 매우 크면 이와 같은 방법으로 찾는 것은 계산적으로 어렵다. 이 와 같이 가능한 모든 경우를 검사하여 찾는 방법보다 효율적인 방법들이 제안되어 있지만 군의 위수가 클 경우에는 이들 방법을 사용하여도 계산적으로 어렵다. 지금까지 제안된 유 한순환군에서 DLP의 해를 찾는 알고리즘은 다음과 같이 크게 두 종류로 분류된다. l (범용 알고리즘) Pollard의 rho 알고리즘, Baby-step/Giant-step 알고리즘과 같이 임의의 군에 적용할 수 있는 알고리즘 l (전용 알고리즘) Index Calculus 알고리즘처럼 특정 군에만 적용 가능한 알고리즘 범용 알고리즘들의 경우에는 군의 위수가 이면 복잡성이 이다. 따라서 군의 크기 가 160비트 정도만 되어도 현재 컴퓨팅 수준으로는 그 해를 찾는 것은 계산적으로 어렵다. Index calculus 알고리즘은 가 소수일 때 ℤ 군에 효율적으로 적용할 수 있는 알고리즘이
지만 이 알고리즘의 복잡성은 ln
ln ln
이다. 이와 같은 복잡성은 직관적으로 이
해하기 어렵지만 가 512비트 정도이면 정도이다. 즉, 가 512비트보다 큰 소수이 면 ℤ 에서 이산대수를 구하는 것 역시 계산적으로 어렵다. 유한순환군에서 DLP의 해를 찾는 알고리즘 중에 baby-step/giant-step 알고리즘을 자세히 살펴봄으로써 어떤 방법으로 DLP 문제를 해결할 수 있는지 알아보자. 이 알고리즘은 다음 원리를 이용한다. l 〈〉의 원소 의 이산대수가 일 때 로 표현할 수 있다. 여기서 이다. 그러면 이며, 이다. 따라서 가능한 를 모두 구하 고, 를 차례로 구하면서 이미 구한 와 일치하는 값을 찾으면 를 계산할 수 있다. 예9.1) ℤ 〈〉에서 log 는? l ⌈ ⌉ mod
0 1
1 3
2 9
3 27
4 81
5 17
6 51
7 40
8 7
9 21
10 63
8 7
2 9
5 17
9 21
3 27
7 40
6 51
10 63
4 81
검색하기 쉽도록 정렬한다. mod
0 1
1 3
l ≡ ≡ mod · mod
0 44
1 66
2 99
3 92
4 25
5 94
6 28
7 42
8 63
l · 암호기술에서는 많이 사용하는 유한순환군은 ℤ 이다. 앞서 언급한 바와 같이 이 군에서 DLP 문제를 해결할 수 있는 가장 효율적인 알고리즘은 index calculus 알고리즘이다. 유한 순환군의 모든 부분군은 역시 유한순환군이다. 특히 이들 부분군 중에 위수가 소수인 부분 군들이 존재하며, 항등원을 제외한 이 군의 모든 원소는 그 군의 생성자가 된다. 그러면 부 분군에서 이산대수를 해결하는 비용은 원 군에서 이산대수를 해결하는 비용과 어떤 관계가 있을까? 군의 크기가 줄어들기 때문에 단순하게 생각하면 쉬워질 것으로 생각할 수 있다. 그런데 ℤ 에서 DLP를 해결할 수 있는 가장 효율적인 알고리즘은 index calculus 알고리즘 이다. 반면에 ℤ 의 위수가 소수 인 부분군 에서 DLP는 ℤ 에 대한 index calculus를 적용하여 구할 수 있고, 범용 알고리즘을 직접 에 적용하여 구할 수 있다. 그런데 가 512비트 정도이고 가 140비트 정도이면 index calculus를 이용하나 범용 알고리즘을 이용 하나 에서 DLP를 해결하기 위한 비용은 비슷하다. 즉, ℤ 을 사용하나 그것의 부분군 를 사용하나 안전성에는 차이가 없다. 따라서 안전성에는 차이가 없으므로 ℤ 대신에 그것 의 부분군인 을 사용하면 군의 크기가 축소되었으므로 연산의 효율성을 높일 수 있다.
9.6
Diffie-Hellman 문제
이산대수 문제와 매우 밀접한 또 다른 문제는 Diffie-Hellman 문제이다. Diffie와 Hellman은 공개키 방식을 처음으로 제안하였으며, 이들이 제안한 유명한 암호프로토콜이 기반으로 하 고 있는 문제를 Diffie-Hellman 문제라 한다. Diffie-Hellman 문제는 크게 Diffie-Hellman 계산 문제(computational problem)와 Diffie-Hellman 결정 문제(decision problem)로 나누어지며, 그 것의 정의는 다음과 같다. 정의 9.6 (Diffie-Hellman 계산 문제) 유한순환군 〈〉와 의 임의의 두 원소 과 가 주어졌을 때 를 계산하는 문제를 Diffie-Hellman 계산 문제라 한다. 정의 9.7 (Diffie-Hellman 결정 문제) 유한순환군 〈〉와 의 임의의 세 원소 , , 가 주어졌을 때 와 가 같은지 결정하는 문제를 Diffie-Hellman 결정 문제라 한다. 만약 이산대수 문제를 해결할 수 있으면 로부터 를 계산한 후에 를 계산하여 를 계산할 수 있다. 즉, 이산대수 문제를 해결할 수 있으면 Diffie-Hellman 문제를 해결할 수 있 다. 마찬가지로 Diffie-Hellman 문제를 해결할 수 있으면 과 로부터 를 계산하여 와 비교하여 Diffie-Hellman 결정 문제를 해결할 수 있다. 그러나 이들 문제들이 등가임이 증명 되어 있지 않다. 즉, Diffie-Hellman 문제를 해결하는 알고리즘을 이용하여 이산대수 문제를 해결할 수 있는지는 아직 증명되어 있지 않다.
9.7 타원곡선 기존 공개키 암호알고리즘들은 인수분해 또는 이산대수 문제의 어려움에 기반하고 있다. 이들 문제는 해결이 불가능한 문제는 아니다. 다만 주어진 크기의 정수를 인수분해하는 것 이 계산적으로 어렵거나 주어진 군에서 이산대수 문제를 계산하는 것이 계산적으로 어렵다 는 것이다. 그러나 컴퓨팅 능력이 발달하고, 이들 문제를 해결하는 알고리즘의 성능이 향상 되면 보다 더 큰 정수를 사용하거나 보다 더 큰 위수의 군을 사용해야 한다. 그런데 사용하 는 정수의 크기가 커지거나 사용하는 군의 위수가 커지면 그만큼 각 알고리즘에서 사용하는 연산의 비용이 높아진다. 물론 컴퓨팅 능력의 발달로 연산 비용이 높아지는 것을 부분적으 로 상쇄할 수는 있지만 지속적으로 이와 같은 현상을 반복할 수는 없다. 따라서 같은 안전 성을 제공하면서 키 길이는 짧은 다른 대안을 찾게 되었으며, 그 결과 제안된 것이 타원곡 선(elliptic curve)이다. 타원곡선은 타원과 큰 연관은 없으며, 3차 방정식(cubic equation)을 사용한다. 타원곡선에 기반을 두고 있는 암호알고리즘의 기본 원리는 타원곡선을 이용하여 유한순환 군을 만들 수 있다는 것이다. 이 유한순환군은 기존에 매우 큰 소수를 이용하여 만든 유한 순환군을 대체할 수 있다. 따라서 이산대수에 기반을 두고 있는 기존 암호알고리즘을 그대 로 타원곡선 기반으로 쉽게 전환할 수 있다. 하지만 기존에 매우 큰 소수를 이용하여 만든 유한순환군은 곱셈군이지만 타원곡선을 이용하여 만든 유한순환군은 덧셈군이다.
타원곡선은 다음과 같은 형태의 3차 방정식을 이용한다. 이 방정식을 간단하게 형태로 축소하여 사용할 수 있다. 이와 같은 타원곡 선을 이용하여 군을 형성하기 위해서는 가 처럼 중근을 가지 면 안 된다. 즉, 다음 조건을 만족해야 한다.
사용하는 3차 방정식에 의해 그려지는 곡선 위의 점들이 타원곡선을 이용한 군의 원소들이 된다. 이 때 무한대에 있는 가상의 점(point at infinity)이 추가로 이 군의 원소가 되며, 이 점이 타원곡선을 이용하여 만든 덧셈군의 항등원이 된다. 이 항등원은 ∞ 로 표기된다. 그림 9.1과 9.2는 타원곡선의 예이다. y
y
4
4
2
2
-1
1
2
3
4
x
-1
1
-2
-2
-4
-4
<그림 9.1>
2
3
4
x
<그림 9.2>
타원곡선의 한 점 의 역원은 그림 9.3과 같이 그 점을 지나는 축과 평행인 선을 그렸 을 때 교차하는 점이다. 즉, 점 의 좌표의 부호만 바꾸면 점 의 역원을 구할 수 있다.
<그림 9.3> 타원곡선 위의 점 의 역원과 항등원
타원곡선의 서로 다른 두 점 와 의 덧셈은 그림 9.4과 같이 이루어진다. 즉, 두 점을 잇는 직선을 그리면 이 직선은 곡선과 또 다른 위치에서 만나게 되며, 이 교차점 ′에서 y 축과 평행이 직선을 그렸을 때 만나는 또 다른 교차점 이 덧셈의 결과가 된다.
<그림 9.4> 타원곡선 위의 서로 다른 두 점의 덧셈
이 를 계산하기 위해서는 먼저 두 점 와 를 잇는 직선이 곡선과 만나는 또 다른 교차 점 ′을 계산해야 한다. 이 직선을 라 할 때 기울기는 와 같으며, 는 또는 를 이용하여 계산할 수 있다. 예를 들어 · 이다. 그러면 ′은 다음 식의 해를 구하여 계산할 수 있다. · 이 식은 · 로 표현할 수 있다. 모닉 다항식에서 근들의 합과 두 번째 최고차항의 계수를 더하면 0이 된다는 사실을 이용하면 ′의 좌표를 보다 쉽게 구 할 수 있다. ′ 그러면 좌표는 ′ · ′ 이다. 따라서 우리가 구하고자 하는 은 ′ ′ 이 다. 지금까지 설명한 것은 서로 다른 두 개의 점을 더하는 방법이고, 어떤 점을 자기 자신에 더하는 방법은 다음과 같다. 그림 9.5와 같이 그 점의 접선을 그려, 이 접선과 곡선이 만나 는 또 다른 교차점을 찾는다. 서로 다른 두 점을 더할 때와 마찬가지로 이 점 대신에 그것 의 역원이 덧셈의 결과가 된다.
<그림 9.5> 타원곡선 위의 한 점을 자기 자신에 더하는 방법
을 계산하는 구체적인 방법은 다음과 같다. 먼저 접선을 구해야 하는데, 접 선이 라 할 때, 기울기는 다음과 같으며, · 이다. 이 접선과 곡선과의 교차점은 서로 다른 두 점을 계산할 때와 마찬가지로 다음과 같이 계산
할 수 있다. · ′ 한 점의 연속적인 덧셈은 이 과정을 반복하면 된다. 지금까지의 설명은 실수에서 타원곡선에 대한 설명이다. 하지만 암호기술에서는 실수를 이용할 수는 없다. 따라서 암호기술에서는 유한체 ℤ 에서 타원곡선 군을 정의하여 사용한 다. 즉, 타원곡선 방정식에서 계수들이 모두 유한체 ℤ 의 원소가 되며, 각 연산이 유한체 ℤ 에서 이루어진다. 예를 들어 이고, 타원곡선 을 이용할 경우, 이 곡 선을 통해 정의되는 모든 원소는 표 9.1과 같이 계산할 수 있다. 모든 원소를 구해보면 항 등원을 포함하여 총 28개의 원소가 존재한다. 예9.2) , 타원곡선 의 두 점 (3,10)+(9,7)? l · ≡ mod l ≡ mod l · ≡ mod 여기서 · 이지만 이 식을 이용하기 위해서는 룰 먼저 계산해야 한다. 따 라서 를 계산하는 대신에 다음 식을 이용할 수도 있다. · · · <표 9.1> ℤ 위의 타원곡선 의 모든 원소
이차잉여
y
0
mod 1
yes
1, 22
1
3
yes
7, 16
2
11
no
3
8
yes
10, 13
4
0
yes
0
5
16
yes
4, 19
6
16
yes
4, 19
22
22
no
9.8 겹선형 쌍함수 겹선형 쌍함수(bilinear pairing)은 타원곡선 상의 이산대수 문제를 유한체상의 이산대수 문 제로 축소시켜 그 어려움을 줄여 타원곡선 암호시스템을 공격하는 도구로 원래 제안되었다. 최근에는 공격 도구가 아닌 정보보호를 위한 암호학적 도구로 사용되고 있다. 겹선형 쌍함 수는 다른 말로 겹선형 사상(bilinear map)이라 한다. 이 절에서는 다음과 같은 표기법을 사 용하며, 이 map의 정의는 다음과 같다.
l : 매우 큰 소수 l : 위수가 인 타원곡선 위의 덧셈군 l : 위수가 인 유한체 위의 곱셈군 l ∈ l
∈ ℤ
정의 9.8 (사용가능 겹선형 사상(admissible bilinear map)). 다음과 같은 특성을 만족하는 함 수 × → 를 사용가능 겹선형 사상이라 한다. l 겹선형(bilinear): 임의의 에 대하여 다음이 성립해야 한다. –
·
–
·
l 비퇴화성(non-degenerate): 의 모든 쌍 에 대하여, ≠ 이어야 한다. 여기 서 는 의 영원이다. l 계산가능성(computable): 임의의 에 대하여 를 계산할 수 있는 효율적인 알 고리즘이 존재해야 한다. 겹선형 특성에 의해 다음이 성립한다. 이 사상 때문에 타원곡선 상에서 Diffie-Hellman 결정 문제는 다음 식을 통해 쉽게 해결할 수 있다. ⇒ 따라서 겹선형 사상을 암호학적 도구로 사용하는 많은 암호프로토콜에서는 다음 문제의 어 려움에 기반하고 있다. 정의 9.9 (BDHP, Bilinear Diffie-Hellman Problem) 의 원소 가 주어졌을 때, 를 계산하는 문제를 겹선형 Diffie-Hellman 계산 문제라 한다. 이 문제는 ECDLP 문제를 해결할 수 있으면 해결할 수 있다. 예를 들어 로부터 를 계 산할 수 있으면 를 통해 를 계산할 수 있다. 뿐만 아니라 이 문제는 ECDHP 문제를 해결할 수 있으면 해결할 수 있다. 예를 들어 , 로부터 를 계산할 수 있으면 를 통해 를 계산할 수 있다. ECDLP와 ECDHP와 마찬가지로 이 문제는 현재 다항시간 내에 계산하는 것이 어렵다고 알려져 있다. 참고문헌 [1] Ronald L. Rivest, Adi Shamir, and Leonard M. Adleman, "A Method for Obtaining Digital Signatures and Public-Key Cryptosystems," Communications of ACM, Vol. 21, pp. 120‒126, 1978.
[2] Whitfield Diffie and Martin E. Hellman, "New Directions in Cryptography," IEEE Trans. on Information Theory, Vol. 22, pp. 644‒654, 1976. [3] Adi Shamir, "Identity-based Cryptosystems and Signature Schemes," Advances in Cryptology, Crypto 1984, LNCS 196, pp. 47–53, 1985. [4] Dan Boneh and Matthew K. Franklin, "Identity-based Encryption from Weil pairing," Advances in Cryptology, Crypto 2001, LNCS 2139, pp. 213–229, 2001. 연습문제 1. ℤ 의 이차잉여 1과 ℤ 의 이차잉여 2를 이용하여 ℤ 의 이차잉여를 구하시오. 2. ℤ 위의 타원곡선 의 모든 원소를 구하시오. 3. ℤ 위의 타원곡선 의 두 원소 (3,1)과 (5,2) 두 점의 합을 구하시오. 4. ℤ 위의 타원곡선 의 원소 (3,1)을 자기 자신과 합한 결과를 구하시오.
제 10 장 공개키 암호알고리즘 10.1 개요 대칭 암호알고리즘은 그것을 사용하기 전에 암호화하는 측과 복호화하는 측이 동일한 대 칭키를 공유하고 있어야 하며, 이 대칭키는 비밀로 유지해야 한다. 반면에 공개키 암호알고 리즘은 암호화할 때와 복호화할 때 서로 다른 키를 사용한다. 이 때 두 키 중 하나는 공개 하며, 다른 하나는 비밀로 유지한다. 따라서 사전에 암호화하는 측과 복호화하는 측이 동일 한 키를 공유하고 있을 필요가 없다. 암호화하는 측은 공개되어 있는 공개키를 이용하여 암 호화하고, 복호화하는 측은 자신만이 알고 있는 개인키로 복호화한다. 따라서 공개키 암호 알고리즘의 경우에는 사전에 비밀스럽게 암호키를 교환할 필요는 없다. 하지만 공개되어 있 는 공개키가 실제 어떤 사용자의 공개키인지 확인할 수 있는 메커니즘은 필요하다. 보통 사 용되는 메커니즘은 인증서(certificate)이며, 이 인증서는 신뢰할 수 있는 기관이 해당 키의 소유자를 보증해주는 기능을 한다. 공개키 암호알고리즘은 이와 같은 방식으로 암호화하기 때문에 무조건적 안전성을 제공할 수 없다. 공격자는 가능한 모든 메시지를 공개되어 있는 공개키로 암호화하여 그 결과와 암호문을 비교하여 특정 암호문을 항상 복호화할 수 있다. 물론 이것의 소요되는 시간이 문제이지만 복호화가 가능하다는 것은 사실이다. 공개키 암호 알고리즘에서도 대칭 암호알고리즘처럼 가능한 모든 키로 복호화하여 복호화 공격을 할 수 도 있다.
10.2 소수 생성 대부분의 공개키 암호알고리즘에서는 공개키 쌍을 생성하거나 유한순환군을 생성하기 위 해 매우 큰 소수를 필요로 한다. 하지만 소수를 생성하여 주는 결정적 알고리즘은 존재하지 않는다. 따라서 임의의 수를 선택한 후에 그것이 소수인지 판단하는 방식을 사용한다. 소수 인지 정확하게 판단하기 위해서는 인수분해를 해야 하지만 인수분해하는 것은 계산적으로 어렵기 때문에 확률적인 판단 방법을 사용하는 것이다. 즉, 몇 가지 조건을 검사하여 통과 하면 소수라고 결론을 내리고 사용하는 것이다. 어떤 수가 소수인지 판단하기 위해 사용할 수 있는 몇 가지 판단 방법은 다음과 같다. 이면 은 소수가 아니다. l 조건 1. 보다 작은 임의의 정수 에 gcd mod 이면 은 소수가 아니다. l 조건 2, 보다 작은 임의의 정수 에 대해 ≡
l 조건 3. 이면 ≡ mod 이므로 가 1 또는 -1이 아니면 은 소 수가 아니다. 조건 2는 페르마의 작은 정리를 이용한 것이다. 조건 3은 제곱근 문제에서 가 소수일 때 ≡ mod 의 해가 존재하면 정확하게 두 개의 해를 가진다는 원리를 이용하고 있다. 따라서 ≡ mod 는 해가 항상 존재하며, 그 해는 1과 -1이다. 주어진 정수가 소수인지 판별하는 알고리즘은 오일러 규준(Euler Criterion)을 이용하는
Soloway와 Strassen의 방법과 위에 제시된 조건 3을 응용한 Rabin과 Miller 방법 등이 있 다. 임의로 선택한 수가 합성수일 때, Soloway와 Strassen 시험을 한 번 통과할 확률은 50%이며, Rabin과 Miller 방법은 25%이다. 따라서 Rabin과 Miller 방법이 더 우수하다. 오일러 규준이란 가 홀수인 소수이면 모든 에 대해 는 것이며, 여기서
≡
mod 가 성립한다
는 르장드로 기호이다. 이 규준은 소수가 법일 때 주어진 수가 이차
잉여인지 아닌지 판단할 때 사용된다. 좀 더 자세히 설명하면 위에 제시된 조건 3에서 설명 한 바와 같이 가 소수이면 mod 는 1 아니면 -1이다. 가 이차잉여이면 제곱근 을 가지며, 자리에 를 대입하면 mod 는 반드시 1이어야 한다는 것을 알 수 있 다. Soloway와 Strassen은 임의의 에 대해 오일러 규준이 만족되지 않으면 주어진 수가 소수가 아닌 것으로 판정하는 방법을 사용한다. Rabin과 Miller는 을 만족하는 홀수 을 구한 다음 임의의 에 대해 mod , mod , ...,
mod 을 계산하여 이 값들을 통해 이 소수인지 판별한다.
Rabin과 Miller는 ≡± mod 이거나 mod , ..., 인지 검사하여 만족하면
mod 중 하나가 -1과 합동
이 소수일 확률이 높다고 판단한다. 이 조건을 만족하면
≡ mod 이 만족된다는 것을 알 수 있다. 특히 이 소수이면 이 조건을 무조건 만 족해야 한다. 그 이유는 이하의 수의 위수는 의 약수가 되기 때문이다. 거꾸로 이 합성수이어도 이 검사에 통과할 수 있는데 그것의 확률은 25%이하라고 증명이 되어 있다. 따라서 여러 수를 이용하여 검사하여도 통과하면 이 소수일 확률이 매우 높다. 실제 응용에서 소수는 다음과 같이 생성된다. l 단계 1. 비트 수 를 임의로 생성한다. l 단계 2. 최상위 비트와 최하위 비트를 1로 설정한다. l 단계 3. 3, 5, 7, 11과 같은 작은 소수로 를 나누어 본다. l 단계 4. Rabin-Miller 시험을 5번 수행한다. 단계 2에서 최상위 비트를 1로 설정하는 것은 필요한 크기의 소수를 선택하기 위함이고, 최 하위 비트를 1로 설정하는 것은 홀수를 선택하기 위함이다. 선택한 가 합성수이면 3, 5, 7 로 나누어만 보아도 50% 이상은 이 단계를 통과하지 못한다. 가 합성수인데 5번 Rabin과 Miller 시험을 통과할 확률은 0.1% 이하가 된다.
10.3 RSA 공개키 암호알고리즘 10.3.1 공개키 쌍 생성 RSA 공개키 암호알고리즘은 MIT의 Rivest, Shamir, Adleman이 제안한 알고리즘으로서, 현재 가장 널리 사용되고 있다. RSA는 RSA 문제의 어려움에 기반을 두고 있다. 이 알고리 즘은 다음과 같은 과정을 통해 공개키 쌍을 생성한다.
l 단계 1. 두 개의 소수 와 를 선택한다. l 단계 2. 를 계산한다. l 단계 3. 을 계산한다. l 단계 4. gcd 인 를 선택한다. l 단계 5. ≡ mod 를 만족하는 를 계산한다. 위 과정을 통해 생성된 〈 〉 쌍이 공개키가 되고, 〈 〉 쌍이 개인키가 된다. 단계 1에 서 두 개의 소수를 선택해야 하는데, 이 소수는 앞 절에서 언급한 방법을 사용하여 선택해 야 한다. 또 의 크기를 고려하여 와 의 크기를 결정하는데, 이 때 와 의 크기는 보통 같도록 만든다. 단계 3를 계산한 후에는 더 이상 와 를 유지할 필요가 없다. 안전성을 위 해서는 이들을 폐기하는 것이 바람직하다. 단계 5는 확장 유크리드 알고리즘을 사용하여 계 산된다. RSA 공개키 쌍을 생성할 때에는 두 개의 소수가 필요하다. 또한 두 사용자가 동일한 두 소수를 사용하게 되면 한 사용자가 다른 사용자의 개인키를 계산할 수 있게 된다. 따라서 사용자마다 다른 쌍의 소수가 필요하다. 이 때문에 정수론 지식이 부족한 경우에는 다음 사 항들에 대해 궁금해 하는 경우가 있다. l 궁금증 1. 모든 사람이 다른 소수를 필요로 한다. 소수가 부족하지 않을까? l 궁금증 2. 두 사람이 우연히 같은 소수를 선택하는 경우도 있지 않을까? l 궁금증 3. 모든 소수에 대한 데이터베이스를 구축하면 공개키 암호알고리즘을 해독할 수 있지 않을까 위 모두에 대해 걱정할 필요가 없다. 그 이유는 소수는 무수히 많기 때문이다. 512 비트 이 151
하의 수만 고려하면 대략 10
개의 소수가 존재한다. 따라서 소수가 부족하지도 않으며, 같
은 소수를 선택할 확률도 낮고, 이와 같은 데이터베이스를 구축하는 것도 현실적으로 불가 능하다. 10.3.2 암호화와 복호화 알고리즘 RSA 공개키 암호알고리즘에서 개인키가 〈 〉이고 공개키가 〈 〉일 때, 의 암 호화는 다음과 같이 이루어진다.
mod 즉, 주어진 평문 을 공개키를 이용하여 거듭제곱하여 암호화한다. 복호화는 암호문을 개 인키로 다음과 같이 거듭제곱하여 이루어진다.
mod 그런데 어떤 이유에서 이와 같은 과정을 통해 복호화가 가능할까? 이것은 다음과 같이 증 명할 수 있다. l gcd 인 경우: 다음과 같이 오일러 정리에 의해 성립함을 알 수 있다.
≡ ≡ ≡ ≡ ≡ mod
인 경우: 이므로 은 의 배수이거나 의 배수이다. 의 배수라고 l gcd
가정하면 ≡ ≡ mod 가 성립한다. 또 이므로 이 의 배수이면 의 배수일 수 없다. 따라서 ≡ ≡ ≡ mod 가 성립한다. 그러 므로 ≡ mod 이 성립한다. 이 의 배수일 경우에도 동일하게 증명할 수 있다. 따라서 이면 RSA의 복호화하는 항상 올바르게 동작한다. RSA는 원래 을 사용하도록 제안되었지만 대신에 보편지수(universal exponent) 를 사용할 수도 있다. 보편지수란 모든 ∊ ℤ 에 대하여 ≡ mod 를 만족하는 가 장 작은 정수를 말한다. 이 는 모든 의 위수의 최소공배수이며 이다. 특히, 이면 lcm 이다. 이 사실들로부터 알 수 있듯이 보다 작다. 따라서 대신에 를 사용하면 선택하는 공개키 와 값이 작아진다. 그러므로 를 사용하면 암호화와 복호화의 성능을 향상시킬 수 있으며, 안전성에는 차이가 없다. 그 이유는 를 계 산하기 위해서는 을 인수분해할 수 있어야 한다. 10.3.3 안전성 분석 대칭키 암호알고리즘의 경우에는 안전성을 논할 때 가장 먼저 고려하는 것이 가능한 모든 키로 검사하는 전사공격이다. 이 공격에 의해 대칭키의 길이가 결정된다. 하지만 공개키 암 호알고리즘에서는 대칭키와 달리 사용하는 키의 길이가 매우 크기 때문에 가능한 모든 키를 검사하는 것은 계산적으로 가능하지 않을 뿐만 아니라 가능한 모든 키를 검사하는 것보다 공개키 암호알고리즘이 의존하는 계산 문제를 푸는 것이 더 빠르다. 따라서 공개키 암호알 고리즘에서는 전사공격은 의미가 없다. RSA 공개키 암호알고리즘은 RSA 문제에 의존하며, 이 문제는 인수분해 문제에 의존한 다. 즉, 공개키에 포함된 을 인수분해할 수 있으면 개인키를 구할 수 있다. 미래를 고려하 였을 때 은 1024비트 이상이 되어야 한다. 을 인수분해하지 않고 을 계산할 수 있 으면 확장 유크리드 알고리즘을 이용하여 공개키로부터 개인키를 구할 수 있다. 만약 이것 이 가능하다면 , 로부터 다음 식을 유도할 수 있다. 이 식의 해를 구하면 그 해는 와 가 된다. 즉, 을 인수분해하지 않고 을 계산할 수 있으면 을 인수분해할 수 있으므로 이 문제는 인수분해 문제만큼 어려운 문제이다. RSA는 준동형(homomorphic) 특성을 가지고 있다. 어떤 함수 가 항상 만족하면 준동형 특성을 가지고 있다고 말한다. RSA의 경우에는 다음이 성립하므로 이 특 성을 가지고 있다고 말한다. ≡ ≡ mod 즉, 두 개의 값을 곱하여 암호화한 결과는 각 값을 개별적으로 암호화한 값을 곱한 것과 같 아진다. 즉, 2와 5를 각각 암호화한 암호문을 가지고 있으면 이것을 이용하여 10을 암호화 한 암호문을 만들 수 있다. 이 특성을 이용하여 다음과 같은 공격이 가능하다. l 공격자의 목표: 암호문 를 복호화하는 것
l 가정. 이것을 복호화할 수 있는 사용자에게 가 아닌 다른 암호문의 복호화는 요청할 수 있다. l 공격방법 –
공격자는 ∈ ℤ 를 선택하고 ′ mod 을 계산하여 이 값에 대한 복호화를 요청하여 ′ ≡ ′ mod 을 받는다.
–
공격자는 ≡ mod 을 구한 후에 다음을 계산하면 를 복호화할 수 있다. ′ ≡ ′ ≡ ≡ ≡ ≡ mod
가 되는 를 우리는 보통 고정점(fixed-point)이라 한다. RSA에는 고정점이 존재 한다. 즉, ≡ mod 인 이 존재한다. 대표적으로 0, 1, 은 모두 고정점이다.
이 고정점이 되기 위해서는 ≡ mod 이어야 하며, 최소 9개는 항상 존재한다. 그러나 , , 를 임의로 잘 선택하면 고정점의 수는 무시할 정도로 적어 실제 응용에서는 크게 고려하지 않고 RSA를 사용할 수 있다.
법 에서 의 위수가 이면 ≡ mod 이 성립하며, 이 때 를 의 주기라 한 다. 암호문 의 주기가 짧으면 공격자는 개인키를 모르는 상태에서 를 쉽게 복호화할 수
있다. 예를 들어 의 주기가 이면 ≡ mod 이므로 ≡
mod 이 된다. 즉,
공격자는 를 그 결과가 가 될 때까지 로 반복적으로 거듭제곱하면 를 복호화할 수 있다. 따라서 주기가 작으면 위험하다. 끝으로 RSA의 경우에는 두 사용자가 절대 같은 을 사용하지 않아야 한다. 만약 두 사 용자 Alice와 Bob이 같은 을 사용한다고 가정하자. 이 때 두 사용자가 직접 공개키를 생성 하였다면 둘 다 의 인수분해를 알고 있음을 의미한다. 따라서 서로 상대방의 개인키를 계 산할 수 있다. 이 문제뿐만 아니라 공격자가 두 사용자가 같은 을 사용한다는 것을 알게 되면 이 공격자는 개인키를 모르는 상태에서 메시지를 복호화할 수 있는 가능성이 있다. 예 를 들어 Alice의 공개키가 이고, Bob은 이며, gcd 이라 하자. 이 때 공 격자가 메시지의 내용은 모르지만 다음과 같은 동일한 메시지를 Alice와 Bob이 각각 암호화 한 값을 확보하였다고 하자.
≡
mod
≡
mod
그러면 공격자는 Alice나 Bob의 개인키를 몰라도 위 암호문을 복호화할 수 있다. 공격자가 위 암호문을 복호화하는 과정은 다음과 같다. 단계 1. 확장 유크리드 알고리즘을 사용하여 인 과 를 찾는다. 단계 2. 과 중에 이 음수라 하면 다음과 같이 복호화할 수 있다. ≡
따라서 은 절대 사용자 간에 공유하면 안 된다.
≡ mod
10.4 이산대수 기반 공개키 암호알고리즘 10.4.1 유한순환군과 생성자 이산대수 문제에 기반을 두고 있는 알고리즘은 보통 군 연산을 수행할 유한순환군이 필요 하다. 이 순환군을 생성하는 과정을 시스템 설정이라 한다. 암호기술에서 유한순환군이 필 요할 경우 가장 많이 사용하는 것이 가 소수일 때 ℤ 군 또는 위수가 소수인 ℤ 의 부분 군이다. 유한순환군을 선택한 다음에는 이 군의 생성자를 선택해야 시스템 설정이 완료된 다. ℤ 군을 생성하기 위해서는 적당한 크기의 소수 하나만 선택하면 된다. 하지만 이것의 부분군을 사용하기 위해서는 의 약수인 소수 를 추가적으로 선택해야 한다. 를 선택 한 후에 를 선택하기 위해서는 를 인수분해해야 한다. 하지만 매우 큰 수를 인수분해 하는 것은 계산적으로 쉬운 것이 아니므로 거꾸로 생성하는 방식을 사용한다. 즉, 를 먼저 선택한 후에 이 수로부터 를 만들고 가 소수인지 검사한다. 만약 이렇게 하여 생성한 가 소수가 아니면 이 과정을 다시 반복해야 하므로 그렇게 효율적인 방법은 아니다. 하지만 시스템 설정은 최초에 한 번 설정된 이후에는 반복적으로 해야 하는 것은 아니므로 큰 문제 가 되지는 않는다. 또 이와 같은 방법으로 군을 생성하여야 군의 생성자를 선택하기 쉽다. 군의 생성자는 다음 원리를 이용하여 선택한다. 유한순환군의 모든 부분군은 순환군이며, 부분군의 위수는 원 군의 약수이다. 따라서 원 군의 모든 원소는 이들 부분군 중 하나의 군 의 생성자가 된다. 따라서 어떤 원소가 어느 군의 생성자인지 확인하기 위해서는 가장 작은 약수부터 사용하여 거듭제곱한 값이 1인 되는지 확인하면 된다. 하지만 보통 우리가 찾고자 하는 생성자는 원 군의 생성자이거나 이 군의 부분군 중 위수가 소수인 특정 군이다. 군의
위수가 이고 이것의 소인수분해가 ⋯ 일 때 원소 가 원 군의 생성자인지 여부는
가 1인지 검토하여 확인할 수 있다.
값은 원 군의 생성자가 된다. 을 말한다. 따라서
값이 모든 의 소인수에 대해 1이 아니면 이
≠ 라고 하는 것은 ≠ 에 대해 가 1이 아니라는 것
값이 모두 1이 아니면 오직 만 1이 된다는 것을 의미함으로 는
원 군의 생성자가 된다. 군의 위수가 이고, 가 의 소인수를 일 때 위수가 인 부분군의 생성자를 선택하기 위해서는 임의의 를 선택한 후에 를 계산한다. 이 때 ≠ 이면 은 위수는 가 된다. 그 이유는 ≠ 이지만 이기 때문이다. 10.4.2 ElGamal 공개키 암호알고리즘 RSA 공개키 암호알고리즘은 인수분해 문제에 기반을 두고 있는 가장 대표적인 알고리즘 이라면 ElGamal는 이산대수 문제에 기반을 두고 있는 가장 대표적인 알고리즘이다. 시스템 설정이 되어 유한순환군과 군의 생성자 가 주어지면 각 사용자는 자신의 공개키 쌍을 생 성할 수 있다. 예를 들어ℤ 〈〉를 사용하기로 설정되었으면 사용자는 자신의 개인키가 될 임의의 ≤ 를 선택한 다음에 자신의 공개키 를 계산한다. 이 사용자에게 메시지 은 다음과 같이 암호화하여 전달한다. l 단계 1. ∈ ℤ 를 선택한 다음에 를 계산한다.
l 단계 2. 를 계산한 후에 · 을 계산한다. 쌍 〈 〉가 결과 암호문이 된다. 이것을 수신한 사용자는 다음과 같이 복호화한다. l 단계 1. 을 계산한다. 그 다음 법 에서 의 곱셈에 대한 역원 ′을 계산한다. l 단계 2. · ′ 계산하면 평문 을 얻을 수 있다. 단계 2를 통해 복호화가 가능한 이유는 다음 식을 통해 확인할 수 있다.
· ′ · · · · ElGamal 공개키 암호알고리즘은 RSA와 마찬가지로 준동형 특성을 가지고 있다. 예를 들 어
어떤
특정
사용자의
공개키를
이용한
메시지
에
대한
암호문이
〈 〉 〈 〉이고, 메시지 에 대한 암호문이 〈 〉 〈 〉이라 하자.
그러면 두 암호문을 곱한 결과는 다음과 같이 두 평문 메시지를 곱한 결과를 같은 사용자가 암호화한 결과와 같아진다. 〈 〉 〈 〉 〈
〉
즉, ElGamal는 × × 를 만족한다. ElGamal은 이와 같은 특성뿐만 아니라 × 를 만족하도록 구성할 수도 있다. 이 경우 을 기존 대로 암호화하지 않고 대신에 을 암호화해야 한다. 물론 이 경우 으로부터 을 얻을 수는 없지만 이 특성이 전자선거와 같은 다른 응용에 유용하게 사용되고 있다. 좀 더 구체적으로 살펴보자. 어떤 특정 사용자의 공개키를 이용한 메시지 에 대한 암호문이 〈 〉 〈 〉이고, 메시지 에 대한 암호문이 〈 〉 〈 〉이라 하
자. 그러면 두 암호문을 곱한 결과는 다음과 같이 두 평문 메시지를 곱한 결과를 같은 사용 자의 공개키로 암호화한 결과와 같아진다. 〈 〉 〈 〉 〈
〉
10.5 타원곡선을 이용한 ElGamal 공개키 암호알고리즘 유한순환 곱셈군에서 이산대수 문제에 기반을 두고 있는 암호알고리즘들은 쉽게 타원곡선 기반 덧셈군을 사용하는 타원곡선 이산대수 문제에 기반을 두는 암호알고리즘으로 변형할 수 있다. 타원곡선을 이용한 ElGamal 공개키 암호알고리즘의 시스템 설정은 다음과 같다. 먼저 소수 를 선택하고 ℤ 에서 타원곡선 를 하나 선택한다. 그 다음에 소수 인 이 곡 선 위에 점 를 하나 선택한다. 즉, 는 위수가 소수 인 유한 덧셈순환군의 생성자가 된 다. 이와 같은 시스템 환경에서 사용자의 개인키는 ∊ ℤ 가 되고 대응되는 공개키는
가 된다. 이 때 곡선의 임의의 점 의 암호화는 다음과 같다. l 단계 1. ∈ ℤ 를 선택하고 를 계산한다. l 단계 2. ∈ ℤ 를 선택하고 를 계산한다.
결과 쌍 〈 〉가 점 에 대한 암호문이 된다. 이것의 복호화는 사용자의 개인키 를 이 용하여 다음과 같이 이루어진다. l 단계 1. 를 계산한다. 이 결과가 가 된다는 것은 다음 식을 통해 확인할 수 있다.
실제 메시지를 이와 같은 방식으로 암호화하기 위해서는 일반 메시지를 타원곡선 점으로 매 핑해야 한다.
10.6 신원기반 암호시스템 10.6.1 신원기반 암호시스템의 개요 1984년 Shamir는 전자우편주소나 주민등록번호처럼 사용자의 잘 알려진 신원정보로부터 그 사용자의 공개키를 유도해내는 신원기반 공개키 암호시스템(identity-based public-key cryptosystem)을 처음으로 소개하였다. 공개키를 그 사용자의 신원정보로부터 계산할 수 있 음으로 기존 공개키 시스템과 달리 공개키가 누구의 공개키인지 확인하기 위한 별도의 메커 니즘이 필요 없다. 즉, 어떤 사용자의 주민번호로 만들어진 공개키는 그 사용자의 공개키일 수밖에 없으며, 다른 사용자의 공개키가 될 수 없다. 따라서 기존 시스템과 달리 공개키 인 증서가 필요 없으며, 공개 인증서와 관련된 여러 가지 요소가 필요 없다. 따라서 이 시스템 의 가장 큰 장점은 통신하고자 하는 상대방이나 제3의 서버에 문의하지 않고 상대방의 신 원을 알고 있다면 상대방의 공개키를 생성할 수 있다는 것이다. 하지만 이 장점은 이론상으 로만 또는 이상적인 경우에만 이렇다는 것이다. 공개키는 사용자의 신원 정보로부터 계산할 수 있다. 그러면 대응되는 개인키는 어떻게 계산하는가? 개인키를 사용자들이 공개키로부터 직접 계산할 수 있다고 하면 다른 사용자 들도 다른 사용자의 개인키를 계산할 수 있다는 것을 의미한다. 그러나 이렇게 되면 공개키 시스템으로 사용할 수 없다. 따라서 신원기반 공개키 암호시스템에서 개인키는 특별한 신뢰 기관이 생성하여 주며, 이 기관을 PKG(Private Key Generator)라 한다. 그런데 PKG는 모든 사용자의 개인키를 만들 수 있으므로 이 기관은 모든 암호문을 복호화할 수 있고, 모든 사 용자의 서명을 위조할 수 있다. 즉, 너무 강력한 권한을 가지는 기관이 된다. 따라서 이 문 제를 해결하고자 여러 기관에 발급 권한을 분배하여 개의 기관 중 개의 기관 이상이 협 조해야 사용자의 개인키를 만들 수 있도록 하는 방법을 사용한다. 즉, 권한 남용을 어렵도 록 만들며, 이와 같은 기법을 암호기술에서는 threshold 기법이라 한다. Shamir가 1984년에 처음 신원기반 공개키 시스템을 소개한 후에 지속적인 연구가 이루어 졌지만 주로 신원기반 전자서명 알고리즘에 제한되었으며, 신원기반 공개키 암호알고리즘에 대한 성공적인 연구가 많지 않았다. 그런데 2001년에 Boneh와 Franklin이 겹선형 쌍함수를 이용한 신원기반 암호시스템을 제안한 이후로 이 분야에 대한 연구가 다시 활발하게 이루어 지고 있다.
10.6.2 신원기반 암호시스템에서 신원정보 앞서 언급한 바와 같이 공개키는 사용자의 신원정보로부터 계산되고, 대응되는 개인키는 PKG에 의해 생성된다. 이 때 PKG는 PKG의 개인키와 사용자의 공개키를 이용하여 사용자 의 개인키를 생성한다. 그런데 공개키는 사용자마다 달라야 하므로 공개키를 생성하기 위해 사용되는 사용자의 신원정보는 사용자마다 독특해야 한다. 또한 신원기반의 장점인 제3자에 게 물어보지 않고 다른 사용자의 공개키를 생성할 수 있기 위해서는 누구나 쉽게 알 수 있 는 신원정보이어야 한다. 따라서 전자우편주소와 같은 신원정보가 가장 적합한 신원정보이 다. 하지만 전자우편주소나 주민번호는 불변정보이다. 즉, 바꿀 수 없는 정보이다. 물론 전 자우편주소는 바꿀 수 있는 정보이지만 공개키를 바꾸기 위해 전자우편주소를 바꿀 수는 없 다. 즉, 이와 같은 신원정보만을 사용하여 공개키를 생성할 경우에 나중에 공개키를 변경해 야 한다면 변경하기가 매우 어렵다. 보다 구체적으로 살펴보면 공개키를 변경하기 위해서는 사용된 신원정보를 변경하거나 PKG의 개인키를 변경해야 한다. 하지만 전자의 경우에는 불변정보를 변경해야 하며, 후자 는 모든 사용자의 개인키를 변경해야 한다. 따라서 둘 다 가능한 시나리오가 아니다. 이를 해결하기 위해 공개키를 생성할 때 사용자의 고유한 불변정보뿐만 아니라 발급시간과 같은 동적 정보를 사용할 수 있다. 이 경우에 공개키를 변경해야 할 경우 불변정보는 그대로 둔 상태에서 동적 정보만 변경하면 된다. 하지만 동적 정보를 사용하면 신원기반 시스템의 장 점인 제3자에게 문의하지 않고 공개키를 생성할 수 있다는 장점은 퇴색된다. 즉, 사용자들 은 이제 다른 사용자의 공개키를 생성하기 위해 다른 사용자의 신원정보뿐만 아니라 공개키 생성할 때 사용된 동적 정보까지 필요하다. 발급 시간을 동적 정보로 사용한다면 고정된 발 급 시간을 사용함으로써 동적 정보의 사용 문제를 일부 완화할 수는 있다. 하지만 번거로운 측면이 여전히 존재한다. 이 교재에서는 공개키 생성에서 동적 정보의 포함은 알고리즘을 기술할 때 생략한다. 10.6.3 Boneh와 Franklin의 신원기반 암호시스템 Boneh와 Franklin은 겹선형 쌍함수를 활용하는 신원기반 암호알고리즘을 제안하였다. 겹 선형 쌍함수를 활용하기 때문에 이 시스템을 설정하기 위해서는 위수가 동일한 타원곡선 기 반 덧셈군 과 유한순환 곱셈군 가 필요하다. 따라서 Boneh와 Franklin의 신원기반 암 호시스템의 시스템 설정은 다음과 같이 이루어진다. l 단계 1. 소수 를 선택하고 ℤ 에서 타원곡선 를 하나 선택한다. 그 다음에 소수 인 이 곡선 위에 점 를 하나 선택하여 군을 생성한다. l 단계 2. 위수가 동일한 소수 인 유한순환 곱셈군 를 생성한다. l 단계 3. 겹선형 쌍함수 × → 를 생성한다. l 단계 4. PKG의 개인키 ∈ℤ 를 선택하고, 공개키 를 계산한다. l 단계 5. 충돌회피 해쉬함수 → 과 → 를 선택한다. 단계 4에서 PKG의 개인키를 신원기반 시스템에서는 마스터 키(master key)라고도 한다.
PKG의 마스터 키를 제외하고는 시스템 설정을 통해 생성된 모든 정보를 공개한다. 사용자 의 공개키는 해쉬함수 을 이용하여 생성한다. 사용자의 신원정보가 sangjin@kut.ac.kr이 면 이 사용자의 공개키는 sangj inkutackr 가 된다. 이 사용자의 개인키는 PKG가 자신의 마스터 키 를 이용하여 다음과 같이 계산한다. 사용자의 공개키 를 이용한 메시지 ∊ 의 암호화는 다음과 같이 이루어진다. l 단계 1. ∈ ℤ 를 선택하고 를 계산한다. l 단계 2. 를 계산한 후에 ⊕ 를 계산한다. 결과 쌍 〈 〉가 메시지 ∊ 에 대한 암호문이다. 이 암호문을 복호화하기 위 해서는 개인키 가 필요하며, 복호화하는 다음과 같이 이루어진다. l 단계 1. 를 계산한다. l 단계 2. ⊕ 을 계산한다. 복호화 과정의 정확성은 다음과 같은 식을 통해 확인할 수 있다. 참고문헌 [1] R. Soloway and V. Strassen, "A Fast Monte-Carlo Test for Primality," SIAM J. on Computing, Vol. 6, pp. 84‒85, 1977. [2] M.O. Rabin, "Probabilistic Algorithms for Testing Primarity," J. of Number Theory, Vol. 12, pp. 128‒138, 1980. [3] Ronald L. Rivest, Adi Shamir, and Leonard M. Adleman, "A Method for Obtaining Digital Signatures and Public-Key Cryptosystems," Communications of ACM, Vol. 21, pp. 120‒126, 1978. [4] Whitfield Diffie and Martin E. Hellman, "New Directions in Cryptography," IEEE Trans. on Information Theory, Vol. 22, pp. 644‒654, 1976. [5] Adi Shamir, "Identity-based Cryptosystems and Signature Schemes," Advances in Cryptology, Crypto 1984, LNCS 196, pp. 47–53, 1985. [6] Dan Boneh and Matthew K. Franklin, "Identity-based Encryption from Weil pairing," Advances in Cryptology, Crypto 2001, LNCS 2139, pp. 213–229, 2001. 연습문제 1. , 을 사용하여 RSA 공개키 쌍을 생성하시오. 2. ℤ 의 생성자를 찾는 효과적인 방법을 설명하시오.