2009년 11월 3일 화요일

a chicken-and-egg situation

Key exchange와 authentication에 대한 이야기를 하고 싶어, 제목을 이렇게 붙였지만, 이 문제가 닭이 먼저냐 달걀이 먼저냐 하고 물어볼 문제는 사실, 아니다. 당연히 key exchange가 먼저다. 아니, 이렇게 말할 것이라면 왜 제목을 이렇게 달았나?

좀 더 이야기를 해보자.

우선, "둘이 무슨 관계인가?" 싶은 사람이 있을 수 있기 때문에, 약간 일반적인 이야기를 꺼내보자. 생판 모르는 누군가의 신원을 증명하려면 what you know나 what you have를 통해 일반적으로 점검한다. 각각, 패스워드(암호, 무엇을 알고 있는가?)와 신분증(무엇을 가지고 있는가?)이 대표적인 예다.

통신을 하려 하는데, 상대방이 믿을 만한 녀석인지 알 방도가 없다. 서로 간에 내가 착한 놈이라는 것을 증명을 해야 하는데, 그러려면 증명할 어떤 것이 필요하다. 서로를 증명하기 위해서는 둘만 알고 있는(가지고 있는) 확실한 어떤 것이 필요한데, 이것을 여기서는 secure token이라고 하자. 이 secure token을 어떻게 나누어 가질 것인가? 이것이 정말로 어려운 문제다. 그래서 제목처럼 애매한 상황이 발생하는 것이다.

상식적으로 생각해보자. 당연히 secure token은 아무도 모르는 공간에서 둘만 만나서 은밀하게 결정하면 된다. 하지만 컴퓨터들은 physical contact를 하기 보다는 네트워크로 연결되어 있다. 네트워크가 안전하다는 보장을 위해서는 다시 secure token이 필요하므로(secure token을 key로 사용하여 데이터를 암호화 할 수 있을테니까) secure token을 안전하게 공유하기 위해서는 secure token이 필요한, 머리가 복잡한, 물고 물리는 상황이 연출되고 마는 것이다.

1976년에 Diffie와 Hellman이 멋진 수학식을 제시했다. unsecure channel에서도 안전하게(즉, 둘만 아는) 정보를 나누어 가질 수 있게 된 것이다. 그 이름도 유명한 Diffie-Hellman Key Exchange(Agreement)이다.

하지만 이것은 꽤나 복잡한 수학 계산을 필요로 한다. 모바일 기기의 중요성이 대두됨과 동시에 아직 그들의 성능이 뛰어나지 못한 관계로 사람들은 Diffie-Hellman을 사용하지 않고 시스템을 설계해보려고 많은 노력들을 하고 있다. 조그만 센서가 Diffie-Hellman을 사용할 수는 없기 때문이다. 좋은 논문 주제가 되는 것이다.

네트워크가 안전하지 않다면, 아직까지는 Diffie-Hellman외에는 획기적인 방법이 없다. 더 적은 계산량으로 도청꾼이 가득한 통신 채널을 통해서 어떻게 하면 안전하게 secret을 나누어 가질 수 있을까?

Any idea?