#작성중 ## 개요 SSL (Secure Socket Layer) TLS (Transport Layer Security) 간단하게 말하면, 애플리케이션을 암호화하는 프로토콜이다. * 통신 중에 있는 데이터를 암호화 시킨다 * 통신 상대방을 인증한다 예를 들어, HTTPS는 SSL이 적용된 통신 상태에서 HTTP 프로토콜이 이루어지는 것을 의미 ## SSL로 방지할 수 있는 위협 ### 암호화를 통한 도청 방지 * 암화를 통해 제3자가 통신 중에 있는 데이터를 도청하는 것을 방지한다 ### 해시화를 통한 변조 방지 * 애플리케이션 데이터로부터 정해진 계산(해시 함수)에 기반해 고전된 길이의 데이터(해시값)를 추출하는 기능이다 * 만일 애플리케이션 데이터가 바뀌면 해시값도 바뀌게 되는데 이러면 수신측은 이 데이터가 변조되었다는 것을 알아차릴 수 있다 메커니즘 1. SSL은 데이터가 변조 여부를 확인하기 위해 데이터화 된 해시값을 함께 전송한다 2. 수신측은 받은 데이터를 계산해서 얻은 해시값과 송신측에서 함께 전송한 해시값을 비교한다 3. 둘의 해시값이 같다면 변조되지 않았다는 것을 알 수 있다 ### 디지털 인증서를 통한 신분 위조 방지 디지털 인증서는 그 단말이 진짜임을 증명하는 파일이다. 디지털 인증서에 기반해 통신 상대가 진짜 그 상대인지 아닌지를 확인함으로서 상대방을 인증함으로서 신분 위조 공격을 방지할 수 있다. 실제 SSL 기반 통신에서 디지털 인증서가 사용되는 구간 1. 송신측과 수신측이 서로 통신하기 전에 송신측에서 수신측에게 "본인의 정보를 주십시오"라고 질문 2. 수신측은 송신측에게 디지털 인증서를 응답 3. 송신측은 응답받은 디지털 인증서를 CA(인증기관)을 통해 올바른 상대인가를 확인 디지털 인증서의 진위 여부는 인증 기관이라는 제3자 기관의 디지털 서명을 통해 보증 받는다 ## SSL에서 이용하는 암호화 방식 ### 공통키 암호화 방식 공통키 암호화 방식은 암호화키와 복호화키로 동일한 키(공통키)를 사용하여 암호화하는 방식이다. 같은 키를 송신측과 수신측 둘 다 사용하여 대칭적 구조로 보이기에 '대칭키 암호화 방식'이라 부른다. 송신측과 수신측을 클라이언트와 서버라고 가정을 하면, 클라이언트와 서버는 같은 키를 갖고 있어야 한다. 이 둘은 미리 같은 키를 공유한 상태로 암호화키로 암호화한 뒤 암호화킬와 완전히 같은 키로 복호화하여 공유한다 공통키 암호화 방식은 스트림 암호와 블록 암호로 나뉜다. 스트림 암호는 1비트 단위 또는 1바이트 단위로 암호화 처리하는 암호화 방식이다. 블록 암호 방식보다 빠르게 처리할 수 있는 있지만 대표적으로 사용되는 RC4에 치명적인 취약성이 발견되어 현재는 사용하지 않는다 블록 암호 방식은 데이터를 인ㅇ정 비트 수 단위로 나누고, 나눠진 데이터 덩어리를 하나하나 암호화 처리를 적용한다. 스트림 암호에 비해 처리 시간이 걸리지만 대표적인 블록 암호인 AEC는 현재 안정적으로 사용되고 있어 보통은 블록 암호 방식을 사용한다 공통키 암호화 방식은 장점은 구조 자체가 단순 명쾌하고 암호화 처리는 물론 복호화 처리 시간도 준수하다. 큰 처리 부하가 걸리지 않는다는 점에서 장점으 갖고 있지만 앞서 말한 키 전송 문제에 단점이 있다. "미리 공유한 키가 있다"고 했는데 이 키는 어떻게 공유할 수 있을까? 이 키를 도난당하면 말짱 도로묵이 된다. 이 문제점을 해결 방법은 후에 보자 ### 공개키 암호화 방식 공개키 암호화 방식은 암호화키와 복호화키, 즉 다른 키를 사용하여 암호화하는 방식이다. 클라이언트와 서버가 서로 다른 키를 사용하는 구조로 보이기에 비대칭키 암호화 방식이라 부르기도 합니다. RSA 암호나 DH/DHE, ECDH/ECHDE가 이 방식을 사용합니다 공개키 암호화 방식의 요점은 공개키와 비밀키를 이해하는 것이다. 공개키는 말 그대로 누구에게나 공개되도 아무런 상관없는 키이고 비밀키는 모두에게는 비밀로 해야 하는 키이다. 공개키와 비밀키를 키 페어로 부르고 쌍으로 존재해야 한다. 한쪽 키에서 다른 한쪽 키를 도출할 수 없다. 한쪽 키에서 암호화한 데이터는 다른 한쪽 키로만 복호화할 수 있다 흐름 1. 웹 서버는 키 페어(비밀키와 공개키)를 생성 2. 웹 서버는 공개키를 모두에게 공개하거나 배포함 3. 웹 브라우저는 공개키를 암호화키로 사용하여 데이터를 암호화하여 웹 서버에게 전송 4. 웹 서버는 비밀키를 복호화키로 사용해서 수신한 데이터를 복호화함 공개키 암호화 방식의 큰 장점은 서로 키를 공유하기 위해 전송할 필요가 없다는 점이다. 암호화에 사용되는 공개키는 말 그대로 누구나 알아도 된다. 그러나 대칭키 암호화 방식에 비해 암호화/복호화 처리 속도와 처리 부하가 단점이 된다. ### 하이브리드 암호화 방식 이제 대칭키 암호화 방식과 공개키 암호화 방식의 장점을 합쳐보자 가장 먼저 공개키 암호화 방식을 사용해서 서로 공유해야만 하는 공통키의 재료를 교환한다. 각각 공통키의 재료에서 공통키를 만들고 그 키를 이용해서 공통키 암호화 방식으로 데이터를 암호화한다. SSL은 공개키 암호화 방식으로 키 전송 문제를 해결하고, 공통키 암호화 방식으로 처리 부하 문제를 해결한다. 1. 웹 서버는 공개키와 비밀키를 만든다 2. 웹 서버는 공개키를 모두에게 공개하거나 배포한다. 단, 비밀키는 보관한다 3. 웹 브라우저는 공통키의 재료를 공개키로 암호화해서 보낸다. 4. 웹 서버는 공통키의 재료를 받아서 보관하고 있는 비밀키로 복호화한다 5. 웹 서버와 웹 브라우저는 공통키의 재료로부터 공개키를 생성한다 6. 웹 브라우저는 애플리케이션 데이터를 공통키로 암호화한다 7. 웹 서버는 애플리케ㅣ션 데이터를 공통키로 복호화한다 # 해시 해시화를 추상적으로 표현하자면, 애플리케이션의 데이터를 잘게 쪼개서 같은 크기의 데이터로 모으는 기술이다. 메시지를 요약하는 것과 같은 모양새이기 때문에 메시지 다이제스트라 부르거나 메시지의 지문을 얻는 것과 같은 이미지 때문에 핑거프린트라고 부르기도 한다 해시를 사용하는 목적은 데이터의 변조 확인이다. 데이터가 변조되었는지 확인하기 위해서는 데이터 대 데이터로 확인하기 보다는 요약한 데이터끼리 비교하는게 더 효율적이다. 해시화는 단방향 해시 함수라는 특수한 계산을 이용해서 데이터를 잘게 쪼개고 같은 크기의 해시값으로 모은다. * 데이터가 다르면 해시값도 다르다 * 단방향 해시 함수라 해도 결국 단순한 알고리즘에 의해 계산된 것에 지나지 않는다 * 데이터가 같으면 해시값도 같다 * 해시값에서 원 데이터로 복원할 수 없다 * 데이터 크가가 같아도, 해시값 크기는 고정된다 *