Security/Web

Security : Web : SSL/TLS

OSP 2024. 12. 20. 02:13

Security


Web


1. 대칭/비대칭 암호화

  • 암호화의 대표적인 방식들이다.
    • 대칭은 하나의 키로 데이터를 암호화해 전송하면 이를 동일한 키로 복호화하는 방식을,
    • 비대칭은 수신자가 개인키/공개키를 생성하면 송신자가 공개키를 받아 데이터를 암호화해 전송하면 이를 수신자가 개인키로 복호화하는 방식을 의미한다.
    • 대칭은 키분배 문제가 있지만 빠르고, 비대칭은 키분배 문제는 줄어들지만 리소스를 많이 소모한다.
더보기
  • symmetric en/decryption. 대칭 암호화는 암호화 키와 복호화 키가 동일한 암호화 방식이다. 어떻게 제3자에게 노출되지 않고 당사자들에게만 키를 분배할 것인가의 문제가 있으나, 대칭키의 암호화/복호화는 연산이 무겁지 않기 때문에 빠르다. XOR이 대표적인 대칭 암호화 방식이다.
    • AX=B이고 BX=A인 연산자 X, 또는 자신이 자신의 역함수인(y=x 대칭인) 함수가 대칭 암호화와 개념적으로 유사한데, 이런 대칭 함수는 대체로 단순하다는 점에서 빠른 속도를 간접적으로 이해할 수 있다.
    • 사견으로는 XOR 처럼 대중적이고 양방향 변환의 해석이 용이한 암호화 방식은 사실 인코딩이라고 봐야하는 것 아닌가 생각한다. 그러나 암호화라는 단어가 갖는 권위나 사명감 같은 것들을 지키기 위함인지 아니면 마땅한 필요 때문인지는 모르겠으나, 종종 제시되는 둘의 병합은 금방 가로막히고는 한다.
  • asymmetric en/decryption. 비대칭 암호화는 암호화 키와 복호화 키가 다른 암호화 방식으로, 암호화 키는 공개하되 복호화 키는 공개하지 않기에 키 분배 문제가 해결된다. 그러나 비대칭키의 암호화/복호화는 연산이 무겁기 때문에 리소스 소모가 크고 느리다.
    • 암호화는 수학이기에 수학자들에 의해 연구되고, 교류와 발전에 따라 공개됨이 보통이다. 그렇기 때문에 암호화 알고리즘 자체를 감추는 것은 어렵다. 따라서 암호화 알고리즘 자체를 숨기기 보다는, 암호화 알고리즘을 알아도 현실적인 시간 안에는 풀 수 없게 하는 방향으로 암호학이 발전하였다. 그 산물이 비대칭 암호화이기 때문에 무겁고 느리다.
    • 양자컴퓨터의 등장이 현대 암호체계를 뒤흔든다는 것도 이 맥락에 속한다. 현대 컴퓨터로 해독 시간의 기댓값이 100년이라면 양자컴퓨터로는 그 기댓값을 시간 단위로 줄일 수 있기 때문이다.(연구실에서 주장하는 수치는 훨씬 과격하다. 기술 태동기의 낙관편향을 감안해 임의로 보정하였다) 기술은 어차피 너도 알고 나도 아니까 체급으로 방어하는 중인데 역사적 체급깡패의 출현이 예고된 상황.
  • 대칭방식과 비대칭방식을 섞은 방식을 하이브리드 방식이라고 한다.
    • 비대칭방식으로 대칭키를 안전하게 전달하고(키분배문제 해결) 대칭키로 데이터를 빠르게 통신하는 방식이다.
      1. 서버는 비대칭키를 생성하고 클라이언트는 대칭키를 생성한다.
      2. 클라이언트는 서버로부터 서버측 비대칭 공개키를 전달받는다.
      3. 클라이언트는 자신의 대칭키를 서버측 비대칭 공개키로 암호화해 서버에게 전달한다.
      4. 서버는 클라이언트 대칭키를 자신의 비대칭 개인키로 복호화한다.
      5. 대칭키를 이용해 데이터를 암호화/복호화해 데이터를통신한다.
         
        비대칭 방식으로는 대칭키를, 대칭키로는 데이터를 전달하는 하이브리드 암호화.
    • 그러나 이는 해커가 중간에서 서버측 공개키를 받아 중개하는 MITM 공격에 취약하다.
      1. 해커가 서버측 공개키를 확보하고, 클라이언트와 서버 간 통신을 매개할 수 있는 지위를 점한다.
      2. 클라이언트가 서버에 보내는 요청을 해커가 중간에서 받아 서버측 비대칭 공개키 대신 Mal키를 클라이언트에게 제공한다.
      3. 클라이언트는 Mal키로 자신의 대칭키를 암호화하여 서버에 보내고, 이 요청을 해커가 중간에서 받는다
      4. 해커는 Mal키로 이를 복호화해 클라이언트 대칭키를 확보하고, 다시 서버측 비대칭 공개키로 클라이언트 대칭키를 암호화해 서버에 전달한다.
      5. 서버는 클라이언트의 대칭키를 자신의 비대칭 개인키로 복호화한다.
      6. 결론적으로 클라이언트의 대칭키를 보유한 사람은 클라이언트/해커/서버가 된다.
        해커가 중간에서 매개하는 MITM. 공개키의 안전한 전달이 새로운 화두로 떠오른다. "이 키, 서버 거 맞죠?"

2. SSL/TLS

  • Secure Sockets Layer/Transport Layer Security.
  • 하이브리드 암호화 방식에 더해 인증기관이(CA, Certificate Authority) 개입하는 암호화 방식이다. CA가 공개키를 인증해주는 하이브리드 암호화 방식으로 요약된다.
