My Study/Cryptography2011.06.07 20:14
먼저 공개키 암호의 용도를 알아보기 전에 표기 방법에 대해서 설명하겠다.

A의 공개키로 메시지 M을 암호화 : C = {M}A
A의 개인키로 암호문 C를 복호화 : M = [C]A 
서명은 복호화와 같은 연산이다. 그래서 A의 메시지 M 서명(서명된 메시지) : S = [M]A

암호화와  복호화는 역 역산이므로 아래와 같이 표현이 된다.

[{M}A]A =  {[M]A}A = M

공개키 암호 용도
대칭키 암호가 할 수 있는 일은 모두 공개키 암호로 수행할 수 있다. 단점이라면 처리속도가 느리다는 것이다.
하지만 공개키 암호는 대칭키 암호화 비교해 두 가지 중요한 장점을 제공한다.

1. 공개키 암호는 미리 공유 키를 설정할 필요가 없다는 점
2. 전자서명은 무결성뿐만 아니라 부인봉쇄(Non-Repudiation)를 제공하는 것


쫌 있다가 위 두가지 장점에 대해서 알아보도록 하자.

현실 세계에서의 보안성

실제로 우리가 사용하고 있는 암호체계는 어떻게하는게 좋을까??

대칭키 암호의 장점과 공개키 암호의 장점을 섞은 합성 암호체계를 구성하는 것이다. 
즉, 공개키 암호처럼 키를 공유하지 않으면서 대칭키 암호의 효율성을 취하는 것이다.

공개키 암호는 대칭키를 설정하기 위해 사용하고
대칭키는 데이터를 암호화하는데 사용하는 것이다. 

 

 위 그림에서 간단하게 설명하고 있다.
먼저 대칭키에 사용될 키 K를 B에게 전해주어야 되는데 이 때 B의 공개키를 가지고 K를 암호화 시켜서 B에게 보낸다.
그리고 B는 B의 개인키를 사용해 복호화하면 A,B 두 사람은 키를 안전하게 공유하는 것이다.
이제 공유된 키 값을 가지고 대칭키 암호체계를 사용해 메시지를 주고 받으면 되는 것이다.

물론 위 그림은 취약한 부분이 있다. 실제로 A가 B에게 보내는 키 값은 B의 공개키로 암호화되는 것이기 때문에 누구나 연산이 가능하고, B는 그 값을 보낸 사람을 확인할 수가 없다. 이 때 안전하게 공유할 수 있는 방법은 다음에 설명하겠다.

서명과 부인봉쇄
공개키 암호는 대칭키 암호와 마찬가지로 무결성을 사용할 수 있다. 대칭키에서는 MAC이 무결성을 제공한다.
하지만 공개키 서명은 무결성을 제공하면서 대칭키 암호가 제공할 수 없었던 부인봉쇄도 더불어 제공한다. 

먼저 대칭키가 제공하는 무결성을 살펴볼 예를 들어보자.

1. A가 주식 100장을 사기 위해 자신이 선호하는 증권 중개인 B에게 주문서를 제출
2. 자신의 주문에 대한 무결성을 확신하기 위해 A는 공유 대칭키 K를 사용해 MAC을 계산
3. A가 주문한 이후 B에게 대금을 지급하기 전에 그 주식이 80%나 가치가 떨어짐
4. A는 주문서를 제출하지 않았다고 주장 ( 거래를 부인 )
5.  B도 키 K를 가지고 있기 때문에 A가 제출한 주문서 위조 가능 ( A가 주문서 제출한 사실을 증명할 수 없다 )

위 예제는 대칭키 암호 체계를 사용한 경우이다.
하지만 MAC 계산 대신 전자서명을 사용하면 이러한 문제는 자연히 사라진다.
A만이 자신의 개인키를 알고 있기 때문에 B는 그 받은 문서를 위조할 수 없다. 그러므로 전자서명은 무결성과 부인봉쇄 기능 모두를 제공할 수 있다.

비밀성과 부인봉쇄
A가 메시지 M을 B에게 보낸다고 하자.
이 때 A는 비밀성과 부인봉쇄 두가지를 모두 하기 위해서
먼저 메시지 M을 B의 공개키로 암호화(비밀성)하고 자신의 개인키로 서명(부인봉쇄)을 했다고 하자.

그러면 두 가지 전부 해결할 수 있는 방법으로 보인다. 
이 때 A는
{[M]A}B ==> 메시지 M을 A의 개인키로 서명 후 B의 공개키로 암호화 ( 선서명 후암호화 )
[{M}B]A ==> 메시지 M을 B의 공개키로 암호화 후 A의 개인키로 서명 ( 선암호화 후서명 )


두가지 방법을 생각해 볼 수 있는데 어떠한 방법이 더 좋을까?? ( 순서가 바뀌면 영향이 있을까? )

예를 들어보자.
A가 B랑 사귀고 있다. 이 때 A는 B에게 메시지를 보낸다.
"나는 당신을 사랑해요~"
보내기 전 A는  {[M]A}선서명 후암호화 한 후 B에게 보낸다.
하지만 B는 장난끼가 발동해 B의 개인키를 사용해 해당 메시지에서 [M]A를 얻어낸다. ( 복호화 )
그리고 해당 메시지를 {[M]A}c(C의 공개키로 암호화)로 바꾼 후 C에게 보낸다.
그러면 C는 A를 보낸 메시지를 받고 A가 자기를 좋아하는지 알고 서로 당황하게 만들 수가 있다.

그 사실을 안 A는 이제 암호화를 먼저 한 후 서명을 하기로 한다. ( [{M}B])
하지만 이 방법 또한 안전하지 않다.
짧게 설명하면 A의 공개키또한 전부 공개되어 있으므로 A가 서명한 내용을 제거할 수 있고
자신의 개인키로 서명을 해버리면 해당 메시지는 자기것이 되어버리기 때문이다.

즉, 공개키 암호에서는 누구나 메시지를 암호화할 수 있고 누구나 서명을 검증 할 수 있다. 

'My Study > Cryptography' 카테고리의 다른 글

PKCS 용도  (0) 2011.06.07
ECC 디피-헬먼  (0) 2011.06.03
타원곡선 암호  (1) 2011.06.03
디피-헬먼 키교환 알고리즘  (2) 2011.06.03
RSA  (1) 2011.06.03
배낭암호  (2) 2011.06.03
Posted by Ezbeat