RSA, Diffie-Hellman and Forward Secrecy


역사적, 상업적인 다양한 이유때문에 RSA handshake는 대부분의 TLS 개발에 주요한 키 교환 체계였다. Client는 대칭키를 생성하고, 서버의 공개키로 암호화한다. 그리고 연결수립을 위한 대칭키로 사용되도록 서버에게 암호화된 대칭키를 보낸다. Server는 비밀키를 사용해 보내진 대칭키를 복호화하고 키 교환은 완료된다. 이 순간부터 Client와 Server는 세션을 암호화하는데 협상된 대칭키를 사용한다.

RSA Handshake는 치명적인 약점을 가지고 있는데, 서버를 인증하기 위해 사용 되는 키와 서버에 보내지는 대칭키를 암호화하기 위한 공개키-비밀키 쌍이 같다. 결과적으로 만약 공격자가 서버의 비밀키를 알아내고 메시지 교환을 엿듣는다면 통신하는 전체 내용에 대한 복호화를 할 수 있다. 최악의 경우 공격자가 비밀키에 접근할수 없음에도 불구하고 암호화된 메시지들을 저장하고 나중에 비밀키만 얻어낸다면 복호화가 가능하다.

대조적으로 Diffle-Hellman 키 교환은 Client와 Server가 명시적으로 Handshake 내의 통신 없이 공유할 비밀키를 협상한다. server의 비밀키는 handshake의 서명과 유효성확인에 사용되지만 정해진 대칭키는 Client나 Server에 절대 남기지 않는다. 만약 공격자가 비밀키를 알게 되더라도 대칭키는 가로 챌수가 없게된다.

가장 최선은 Diffe-Hellman 키교환이 이전의 통신 세션에 절충의 위험을 줄이는데 사용될수 있다. 우리는 각각 임시 대칭키를 생성하여 이전의 키를 무시할 수 있다. 하지만 결과적으로 임시 대칭키는 결코 통신이 될 수가 없다. 그리고 새로운 새션을 매번생성해야한다. 가장 나쁜 상황을 가정하면 공격자가 Client나 Server와 협상을 할수 있고 현재와 미래 세션의 세션키에 접근이 가능한 상황이다. 그러나 비밀키를 아는것이나 현재 임시 키를 아는 것은 이전의 세션에 복호화를 하는데는 도움이 되지 않는다.

Diffie-Hellman 키 교환과 임시 세션키 사용을 조합하면 PFS (Perfect Forward Secrecy) 를 사용할수있다. Server 의 비밀키와 같은 오래지속되는 키의 타협은 이전의 세션키들과 타협하지 않고 공격자가 이전에 기록된 세션을 복호화 할수 없게 한다. 매우 바람직한 요소이다.

인기있는 브라우저들은 Foward Secrecy를 선호한다. 특정 프로토콜 최적화를 사용할 것이다 다만 TLS False Start 를 통해 1-RTT handshake를 지원하는 것들이 가능한 것 처럼 Forward Secrecy가 가능할 때만 이용한다.

당신이 사용하고 있는 서버의 문서를 살펴서 Forward Secrecy를 배포하는 방법을 찾아라. 굉장한 보안과 성능을 보장할 것이다.

results matching ""

    No results matching ""