더보기
  • HTTP는 데이터를 평문으로 전송하기에 데이터가 쉽게 노출되는 보안상 흠결이 있다. 이를 보완하고자 개발된 것이 SSL/TLS이며, HTTP+SSL/TLS = HTTPs(HTTP over Secure Sockets Layer)이다.
  • SSL이 TLS의 초기 버전이고, 현재는 지원이 중단되었다. 구형인 SSL 모델을 정확히 지목하는 맥락이 아닌 이상, SSL/TLS라는 표현이나 심지어는 SSL이라는 표현까지도 엄밀하게는 TLS를 의미하는 경우가 많다. 
  • TLS는 세션단위 키로 세션관리에 일조하기에 OSI 5계층에도, 암호화를 담당하기에 OSI 6계층에도 속하며, 심지어는 이름에서 알 수 있듯 OSI 4계층에 속한다고 보기도 한다. OSI 모델이 이렇게 오래 됐는데도 오묘하게 겉도는 이유를 살필 수 있는 대목이다. 해석의 다양성이 열려 있는 모형이기 때문이다. 니가 문학이야?
  • .SSL/TLS의 암호화 과정
    • 준비과정 
      1. 서버가 서버측 비대칭키를 준비하고, 서버측 비대칭 공개키와 서버정보를 인증기관(CA)에게 전달한다.
      2. CA는 서버정보를 검증하여, TLS인증서를 발급한다.
      3. CA는 CA측 비대칭 개인키로 TLS 인증서에 디지털 서명을 한다.
      4. 서명한 TLS인증서를 서버에 전달한다.
더보기
  • TLS 인증서는 서버정보, 서버측 공개키 정보, CA측 디지털 서명을 포함한다. 디지털 서명은 암호화와 목적만 달리할 뿐이고 구체적인 행위는 동일하다. 
  • 클라이언트도 인증서를 받을 수는 있지만, 클라이언트측에서 인증서를 준비하거나 클라이언트에게 인증서를 요구하는 경우는 흔하지 않다. 매출을 올려주는 고객님한테 신원 증명을 요구하기는 쉽지 않다.
    • 키 분배과정
      1. 클라이언트가 서버에게 요청하면 서버는 TLS인증서와 서버측 비대칭 공개키를 클라이언트에게 제공
      2. 클라이언트는 제공받은 공개키와 인증서의 공개키 정보를 비교해 서버의 신뢰성과 인증된 공개키인지 확인한다.
      3. 클라이언트는 세션키 생성을 위한 pre-master secret 정보를 인증된 공개키로 암호화해 서버에 전달한다
      4. 서버는 전달받은 pre-master secret정보를 기반으로 세션키(대칭키)를 생성한다.
      5. 클라이언트도 pre-master secret정보를 기반으로 세션키(대칭키)를 생성한다.
      6. 서버와 클라이언트는 서로 동일한 세션키(대칭키)를 가지게 되었으므로 이것으로 통신한다.
    • MITM 문제해결 여부
      • 해커가 최초의 하이브리드 방식에서처럼 중간에서 매개하게 되면 클라이언트가 받게 되는 것은 서버 정보와 서버측 공개키 정보를 담은 TLS인증서와 해커의 키가 되는데, 이로써 "서버측의 진짜 공개키가 아님"을 알게 된다
        키/인증서 대조과정에서 handshake가 멈추고, 키는 클라이언트 손에만 남는다.
      • 그러나 물리적/원천적으로 해결하는 것은 아니고, 진입 허들을 높인 효과를 보인다. 해커가 자신의 서버에 인증을 받아 중간에서 매개하는 경우가 그렇다. 
        1. 해커가 자신의 서버를 인증받아 Mal 인증서를 확보한다.
        2. 해커가 서버측 공개키와 서버측 TLS 인증서를 확보하고, 클라이언트와 서버 간 통신을 매개할 수 있는 지위를 점한다.
        3. 클라이언트가 서버에 보내는 요청을 해커가 중간에서 받아 서버측 공개키와 TLS 인증서 대신 자신의 Mal키와 Mal인증서를 클라이언트에게 제공한다.
        4. 클라이언트는 Mal키로 PremasterSecret을 암호화해 서버에게 보내고, 이를 해커가 중간에서 가로챈다.
        5. 해커는 Mal키로 PremasterSecret을 복호화하고, 서버측 공개키로 이를 암호화해 서버에게 전달한다.
        6. 서버는 PremasterSecret을 자신의 개인키로 복호화한다.
        7. 클라이언트/해커/서버는 PremasterSecret으로 세션키를 생성한다.
        8. 결론적으로 동일한 세션키를 보유한 사람은 클라이언트/해커/서버가 된다.
          원시 하이브리드 암호화는 누구나 MITM를 할 수 있었다면, TLS는 정성이 갸륵한 이들에게만 MITM를 허락한다.
더보기
  • 따라서 TLS에서는 인증서/인증기관의 권위가 중요하다. 아무에게나 인증해주지 않고, 이 인증서가 믿을만하다고 여겨져야 한다. 그 인증이 있어야 통신을 할 수 있는 상황을 만드는 것이다. 이렇게 되면  해커는 MITM 공격을 위해 자기 서버를 공식적으로 인증받아야 하고, 자신이 노출될 수 있는 부담을 지게 되는 것이다. 인증이 유력할 수록 허들은 높아진다.
  • 원시적 하이브리드 암호화 방식에서 제시된 문제가 "이 키가 내가 요청한 진짜 그 키가 맞는지"였다면, TLS는 이를 "이 인증서가 믿을만한지"의 문제로 범위를 좁힌 것이다. PremasterSecret/세션단위 키 같은 것들은 유력한 인증을 전제로 한 촘촘한 마감 정도이고 무력한 인증서 앞에서는 의미가 없다.